| | |
| | | package boltcache |
| | | |
| | | import "strconv" |
| | | |
| | | //添加一条日志 |
| | | func (ls *LogStore) ApplyLog(logData []byte) { |
| | | lastLogIndex := ls.getLastLog() |
| | | ls.applyCh <- &Log { |
| | | Index: lastLogIndex+1, |
| | | Data: logData, |
| | | ls.applyCh <- &Log{ |
| | | Index: lastLogIndex + 1, |
| | | Data: logData, |
| | | } |
| | | ls.setLastLog(lastLogIndex + 1) |
| | | } |
| | | |
| | | type LogCon struct { |
| | | conf *confLog |
| | | Log *Log |
| | | Log *Log |
| | | } |
| | | |
| | | //获取缓存的数据 |
| | |
| | | func (ls *LogStore) Get() *LogCon { |
| | | idx, _ := ls.store.FirstIndex(confBucket) |
| | | cLog := &confLog{} |
| | | if err := ls.store.GetConfLog(idx, cLog);err ==nil { |
| | | if err := ls.store.GetConfLog(idx, cLog); err == nil { |
| | | u, _ := ls.store.FirstIndex(cLog.BucketName) |
| | | log := &Log{} |
| | | if err = ls.store.GetLog(cLog.BucketName, u, log);err ==nil { |
| | | if err = ls.store.GetLog(cLog.BucketName, u, log); err == nil { |
| | | log.Index = u |
| | | cLog.Index = int(idx) |
| | | return &LogCon{ |
| | | conf:cLog, |
| | | Log: log, |
| | | conf: cLog, |
| | | Log: log, |
| | | } |
| | | } else { |
| | | if size,_ := ls.store.Size(confBucket);size >1 { |
| | | if size, _ := ls.store.Size(confBucket); size > 1 { |
| | | ls.Delete(&LogCon{ |
| | | conf: cLog, |
| | | Log: nil, |
| | | Log: nil, |
| | | }) |
| | | } |
| | | ls.printLog("Get log err:", err) |
| | |
| | | return nil |
| | | } |
| | | |
| | | // 遍历数据, 输出原始数据 |
| | | func (ls *LogStore) ForEach(f func(v *LogCon) error) { |
| | | ls.store.ForEach(f) |
| | | } |
| | | |
| | | func (ls *LogStore) Size() int { |
| | | start, _ := ls.store.FirstIndex(confBucket) |
| | | end, _ := ls.store.LastIndex(confBucket) |
| | | |
| | | totalSize := 0 |
| | | |
| | | for ; start <= end; start++ { |
| | | bucketName := bucketPre + strconv.Itoa(int(start)) |
| | | bucketSize, err := ls.store.Size(bucketName) |
| | | if err == nil { |
| | | totalSize = totalSize + bucketSize |
| | | } |
| | | } |
| | | |
| | | return totalSize |
| | | } |
| | | |
| | | //提供给外层使用,删除日志 |
| | | func (ls *LogStore) Delete(lc *LogCon) error { |
| | | return ls.store.Delete(lc) |
| | |
| | | |
| | | func (ls *LogStore) Close() error { |
| | | return ls.store.Close() |
| | | } |
| | | } |