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