Skip to content

Commit

Permalink
invest removeInvalidIndex bug
Browse files Browse the repository at this point in the history
Signed-off-by: kpango <[email protected]>
  • Loading branch information
kpango committed Feb 20, 2024
1 parent f080436 commit e56734f
Show file tree
Hide file tree
Showing 3 changed files with 27 additions and 1 deletion.
14 changes: 14 additions & 0 deletions internal/core/algorithm/ngt/ngt.go
Original file line number Diff line number Diff line change
Expand Up @@ -702,14 +702,21 @@ func (n *ngt) SaveIndexWithPath(idxPath string) error {

// Remove removes from NGT index.
func (n *ngt) Remove(id uint) error {
log.Debugf("[CHECK20240220]\tcore.Remove started\t oid: %d,\t", id)
ne := n.GetErrorBuffer()
log.Debugf("[CHECK20240220]\tcore.Remove get ebuf\toid: %d,\t", id)
log.Debugf("[CHECK20240220]\tcore.Remove pre-lock\toid: %d,\t", id)
n.lock(true)
log.Debugf("[CHECK20240220]\tcore.Remove locked\toid: %d,\t", id)
ret := C.ngt_remove_index(n.index, C.ObjectID(id), ne.err)
log.Debugf("[CHECK20240220]\tcore.Remove pre-unlock\toid: %d,\t", id)
n.unlock(true)
log.Debugf("[CHECK20240220]\tcore.Remove unlocked\toid: %d,\t", id)
if ret == ErrorCode {
return n.newGoError(ne)
}
n.PutErrorBuffer(ne)
log.Debugf("[CHECK20240220]\tcore.Remove return ebuf\toid: %d,\t", id)

n.cnt.Add(^uint64(0))

Expand All @@ -730,12 +737,18 @@ func (n *ngt) BulkRemove(ids ...uint) (errs error) {
// GetVector returns vector stored in NGT index.
func (n *ngt) GetVector(id uint) (ret []float32, err error) {
dimension := int(n.dimension)
log.Debugf("[CHECK20240220]\tcore.GetVector started\t oid: %d,\t", id)
ne := n.GetErrorBuffer()
log.Debugf("[CHECK20240220]\tcore.GetVector get ebuf\toid: %d,\t", id)
switch n.objectType {
case Float:
log.Debugf("[CHECK20240220]\tcore.GetVector pre-lock\toid: %d,\t", id)
n.rLock(false)
log.Debugf("[CHECK20240220]\tcore.GetVector locked\toid: %d,\t", id)
results := C.ngt_get_object_as_float(n.ospace, C.ObjectID(id), ne.err)
log.Debugf("[CHECK20240220]\tcore.GetVector pre-unlock\toid: %d,\t", id)
n.rUnlock(false)
log.Debugf("[CHECK20240220]\tcore.GetVector unlocked\toid: %d,\t", id)
if results == nil {
return nil, n.newGoError(ne)
}
Expand Down Expand Up @@ -768,6 +781,7 @@ func (n *ngt) GetVector(id uint) (ret []float32, err error) {
return nil, errors.ErrUnsupportedObjectType
}
n.PutErrorBuffer(ne)
log.Debugf("[CHECK20240220]\tcore.GetVector return ebuf\toid: %d,\t", id)
return ret, nil
}

Expand Down
6 changes: 6 additions & 0 deletions pkg/agent/core/ngt/service/ngt.go
Original file line number Diff line number Diff line change
Expand Up @@ -1274,12 +1274,15 @@ func (n *ngt) CreateIndex(ctx context.Context, poolSize uint32) (err error) {
}

func (n *ngt) removeInvalidIndex(ctx context.Context) {
log.Debug("[CHECK20240220]\tremoveInvalidIndex started")
if n.kvs.Len() == 0 {
log.Debug("[CHECK20240220]\tremoveInvalidIndex kvs Len is empty")
return
}
var dcnt uint32
n.kvs.Range(ctx, func(uuid string, oid uint32, _ int64) bool {
vec, err := n.core.GetVector(uint(oid))
log.Debugf("[CHECK20240220]\tuuid: %s,\toid: %d,\terr: %v", uuid, oid, err)

Check warning on line 1285 in pkg/agent/core/ngt/service/ngt.go

View check run for this annotation

Codecov / codecov/patch

pkg/agent/core/ngt/service/ngt.go#L1285

Added line #L1285 was not covered by tests
if err != nil || vec == nil || len(vec) != n.dim {
log.Debugf("invalid index detected err: %v\tuuid: %s\toid: %d will remove", err, uuid, oid)
n.kvs.Delete(uuid)
Expand All @@ -1295,6 +1298,7 @@ func (n *ngt) removeInvalidIndex(ctx context.Context) {
return true
})
if atomic.LoadUint32(&dcnt) <= 0 {
log.Debug("[CHECK20240220]\tremoveInvalidIndex deleted count is empty")

Check warning on line 1301 in pkg/agent/core/ngt/service/ngt.go

View check run for this annotation

Codecov / codecov/patch

pkg/agent/core/ngt/service/ngt.go#L1301

Added line #L1301 was not covered by tests
return
}
var poolSize uint32
Expand All @@ -1303,6 +1307,8 @@ func (n *ngt) removeInvalidIndex(ctx context.Context) {
} else {
poolSize = atomic.LoadUint32(&dcnt)
}
log.Debug("[CHECK20240220]\tremoveInvalidIndex before cimu.Lock")
defer log.Debug("[CHECK20240220]\tremoveInvalidIndex after cimu.Lock")

Check warning on line 1311 in pkg/agent/core/ngt/service/ngt.go

View check run for this annotation

Codecov / codecov/patch

pkg/agent/core/ngt/service/ngt.go#L1310-L1311

Added lines #L1310 - L1311 were not covered by tests
n.cimu.Lock()
defer n.cimu.Unlock()
n.indexing.Store(true)
Expand Down
8 changes: 7 additions & 1 deletion pkg/agent/internal/kvs/kvs.go
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@ import (
"context"
"sync/atomic"

"github.com/vdaas/vald/internal/errors"
"github.com/vdaas/vald/internal/safety"
"github.com/vdaas/vald/internal/sync"
"github.com/vdaas/vald/internal/sync/errgroup"
Expand Down Expand Up @@ -156,15 +157,20 @@ func (b *bidi) Range(ctx context.Context, f func(string, uint32, int64) bool) {
idx := i
wg.Add(1)
b.eg.Go(safety.RecoverFunc(func() (err error) {
defer wg.Done()
b.uo[idx].Range(func(uuid string, val ValueStructUo) bool {
select {
case <-ctx.Done():
err = ctx.Err()

Check warning on line 164 in pkg/agent/internal/kvs/kvs.go

View check run for this annotation

Codecov / codecov/patch

pkg/agent/internal/kvs/kvs.go#L164

Added line #L164 was not covered by tests
return false
default:
return f(uuid, val.value, val.timestamp)
}
})
wg.Done()
if err != nil &&
(errors.Is(err, context.Canceled) || errors.Is(err, context.DeadlineExceeded)) {
return err
}

Check warning on line 173 in pkg/agent/internal/kvs/kvs.go

View check run for this annotation

Codecov / codecov/patch

pkg/agent/internal/kvs/kvs.go#L172-L173

Added lines #L172 - L173 were not covered by tests
return nil
}))
}
Expand Down

0 comments on commit e56734f

Please sign in to comment.