func (cf *Config) GetChainstore() (chainstore.Store, error) { // First, reset cache storage path err := filepath.Walk( cf.Chainstore.Path, func(path string, info os.FileInfo, err error) error { if cf.Chainstore.Path == path { return nil // skip the root } if err = os.RemoveAll(path); err != nil { return fmt.Errorf("Failed to remove or clean the directory: %s, because: %s", path, err) } return nil }, ) if err != nil { return nil, err } // TODO: impl another kind of lrumgr (or option) to be based on number of keys, not filesize // at which point, we can add a method called .Keys() that will return the keys // matching some query from a Store, and we can seed the LRU this way, and keep // the bolt data.. // Build the stores and setup the chain memStore := memstore.New(cf.Chainstore.MemCacheSize * 1024 * 1024) diskStore := lrumgr.New(cf.Chainstore.DiskCacheSize*1024*1024, metricsmgr.New("fn.store.bolt", nil, levelstore.New(cf.Chainstore.Path), ), ) var store chainstore.Store if cf.Chainstore.S3AccessKey != "" && cf.Chainstore.S3SecretKey != "" { s3Store := metricsmgr.New("fn.store.s3", nil, s3store.New(cf.Chainstore.S3Bucket, cf.Chainstore.S3AccessKey, cf.Chainstore.S3SecretKey), ) store = chainstore.New(memStore, chainstore.Async(diskStore, s3Store)) } else { store = chainstore.New(memStore, chainstore.Async(diskStore)) } if err := store.Open(); err != nil { return nil, err } return store, nil }
func TestLevelStore(t *testing.T) { var store chainstore.Store var err error store = levelstore.New(chainstore.TempDir()) err = store.Open() if err != nil { t.Error(err) } defer store.Close() Convey("Leveldb Open", t, func() { Convey("Put a bunch of objects", func() { e1 := store.Put("hi", []byte{1, 2, 3}) e2 := store.Put("bye", []byte{4, 5, 6}) So(e1, ShouldEqual, nil) So(e2, ShouldEqual, nil) }) Convey("Get those objects", func() { v1, _ := store.Get("hi") v2, _ := store.Get("bye") So(v1, ShouldResemble, []byte{1, 2, 3}) So(v2, ShouldResemble, []byte{4, 5, 6}) }) Convey("Delete those objects", func() { e1 := store.Del("hi") e2 := store.Del("bye") So(e1, ShouldEqual, nil) So(e2, ShouldEqual, nil) }) }) }