diff --git a/Gopkg.lock b/Gopkg.lock index 826be382..6145e706 100644 --- a/Gopkg.lock +++ b/Gopkg.lock @@ -179,7 +179,7 @@ branch = "master" name = "github.com/tecbot/gorocksdb" packages = ["."] - revision = "3e476152774442234f9a9f747386a48a1d82a515" + revision = "214b6b7bc0f06812ab5602fdc502a3e619916f38" [[projects]] branch = "master" diff --git a/build/docker/bin/Dockerfile b/build/docker/bin/Dockerfile index a3e4c63e..b4bb6b9f 100644 --- a/build/docker/bin/Dockerfile +++ b/build/docker/bin/Dockerfile @@ -10,7 +10,7 @@ RUN apt-get update && \ apt-get clean ENV GOLANG_VERSION=go1.10.linux-amd64 -ENV ROCKSDB_VERSION=rocksdb-5.14.3 +ENV ROCKSDB_VERSION=v5.15.10 ENV GOPATH=/go ENV PATH=$PATH:$GOPATH/bin ENV CGO_CFLAGS="-I/opt/rocksdb/include" diff --git a/db/dboptions.go b/db/dboptions.go index f982f8a3..ffdbfdbb 100644 --- a/db/dboptions.go +++ b/db/dboptions.go @@ -1,6 +1,12 @@ package db +// #include "rocksdb/c.h" +import "C" + import ( + "reflect" + "unsafe" + "github.com/tecbot/gorocksdb" ) @@ -39,12 +45,19 @@ func boolToChar(b bool) C.uchar { */ func createAndSetDBOptions(bloomBits int, c *gorocksdb.Cache, maxOpenFiles int) *gorocksdb.Options { - blockOpts := gorocksdb.NewDefaultBlockBasedTableOptions() + // blockOpts := gorocksdb.NewDefaultBlockBasedTableOptions() + cNativeBlockOpts := C.rocksdb_block_based_options_create() + blockOpts := &gorocksdb.BlockBasedTableOptions{} + cBlockField := reflect.Indirect(reflect.ValueOf(blockOpts)).FieldByName("c") + cBlockPtr := (**C.rocksdb_block_based_table_options_t)(unsafe.Pointer(cBlockField.UnsafeAddr())) + *cBlockPtr = cNativeBlockOpts blockOpts.SetBlockSize(32 << 10) // 32kB blockOpts.SetBlockCache(c) if bloomBits > 0 { blockOpts.SetFilterPolicy(gorocksdb.NewBloomFilter(bloomBits)) } + C.rocksdb_block_based_options_set_format_version(cNativeBlockOpts, 3) + opts := gorocksdb.NewDefaultOptions() opts.SetBlockBasedTableFactory(blockOpts) opts.SetCreateIfMissing(true)