diff --git a/.travis.yml b/.travis.yml index 84821b41d..db0b950e3 100644 --- a/.travis.yml +++ b/.travis.yml @@ -9,9 +9,6 @@ notifications: on_success: never on_failure: never -before_install: - - go get -u google.golang.org/grpc - script: - GO111MODULE=on DRAGONBOAT_LOGDB=pebble make travis-ci-test - GO111MODULE=on go test -tags "dragonboat_pebble_test" -v -coverprofile=coverage.txt -covermode=atomic diff --git a/internal/fileutil/utils.go b/internal/fileutil/utils.go index 9afba770f..6f23ad668 100644 --- a/internal/fileutil/utils.go +++ b/internal/fileutil/utils.go @@ -28,8 +28,6 @@ import ( "sync" "time" - "github.com/golang/protobuf/proto" - "github.com/lni/dragonboat/v3/internal/vfs" ) @@ -43,6 +41,15 @@ const ( deleteFilename = "DELETED.dragonboat" ) +// Marshaler is the interface for types that can be Marshaled. +type Marshaler interface { + Marshal() ([]byte, error) +} + +type Unmarshaler interface { + Unmarshal([]byte) error +} + // DirExist returns whether the specified filesystem entry exists. func DirExist(name string, fs vfs.IFS) (bool, error) { if name == "." || name == "/" { @@ -152,7 +159,7 @@ func SyncDir(dir string, fs vfs.IFS) (err error) { } // MarkDirAsDeleted marks the specified directory as deleted. -func MarkDirAsDeleted(dir string, msg proto.Message, fs vfs.IFS) error { +func MarkDirAsDeleted(dir string, msg Marshaler, fs vfs.IFS) error { return CreateFlagFile(dir, deleteFilename, msg, fs) } @@ -175,7 +182,7 @@ func getHash(data []byte) []byte { // CreateFlagFile creates a flag file in the specific location. The flag file // contains the marshaled data of the specified protobuf message. func CreateFlagFile(dir string, - filename string, msg proto.Message, fs vfs.IFS) (err error) { + filename string, msg Marshaler, fs vfs.IFS) (err error) { fp := fs.PathJoin(dir, filename) f, err := fs.Create(fp) if err != nil { @@ -189,7 +196,7 @@ func CreateFlagFile(dir string, err = cerr } }() - data, err := proto.Marshal(msg) + data, err := msg.Marshal() if err != nil { panic(err) } @@ -215,7 +222,7 @@ func CreateFlagFile(dir string, // location. The data of the flag file will be unmarshaled into the specified // protobuf message. func GetFlagFileContent(dir string, - filename string, msg proto.Message, fs vfs.IFS) (err error) { + filename string, msg Unmarshaler, fs vfs.IFS) (err error) { fp := fs.PathJoin(dir, filename) f, err := fs.Open(vfs.Clean(fp)) if err != nil { @@ -239,7 +246,7 @@ func GetFlagFileContent(dir string, if !bytes.Equal(h, expectedHash) { panic("corrupted flag file content") } - return proto.Unmarshal(buf, msg) + return msg.Unmarshal(buf) } // HasFlagFile returns a boolean value indicating whether flag file can be diff --git a/internal/rsm/statemachine_test.go b/internal/rsm/statemachine_test.go index 8d18234f9..dc95244c1 100644 --- a/internal/rsm/statemachine_test.go +++ b/internal/rsm/statemachine_test.go @@ -21,8 +21,6 @@ import ( "math/rand" "testing" - "github.com/golang/protobuf/proto" - "github.com/lni/dragonboat/v3/client" "github.com/lni/dragonboat/v3/config" "github.com/lni/dragonboat/v3/internal/raft" @@ -1259,7 +1257,7 @@ func genTestKVData(k, d string) []byte { Key: k, Val: d, } - data, err := proto.Marshal(&u) + data, err := u.Marshal() if err != nil { panic(err) } diff --git a/internal/server/snapshotenv.go b/internal/server/snapshotenv.go index 75c2d1bc7..8e76a3f89 100644 --- a/internal/server/snapshotenv.go +++ b/internal/server/snapshotenv.go @@ -24,8 +24,6 @@ import ( "sync" "syscall" - "github.com/golang/protobuf/proto" - "github.com/lni/dragonboat/v3/internal/fileutil" "github.com/lni/dragonboat/v3/internal/vfs" ) @@ -186,7 +184,7 @@ func (se *SSEnv) MustRemoveTempDir() { } // FinalizeSnapshot finalizes the snapshot. -func (se *SSEnv) FinalizeSnapshot(msg proto.Message) error { +func (se *SSEnv) FinalizeSnapshot(msg fileutil.Marshaler) error { finalizeLock.Lock() defer finalizeLock.Unlock() if err := se.createFlagFile(msg); err != nil { @@ -209,7 +207,7 @@ func (se *SSEnv) RemoveFinalDir() error { } // SaveSSMetadata saves the metadata of the snapshot file. -func (se *SSEnv) SaveSSMetadata(msg proto.Message) error { +func (se *SSEnv) SaveSSMetadata(msg fileutil.Marshaler) error { err := fileutil.CreateFlagFile(se.tmpDir, SnapshotMetadataFilename, msg, se.fs) return err @@ -278,7 +276,7 @@ func (se *SSEnv) renameTempDirToFinalDir() error { return fileutil.SyncDir(se.rootDir, se.fs) } -func (se *SSEnv) createFlagFile(msg proto.Message) error { +func (se *SSEnv) createFlagFile(msg fileutil.Marshaler) error { return fileutil.CreateFlagFile(se.tmpDir, fileutil.SnapshotFlagFilename, msg, se.fs) } diff --git a/internal/tests/concurrentkv.go b/internal/tests/concurrentkv.go index f105b4dc8..fb8afb0d3 100644 --- a/internal/tests/concurrentkv.go +++ b/internal/tests/concurrentkv.go @@ -27,7 +27,6 @@ import ( "time" "unsafe" - "github.com/golang/protobuf/proto" "github.com/lni/dragonboat/v3/internal/tests/kvpb" sm "github.com/lni/dragonboat/v3/statemachine" ) @@ -89,7 +88,7 @@ func (s *ConcurrentKVTest) Lookup(key interface{}) (interface{}, error) { func (s *ConcurrentKVTest) Update(ents []sm.Entry) ([]sm.Entry, error) { for i := 0; i < len(ents); i++ { dataKv := &kvpb.PBKV{} - err := proto.Unmarshal(ents[i].Cmd, dataKv) + err := dataKv.Unmarshal(ents[i].Cmd) if err != nil { panic(err) } diff --git a/internal/tests/kvtest.go b/internal/tests/kvtest.go index d6dd29041..e3d00c4cf 100644 --- a/internal/tests/kvtest.go +++ b/internal/tests/kvtest.go @@ -34,7 +34,6 @@ import ( "sync" "time" - "github.com/golang/protobuf/proto" "github.com/lni/dragonboat/v3/internal/tests/kvpb" sm "github.com/lni/dragonboat/v3/statemachine" "github.com/lni/goutils/random" @@ -153,7 +152,7 @@ func (s *KVTest) Update(data []byte) (sm.Result, error) { } generateRandomDelay() dataKv := s.pbkvPool.Get().(*kvpb.PBKV) - err := proto.Unmarshal(data, dataKv) + err := dataKv.Unmarshal(data) if err != nil { panic(err) }