mirror of
https://github.com/tendermint/tendermint.git
synced 2026-09-19 22:44:24 +00:00
rename WAL#Flush to WAL#FlushAndSync (#3345)
* rename WAL#Flush to WAL#FlushAndSync - rename auto#Flush to auto#FlushAndSync - cleanup WAL interface to not leak implementation details! * remove Group() * add WALReader interface and return it in SearchForEndHeight() - add interface assertions Refs #3337 * replace WALReader with io.ReadCloser
This commit is contained in:
@@ -70,7 +70,7 @@ func main() {
|
||||
for {
|
||||
n, err := os.Stdin.Read(buf)
|
||||
group.Write(buf[:n])
|
||||
group.Flush()
|
||||
group.FlushAndSync()
|
||||
if err != nil {
|
||||
group.Stop()
|
||||
if err == io.EOF {
|
||||
|
||||
+10
-8
@@ -131,21 +131,23 @@ func GroupTotalSizeLimit(limit int64) func(*Group) {
|
||||
}
|
||||
}
|
||||
|
||||
// OnStart implements Service by starting the goroutine that checks file and
|
||||
// group limits.
|
||||
// OnStart implements cmn.Service by starting the goroutine that checks file
|
||||
// and group limits.
|
||||
func (g *Group) OnStart() error {
|
||||
g.ticker = time.NewTicker(g.groupCheckDuration)
|
||||
go g.processTicks()
|
||||
return nil
|
||||
}
|
||||
|
||||
// OnStop implements Service by stopping the goroutine described above.
|
||||
// OnStop implements cmn.Service by stopping the goroutine described above.
|
||||
// NOTE: g.Head must be closed separately using Close.
|
||||
func (g *Group) OnStop() {
|
||||
g.ticker.Stop()
|
||||
g.Flush() // flush any uncommitted data
|
||||
g.FlushAndSync()
|
||||
}
|
||||
|
||||
// Wait blocks until all internal goroutines are finished. Supposed to be
|
||||
// called after Stop.
|
||||
func (g *Group) Wait() {
|
||||
// wait for processTicks routine to finish
|
||||
<-g.doneProcessTicks
|
||||
@@ -153,7 +155,7 @@ func (g *Group) Wait() {
|
||||
|
||||
// Close closes the head file. The group must be stopped by this moment.
|
||||
func (g *Group) Close() {
|
||||
g.Flush() // flush any uncommitted data
|
||||
g.FlushAndSync()
|
||||
|
||||
g.mtx.Lock()
|
||||
_ = g.Head.closeFile()
|
||||
@@ -216,9 +218,9 @@ func (g *Group) Buffered() int {
|
||||
return g.headBuf.Buffered()
|
||||
}
|
||||
|
||||
// Flush writes any buffered data to the underlying file and commits the
|
||||
// current content of the file to stable storage.
|
||||
func (g *Group) Flush() error {
|
||||
// FlushAndSync writes any buffered data to the underlying file and commits the
|
||||
// current content of the file to stable storage (fsync).
|
||||
func (g *Group) FlushAndSync() error {
|
||||
g.mtx.Lock()
|
||||
defer g.mtx.Unlock()
|
||||
err := g.headBuf.Flush()
|
||||
|
||||
+21
-21
@@ -55,7 +55,7 @@ func TestCheckHeadSizeLimit(t *testing.T) {
|
||||
err := g.WriteLine(cmn.RandStr(999))
|
||||
require.NoError(t, err, "Error appending to head")
|
||||
}
|
||||
g.Flush()
|
||||
g.FlushAndSync()
|
||||
assertGroupInfo(t, g.ReadGroupInfo(), 0, 0, 999000, 999000)
|
||||
|
||||
// Even calling checkHeadSizeLimit manually won't rotate it.
|
||||
@@ -65,7 +65,7 @@ func TestCheckHeadSizeLimit(t *testing.T) {
|
||||
// Write 1000 more bytes.
|
||||
err := g.WriteLine(cmn.RandStr(999))
|
||||
require.NoError(t, err, "Error appending to head")
|
||||
g.Flush()
|
||||
g.FlushAndSync()
|
||||
|
||||
// Calling checkHeadSizeLimit this time rolls it.
|
||||
g.checkHeadSizeLimit()
|
||||
@@ -74,7 +74,7 @@ func TestCheckHeadSizeLimit(t *testing.T) {
|
||||
// Write 1000 more bytes.
|
||||
err = g.WriteLine(cmn.RandStr(999))
|
||||
require.NoError(t, err, "Error appending to head")
|
||||
g.Flush()
|
||||
g.FlushAndSync()
|
||||
|
||||
// Calling checkHeadSizeLimit does nothing.
|
||||
g.checkHeadSizeLimit()
|
||||
@@ -85,7 +85,7 @@ func TestCheckHeadSizeLimit(t *testing.T) {
|
||||
err = g.WriteLine(cmn.RandStr(999))
|
||||
require.NoError(t, err, "Error appending to head")
|
||||
}
|
||||
g.Flush()
|
||||
g.FlushAndSync()
|
||||
assertGroupInfo(t, g.ReadGroupInfo(), 0, 1, 2000000, 1000000)
|
||||
|
||||
// Calling checkHeadSizeLimit rolls it again.
|
||||
@@ -95,7 +95,7 @@ func TestCheckHeadSizeLimit(t *testing.T) {
|
||||
// Write 1000 more bytes.
|
||||
_, err = g.Head.Write([]byte(cmn.RandStr(999) + "\n"))
|
||||
require.NoError(t, err, "Error appending to head")
|
||||
g.Flush()
|
||||
g.FlushAndSync()
|
||||
assertGroupInfo(t, g.ReadGroupInfo(), 0, 2, 2001000, 1000)
|
||||
|
||||
// Calling checkHeadSizeLimit does nothing.
|
||||
@@ -212,12 +212,12 @@ func TestRotateFile(t *testing.T) {
|
||||
g.WriteLine("Line 1")
|
||||
g.WriteLine("Line 2")
|
||||
g.WriteLine("Line 3")
|
||||
g.Flush()
|
||||
g.FlushAndSync()
|
||||
g.RotateFile()
|
||||
g.WriteLine("Line 4")
|
||||
g.WriteLine("Line 5")
|
||||
g.WriteLine("Line 6")
|
||||
g.Flush()
|
||||
g.FlushAndSync()
|
||||
|
||||
// Read g.Head.Path+"000"
|
||||
body1, err := ioutil.ReadFile(g.Head.Path + ".000")
|
||||
@@ -244,13 +244,13 @@ func TestFindLast1(t *testing.T) {
|
||||
g.WriteLine("Line 2")
|
||||
g.WriteLine("# a")
|
||||
g.WriteLine("Line 3")
|
||||
g.Flush()
|
||||
g.FlushAndSync()
|
||||
g.RotateFile()
|
||||
g.WriteLine("Line 4")
|
||||
g.WriteLine("Line 5")
|
||||
g.WriteLine("Line 6")
|
||||
g.WriteLine("# b")
|
||||
g.Flush()
|
||||
g.FlushAndSync()
|
||||
|
||||
match, found, err := g.FindLast("#")
|
||||
assert.NoError(t, err)
|
||||
@@ -267,14 +267,14 @@ func TestFindLast2(t *testing.T) {
|
||||
g.WriteLine("Line 1")
|
||||
g.WriteLine("Line 2")
|
||||
g.WriteLine("Line 3")
|
||||
g.Flush()
|
||||
g.FlushAndSync()
|
||||
g.RotateFile()
|
||||
g.WriteLine("# a")
|
||||
g.WriteLine("Line 4")
|
||||
g.WriteLine("Line 5")
|
||||
g.WriteLine("# b")
|
||||
g.WriteLine("Line 6")
|
||||
g.Flush()
|
||||
g.FlushAndSync()
|
||||
|
||||
match, found, err := g.FindLast("#")
|
||||
assert.NoError(t, err)
|
||||
@@ -293,12 +293,12 @@ func TestFindLast3(t *testing.T) {
|
||||
g.WriteLine("Line 2")
|
||||
g.WriteLine("# b")
|
||||
g.WriteLine("Line 3")
|
||||
g.Flush()
|
||||
g.FlushAndSync()
|
||||
g.RotateFile()
|
||||
g.WriteLine("Line 4")
|
||||
g.WriteLine("Line 5")
|
||||
g.WriteLine("Line 6")
|
||||
g.Flush()
|
||||
g.FlushAndSync()
|
||||
|
||||
match, found, err := g.FindLast("#")
|
||||
assert.NoError(t, err)
|
||||
@@ -315,12 +315,12 @@ func TestFindLast4(t *testing.T) {
|
||||
g.WriteLine("Line 1")
|
||||
g.WriteLine("Line 2")
|
||||
g.WriteLine("Line 3")
|
||||
g.Flush()
|
||||
g.FlushAndSync()
|
||||
g.RotateFile()
|
||||
g.WriteLine("Line 4")
|
||||
g.WriteLine("Line 5")
|
||||
g.WriteLine("Line 6")
|
||||
g.Flush()
|
||||
g.FlushAndSync()
|
||||
|
||||
match, found, err := g.FindLast("#")
|
||||
assert.NoError(t, err)
|
||||
@@ -336,7 +336,7 @@ func TestWrite(t *testing.T) {
|
||||
|
||||
written := []byte("Medusa")
|
||||
g.Write(written)
|
||||
g.Flush()
|
||||
g.FlushAndSync()
|
||||
|
||||
read := make([]byte, len(written))
|
||||
gr, err := g.NewReader(0)
|
||||
@@ -357,11 +357,11 @@ func TestGroupReaderRead(t *testing.T) {
|
||||
|
||||
professor := []byte("Professor Monster")
|
||||
g.Write(professor)
|
||||
g.Flush()
|
||||
g.FlushAndSync()
|
||||
g.RotateFile()
|
||||
frankenstein := []byte("Frankenstein's Monster")
|
||||
g.Write(frankenstein)
|
||||
g.Flush()
|
||||
g.FlushAndSync()
|
||||
|
||||
totalWrittenLength := len(professor) + len(frankenstein)
|
||||
read := make([]byte, totalWrittenLength)
|
||||
@@ -386,12 +386,12 @@ func TestGroupReaderRead2(t *testing.T) {
|
||||
|
||||
professor := []byte("Professor Monster")
|
||||
g.Write(professor)
|
||||
g.Flush()
|
||||
g.FlushAndSync()
|
||||
g.RotateFile()
|
||||
frankenstein := []byte("Frankenstein's Monster")
|
||||
frankensteinPart := []byte("Frankenstein")
|
||||
g.Write(frankensteinPart) // note writing only a part
|
||||
g.Flush()
|
||||
g.FlushAndSync()
|
||||
|
||||
totalLength := len(professor) + len(frankenstein)
|
||||
read := make([]byte, totalLength)
|
||||
@@ -427,7 +427,7 @@ func TestMaxIndex(t *testing.T) {
|
||||
assert.Zero(t, g.MaxIndex(), "MaxIndex should be zero at the beginning")
|
||||
|
||||
g.WriteLine("Line 1")
|
||||
g.Flush()
|
||||
g.FlushAndSync()
|
||||
g.RotateFile()
|
||||
|
||||
assert.Equal(t, 1, g.MaxIndex(), "MaxIndex should point to the last file")
|
||||
|
||||
Reference in New Issue
Block a user