| | |
| | | import ( |
| | | "errors" |
| | | "github.com/boltdb/bolt" |
| | | "strconv" |
| | | "time" |
| | | ) |
| | | |
| | |
| | | return tx.Commit() |
| | | } |
| | | |
| | | func (b *BoltStore) ForEach(f func(v []byte) error) { |
| | | func (b *BoltStore) ForEach(f func(lc *LogCon) error) error { |
| | | tx, err := b.conn.Begin(true) |
| | | if err != nil { |
| | | return |
| | | return err |
| | | } |
| | | defer tx.Rollback() |
| | | |
| | |
| | | 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 err |
| | | } |
| | | |
| | | bucketName := cLog.BucketName |
| | | bucket := tx.Bucket([]byte(bucketName)) |
| | | if bucket == nil { |
| | | return |
| | | return err |
| | | } |
| | | |
| | | 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 |
| | | }) |
| | | } |
| | | |
| | | return nil |
| | | } |
| | | |
| | | func (b *BoltStore) Delete(lc *LogCon) error { |