mirror of
				https://github.com/taigrr/bitcask
				synced 2025-01-18 04:03:17 -08:00 
			
		
		
		
	Fix a bug when MaxValueSize == 0 on Merge operations
This commit is contained in:
		
							parent
							
								
									29e1cf648b
								
							
						
					
					
						commit
						8a60b5a370
					
				| @ -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 | ||||
| 	} | ||||
|  | ||||
							
								
								
									
										2
									
								
								go.mod
									
									
									
									
									
								
							
							
						
						
									
										2
									
								
								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 | ||||
| ) | ||||
|  | ||||
							
								
								
									
										5
									
								
								go.sum
									
									
									
									
									
								
							
							
						
						
									
										5
									
								
								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= | ||||
|  | ||||
| @ -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 | ||||
| 	} | ||||
| 
 | ||||
|  | ||||
							
								
								
									
										13
									
								
								options.go
									
									
									
									
									
								
							
							
						
						
									
										13
									
								
								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. | ||||
|  | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user