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