OSDN Git Service

Add timeout did not confirm txs del function (#1141)
authoryahtoo <yahtoo.ma@gmail.com>
Wed, 18 Jul 2018 07:52:10 +0000 (15:52 +0800)
committerPaladz <yzhu101@uottawa.ca>
Wed, 18 Jul 2018 07:52:10 +0000 (15:52 +0800)
* Add timeout did not confirm txs del function

* Fix code review problem

wallet/unconfirmed.go
wallet/wallet.go

index b59d24a..771d7dd 100644 (file)
@@ -17,7 +17,9 @@ import (
 
 const (
        //UnconfirmedTxPrefix is txpool unconfirmed transactions prefix
-       UnconfirmedTxPrefix = "UTXS:"
+       UnconfirmedTxPrefix      = "UTXS:"
+       UnconfirmedTxCheckPeriod = 30 * time.Minute
+       MaxUnconfirmedTxDuration = 24 * time.Hour
 )
 
 func calcUnconfirmedTxKey(formatKey string) []byte {
@@ -145,3 +147,32 @@ func (w *Wallet) saveUnconfirmedTx(tx *types.Tx) error {
        w.DB.Set(calcUnconfirmedTxKey(tx.ID.String()), rawTx)
        return nil
 }
+
+func (w *Wallet) delExpiredTxs() error {
+       AnnotatedTx, err := w.GetUnconfirmedTxs("")
+       if err != nil {
+               return err
+       }
+       for _, tx := range AnnotatedTx {
+               if time.Now().After(time.Unix(int64(tx.Timestamp), 0).Add(MaxUnconfirmedTxDuration)) {
+                       w.DB.Delete(calcUnconfirmedTxKey(tx.ID.String()))
+               }
+       }
+       return nil
+}
+
+//delUnconfirmedTx periodically delete locally stored timeout did not confirm txs
+func (w *Wallet) delUnconfirmedTx() {
+       if err := w.delExpiredTxs(); err != nil {
+               log.WithField("err", err).Error("wallet fail on delUnconfirmedTx")
+               return
+       }
+       ticker := time.NewTicker(UnconfirmedTxCheckPeriod)
+       defer ticker.Stop()
+       for {
+               <-ticker.C
+               if err := w.delExpiredTxs(); err != nil {
+                       log.WithField("err", err).Error("wallet fail on delUnconfirmedTx")
+               }
+       }
+}
index 4fb6467..c00651a 100644 (file)
@@ -58,6 +58,7 @@ func NewWallet(walletDB db.DB, account *account.Manager, asset *asset.Registry,
        }
 
        go w.walletUpdater()
+       go w.delUnconfirmedTx()
        return w, nil
 }