Просмотр исходного кода

修正持久存储中的几个bug

Hui Chen 10 лет назад
Родитель
Сommit
af2c876a7d

+ 10 - 1
examples/codelab/search_server.go

@@ -146,17 +146,26 @@ func main() {
 
 	// 初始化
 	gob.Register(WeiboScoringFields{})
+	log.Print("引擎开始初始化")
 	searcher.Init(types.EngineInitOptions{
 		SegmenterDictionaries: "../../data/dictionary.txt",
 		StopTokenFile:         "../../data/stop_tokens.txt",
 		IndexerInitOptions: &types.IndexerInitOptions{
 			IndexType: types.LocationsIndex,
 		},
+		// 如果你希望使用持久存储,启用下面的选项
+		// 默认使用boltdb持久化,如果你希望修改数据库类型
+		// 请修改 WUKONG_STORAGE_ENGINE 环境变量
+		// UsePersistentStorage: true,
+		// PersistentStorageFolder: "weibo_search",
 	})
+	log.Print("引擎初始化完毕")
 	wbs = make(map[uint64]Weibo)
 
 	// 索引
+	log.Print("建索引开始")
 	go indexWeibo()
+	log.Print("建索引完毕")
 
 	// 捕获ctrl-c
 	c := make(chan os.Signal, 1)
@@ -172,5 +181,5 @@ func main() {
 	http.HandleFunc("/json", JsonRpcServer)
 	http.Handle("/", http.FileServer(http.Dir("static")))
 	log.Print("服务器启动")
-	http.ListenAndServe(":8080", nil)
+	log.Fatal(http.ListenAndServe(":8180", nil))
 }

+ 28 - 0
storage/bolt_storage_test.go

@@ -0,0 +1,28 @@
+package storage
+
+import (
+	"github.com/huichen/wukong/utils"
+	"os"
+	"testing"
+)
+
+func TestOpenOrCreateBolt(t *testing.T) {
+	db, err := openBoltStorage("bolt_test")
+	utils.Expect(t, "<nil>", err)
+	db.Close()
+
+	db, err = openBoltStorage("bolt_test")
+	utils.Expect(t, "<nil>", err)
+	err = db.Set([]byte("key1"), []byte("value1"))
+	utils.Expect(t, "<nil>", err)
+
+	buffer := make([]byte, 100)
+	buffer, err = db.Get([]byte("key1"))
+	utils.Expect(t, "<nil>", err)
+	utils.Expect(t, "value1", string(buffer))
+
+	walFile := db.WALName()
+	db.Close()
+	os.Remove(walFile)
+	os.Remove("bolt_test")
+}

+ 3 - 2
storage/kv_storage.go

@@ -2,6 +2,7 @@ package storage
 
 import (
 	"github.com/cznic/kv"
+	"io"
 )
 
 type kvStorage struct {
@@ -15,10 +16,10 @@ func openKVStorage(path string) (Storage, error) {
 		var errCreate error
 		db, errCreate = kv.Create(path, options)
 		if errCreate != nil {
-			return db, errCreate
+			return &kvStorage{db}, errCreate
 		}
 	}
-	return db, nil
+	return &kvStorage{db}, nil
 }
 
 func (s *kvStorage) WALName() string {

+ 10 - 11
storage/kv_storage_test.go

@@ -1,29 +1,28 @@
 package storage
 
 import (
-	"github.com/huichen/wukong/storage"
+	"github.com/huichen/wukong/utils"
 	"os"
 	"testing"
 )
 
 func TestOpenOrCreateKv(t *testing.T) {
-	db, err := storage.OpenStorage("test")
-	Expect(t, "<nil>", err)
+	db, err := openKVStorage("kv_test")
+	utils.Expect(t, "<nil>", err)
 	db.Close()
 
-	db, err := storage.OpenStorage("test")
-	Expect(t, "<nil>", err)
-	db.Buc
+	db, err = openKVStorage("kv_test")
+	utils.Expect(t, "<nil>", err)
 	err = db.Set([]byte("key1"), []byte("value1"))
-	Expect(t, "<nil>", err)
+	utils.Expect(t, "<nil>", err)
 
 	buffer := make([]byte, 100)
-	buffer, err = db.Get(nil, []byte("key1"))
-	Expect(t, "<nil>", err)
-	Expect(t, "value1", string(buffer))
+	buffer, err = db.Get([]byte("key1"))
+	utils.Expect(t, "<nil>", err)
+	utils.Expect(t, "value1", string(buffer))
 
 	walFile := db.WALName()
 	db.Close()
 	os.Remove(walFile)
-	os.Remove("test")
+	os.Remove("kv_test")
 }

+ 1 - 2
storage/storage.go

@@ -3,7 +3,6 @@ package storage
 import (
 	"fmt"
 	"os"
-	"time"
 )
 
 const DEFAULT_STORAGE_ENGINE = "bolt"
@@ -31,7 +30,7 @@ func OpenStorage(path string) (Storage, error) {
 	if wse == "" {
 		wse = DEFAULT_STORAGE_ENGINE
 	}
-	if has, fn := supportedStorage[wse]; has {
+	if fn, has := supportedStorage[wse]; has {
 		return fn(path)
 	}
 	return nil, fmt.Errorf("unsupported storage engine %v", wse)

+ 1 - 0
wukong.go

@@ -1,6 +1,7 @@
 package wukong
 
 import (
+	_ "github.com/boltdb/bolt"
 	_ "github.com/cznic/kv"
 	_ "github.com/huichen/murmur"
 	_ "github.com/huichen/sego"