From fa1a6e15c62139179a4cb8384c4dbc925e3778a3 Mon Sep 17 00:00:00 2001 From: Monet Lee Date: Fri, 19 Jul 2024 16:51:41 +0800 Subject: [PATCH] fix uncorrect condition. --- internal/rpc/group/sync.go | 6 +-- internal/rpc/incrversion/batch_option.go | 50 +++++++++++------------- pkg/common/storage/controller/group.go | 4 +- 3 files changed, 27 insertions(+), 33 deletions(-) diff --git a/internal/rpc/group/sync.go b/internal/rpc/group/sync.go index 77256ba34..db1dc2c44 100644 --- a/internal/rpc/group/sync.go +++ b/internal/rpc/group/sync.go @@ -162,7 +162,7 @@ func (s *groupServer) BatchGetIncrementalGroupMember(ctx context.Context, req *p groups, err := s.db.FindGroup(ctx, groupIDs) if err != nil { - return nil, err + return nil, errs.Wrap(err) } for _, group := range groups { @@ -190,7 +190,7 @@ func (s *groupServer) BatchGetIncrementalGroupMember(ctx context.Context, req *p Versions: func(ctx context.Context, groupIDs []string, versions []uint64, limits []int) (map[string]*model.VersionLog, error) { vLogs, err := s.db.BatchFindMemberIncrVersion(ctx, groupIDs, versions, limits) if err != nil { - return nil, err + return nil, errs.Wrap(err) } for groupID, vlog := range vLogs { @@ -252,7 +252,7 @@ func (s *groupServer) BatchGetIncrementalGroupMember(ctx context.Context, req *p resp, err = opt.Build() if err != nil { - return nil, err + return nil, errs.Wrap(err) } for groupID, val := range resp.RespList { diff --git a/internal/rpc/incrversion/batch_option.go b/internal/rpc/incrversion/batch_option.go index 7fbe70c90..34d1b2506 100644 --- a/internal/rpc/incrversion/batch_option.go +++ b/internal/rpc/incrversion/batch_option.go @@ -48,7 +48,7 @@ func (o *BatchOption[A, B]) validVersions() []bool { valids := make([]bool, len(o.VersionIDs)) for i, versionID := range o.VersionIDs { objID, err := primitive.ObjectIDFromHex(versionID) - valids[i] = err == nil && (!objID.IsZero()) && o.VersionNumbers[i] > 0 + valids[i] = (err == nil && (!objID.IsZero()) && o.VersionNumbers[i] > 0) } return valids } @@ -75,51 +75,41 @@ func (o *BatchOption[A, B]) getVersions(tags *[]int) (versions map[string]*model dIDs = append(dIDs, o.TargetKeys[i]) versionNums = append(versionNums, o.VersionNumbers[i]) limits = append(limits, syncLimit) - - // version, err := o.Versions(o.Ctx, []string{o.VersionKeys[i]}, []uint64{o.VersionNumbers[i]}, syncLimit) - // if err != nil { - // return nil, err - // } - // versions[o.VersionKeys[i]] = version[o.VersionKeys[i]] } else { (*tags)[i] = tagFull dIDs = append(dIDs, o.TargetKeys[i]) versionNums = append(versionNums, 0) limits = append(limits, 0) - - // version, err := o.Versions(o.Ctx, []string{o.VersionKeys[i]}, []uint64{0}, 0) - // if err != nil { - // return nil, err - // } - // versions[o.VersionKeys[i]] = version[o.VersionKeys[i]] } } + versions, err = o.Versions(o.Ctx, dIDs, versionNums, limits) if err != nil { return nil, errs.Wrap(err) } return versions, nil + } else { caches, err := o.CacheMaxVersions(o.Ctx, o.TargetKeys) if err != nil { - return nil, err + return nil, errs.Wrap(err) } + objIDs := make([]primitive.ObjectID, len(o.VersionIDs)) + for i, versionID := range o.VersionIDs { objID, _ := primitive.ObjectIDFromHex(versionID) objIDs[i] = objID } + equals := o.equalIDs(objIDs) for i, valid := range valids { if !valid { (*tags)[i] = tagFull - // versions[o.VersionKeys[i]] = caches[o.VersionKeys[i]] } else if !equals[i] { (*tags)[i] = tagFull - // versions[o.VersionKeys[i]] = caches[o.VersionKeys[i]] } else if o.VersionNumbers[i] == uint64(caches[o.TargetKeys[i]].Version) { (*tags)[i] = tagEqual - // versions[o.VersionKeys[i]] = caches[o.VersionKeys[i]] } else { (*tags)[i] = tagQuery dIDs = append(dIDs, o.TargetKeys[i]) @@ -127,16 +117,20 @@ func (o *BatchOption[A, B]) getVersions(tags *[]int) (versions map[string]*model limits = append(limits, syncLimit) delete(caches, o.TargetKeys[i]) - // versions[o.VersionKeys[i]] = version[o.VersionKeys[i]] } } - version, err := o.Versions(o.Ctx, dIDs, versionNums, limits) - if err != nil { - return nil, err - } - for k, v := range version { - caches[k] = v + + if dIDs != nil { + versionMap, err := o.Versions(o.Ctx, dIDs, versionNums, limits) + if err != nil { + return nil, errs.Wrap(err) + } + + for k, v := range versionMap { + caches[k] = v + } } + versions = caches } return versions, nil @@ -144,13 +138,13 @@ func (o *BatchOption[A, B]) getVersions(tags *[]int) (versions map[string]*model func (o *BatchOption[A, B]) Build() (*B, error) { if err := o.check(); err != nil { - return nil, err + return nil, errs.Wrap(err) } tags := make([]int, len(o.TargetKeys)) versions, err := o.getVersions(&tags) if err != nil { - return nil, err + return nil, errs.Wrap(err) } fullMap := make(map[string]bool) @@ -193,7 +187,7 @@ func (o *BatchOption[A, B]) Build() (*B, error) { if len(insertIds) > 0 { insertList, err := o.Find(o.Ctx, targetKey, insertIds) if err != nil { - return nil, err + return nil, errs.Wrap(err) } insertListMap[targetKey] = insertList } @@ -203,7 +197,7 @@ func (o *BatchOption[A, B]) Build() (*B, error) { if len(updateIds) > 0 { updateList, err := o.Find(o.Ctx, targetKey, updateIds) if err != nil { - return nil, err + return nil, errs.Wrap(err) } updateListMap[targetKey] = updateList } diff --git a/pkg/common/storage/controller/group.go b/pkg/common/storage/controller/group.go index 896b3b9c1..072429ed0 100644 --- a/pkg/common/storage/controller/group.go +++ b/pkg/common/storage/controller/group.go @@ -504,7 +504,7 @@ func (g *groupDatabase) FindMemberIncrVersion(ctx context.Context, groupID strin func (g *groupDatabase) BatchFindMemberIncrVersion(ctx context.Context, groupIDs []string, versions []uint64, limits []int) (map[string]*model.VersionLog, error) { if len(groupIDs) == 0 { - return nil, errs.New("groupIDs is nil.") + return nil, errs.Wrap(errs.New("groupIDs is nil.")) } // convert []uint64 to []uint @@ -535,7 +535,7 @@ func (g *groupDatabase) FindMaxGroupMemberVersionCache(ctx context.Context, grou func (g *groupDatabase) BatchFindMaxGroupMemberVersionCache(ctx context.Context, groupIDs []string) (map[string]*model.VersionLog, error) { if len(groupIDs) == 0 { - return nil, nil + return nil, errs.Wrap(errs.New("groupIDs is nil in Cache.")) } versionLogs, err := g.cache.BatchFindMaxGroupMemberVersion(ctx, groupIDs) if err != nil {