@@ -26,12 +26,14 @@ import (
26
26
)
27
27
28
28
func TestPeriodic (t * testing.T ) {
29
+ retentionHours := 2
30
+
29
31
fc := clockwork .NewFakeClock ()
30
32
rg := & fakeRevGetter {testutil .NewRecorderStream (), 0 }
31
33
compactable := & fakeCompactable {testutil .NewRecorderStream ()}
32
34
tb := & Periodic {
33
35
clock : fc ,
34
- periodInHour : 1 ,
36
+ periodInHour : retentionHours ,
35
37
rg : rg ,
36
38
c : compactable ,
37
39
}
@@ -40,24 +42,24 @@ func TestPeriodic(t *testing.T) {
40
42
defer tb .Stop ()
41
43
42
44
n := int (time .Hour / checkCompactionInterval )
43
- // collect 3 hours of revisions
44
- for i := 0 ; i < 3 ; i ++ {
45
+ // collect 5 hours of revisions
46
+ for i := 0 ; i < 5 ; i ++ {
45
47
// advance one hour, one revision for each interval
46
48
for j := 0 ; j < n ; j ++ {
47
- fc .Advance (checkCompactionInterval )
48
49
rg .Wait (1 )
50
+ fc .Advance (checkCompactionInterval )
49
51
}
50
- // ready to acknowledge hour "i"
51
- // block until compactor calls clock.After()
52
- fc . BlockUntil ( 1 )
53
- // unblock the After( )
54
- fc . Advance ( checkCompactionInterval )
55
- a , err := compactable . Wait ( 1 )
56
- if err != nil {
57
- t . Fatal ( err )
58
- }
59
- if ! reflect . DeepEqual ( a [0 ].Params [0 ], & pb.CompactionRequest {Revision : int64 ( i * n ) + 1 }) {
60
- t . Errorf ( "compact request = %v, want %v" , a [ 0 ]. Params [ 0 ], & pb. CompactionRequest { Revision : int64 ( i * n ) + 1 })
52
+
53
+ // compaction doesn't happen til 2 hours elapses
54
+ if i + 1 >= retentionHours {
55
+ a , err := compactable . Wait ( 1 )
56
+ if err != nil {
57
+ t . Fatal ( err )
58
+ }
59
+ expectedRevision := int64 ( 1 + ( i + 1 ) * n - retentionHours * n )
60
+ if ! reflect . DeepEqual ( a [ 0 ]. Params [ 0 ], & pb. CompactionRequest { Revision : expectedRevision }) {
61
+ t . Errorf ( "compact request = %v, want %v" , a [0 ].Params [0 ], & pb.CompactionRequest {Revision : expectedRevision })
62
+ }
61
63
}
62
64
}
63
65
}
@@ -79,8 +81,8 @@ func TestPeriodicPause(t *testing.T) {
79
81
// tb will collect 3 hours of revisions but not compact since paused
80
82
n := int (time .Hour / checkCompactionInterval )
81
83
for i := 0 ; i < 3 * n ; i ++ {
82
- fc .Advance (checkCompactionInterval )
83
84
rg .Wait (1 )
85
+ fc .Advance (checkCompactionInterval )
84
86
}
85
87
// tb ends up waiting for the clock
86
88
@@ -93,14 +95,15 @@ func TestPeriodicPause(t *testing.T) {
93
95
// tb resumes to being blocked on the clock
94
96
tb .Resume ()
95
97
96
- // unblock clock, will kick off a compaction at hour 3
98
+ // unblock clock, will kick off a compaction at hour 3:05
99
+ rg .Wait (1 )
97
100
fc .Advance (checkCompactionInterval )
98
101
a , err := compactable .Wait (1 )
99
102
if err != nil {
100
103
t .Fatal (err )
101
104
}
102
- // compact the revision from hour 2
103
- wreq := & pb.CompactionRequest {Revision : int64 (2 * n + 1 )}
105
+ // compact the revision from hour 2:05
106
+ wreq := & pb.CompactionRequest {Revision : int64 (1 + 2 * n + 1 )}
104
107
if ! reflect .DeepEqual (a [0 ].Params [0 ], wreq ) {
105
108
t .Errorf ("compact request = %v, want %v" , a [0 ].Params [0 ], wreq .Revision )
106
109
}
0 commit comments