Skip to content

Commit 7461da5

Browse files
authored
Harden sink / metric creation against transient errors. (#6180)
Closes #5931.
1 parent 7a6b602 commit 7461da5

File tree

1 file changed

+36
-10
lines changed

1 file changed

+36
-10
lines changed

tests/system/test_system.py

Lines changed: 36 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -330,7 +330,10 @@ def test_create_metric(self):
330330
metric = Config.CLIENT.metric(
331331
METRIC_NAME, DEFAULT_FILTER, DEFAULT_DESCRIPTION)
332332
self.assertFalse(metric.exists())
333-
metric.create()
333+
retry = RetryErrors(Conflict)
334+
335+
retry(metric.create)()
336+
334337
self.to_delete.append(metric)
335338
self.assertTrue(metric.exists())
336339

@@ -341,11 +344,14 @@ def test_list_metrics(self):
341344
self.assertFalse(metric.exists())
342345
before_metrics = list(Config.CLIENT.list_metrics())
343346
before_names = set(before.name for before in before_metrics)
344-
self.failIf(metric.name in before_names)
345-
metric.create()
347+
self.assertFalse(metric.name in before_names)
348+
retry = RetryErrors(Conflict)
349+
retry(metric.create)()
346350
self.to_delete.append(metric)
347351
self.assertTrue(metric.exists())
352+
348353
after_metrics = list(Config.CLIENT.list_metrics())
354+
349355
after_names = set(after.name for after in after_metrics)
350356
self.assertTrue(metric.name in after_names)
351357

@@ -359,7 +365,9 @@ def test_reload_metric(self):
359365
self.to_delete.append(metric)
360366
metric.filter_ = 'logName:other'
361367
metric.description = 'local changes'
368+
362369
metric.reload()
370+
363371
self.assertEqual(metric.filter_, DEFAULT_FILTER)
364372
self.assertEqual(metric.description, DEFAULT_DESCRIPTION)
365373

@@ -375,7 +383,9 @@ def test_update_metric(self):
375383
self.to_delete.append(metric)
376384
metric.filter_ = NEW_FILTER
377385
metric.description = NEW_DESCRIPTION
386+
378387
metric.update()
388+
379389
after_metrics = list(Config.CLIENT.list_metrics())
380390
after_info = {metric.name: metric for metric in after_metrics}
381391
after = after_info[METRIC_NAME]
@@ -406,9 +416,12 @@ def test_create_sink_storage_bucket(self):
406416
uri = self._init_storage_bucket()
407417
SINK_NAME = 'test-create-sink-bucket%s' % (_RESOURCE_ID,)
408418

419+
retry = RetryErrors((Conflict, ServiceUnavailable), max_tries=10)
409420
sink = Config.CLIENT.sink(SINK_NAME, DEFAULT_FILTER, uri)
410421
self.assertFalse(sink.exists())
411-
sink.create()
422+
423+
retry(sink.create)()
424+
412425
self.to_delete.append(sink)
413426
self.assertTrue(sink.exists())
414427

@@ -434,9 +447,12 @@ def test_create_sink_pubsub_topic(self):
434447

435448
TOPIC_URI = 'pubsub.googleapis.com/%s' % (topic_path,)
436449

450+
retry = RetryErrors((Conflict, ServiceUnavailable), max_tries=10)
437451
sink = Config.CLIENT.sink(SINK_NAME, DEFAULT_FILTER, TOPIC_URI)
438452
self.assertFalse(sink.exists())
439-
sink.create()
453+
454+
retry(sink.create)()
455+
440456
self.to_delete.append(sink)
441457
self.assertTrue(sink.exists())
442458

@@ -465,45 +481,53 @@ def _init_bigquery_dataset(self):
465481

466482
def test_create_sink_bigquery_dataset(self):
467483
SINK_NAME = 'test-create-sink-dataset%s' % (_RESOURCE_ID,)
484+
retry = RetryErrors((Conflict, ServiceUnavailable), max_tries=10)
468485
uri = self._init_bigquery_dataset()
469486
sink = Config.CLIENT.sink(SINK_NAME, DEFAULT_FILTER, uri)
470487
self.assertFalse(sink.exists())
471-
sink.create()
488+
489+
retry(sink.create)()
490+
472491
self.to_delete.append(sink)
473492
self.assertTrue(sink.exists())
474493

475494
def test_list_sinks(self):
476495
SINK_NAME = 'test-list-sinks%s' % (_RESOURCE_ID,)
477496
uri = self._init_storage_bucket()
497+
retry = RetryErrors((Conflict, ServiceUnavailable), max_tries=10)
478498
sink = Config.CLIENT.sink(SINK_NAME, DEFAULT_FILTER, uri)
479499
self.assertFalse(sink.exists())
480500
before_sinks = list(Config.CLIENT.list_sinks())
481501
before_names = set(before.name for before in before_sinks)
482-
self.failIf(sink.name in before_names)
483-
sink.create()
502+
self.assertFalse(sink.name in before_names)
503+
retry(sink.create)()
484504
self.to_delete.append(sink)
485505
self.assertTrue(sink.exists())
506+
486507
after_sinks = list(Config.CLIENT.list_sinks())
508+
487509
after_names = set(after.name for after in after_sinks)
488510
self.assertTrue(sink.name in after_names)
489511

490512
def test_reload_sink(self):
491513
SINK_NAME = 'test-reload-sink%s' % (_RESOURCE_ID,)
492-
retry = RetryErrors(Conflict)
514+
retry = RetryErrors((Conflict, ServiceUnavailable), max_tries=10)
493515
uri = self._init_bigquery_dataset()
494516
sink = Config.CLIENT.sink(SINK_NAME, DEFAULT_FILTER, uri)
495517
self.assertFalse(sink.exists())
496518
retry(sink.create)()
497519
self.to_delete.append(sink)
498520
sink.filter_ = 'BOGUS FILTER'
499521
sink.destination = 'BOGUS DESTINATION'
522+
500523
sink.reload()
524+
501525
self.assertEqual(sink.filter_, DEFAULT_FILTER)
502526
self.assertEqual(sink.destination, uri)
503527

504528
def test_update_sink(self):
505529
SINK_NAME = 'test-update-sink%s' % (_RESOURCE_ID,)
506-
retry = RetryErrors(Conflict, max_tries=10)
530+
retry = RetryErrors((Conflict, ServiceUnavailable), max_tries=10)
507531
bucket_uri = self._init_storage_bucket()
508532
dataset_uri = self._init_bigquery_dataset()
509533
UPDATED_FILTER = 'logName:syslog'
@@ -513,7 +537,9 @@ def test_update_sink(self):
513537
self.to_delete.append(sink)
514538
sink.filter_ = UPDATED_FILTER
515539
sink.destination = dataset_uri
540+
516541
sink.update()
542+
517543
self.assertEqual(sink.filter_, UPDATED_FILTER)
518544
self.assertEqual(sink.destination, dataset_uri)
519545

0 commit comments

Comments
 (0)