Skip to content

Commit

Permalink
multi: resolve review issues (2 of x).
Browse files Browse the repository at this point in the history
  • Loading branch information
dnldd committed May 28, 2020
1 parent 3e9ed08 commit a794c29
Show file tree
Hide file tree
Showing 5 changed files with 25 additions and 82 deletions.
54 changes: 25 additions & 29 deletions client/core/core.go
Original file line number Diff line number Diff line change
Expand Up @@ -77,11 +77,11 @@ type dexConnection struct {
func (dc *dexConnection) suspended(mkt string) bool {
dc.marketMtx.Lock()
defer dc.marketMtx.Unlock()
suspended, ok := dc.marketMap[mkt]
market, ok := dc.marketMap[mkt]
if !ok {
return false
}
return suspended.Suspended
return market.Suspended
}

// suspend halts trading for the provided market.
Expand Down Expand Up @@ -2369,47 +2369,43 @@ func handleTradeSuspensionMsg(c *Core, dc *dexConnection, msg *msgjson.Message)
duration := time.Until(encode.UnixTimeMilli(int64(sp.SuspendTime)))
dc.pendingSuspends[sp.MarketID] = time.AfterFunc(duration, func() {
dc.pendingSuspendsMtx.Lock()
defer dc.pendingSuspendsMtx.Unlock()
dc.suspend(sp.MarketID)
if bookie := dc.books[sp.MarketID]; bookie != nil {
bookie.Reset()
}
if !sp.Persist {
assets := strings.Split(sp.MarketID, "_")
base, ok := dex.BipSymbolID(assets[0])
mkt, ok := dc.marketMap[sp.MarketID]
if !ok {
log.Errorf("no ID for base BIP symbol: %v", assets[0])
log.Errorf("no market found with ID %s", sp.MarketID)
}

quote, ok := dex.BipSymbolID(assets[1])
if !ok {
log.Errorf("no ID for quote BIP symbol: %v", assets[1])
}

orders, err := c.db.ActiveDexMarketOrders([]byte(dc.acct.url),
encode.Uint32Bytes(base), encode.Uint32Bytes(quote))
if err != nil {
log.Errorf("unable to fetch active dex marker orders: %v", err)
return
}
dc.tradeMtx.Lock()
defer dc.tradeMtx.Unlock()

// Revoke all active orders of the suspended market for the dex.
for _, entry := range orders {
md := entry.MetaData
md.Status = order.OrderStatusRevoked
metaOrder := &db.MetaOrder{
MetaData: md,
Order: entry.Order,
}

err := c.db.UpdateOrder(metaOrder)
if err != nil {
log.Errorf("unable to revoke order: %v", err)
return
for _, tracker := range dc.trades {
if tracker.Order.Base() == mkt.BaseID &&
tracker.Order.Quote() == mkt.QuoteID &&
tracker.metaData.DEX == dc.acct.url &&
(tracker.metaData.Status == order.OrderStatusEpoch ||
tracker.metaData.Status == order.OrderStatusBooked) {

md := tracker.metaData
md.Status = order.OrderStatusRevoked
metaOrder := &db.MetaOrder{
MetaData: md,
Order: tracker.Order,
}

err = tracker.db.UpdateOrder(metaOrder)
if err != nil {
log.Errorf("unable to update order: %v", err)
}
}
}
}
delete(dc.pendingSuspends, sp.MarketID)
dc.pendingSuspendsMtx.Unlock()
})

return nil
Expand Down
4 changes: 0 additions & 4 deletions client/core/core_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -270,10 +270,6 @@ func (tdb *TDB) ActiveOrders() ([]*db.MetaOrder, error) {
return nil, nil
}

func (tdb *TDB) ActiveDexMarketOrders(dex []byte, base []byte, quote []byte) ([]*db.MetaOrder, error) {
return []*db.MetaOrder{}, nil
}

func (tdb *TDB) AccountOrders(dex string, n int, since uint64) ([]*db.MetaOrder, error) {
return nil, nil
}
Expand Down
13 changes: 0 additions & 13 deletions client/db/bolt/db.go
Original file line number Diff line number Diff line change
Expand Up @@ -305,19 +305,6 @@ func (db *boltDB) ActiveOrders() ([]*dexdb.MetaOrder, error) {
})
}

// ActiveDexMarketOrders retrieves active orders associated with the
// provided dex, base and quote assets.
func (db *boltDB) ActiveDexMarketOrders(dex []byte, base []byte, quote []byte) ([]*dexdb.MetaOrder, error) {
return db.filteredOrders(func(oBkt *bbolt.Bucket) bool {
statusB := oBkt.Get(statusKey)
dexB := oBkt.Get(dexKey)
baseB := oBkt.Get(baseKey)
quoteB := oBkt.Get(quoteKey)
return bEqual(base, baseB) && bEqual(quote, quoteB) &&
bEqual(dex, dexB) && (bEqual(statusB, byteEpoch) || bEqual(statusB, byteBooked))
})
}

// AccountOrders retrieves all orders associated with the specified DEX. n = 0
// applies no limit on number of orders returned. since = 0 is equivalent to
// disabling the time filter, since no orders were created before before 1970.
Expand Down
33 changes: 0 additions & 33 deletions client/db/bolt/db_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,6 @@ import (

"decred.org/dcrdex/client/db"
dbtest "decred.org/dcrdex/client/db/test"
"decred.org/dcrdex/dex/encode"
"decred.org/dcrdex/dex/order"
ordertest "decred.org/dcrdex/dex/order/test"
"github.com/decred/slog"
Expand Down Expand Up @@ -534,38 +533,6 @@ func TestOrders(t *testing.T) {
if err == nil {
t.Fatalf("no error encountered for updating unknown order change coin")
}

numToDo = 5
numActiveDex := numToDo
acct := acct1
base, quote := uint32(42), uint32(0) // base - dcr, quote - btc.
nTimes(numToDo, func(i int) {
status := order.OrderStatusBooked
ord := randOrderForMarket(base, quote)
order := &db.MetaOrder{
MetaData: &db.OrderMetaData{
Status: status,
DEX: acct.URL,
Proof: db.OrderProof{DEXSig: randBytes(73)},
},
Order: ord,
}

err := boltdb.UpdateOrder(order)
if err != nil {
t.Fatalf("error inserting order: %v", err)
}
})

activeDexOrders, err := boltdb.ActiveDexMarketOrders([]byte(acct.URL),
encode.Uint32Bytes(base), encode.Uint32Bytes(quote))
if err != nil {
t.Fatalf("error retrieving active dex orders: %v", err)
}
if len(activeDexOrders) != numActiveDex {
t.Fatalf("expected %d active dex orders, got %d",
numActiveDex, len(activeDexOrders))
}
}

func TestMatches(t *testing.T) {
Expand Down
3 changes: 0 additions & 3 deletions client/db/interface.go
Original file line number Diff line number Diff line change
Expand Up @@ -36,9 +36,6 @@ type DB interface {
// ActiveOrders retrieves all orders which appear to be in an active state,
// which is either in the epoch queue or in the order book.
ActiveOrders() ([]*MetaOrder, error)
// ActiveDexMarketOrders retrieves active orders associated with the
// provided dex, base and quote assets.
ActiveDexMarketOrders(dex []byte, base []byte, quote []byte) ([]*MetaOrder, error)
// AccountOrders retrieves all orders associated with the specified DEX. The
// order count can be limited by supplying a non-zero n value. In that case
// the newest n orders will be returned. The orders can be additionally
Expand Down

0 comments on commit a794c29

Please sign in to comment.