diff --git a/system_test/e2e/auto_state.py b/system_test/e2e/auto_state.py index 5a932d9d..43dd232b 100644 --- a/system_test/e2e/auto_state.py +++ b/system_test/e2e/auto_state.py @@ -317,7 +317,7 @@ class TestAutoBackupS3(unittest.TestCase): cfg = write_random_file(json.dumps(auto_backup_cfg)) # Create a cluster with automatic backups enabled. - node = Node(RQLITED_PATH, '0', auto_backup=cfg) + node = Node(RQLITED_PATH, '0', auto_backup=cfg, raft_snap_int='300s') node.start() node.wait_for_leader() @@ -328,12 +328,22 @@ class TestAutoBackupS3(unittest.TestCase): node.wait_for_all_fsm() node.wait_for_upload(i+1) - # Restart the node, and confirm no further backups are made. + # Restart the node, and confirm no backup is uploaded just due to the restart. node.stop(graceful=True) node.start() node.wait_for_leader() node.wait_for_upload_skipped_sum(1) + # Insert a row, make sure a backup will happen now. + i = node.num_auto_backups()[0] + node.execute('INSERT INTO foo(name) VALUES("fiona")') + node.wait_for_all_fsm() + node.wait_for_upload(i+1) + + # Make sure we go back to skipping backups. + i = node.num_auto_backups()[0] + node.wait_for_upload_skipped(i+1) + delete_s3_object(access_key_id, secret_access_key_id, S3_BUCKET, path) deprovision_node(node) os.remove(cfg) diff --git a/system_test/e2e/helpers.py b/system_test/e2e/helpers.py index 08b6eb56..cef31895 100644 --- a/system_test/e2e/helpers.py +++ b/system_test/e2e/helpers.py @@ -393,6 +393,20 @@ class Node(object): n = self.num_auto_backups() raise Exception('rqlite node failed to upload backup within %d seconds (%d, %d, %d, %d)' % (timeout, n[0], n[1], n[2], n[3])) + def wait_for_upload_skipped(self, i, timeout=TIMEOUT): + ''' + Wait until the number of skipped uploads is at least as great as the given value. + ''' + t = 0 + while t < timeout: + if self.num_auto_backups()[2] >= i: + return self.num_auto_backups() + time.sleep(1) + t+=1 + n = self.num_auto_backups() + raise Exception('rqlite node failed to skip backup due sum within %d seconds (%d, %d, %d, %d)' % (timeout, n[0], n[1], n[2], n[3])) + + def wait_for_upload_skipped_sum(self, i, timeout=TIMEOUT): ''' Wait until the number of skipped sum uploads is at least as great as the given value. @@ -404,7 +418,7 @@ class Node(object): time.sleep(1) t+=1 n = self.num_auto_backups() - raise Exception('rqlite node failed to skip backup within %d seconds (%d, %d, %d, %d)' % (timeout, n[0], n[1], n[2], n[3])) + raise Exception('rqlite node failed to skip backup due sum within %d seconds (%d, %d, %d, %d)' % (timeout, n[0], n[1], n[2], n[3])) def wait_for_fsm_index(self, index, timeout=TIMEOUT): '''