diff --git a/bitcask.go b/bitcask.go index 1bf4050..af2a472 100644 --- a/bitcask.go +++ b/bitcask.go @@ -446,7 +446,7 @@ func (b *Bitcask) Merge() error { defer os.RemoveAll(temp) // Create a merged database - mdb, err := Open(temp, b.options...) + mdb, err := Open(temp, withConfig(b.config)) if err != nil { return err } diff --git a/go.mod b/go.mod index 87d4ff4..890ec3c 100644 --- a/go.mod +++ b/go.mod @@ -19,5 +19,5 @@ require ( golang.org/x/exp v0.0.0-20200228211341-fcea875c7e85 golang.org/x/sys v0.0.0-20200302150141-5c8b2ff67527 gopkg.in/ini.v1 v1.53.0 // indirect - gopkg.in/yaml.v2 v2.2.8 // indirect + gopkg.in/yaml.v2 v2.3.0 // indirect ) diff --git a/go.sum b/go.sum index 6df9484..8a9f85f 100644 --- a/go.sum +++ b/go.sum @@ -275,7 +275,6 @@ golang.org/x/sys v0.0.0-20181116152217-5ac8a444bdc5/go.mod h1:STP8DvDyc/dI5b8T5h golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190312061237-fead79001313/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190422165155-953cdadca894/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190502145724-3ef323f4f1fd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190507160741-ecd444e8653b/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190606165138-5da285871e9c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= @@ -345,8 +344,8 @@ gopkg.in/yaml.v2 v2.0.0-20170812160011-eb3733d160e7/go.mod h1:JAlM8MvJe8wmxCU4Bl gopkg.in/yaml.v2 v2.2.1/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.2.4/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= -gopkg.in/yaml.v2 v2.2.8 h1:obN1ZagJSUGI0Ek/LBmuj4SNLPfIny3KsKFopxRdj10= -gopkg.in/yaml.v2 v2.2.8/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= +gopkg.in/yaml.v2 v2.3.0 h1:clyUAQHOM3G0M3f5vQj7LuJrETvjVot3Z5el9nffUtU= +gopkg.in/yaml.v2 v2.3.0/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c h1:dUUwHk2QECo/6vqA44rthZ8ie2QXMNeKRTHCNY2nXvo= gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= diff --git a/internal/index/codec_index.go b/internal/index/codec_index.go index 6d0ff7f..3f1d006 100644 --- a/internal/index/codec_index.go +++ b/internal/index/codec_index.go @@ -34,7 +34,7 @@ func readKeyBytes(r io.Reader, maxKeySize uint32) ([]byte, error) { return nil, errors.Wrap(errTruncatedKeySize, err.Error()) } size := binary.BigEndian.Uint32(s) - if size > uint32(maxKeySize) { + if maxKeySize > 0 && size > uint32(maxKeySize) { return nil, errKeySizeTooLarge } diff --git a/options.go b/options.go index c92e5a4..86d8ee3 100644 --- a/options.go +++ b/options.go @@ -31,6 +31,19 @@ const ( // Option is a function that takes a config struct and modifies it type Option func(*config.Config) error +func withConfig(src *config.Config) Option { + return func(cfg *config.Config) error { + cfg.MaxDatafileSize = src.MaxDatafileSize + cfg.MaxKeySize = src.MaxKeySize + cfg.MaxValueSize = src.MaxValueSize + cfg.Sync = src.Sync + cfg.AutoRecovery = src.AutoRecovery + cfg.DirFileModeBeforeUmask = src.DirFileModeBeforeUmask + cfg.FileFileModeBeforeUmask = src.FileFileModeBeforeUmask + return nil + } +} + // WithAutoRecovery sets auto recovery of data and index file recreation. // IMPORTANT: This flag MUST BE used only if a proper backup was made of all // the existing datafiles.