diff --git a/api/types.go b/api/types.go index a88dedb02..79f541a10 100644 --- a/api/types.go +++ b/api/types.go @@ -9,7 +9,7 @@ import ( type DealState int const ( - DealUnknown = iota + DealUnknown = DealState(iota) DealRejected DealAccepted DealStarted diff --git a/chain/deals/client.go b/chain/deals/client.go index 8b36306da..51164960d 100644 --- a/chain/deals/client.go +++ b/chain/deals/client.go @@ -51,7 +51,7 @@ type Client struct { dag dtypes.ClientDAG discovery *discovery.Local - deals StateStore + deals ClientStateStore conns map[cid.Cid]inet.Stream incoming chan ClientDeal @@ -75,7 +75,7 @@ func NewClient(cs *store.ChainStore, h host.Host, w *wallet.Wallet, ds dtypes.Me dag: dag, discovery: discovery, - deals: StateStore{ds: namespace.Wrap(ds, datastore.NewKey("/deals/client"))}, + deals: ClientStateStore{StateStore{ds: namespace.Wrap(ds, datastore.NewKey("/deals/client"))}}, conns: map[cid.Cid]inet.Stream{}, incoming: make(chan ClientDeal, 16), diff --git a/chain/deals/handler.go b/chain/deals/handler.go index 67fcc70de..954468012 100644 --- a/chain/deals/handler.go +++ b/chain/deals/handler.go @@ -45,7 +45,7 @@ type Handler struct { // TODO: GC dag dtypes.StagingDAG - deals StateStore + deals MinerStateStore conns map[cid.Cid]inet.Stream actor address.Address @@ -89,7 +89,7 @@ func NewHandler(ds dtypes.MetadataDS, secst *sectorblocks.SectorBlocks, dag dtyp actor: minerAddress, - deals: StateStore{ds: namespace.Wrap(ds, datastore.NewKey("/deals/client"))}, + deals: MinerStateStore{StateStore{ds: namespace.Wrap(ds, datastore.NewKey("/deals/client"))}}, }, nil } diff --git a/chain/deals/state_store.go b/chain/deals/state_store.go index 385843d10..00c5f0424 100644 --- a/chain/deals/state_store.go +++ b/chain/deals/state_store.go @@ -19,8 +19,7 @@ func (st *StateStore) Begin(i cid.Cid, state interface{}) error { return err } if has { - // TODO: uncomment after deals work - //return xerrors.Errorf("Already tracking state for %s", i) + return xerrors.Errorf("Already tracking state for %s", i) } b, err := cbor.DumpObject(state) @@ -43,48 +42,6 @@ func (st *StateStore) End(i cid.Cid) error { return st.ds.Delete(k) } -// When this gets used anywhere else, migrate to reflect - -func (st *StateStore) MutateMiner(i cid.Cid, mutator func(*MinerDeal) error) error { - return st.mutate(i, minerMutator(mutator)) -} - -func minerMutator(m func(*MinerDeal) error) func([]byte) ([]byte, error) { - return func(in []byte) ([]byte, error) { - var deal MinerDeal - err := cbor.DecodeInto(in, &deal) - if err != nil { - return nil, err - } - - if err := m(&deal); err != nil { - return nil, err - } - - return cbor.DumpObject(deal) - } -} - -func (st *StateStore) MutateClient(i cid.Cid, mutator func(*ClientDeal) error) error { - return st.mutate(i, clientMutator(mutator)) -} - -func clientMutator(m func(*ClientDeal) error) func([]byte) ([]byte, error) { - return func(in []byte) ([]byte, error) { - var deal ClientDeal - err := cbor.DecodeInto(in, &deal) - if err != nil { - return nil, err - } - - if err := m(&deal); err != nil { - return nil, err - } - - return cbor.DumpObject(deal) - } -} - func (st *StateStore) mutate(i cid.Cid, mutator func([]byte) ([]byte, error)) error { k := datastore.NewKey(i.String()) has, err := st.ds.Has(k) @@ -108,7 +65,55 @@ func (st *StateStore) mutate(i cid.Cid, mutator func([]byte) ([]byte, error)) er return st.ds.Put(k, mutated) } -func (st *StateStore) ListClient() ([]ClientDeal, error) { +type MinerStateStore struct { + StateStore +} + +func (st *MinerStateStore) MutateMiner(i cid.Cid, mutator func(*MinerDeal) error) error { + return st.mutate(i, minerMutator(mutator)) +} + +func minerMutator(m func(*MinerDeal) error) func([]byte) ([]byte, error) { + return func(in []byte) ([]byte, error) { + var deal MinerDeal + err := cbor.DecodeInto(in, &deal) + if err != nil { + return nil, err + } + + if err := m(&deal); err != nil { + return nil, err + } + + return cbor.DumpObject(deal) + } +} + +type ClientStateStore struct { + StateStore +} + +func (st *ClientStateStore) MutateClient(i cid.Cid, mutator func(*ClientDeal) error) error { + return st.mutate(i, clientMutator(mutator)) +} + +func clientMutator(m func(*ClientDeal) error) func([]byte) ([]byte, error) { + return func(in []byte) ([]byte, error) { + var deal ClientDeal + err := cbor.DecodeInto(in, &deal) + if err != nil { + return nil, err + } + + if err := m(&deal); err != nil { + return nil, err + } + + return cbor.DumpObject(deal) + } +} + +func (st *ClientStateStore) ListClient() ([]ClientDeal, error) { var out []ClientDeal res, err := st.ds.Query(query.Query{})