diff --git a/dtmsvr/storage/boltdb.go b/dtmsvr/storage/boltdb.go index 217528e..58f30e5 100644 --- a/dtmsvr/storage/boltdb.go +++ b/dtmsvr/storage/boltdb.go @@ -358,15 +358,14 @@ func (s *BoltdbStore) LockOneGlobalTrans(expireIn time.Duration) *TransGlobalSto next := time.Now().Add(time.Duration(config.RetryInterval) * time.Second) err := boltGet().Update(func(t *bolt.Tx) error { cursor := t.Bucket(bucketIndex).Cursor() - k, v := cursor.First() - if k == nil || string(k) > min { - return ErrNotFound - } - trans = tGetGlobal(t, string(v)) - err := t.Bucket(bucketIndex).Delete(k) - dtmimp.E2P(err) - if trans == nil { // index exists, but global trans not exists, so retry to get next - return ErrShouldRetry + for trans == nil { + k, v := cursor.First() + if k == nil || string(k) > min { + return ErrNotFound + } + trans = tGetGlobal(t, string(v)) + err := t.Bucket(bucketIndex).Delete(k) + dtmimp.E2P(err) } trans.NextCronTime = &next tPutGlobal(t, trans) diff --git a/dtmsvr/storage/store.go b/dtmsvr/storage/store.go index 223818b..43c79c3 100644 --- a/dtmsvr/storage/store.go +++ b/dtmsvr/storage/store.go @@ -10,7 +10,6 @@ import ( ) var ErrNotFound = errors.New("storage: NotFound") -var ErrShouldRetry = errors.New("storage: ShoudRetry") var ErrUniqueConflict = errors.New("storage: UniqueKeyConflict") type Store interface {