148
149
// TestReadBranchByPagination test
151
>
treeID := uuid.NewString()
152
>
bi, err := s.newHistoryBranch(treeID)
153
>
s.Nil(err)
154
>
155
>
historyW := &historypb.History{}
156
>
events := s.genRandomEvents([]int64{1, 2, 3}, 0)
157
>
err = s.appendNewBranchAndFirstNode(bi, events, 1, "branchInfo")
158
>
s.Nil(err)
159
>
historyW.Events = events
160
>
161
>
events = s.genRandomEvents([]int64{4}, 0)
162
>
err = s.appendNewNode(bi, events, 2)
163
>
s.Nil(err)
164
>
historyW.Events = append(historyW.Events, events...)
165
>
166
>
events = s.genRandomEvents([]int64{5, 6, 7, 8}, 4)
167
>
err = s.appendNewNode(bi, events, 6)
168
>
s.Nil(err)
169
>
historyW.Events = append(historyW.Events, events...)
170
>
171
>
// stale event batch
172
>
events = s.genRandomEvents([]int64{6, 7, 8}, 1)
173
>
err = s.appendNewNode(bi, events, 3)
174
>
s.Nil(err)
175
>
// stale event batch
176
>
events = s.genRandomEvents([]int64{6, 7, 8}, 2)
177
>
err = s.appendNewNode(bi, events, 4)
178
>
s.Nil(err)
179
>
// stale event batch
180
>
events = s.genRandomEvents([]int64{6, 7, 8}, 3)
181
>
err = s.appendNewNode(bi, events, 5)
182
>
s.Nil(err)
183
>
184
>
events = s.genRandomEvents([]int64{9}, 4)
185
>
err = s.appendNewNode(bi, events, 7)
186
>
s.Nil(err)
187
>
historyW.Events = append(historyW.Events, events...)
188
>
189
>
// Start to read from middle, should not return error, but the first batch should be ignored by application layer
190
>
req := &p.ReadHistoryBranchRequest{
191
>
BranchToken: bi,
192
>
MinEventID: 6,
193
>
MaxEventID: 10,
194
>
PageSize: 4,
195
>
NextPageToken: nil,
196
>
ShardID: s.ShardInfo.GetShardId(),
197
>
}
198
>
// first page
199
>
resp, err := s.ExecutionManager.ReadHistoryBranch(s.ctx, req)
200
>
s.Nil(err)
201
>
s.Equal(4, len(resp.HistoryEvents))
202
>
s.Equal(int64(6), resp.HistoryEvents[0].GetEventId())
203
>
204
>
events = s.genRandomEvents([]int64{10}, 4)
205
>
err = s.appendNewNode(bi, events, 8)
206
>
s.Nil(err)
207
>
historyW.Events = append(historyW.Events, events...)
208
>
209
>
events = s.genRandomEvents([]int64{11}, 4)
210
>
err = s.appendNewNode(bi, events, 9)
211
>
s.Nil(err)
212
>
historyW.Events = append(historyW.Events, events...)
213
>
214
>
events = s.genRandomEvents([]int64{12}, 4)
215
>
err = s.appendNewNode(bi, events, 10)
216
>
s.Nil(err)
217
>
historyW.Events = append(historyW.Events, events...)
218
>
219
>
events = s.genRandomEvents([]int64{13, 14, 15}, 4)
220
>
err = s.appendNewNode(bi, events, 11)
221
>
s.Nil(err)
222
>
// we don't append this batch because we will fork from 13
223
>
// historyW.Events = append(historyW.Events, events...)
224
>
225
>
// fork from here
226
>
bi2, err := s.fork(bi, 13)
227
>
s.Nil(err)
228
>
229
>
events = s.genRandomEvents([]int64{13}, 4)
230
>
err = s.appendNewNode(bi2, events, 12)
231
>
s.Nil(err)
232
>
historyW.Events = append(historyW.Events, events...)
233
>
234
>
events = s.genRandomEvents([]int64{14}, 4)
235
>
err = s.appendNewNode(bi2, events, 13)
236
>
s.Nil(err)
237
>
historyW.Events = append(historyW.Events, events...)
238
>
239
>
events = s.genRandomEvents([]int64{15, 16, 17}, 4)
240
>
err = s.appendNewNode(bi2, events, 14)
241
>
s.Nil(err)
242
>
historyW.Events = append(historyW.Events, events...)
243
>
244
>
events = s.genRandomEvents([]int64{18, 19, 20}, 4)
245
>
err = s.appendNewNode(bi2, events, 15)
246
>
s.Nil(err)
247
>
historyW.Events = append(historyW.Events, events...)
248
>
249
>
// read branch to verify
250
>
historyR := &historypb.History{}
251
>
252
>
req = &p.ReadHistoryBranchRequest{
253
>
BranchToken: bi2,
254
>
MinEventID: 1,
255
>
MaxEventID: 21,
256
>
PageSize: 3,
257
>
NextPageToken: nil,
258
>
ShardID: s.ShardInfo.GetShardId(),
259
>
}
260
>
261
>
// first page
262
>
resp, err = s.ExecutionManager.ReadHistoryBranch(s.ctx, req)
263
>
s.Nil(err)
264
>
265
>
s.Equal(8, len(resp.HistoryEvents))
266
>
historyR.Events = append(historyR.Events, resp.HistoryEvents...)
267
>
req.NextPageToken = resp.NextPageToken
268
>
269
>
// this page is all stale batches
270
>
// doe to difference in Cassandra / MySQL pagination
271
>
// the stale event batch may get returned
272
>
resp, err = s.ExecutionManager.ReadHistoryBranch(s.ctx, req)
273
>
s.Nil(err)
274
>
historyR.Events = append(historyR.Events, resp.HistoryEvents...)
275
>
req.NextPageToken = resp.NextPageToken
276
>
if len(resp.HistoryEvents) == 0 {
277
>
// second page
278
>
resp, err = s.ExecutionManager.ReadHistoryBranch(s.ctx, req)
279
>
s.Nil(err)
280
>
s.Equal(3, len(resp.HistoryEvents))
281
>
historyR.Events = append(historyR.Events, resp.HistoryEvents...)
282
>
req.NextPageToken = resp.NextPageToken
283
>
} else if len(resp.HistoryEvents) == 3 {
284
// no op
285
} else {