Skip to content

Commit

Permalink
use go radix
Browse files Browse the repository at this point in the history
  • Loading branch information
Hitenjain14 committed Oct 9, 2024
1 parent 6074691 commit f425e0f
Show file tree
Hide file tree
Showing 4 changed files with 35 additions and 37 deletions.
52 changes: 27 additions & 25 deletions cmd/disk-cache.go
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,7 @@ import (
"sync/atomic"
"time"

art "github.com/arriqaaq/art"
"github.com/armon/go-radix"
objectlock "github.com/minio/minio/internal/bucket/object/lock"
"github.com/minio/minio/internal/color"
"github.com/minio/minio/internal/config/cache"
Expand Down Expand Up @@ -530,31 +530,33 @@ func (c *cacheObjects) ListObjects(ctx context.Context, bucket, prefix, marker,
rootprefix := bucket + "/" + prefix
rootMarker := bucket + "/" + marker
objectCount := 0
leafFilter := func(n *art.Node) {
if n.IsLeaf() {
if strings.HasPrefix(string(n.Key()), rootprefix) {
if marker == "" || string(n.Key()) > rootMarker {
trimmed := strings.TrimPrefix(string(n.Key()), rootprefix)
parts := strings.Split(trimmed, delimiter)
if len(parts) > 0 && parts[0] != "" {
if (len(objInfos) + len(prefixes)) < maxKeys {
if len(parts) == 1 {
ob, ok := n.Value().(ObjectInfo)
if ok {
objInfos = append(objInfos, ob)
}
} else if delimiter != "" {
dir := prefix + parts[0] + delimiter
if marker == "" || dir > marker {
prefixes[dir] = true
}
leafFilter := func(key string, value any) bool {
if strings.HasPrefix(key, rootprefix) {
if marker == "" || key > rootMarker {
trimmed := strings.TrimPrefix(key, rootprefix)
parts := strings.Split(trimmed, delimiter)
if len(parts) > 0 && parts[0] != "" {
if (len(objInfos) + len(prefixes)) < maxKeys {
if len(parts) == 1 {
ob, ok := value.(ObjectInfo)
if ok {
objInfos = append(objInfos, ob)
}
} else if delimiter != "" {
dir := prefix + parts[0] + delimiter
if marker == "" || dir > marker {
prefixes[dir] = true
}
}
}
objectCount++
}
objectCount++
}
}
if objectCount >= maxKeys {
return true
}
return false
}
c.prefixSearch(rootprefix, leafFilter)
var uPrefixes []string
Expand All @@ -572,13 +574,13 @@ func (c *cacheObjects) ListObjects(ctx context.Context, bucket, prefix, marker,
}, nil
}

func (c *cacheObjects) prefixSearch(rootprefix string, leafFilter art.Callback) {
func (c *cacheObjects) prefixSearch(rootprefix string, leafFilter radix.WalkFn) {
// defer func() {
// if r := recover(); r != nil {
// log.Println("recovered from panic from list tree listobj")
// }
// }()
c.listTree.ForEachPrefix([]byte(rootprefix), leafFilter)
c.listTree.ForEachPrefix(rootprefix, leafFilter)
}

func (c *cacheObjects) ListObjectsV2(ctx context.Context, bucket, prefix, continuationToken, delimiter string, maxKeys int, fetchOwner bool, startAfter string) (result ListObjectsV2Info, err error) {
Expand Down Expand Up @@ -850,7 +852,7 @@ func (c *cacheObjects) PutObject(ctx context.Context, bucket, object string, r *
return ObjectInfo{}, err
}
objPath := oi.Bucket + "/" + oi.Name
c.listTree.Insert([]byte(objPath), oi)
c.listTree.Insert(objPath, oi)
//go c.uploadObject(GlobalContext, oi) // use schedule to upload in batch
select {
case c.writeBackInputCh <- oi:
Expand Down Expand Up @@ -992,7 +994,7 @@ func (c *cacheObjects) deleteFromListTree(key string) {
// log.Println("Recovered from panic from list tree delete")
// }
// }()
c.listTree.Delete([]byte(key))
c.listTree.Delete(key)
}

func (c *cacheObjects) queueWritebackRetry(oi ObjectInfo) {
Expand Down Expand Up @@ -1169,7 +1171,7 @@ func (c *cacheObjects) recreateListTreeOnStartUp() {
if !ok || status == CommitComplete.String() {
return nil
}
c.listTree.Insert([]byte(objInfo.Bucket+"/"+objInfo.Name), objInfo)
c.listTree.Insert(objInfo.Bucket+"/"+objInfo.Name, objInfo)
return nil
}

Expand Down
14 changes: 7 additions & 7 deletions cmd/thread-safe-list-tree.go
Original file line number Diff line number Diff line change
Expand Up @@ -3,32 +3,32 @@ package cmd
import (
"sync"

art "github.com/arriqaaq/art"
"github.com/armon/go-radix"
)

type ThreadSafeListTree struct {
tree *art.Tree
tree *radix.Tree
mu sync.RWMutex
}

func newThreadSafeListTree() *ThreadSafeListTree {
return &ThreadSafeListTree{tree: art.NewTree()}
return &ThreadSafeListTree{tree: radix.New()}
}

func (t *ThreadSafeListTree) Insert(key []byte, value any) (updated bool) {
func (t *ThreadSafeListTree) Insert(key string, value any) (any, bool) {
t.mu.Lock()
defer t.mu.Unlock()
return t.tree.Insert(key, value)
}

func (t *ThreadSafeListTree) Delete(key []byte) (deleted bool) {
func (t *ThreadSafeListTree) Delete(key string) (any, bool) {
t.mu.Lock()
defer t.mu.Unlock()
return t.tree.Delete(key)
}

func (t *ThreadSafeListTree) ForEachPrefix(keyPrefix []byte, callback art.Callback) {
func (t *ThreadSafeListTree) ForEachPrefix(keyPrefix string, callback radix.WalkFn) {
t.mu.RLock()
defer t.mu.RUnlock()
t.tree.Scan(keyPrefix, callback)
t.tree.WalkPrefix(keyPrefix, callback)
}
2 changes: 1 addition & 1 deletion go.mod
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ require (
github.com/Shopify/sarama v1.28.0
github.com/VividCortex/ewma v1.1.1
github.com/alecthomas/participle v0.2.1
github.com/arriqaaq/art v0.1.2
github.com/armon/go-radix v1.0.0
github.com/bcicen/jstream v1.0.1
github.com/beevik/ntp v0.3.0
github.com/bits-and-blooms/bloom/v3 v3.0.1
Expand Down
4 changes: 0 additions & 4 deletions go.sum
Original file line number Diff line number Diff line change
Expand Up @@ -194,10 +194,6 @@ github.com/armon/go-metrics v0.4.0/go.mod h1:E6amYzXo6aW1tqzoZGT755KkbgrJsSdpwZ+
github.com/armon/go-radix v0.0.0-20180808171621-7fddfc383310/go.mod h1:ufUuZ+zHj4x4TnLV4JWEpy2hxWSpsRywHrMgIH9cCH8=
github.com/armon/go-radix v1.0.0 h1:F4z6KzEeeQIMeLFa97iZU6vupzoecKdU5TX24SNppXI=
github.com/armon/go-radix v1.0.0/go.mod h1:ufUuZ+zHj4x4TnLV4JWEpy2hxWSpsRywHrMgIH9cCH8=
github.com/arriqaaq/art v0.1.2 h1:GoAiArsfRTV8wPb2X7/58ZFNBUwoPfGfsTvweeiYgzg=
github.com/arriqaaq/art v0.1.2/go.mod h1:11r05D8a+owc6lTpI/yVypn16g7LrsVif+8lU9riSDM=
github.com/arriqaaq/skiplist v0.1.6 h1:OtJ/6pcMFYnV22RwFUbz8CophthySLRq0vVAfWRAvzc=
github.com/arriqaaq/skiplist v0.1.6/go.mod h1:iFkbyk/oh3K2w9sPqtijfDrMeTcoGu6uI+9DSGL/Zxw=
github.com/aryann/difflib v0.0.0-20170710044230-e206f873d14a/go.mod h1:DAHtR1m6lCRdSC2Tm3DSWRPvIPr6xNKyeHdqDQSQT+A=
github.com/asaskevich/govalidator v0.0.0-20180720115003-f9ffefc3facf/go.mod h1:lB+ZfQJz7igIIfQNfa7Ml4HSf2uFQQRzpGGRXenZAgY=
github.com/asaskevich/govalidator v0.0.0-20190424111038-f61b66f89f4a/go.mod h1:lB+ZfQJz7igIIfQNfa7Ml4HSf2uFQQRzpGGRXenZAgY=
Expand Down

0 comments on commit f425e0f

Please sign in to comment.