From d7485b186f72742ee0a1bf34e7fc818b53f20870 Mon Sep 17 00:00:00 2001 From: zhangzengfei <zhangzengfei@smartai.com> Date: 星期五, 12 十一月 2021 16:02:18 +0800 Subject: [PATCH] fix foreach --- store_test.go | 23 +++++++++++++++-------- api.go | 2 +- bolt_store.go | 16 ++++++++++++---- 3 files changed, 28 insertions(+), 13 deletions(-) diff --git a/api.go b/api.go index 8870c6f..7af4fc6 100644 --- a/api.go +++ b/api.go @@ -52,7 +52,7 @@ } // 閬嶅巻鏁版嵁, 杈撳嚭鍘熷鏁版嵁 -func (ls *LogStore) ForEach(f func(v []byte) error) { +func (ls *LogStore) ForEach(f func(v *LogCon) error) { ls.store.ForEach(f) } diff --git a/bolt_store.go b/bolt_store.go index be490ba..505e2ea 100644 --- a/bolt_store.go +++ b/bolt_store.go @@ -3,7 +3,6 @@ import ( "errors" "github.com/boltdb/bolt" - "strconv" "time" ) @@ -243,7 +242,7 @@ return tx.Commit() } -func (b *BoltStore) ForEach(f func(v []byte) error) { +func (b *BoltStore) ForEach(f func(lc *LogCon) error) { tx, err := b.conn.Begin(true) if err != nil { return @@ -254,7 +253,13 @@ end, _ := b.LastIndex(confBucket) for ; start <= end; start++ { - bucketName := bucketPre + strconv.Itoa(int(start)) + cLog := &confLog{} + err := b.GetConfLog(start, cLog) + if err != nil { + return + } + + bucketName := cLog.BucketName bucket := tx.Bucket([]byte(bucketName)) if bucket == nil { return @@ -263,7 +268,10 @@ bucket.ForEach(func(k, v []byte) error { log := &Log{} err := decodeMsgPack(v, log) - f(log.Data) + if err == nil { + f(&LogCon{cLog, log}) + } + return err }) } diff --git a/store_test.go b/store_test.go index 870c869..bea420d 100644 --- a/store_test.go +++ b/store_test.go @@ -1,7 +1,6 @@ package boltcache import ( - "strconv" "testing" "time" ) @@ -18,19 +17,27 @@ //go consume(ls) // - for i := 0; i < 100; i++ { - ls.ApplyLog([]byte("hello world " + strconv.Itoa(i))) - time.Sleep(time.Millisecond * 100) - } + //for i := 0; i < 10; i++ { + // ls.ApplyLog([]byte("hello world " + strconv.Itoa(i))) + // time.Sleep(time.Millisecond * 100) + //} ls.printLog("Size = ", ls.Size()) - ls.ForEach(func(v []byte) error { - ls.printLog("val=:", string(v)) + var logs []*LogCon + ls.ForEach(func(log *LogCon) error { + ls.printLog("val=:", string(log.GetData())) + + logs = append(logs, log) + time.Sleep(time.Millisecond * 100) + return nil }) - consume(ls) + for _, log := range logs { + ls.Delete(log) + } + //consume(ls) } func consume(ls *LogStore) { -- Gitblit v1.8.0