Skip to content

Commit 199bd61

Browse files
committed
Add retry logic to integration tests for eventual consistent datastore queries
1 parent cfc0035 commit 199bd61

1 file changed

Lines changed: 24 additions & 11 deletions

File tree

google-cloud-datastore/src/test/java/com/google/cloud/datastore/it/ITDatastoreTest.java

Lines changed: 24 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -194,14 +194,20 @@ public void testTransactionWithRead() {
194194
}
195195

196196
@Test
197-
public void testTransactionWithQuery() {
197+
public void testTransactionWithQuery() throws InterruptedException {
198198
Query<Entity> query = Query.entityQueryBuilder()
199199
.kind(KIND2)
200200
.filter(PropertyFilter.hasAncestor(KEY2))
201201
.namespace(NAMESPACE)
202202
.build();
203203
Transaction transaction = DATASTORE.newTransaction();
204204
QueryResults<Entity> results = transaction.run(query);
205+
while (Iterators.size(results) < 1) {
206+
Thread.sleep(500);
207+
results = DATASTORE.run(query);
208+
}
209+
results = DATASTORE.run(query);
210+
assertTrue(results.hasNext());
205211
assertEquals(ENTITY2, results.next());
206212
assertFalse(results.hasNext());
207213
transaction.add(ENTITY3);
@@ -210,7 +216,14 @@ public void testTransactionWithQuery() {
210216

211217
transaction = DATASTORE.newTransaction();
212218
results = transaction.run(query);
219+
while (Iterators.size(results) < 1) {
220+
Thread.sleep(500);
221+
results = DATASTORE.run(query);
222+
}
223+
results = DATASTORE.run(query);
224+
assertTrue(results.hasNext());
213225
assertEquals(ENTITY2, results.next());
226+
assertFalse(results.hasNext());
214227
transaction.delete(ENTITY3.key());
215228
// update entity2 during the transaction
216229
DATASTORE.put(Entity.builder(ENTITY2).clear().build());
@@ -312,8 +325,8 @@ public void testRunGqlQueryNoCasting() throws InterruptedException {
312325
.build();
313326
QueryResults<Entity> results1 = DATASTORE.run(query1);
314327
while (Iterators.size(results1) < 1) {
315-
results1 = DATASTORE.run(query1);
316328
Thread.sleep(500);
329+
results1 = DATASTORE.run(query1);
317330
}
318331
results1 = DATASTORE.run(query1);
319332
assertTrue(results1.hasNext());
@@ -327,8 +340,8 @@ public void testRunGqlQueryNoCasting() throws InterruptedException {
327340
.build();
328341
QueryResults<? extends Entity> results2 = DATASTORE.run(query2);
329342
while (Iterators.size(results2) < 2) {
330-
results2 = DATASTORE.run(query2);
331343
Thread.sleep(500);
344+
results2 = DATASTORE.run(query2);
332345
}
333346
results2 = DATASTORE.run(query2);
334347
assertTrue(results2.hasNext());
@@ -348,8 +361,8 @@ public void testRunGqlQueryNoCasting() throws InterruptedException {
348361
.build();
349362
QueryResults<Key> keyOnlyResults = DATASTORE.run(keyOnlyQuery);
350363
while (Iterators.size(keyOnlyResults) < 1) {
351-
keyOnlyResults = DATASTORE.run(keyOnlyQuery);
352364
Thread.sleep(500);
365+
keyOnlyResults = DATASTORE.run(keyOnlyQuery);
353366
}
354367
keyOnlyResults = DATASTORE.run(keyOnlyQuery);
355368
assertTrue(keyOnlyResults.hasNext());
@@ -362,8 +375,8 @@ public void testRunGqlQueryNoCasting() throws InterruptedException {
362375
.build();
363376
QueryResults<ProjectionEntity> keyProjectionResult = DATASTORE.run(keyProjectionQuery);
364377
while (Iterators.size(keyProjectionResult) < 1) {
365-
keyProjectionResult = DATASTORE.run(keyProjectionQuery);
366378
Thread.sleep(500);
379+
keyProjectionResult = DATASTORE.run(keyProjectionQuery);
367380
}
368381
keyProjectionResult = DATASTORE.run(keyProjectionQuery);
369382
assertTrue(keyProjectionResult.hasNext());
@@ -381,8 +394,8 @@ public void testRunGqlQueryWithCasting() throws InterruptedException {
381394
.build();
382395
QueryResults<Entity> results1 = DATASTORE.run(query1);
383396
while (Iterators.size(results1) < 1) {
384-
results1 = DATASTORE.run(query1);
385397
Thread.sleep(500);
398+
results1 = DATASTORE.run(query1);
386399
}
387400
results1 = DATASTORE.run(query1);
388401
assertTrue(results1.hasNext());
@@ -394,8 +407,8 @@ public void testRunGqlQueryWithCasting() throws InterruptedException {
394407
.build();
395408
QueryResults<?> results2 = DATASTORE.run(query2);
396409
while (Iterators.size(results2) < 1) {
397-
results2 = DATASTORE.run(query2);
398410
Thread.sleep(500);
411+
results2 = DATASTORE.run(query2);
399412
}
400413
results2 = DATASTORE.run(query1);
401414
assertSame(Entity.class, results2.resultClass());
@@ -412,8 +425,8 @@ public void testRunStructuredQuery() throws InterruptedException {
412425
Query.entityQueryBuilder().kind(KIND1).orderBy(OrderBy.asc("__key__")).build();
413426
QueryResults<Entity> results1 = DATASTORE.run(query);
414427
while (Iterators.size(results1) < 1) {
415-
results1 = DATASTORE.run(query);
416428
Thread.sleep(500);
429+
results1 = DATASTORE.run(query);
417430
}
418431
results1 = DATASTORE.run(query);
419432
assertTrue(results1.hasNext());
@@ -423,8 +436,8 @@ public void testRunStructuredQuery() throws InterruptedException {
423436
Query<Key> keyOnlyQuery = Query.keyQueryBuilder().kind(KIND1).build();
424437
QueryResults<Key> results2 = DATASTORE.run(keyOnlyQuery);
425438
while (Iterators.size(results2) < 1) {
426-
results2 = DATASTORE.run(keyOnlyQuery);
427439
Thread.sleep(500);
440+
results2 = DATASTORE.run(keyOnlyQuery);
428441
}
429442
results2 = DATASTORE.run(keyOnlyQuery);
430443
assertTrue(results2.hasNext());
@@ -436,8 +449,8 @@ public void testRunStructuredQuery() throws InterruptedException {
436449
.kind(KIND1).projection("__key__").build();
437450
QueryResults<ProjectionEntity> results3 = DATASTORE.run(keyOnlyProjectionQuery);
438451
while (Iterators.size(results3) < 1) {
439-
results3 = DATASTORE.run(keyOnlyProjectionQuery);
440452
Thread.sleep(500);
453+
results3 = DATASTORE.run(keyOnlyProjectionQuery);
441454
}
442455
results3 = DATASTORE.run(keyOnlyProjectionQuery);
443456
assertTrue(results3.hasNext());
@@ -457,8 +470,8 @@ public void testRunStructuredQuery() throws InterruptedException {
457470

458471
QueryResults<ProjectionEntity> results4 = DATASTORE.run(projectionQuery);
459472
while (Iterators.size(results4) < 1) {
460-
results4 = DATASTORE.run(projectionQuery);
461473
Thread.sleep(500);
474+
results4 = DATASTORE.run(projectionQuery);
462475
}
463476
results4 = DATASTORE.run(projectionQuery);
464477
assertTrue(results4.hasNext());

0 commit comments

Comments
 (0)