Skip to content

Commit 6bab56f

Browse files
authored
fix: incremental backups (#72)
1 parent 2b2c012 commit 6bab56f

File tree

1 file changed

+17
-17
lines changed

1 file changed

+17
-17
lines changed

housewatch/clickhouse/backups.py

Lines changed: 17 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -37,9 +37,17 @@ def execute_backup(
3737
responses = []
3838
for shard, node in nodes:
3939
params["shard"] = shard if is_sharded else "noshard"
40+
41+
query_settings["async"] = "true"
4042
if base_backup:
41-
query_settings["base_backup"] = f"S3('{base_backup}/{shard}', '{aws_key}', '{aws_secret}')"
42-
final_query = query % (params or {}) if substitute_params else query
43+
query_settings["base_backup"] = f"S3('{base_backup}/{params['shard']}', '{aws_key}', '{aws_secret}')"
44+
45+
parametrized_query = query % (params or {}) if substitute_params else query
46+
final_query = "{query} SETTINGS {settings}".format(
47+
query=parametrized_query,
48+
settings=", ".join([f"{k} = {v}" for k, v in query_settings.items()]),
49+
)
50+
4351
client = Client(
4452
host=node["host_address"],
4553
database=settings.CLICKHOUSE_DATABASE,
@@ -51,7 +59,7 @@ def execute_backup(
5159
send_receive_timeout=30,
5260
password=settings.CLICKHOUSE_PASSWORD,
5361
)
54-
result = client.execute(final_query, settings=query_settings, with_column_types=True, query_id=query_id)
62+
result = client.execute(final_query, with_column_types=True, query_id=query_id)
5563
response = []
5664
for res in result[0]:
5765
item = {}
@@ -90,12 +98,8 @@ def create_table_backup(
9098
aws_key = settings.AWS_ACCESS_KEY_ID
9199
aws_secret = settings.AWS_SECRET_ACCESS_KEY
92100

93-
query_settings = {}
94101
QUERY = """BACKUP TABLE %(database)s.%(table)s
95-
TO S3('https://%(bucket)s.s3.amazonaws.com/%(path)s/%(shard)s', '%(aws_key)s', '%(aws_secret)s')
96-
ASYNC"""
97-
if base_backup:
98-
query_settings["base_backup"] = f"S3('{base_backup}', '{aws_key}', '{aws_secret}')"
102+
TO S3('https://%(bucket)s.s3.amazonaws.com/%(path)s/%(shard)s', '%(aws_key)s', '%(aws_secret)s')"""
99103
return execute_backup(
100104
QUERY,
101105
{
@@ -106,7 +110,6 @@ def create_table_backup(
106110
"aws_key": aws_key,
107111
"aws_secret": aws_secret,
108112
},
109-
query_settings=query_settings,
110113
cluster=cluster,
111114
aws_key=aws_key,
112115
aws_secret=aws_secret,
@@ -119,12 +122,9 @@ def create_database_backup(database, bucket, path, aws_key=None, aws_secret=None
119122
if aws_key is None or aws_secret is None:
120123
aws_key = settings.AWS_ACCESS_KEY_ID
121124
aws_secret = settings.AWS_SECRET_ACCESS_KEY
122-
query_settings = {}
123-
QUERY = """BACKUP DATABASE %(database)s
124-
TO S3('https://%(bucket)s.s3.amazonaws.com/%(path)s/%(shard)s', '%(aws_key)s', '%(aws_secret)s')
125-
ASYNC"""
126-
if base_backup:
127-
query_settings["base_backup"] = f"S3('{base_backup}', '{aws_key}', '{aws_secret}')"
125+
126+
QUERY = """BACKUP DATABASE %(database)s
127+
TO S3('https://%(bucket)s.s3.amazonaws.com/%(path)s/%(shard)s', '%(aws_key)s', '%(aws_secret)s')"""
128128
return execute_backup(
129129
QUERY,
130130
{
@@ -134,7 +134,6 @@ def create_database_backup(database, bucket, path, aws_key=None, aws_secret=None
134134
"aws_key": aws_key,
135135
"aws_secret": aws_secret,
136136
},
137-
query_settings=query_settings,
138137
cluster=cluster,
139138
aws_key=aws_key,
140139
aws_secret=aws_secret,
@@ -187,7 +186,8 @@ def run_backup(backup_id, incremental=False):
187186
else:
188187
backup.last_run = br
189188
backup.last_run_time = now
190-
backup.last_base_backup = S3_LOCATION
189+
190+
backup.last_base_backup = S3_LOCATION
191191
backup.save()
192192
return
193193

0 commit comments

Comments
 (0)