@@ -150,13 +150,38 @@ func TestIngesterTransfer(t *testing.T) {
150
150
}, response )
151
151
}
152
152
153
+ func TestIngesterBadTransfer (t * testing.T ) {
154
+ // Start ingester in PENDING.
155
+ cfg := defaultIngesterTestConfig ()
156
+ cfg .LifecyclerConfig .ID = "ingester1"
157
+ cfg .LifecyclerConfig .Addr = "ingester1"
158
+ cfg .LifecyclerConfig .ClaimOnRollout = true
159
+ cfg .LifecyclerConfig .JoinAfter = 100 * time .Second
160
+ cfg .SearchPendingFor = 1 * time .Second
161
+ ing , err := New (cfg , nil )
162
+ require .NoError (t , err )
163
+
164
+ poll (t , 100 * time .Millisecond , ring .PENDING , func () interface {} {
165
+ return ing .lifecycler .GetState ()
166
+ })
167
+
168
+ // Now transfer 0 series to this ingester, ensure it errors.
169
+ client := ingesterClientAdapater {ingester : ing }
170
+ stream , err := client .TransferChunks (context .Background ())
171
+ require .NoError (t , err )
172
+ _ , err = stream .CloseAndRecv ()
173
+ require .Error (t , err )
174
+
175
+ // Check the ingester is still waiting.
176
+ require .Equal (t , ring .PENDING , ing .lifecycler .GetState ())
177
+ }
178
+
153
179
func numTokens (c ring.KVClient , name string ) int {
154
180
ringDesc , err := c .Get (context .Background (), ring .ConsulKey )
155
181
if err != nil {
156
182
level .Error (util .Logger ).Log ("msg" , "error reading consul" , "err" , err )
157
183
return 0
158
184
}
159
-
160
185
count := 0
161
186
for _ , token := range ringDesc .(* ring.Desc ).Tokens {
162
187
if token .Ingester == name {
0 commit comments