From: yahtoo Date: Wed, 18 Jul 2018 07:52:10 +0000 (+0800) Subject: Add timeout did not confirm txs del function (#1141) X-Git-Tag: v1.0.5~7^2~12 X-Git-Url: http://git.osdn.net/view?a=commitdiff_plain;h=659a318efa02828c29c14af1c8ed963facfab7cc;p=bytom%2Fbytom.git Add timeout did not confirm txs del function (#1141) * Add timeout did not confirm txs del function * Fix code review problem --- diff --git a/wallet/unconfirmed.go b/wallet/unconfirmed.go index b59d24a2..771d7dd6 100644 --- a/wallet/unconfirmed.go +++ b/wallet/unconfirmed.go @@ -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") + } + } +} diff --git a/wallet/wallet.go b/wallet/wallet.go index 4fb64671..c00651a3 100644 --- a/wallet/wallet.go +++ b/wallet/wallet.go @@ -58,6 +58,7 @@ func NewWallet(walletDB db.DB, account *account.Manager, asset *asset.Registry, } go w.walletUpdater() + go w.delUnconfirmedTx() return w, nil }