wal: Export SegmentSizeBytes as a variable

In test situations, it's useful to create smaller than usual WAL files
to test rotation and to avoid the overhead of preallocation on old-style
filesystems that don't handle it efficiently. This commit changes
segmentSizeBytes to an exported variable so that tests can override it
from an init() function.
This commit is contained in:
Aaron Lehmann 2016-08-09 15:29:40 -07:00
parent 88a77f30e1
commit 2b996b6038

View File

@ -41,16 +41,18 @@ const (
crcType
snapshotType
// the expected size of each wal segment file.
// the actual size might be bigger than it.
segmentSizeBytes = 64 * 1000 * 1000 // 64MB
// warnSyncDuration is the amount of time allotted to an fsync before
// logging a warning
warnSyncDuration = time.Second
)
var (
// SegmentSizeBytes is the preallocated size of each wal segment file.
// The actual size might be larger than this. In general, the default
// value should be used, but this is defined as an exported variable
// so that tests can set a different segment size.
SegmentSizeBytes int64 = 64 * 1000 * 1000 // 64MB
plog = capnslog.NewPackageLogger("github.com/coreos/etcd", "wal")
ErrMetadataConflict = errors.New("wal: conflicting metadata found")
@ -109,7 +111,7 @@ func Create(dirpath string, metadata []byte) (*WAL, error) {
if _, err := f.Seek(0, os.SEEK_END); err != nil {
return nil, err
}
if err := fileutil.Preallocate(f.File, segmentSizeBytes, true); err != nil {
if err := fileutil.Preallocate(f.File, SegmentSizeBytes, true); err != nil {
return nil, err
}
@ -219,7 +221,7 @@ func openAtIndex(dirpath string, snap walpb.Snapshot, write bool) (*WAL, error)
closer()
return nil, err
}
w.fp = newFilePipeline(w.dir, segmentSizeBytes)
w.fp = newFilePipeline(w.dir, SegmentSizeBytes)
}
return w, nil
@ -526,7 +528,7 @@ func (w *WAL) Save(st raftpb.HardState, ents []raftpb.Entry) error {
if err != nil {
return err
}
if curOff < segmentSizeBytes {
if curOff < SegmentSizeBytes {
if mustSync {
return w.sync()
}