|
@@ -15,6 +15,7 @@ import (
|
|
"jygit.jydev.jianyu360.cn/data_processing/common_utils/mongodb"
|
|
"jygit.jydev.jianyu360.cn/data_processing/common_utils/mongodb"
|
|
"jygit.jydev.jianyu360.cn/data_processing/common_utils/mysqldb"
|
|
"jygit.jydev.jianyu360.cn/data_processing/common_utils/mysqldb"
|
|
"os"
|
|
"os"
|
|
|
|
+ "path/filepath"
|
|
"strings"
|
|
"strings"
|
|
"sync"
|
|
"sync"
|
|
"time"
|
|
"time"
|
|
@@ -438,7 +439,7 @@ func GetIndexName(client *es7.Client, name string) (string, error) {
|
|
}
|
|
}
|
|
|
|
|
|
// InitBitmap 初始化项目名称副标题 bitmap
|
|
// InitBitmap 初始化项目名称副标题 bitmap
|
|
-func InitBitmap() {
|
|
|
|
|
|
+func InitBitmap2() {
|
|
if config.Conf.Env.Dbfile != "" {
|
|
if config.Conf.Env.Dbfile != "" {
|
|
dbfile = &config.Conf.Env.Dbfile
|
|
dbfile = &config.Conf.Env.Dbfile
|
|
}
|
|
}
|
|
@@ -471,6 +472,65 @@ func InitBitmap() {
|
|
}()
|
|
}()
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+func InitBitmap() {
|
|
|
|
+ if config.Conf.Env.Dbfile != "" {
|
|
|
|
+ dbfile = &config.Conf.Env.Dbfile
|
|
|
|
+ }
|
|
|
|
+ log.Info("InitBitmap", zap.String("dbfile", *dbfile))
|
|
|
|
+
|
|
|
|
+ // 1. 尝试加载主文件
|
|
|
|
+ if tryLoadBitmapFile(*dbfile) {
|
|
|
|
+ log.Info("InitBitmap", zap.String("状态", "主文件加载成功"))
|
|
|
|
+ } else if tryLoadBitmapFile(*dbfile + ".bak") {
|
|
|
|
+ log.Warn("InitBitmap", zap.String("警告", "主文件加载失败,已回退至备份文件"))
|
|
|
|
+ } else {
|
|
|
|
+ // 2. 两个文件都失败,删除旧文件并加载指定备份文件
|
|
|
|
+ log.Error("InitBitmap", zap.String("错误", "主文件和备份文件都无法加载,使用手动备份恢复"))
|
|
|
|
+ // 删除损坏的文件
|
|
|
|
+ os.Remove(*dbfile)
|
|
|
|
+ os.Remove(*dbfile + ".bak")
|
|
|
|
+
|
|
|
|
+ // 3. 加载你指定的备份文件 db_0730
|
|
|
|
+ backupFile := strings.TrimSuffix(*dbfile, filepath.Ext(*dbfile)) + "_0730"
|
|
|
|
+ if tryLoadBitmapFile(backupFile) {
|
|
|
|
+ log.Info("InitBitmap", zap.String("恢复状态", "成功加载手动备份 "+backupFile))
|
|
|
|
+ } else {
|
|
|
|
+ log.Error("InitBitmap", zap.String("恢复状态", "手动备份文件也加载失败,将初始化空缓存"))
|
|
|
|
+ cache = roaring.NewBitmap()
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ // 后台保存逻辑保持不变
|
|
|
|
+ go func() {
|
|
|
|
+ for {
|
|
|
|
+ time.Sleep(10 * time.Second)
|
|
|
|
+ if cacheModify {
|
|
|
|
+ saveDb()
|
|
|
|
+ cacheModify = false
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ }()
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+// tryLoadBitmapFile 读取并尝试解析到 cache(不 panic,返回是否成功)
|
|
|
|
+func tryLoadBitmapFile(path string) bool {
|
|
|
|
+ bs, err := ioutil.ReadFile(path)
|
|
|
|
+ if err != nil {
|
|
|
|
+ log.Warn("读取失败", zap.String("文件", path), zap.Error(err))
|
|
|
|
+ return false
|
|
|
|
+ }
|
|
|
|
+ if len(bs) == 0 {
|
|
|
|
+ log.Warn("文件内容为空", zap.String("文件", path))
|
|
|
|
+ return false
|
|
|
|
+ }
|
|
|
|
+ _, err = cache.FromBuffer(bs)
|
|
|
|
+ if err != nil {
|
|
|
|
+ log.Warn("文件解析失败(可能损坏)", zap.String("文件", path), zap.Error(err))
|
|
|
|
+ return false
|
|
|
|
+ }
|
|
|
|
+ return true
|
|
|
|
+}
|
|
|
|
+
|
|
// InitRule 初始化移动标签规则
|
|
// InitRule 初始化移动标签规则
|
|
func InitRule() {
|
|
func InitRule() {
|
|
//关键词
|
|
//关键词
|