From eae2700e91e5175d0f0d7359f0be6f74c6098d81 Mon Sep 17 00:00:00 2001 From: yedf2 <120050102@qq.com> Date: Thu, 3 Mar 2022 19:53:45 +0800 Subject: [PATCH] optimize trans finished in boltdb --- dtmsvr/storage/boltdb/boltdb.go | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/dtmsvr/storage/boltdb/boltdb.go b/dtmsvr/storage/boltdb/boltdb.go index 1f53fb2..b705a5b 100644 --- a/dtmsvr/storage/boltdb/boltdb.go +++ b/dtmsvr/storage/boltdb/boltdb.go @@ -11,6 +11,7 @@ import ( "strings" "time" + "github.com/dtm-labs/dtm/dtmcli" "github.com/dtm-labs/dtm/dtmcli/dtmimp" "github.com/dtm-labs/dtm/dtmcli/logger" "github.com/dtm-labs/dtm/dtmsvr/storage" @@ -387,12 +388,16 @@ func (s *Store) LockOneGlobalTrans(expireIn time.Duration) *storage.TransGlobalS next := time.Now().Add(time.Duration(s.retryInterval) * time.Second) err := s.boltDb.Update(func(t *bolt.Tx) error { cursor := t.Bucket(bucketIndex).Cursor() - for trans == nil { + toDelete := [][]byte{} + for trans == nil || trans.Status == dtmcli.StatusSucceed || trans.Status == dtmcli.StatusFailed { k, v := cursor.First() if k == nil || string(k) > min { return storage.ErrNotFound } trans = tGetGlobal(t, string(v)) + toDelete = append(toDelete, k) + } + for _, k := range toDelete { err := t.Bucket(bucketIndex).Delete(k) dtmimp.E2P(err) }