Skip to content
This repository has been archived by the owner on Aug 25, 2023. It is now read-only.

Commit

Permalink
Merge pull request #160 from ocadotechnology/NON_JIRA_do_backup_when_…
Browse files Browse the repository at this point in the history
…size_mismatch

NON-JIRA: Make backups when table has backup made after source table …
  • Loading branch information
marcin-kolda committed Dec 10, 2019
2 parents 0adac41 + 88dfd0c commit cd859e7
Show file tree
Hide file tree
Showing 2 changed files with 37 additions and 6 deletions.
9 changes: 8 additions & 1 deletion src/backup/default_backup_predicate.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,6 @@

from src.backup.abstract_backup_predicate import \
AbstractBackupPredicate
from src.commons.exceptions import ParameterValidationException, NotFoundException


class DefaultBackupPredicate(AbstractBackupPredicate):
Expand Down Expand Up @@ -49,6 +48,14 @@ def __is_table_backup_up_to_date(self, big_query_table_metadata, last_backup):
if source_table_last_modified_time > last_backup.last_modified:
logging.info("Backup time is older than table metadata")
return False

source_table_num_bytes = big_query_table_metadata.table_size_in_bytes()
if source_table_num_bytes != last_backup.numBytes:
logging.info("Backup size is different than source. "
"Source: '%s', backup: '%s'",
source_table_num_bytes, last_backup.numBytes)
return False

return True

def __format_timestamp(self, datetime):
Expand Down
34 changes: 29 additions & 5 deletions tests/backup/test_default_backup_predicate.py
Original file line number Diff line number Diff line change
@@ -1,11 +1,9 @@
import unittest

from datetime import datetime

from google.appengine.ext import ndb
from google.appengine.ext import testbed
from mock import patch

from mock import patch, Mock
from src.backup.datastore.Backup import Backup
from src.backup.datastore.Table import Table
from src.backup.default_backup_predicate import DefaultBackupPredicate
Expand Down Expand Up @@ -114,9 +112,11 @@ def test_should_return_true_if_table_was_changed_after_last_backup(self, _):
self.assertTrue(result, "ShouldBackupPredicate should return TRUE "
"if table was changed after last backup")

@patch.object(BigQueryTableMetadata, 'table_size_in_bytes',
return_value=123)
@patch.object(BigQueryTableMetadata, 'get_last_modified_datetime',
return_value=datetime(2016, 11, 13, 15, 00))
def test_should_return_false_if_table_was_changed_at_the_same_time_when_last_backup(self, _): # nopep8 pylint: disable=C0301
def test_should_return_false_if_table_was_changed_at_the_same_time_when_last_backup(self, _1, _2): # nopep8 pylint: disable=C0301
# given
backup = Backup(
parent=self.table.key,
Expand All @@ -133,9 +133,11 @@ def test_should_return_false_if_table_was_changed_at_the_same_time_when_last_bac
"if table was change at the same time when "
"last backup was made")

@patch.object(BigQueryTableMetadata, 'table_size_in_bytes',
return_value=123)
@patch.object(BigQueryTableMetadata, 'get_last_modified_datetime',
return_value=datetime(2016, 11, 13, 14, 00))
def test_should_return_false_if_table_was_changed_before_last_backup(self, _): # nopep8 pylint: disable=C0301
def test_should_return_false_if_table_was_changed_before_last_backup(self, _1,_2): # nopep8 pylint: disable=C0301
# given
backup = Backup(
parent=self.table.key,
Expand All @@ -152,6 +154,28 @@ def test_should_return_false_if_table_was_changed_before_last_backup(self, _):
"if table was changed before "
"last backup was made")

@patch.object(BigQueryTableMetadata, 'table_size_in_bytes',
return_value=123456)
@patch.object(BigQueryTableMetadata, 'get_last_modified_datetime',
return_value=datetime(2016, 11, 13, 14, 00))
def test_should_return_true_if_table_was_changed_before_last_backup_but_table_size_is_different(self, _1,_2): # nopep8 pylint: disable=C0301
# given
backup = Backup(
parent=self.table.key,
last_modified=datetime(2016, 11, 13, 15, 00),
numBytes=123
)
backup.put()
predicate = DefaultBackupPredicate()

# when
result = predicate.test(self.big_query_table_metadata, self.table)
# then
self.assertTrue(result, "ShouldBackupPredicate should return TRUE "
"if table was changed before "
"last backup was made but "
"backup has different size than source table")

@patch.object(BigQueryTableMetadata, 'is_empty', return_value=True)
@patch.object(BigQueryTableMetadata, 'get_last_modified_datetime',
return_value=datetime(2018, 11, 13, 17, 00))
Expand Down

0 comments on commit cd859e7

Please sign in to comment.