diff --git a/libs/autofile/group.go b/libs/autofile/group.go index 9b78c511..e747f04d 100644 --- a/libs/autofile/group.go +++ b/libs/autofile/group.go @@ -85,7 +85,6 @@ func OpenGroup(headPath string) (g *Group, err error) { Head: head, headBuf: bufio.NewWriterSize(head, 4096*10), Dir: dir, - ticker: time.NewTicker(groupCheckDuration), headSizeLimit: defaultHeadSizeLimit, totalSizeLimit: defaultTotalSizeLimit, minIndex: 0, @@ -102,6 +101,7 @@ func OpenGroup(headPath string) (g *Group, err error) { // OnStart implements Service by starting the goroutine that checks file and // group limits. func (g *Group) OnStart() error { + g.ticker = time.NewTicker(groupCheckDuration) go g.processTicks() return nil } diff --git a/libs/autofile/group_test.go b/libs/autofile/group_test.go index d6b10a42..d87bdba8 100644 --- a/libs/autofile/group_test.go +++ b/libs/autofile/group_test.go @@ -16,23 +16,25 @@ import ( cmn "github.com/tendermint/tendermint/libs/common" ) -// NOTE: Returned group has ticker stopped -func createTestGroup(t *testing.T, headSizeLimit int64) *Group { +func createTestGroupWithHeadSizeLimit(t *testing.T, headSizeLimit int64) *Group { testID := cmn.RandStr(12) testDir := "_test_" + testID err := cmn.EnsureDir(testDir, 0700) require.NoError(t, err, "Error creating dir") + headPath := testDir + "/myfile" g, err := OpenGroup(headPath) require.NoError(t, err, "Error opening Group") - g.SetHeadSizeLimit(headSizeLimit) - g.ticker.Stop() require.NotEqual(t, nil, g, "Failed to create Group") + + g.SetHeadSizeLimit(headSizeLimit) + return g } func destroyTestGroup(t *testing.T, g *Group) { g.Close() + err := os.RemoveAll(g.Dir) require.NoError(t, err, "Error removing test Group directory") } @@ -45,7 +47,7 @@ func assertGroupInfo(t *testing.T, gInfo GroupInfo, minIndex, maxIndex int, tota } func TestCheckHeadSizeLimit(t *testing.T) { - g := createTestGroup(t, 1000*1000) + g := createTestGroupWithHeadSizeLimit(t, 1000*1000) // At first, there are no files. assertGroupInfo(t, g.ReadGroupInfo(), 0, 0, 0, 0) @@ -107,7 +109,7 @@ func TestCheckHeadSizeLimit(t *testing.T) { } func TestSearch(t *testing.T) { - g := createTestGroup(t, 10*1000) + g := createTestGroupWithHeadSizeLimit(t, 10*1000) // Create some files in the group that have several INFO lines in them. // Try to put the INFO lines in various spots. @@ -208,7 +210,7 @@ func TestSearch(t *testing.T) { } func TestRotateFile(t *testing.T) { - g := createTestGroup(t, 0) + g := createTestGroupWithHeadSizeLimit(t, 0) g.WriteLine("Line 1") g.WriteLine("Line 2") g.WriteLine("Line 3") @@ -238,7 +240,7 @@ func TestRotateFile(t *testing.T) { } func TestFindLast1(t *testing.T) { - g := createTestGroup(t, 0) + g := createTestGroupWithHeadSizeLimit(t, 0) g.WriteLine("Line 1") g.WriteLine("Line 2") @@ -262,7 +264,7 @@ func TestFindLast1(t *testing.T) { } func TestFindLast2(t *testing.T) { - g := createTestGroup(t, 0) + g := createTestGroupWithHeadSizeLimit(t, 0) g.WriteLine("Line 1") g.WriteLine("Line 2") @@ -286,7 +288,7 @@ func TestFindLast2(t *testing.T) { } func TestFindLast3(t *testing.T) { - g := createTestGroup(t, 0) + g := createTestGroupWithHeadSizeLimit(t, 0) g.WriteLine("Line 1") g.WriteLine("# a") @@ -310,7 +312,7 @@ func TestFindLast3(t *testing.T) { } func TestFindLast4(t *testing.T) { - g := createTestGroup(t, 0) + g := createTestGroupWithHeadSizeLimit(t, 0) g.WriteLine("Line 1") g.WriteLine("Line 2") @@ -332,7 +334,7 @@ func TestFindLast4(t *testing.T) { } func TestWrite(t *testing.T) { - g := createTestGroup(t, 0) + g := createTestGroupWithHeadSizeLimit(t, 0) written := []byte("Medusa") g.Write(written) @@ -353,7 +355,7 @@ func TestWrite(t *testing.T) { // test that Read reads the required amount of bytes from all the files in the // group and returns no error if n == size of the given slice. func TestGroupReaderRead(t *testing.T) { - g := createTestGroup(t, 0) + g := createTestGroupWithHeadSizeLimit(t, 0) professor := []byte("Professor Monster") g.Write(professor) @@ -382,7 +384,7 @@ func TestGroupReaderRead(t *testing.T) { // test that Read returns an error if number of bytes read < size of // the given slice. Subsequent call should return 0, io.EOF. func TestGroupReaderRead2(t *testing.T) { - g := createTestGroup(t, 0) + g := createTestGroupWithHeadSizeLimit(t, 0) professor := []byte("Professor Monster") g.Write(professor) @@ -413,7 +415,7 @@ func TestGroupReaderRead2(t *testing.T) { } func TestMinIndex(t *testing.T) { - g := createTestGroup(t, 0) + g := createTestGroupWithHeadSizeLimit(t, 0) assert.Zero(t, g.MinIndex(), "MinIndex should be zero at the beginning") @@ -422,7 +424,7 @@ func TestMinIndex(t *testing.T) { } func TestMaxIndex(t *testing.T) { - g := createTestGroup(t, 0) + g := createTestGroupWithHeadSizeLimit(t, 0) assert.Zero(t, g.MaxIndex(), "MaxIndex should be zero at the beginning")