Skip to content

Commit 77bc4bc

Browse files
authored
Store objects in S3 in accordance with BlobPath (#49)
* Refactor backup functions to support optional blob_path parameter in backups.py and granular.py * Refactor backup path handling in backups.py, pg_backup.py, and pg_restore.py to streamline blob_path usage and improve code readability. * Fix: use blob_path only for files in S3 * Fix: return statements added for S3 configuration checks in backup and restore resources
1 parent 766588e commit 77bc4bc

File tree

5 files changed

+150
-185
lines changed

5 files changed

+150
-185
lines changed

docker/granular/backups.py

Lines changed: 26 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -89,61 +89,55 @@ def build_namespace_path(namespace=configs.default_namespace()):
8989
return '%s/%s' % (configs.backups_storage(), namespace)
9090

9191

92-
def build_database_backup_path(backup_id, database,
93-
namespace=configs.default_namespace(), external_backup_storage=None):
94-
if configs.get_encryption():
95-
return '%s/%s_enc.dump' % (
96-
build_backup_path(backup_id, namespace, external_backup_storage), database)
97-
else:
98-
return '%s/%s.dump' % (
99-
build_backup_path(backup_id, namespace, external_backup_storage), database)
100-
92+
def build_database_backup_path(backup_id, database,
93+
namespace=configs.default_namespace(), external_backup_storage=None, blob_path=None):
94+
ext = '_enc.dump' if configs.get_encryption() else '.dump'
95+
return '%s/%s%s' % (
96+
build_backup_path(backup_id, namespace, external_backup_storage, blob_path), database, ext)
10197

10298
def build_roles_backup_path(backup_id, database,
103-
namespace=configs.default_namespace(), external_backup_storage=None):
104-
if configs.get_encryption():
105-
return "%s/%s.roles_enc.sql" % (
106-
build_backup_path(backup_id, namespace, external_backup_storage), database)
107-
else:
108-
return "%s/%s.roles.sql" % (
109-
build_backup_path(backup_id, namespace, external_backup_storage), database)
110-
99+
namespace=configs.default_namespace(), external_backup_storage=None, blob_path=None):
100+
ext = 'roles_enc.sql' if configs.get_encryption() else 'roles.sql'
101+
return "%s/%s.%s" % (
102+
build_backup_path(backup_id, namespace, external_backup_storage, blob_path), database, ext)
111103

112104
def build_database_backup_full_path(backup_id, database, storage_root,
113105
namespace=configs.default_namespace(),
114-
):
115-
if configs.get_encryption():
116-
return '%s/%s/%s/%s_enc.dump' % (
117-
storage_root, namespace, backup_id, database)
106+
blob_path=None):
107+
ext = '_enc.dump' if configs.get_encryption() else '.dump'
108+
if blob_path is not None:
109+
return '%s/%s/%s%s' % (blob_path, backup_id, database, ext)
118110
else:
119-
return '%s/%s/%s/%s.dump' % (
120-
storage_root, namespace, backup_id, database)
111+
return '%s/%s/%s/%s%s' % (storage_root, namespace, backup_id, database, ext)
121112

122113

123114
def build_database_restore_report_path(backup_id, database, restore_tracking_id, namespace=configs.default_namespace()):
124115
return '%s/%s.%s.report' % (build_backup_path(backup_id, namespace), database, restore_tracking_id)
125116

126117

127-
def build_backup_path(backup_id, namespace=configs.default_namespace(), external_backup_storage=None):
128-
return '%s/%s/%s' % (configs.backups_storage() if external_backup_storage is None else external_backup_storage,
129-
namespace, backup_id)
118+
def build_backup_path(backup_id, namespace=configs.default_namespace(), external_backup_storage=None, blob_path=None):
119+
if blob_path is not None:
120+
return '%s/%s' % (blob_path, backup_id)
121+
else:
122+
return '%s/%s/%s' % (configs.backups_storage() if external_backup_storage is None else external_backup_storage,
123+
namespace, backup_id)
130124

131125

132126
def build_external_backup_root(external_backup_path):
133127
return '%s/%s' % (os.getenv("EXTERNAL_STORAGE_ROOT"), external_backup_path)
134128

135129

136-
def build_backup_status_file_path(backup_id, namespace=configs.default_namespace(), external_backup_storage=None):
137-
return '%s/status.json' % build_backup_path(backup_id, namespace, external_backup_storage)
130+
def build_backup_status_file_path(backup_id, namespace=configs.default_namespace(), external_backup_storage=None, blob_path=None):
131+
return '%s/status.json' % build_backup_path(backup_id, namespace, external_backup_storage, blob_path)
138132

139133

140134
def build_restore_status_file_path(backup_id, tracking_id, namespace=configs.default_namespace(),
141-
external_backup_storage=None):
142-
return '%s/%s.json' % (build_backup_path(backup_id, namespace, external_backup_storage), tracking_id)
135+
external_backup_storage=None, blob_path=None):
136+
return '%s/%s.json' % (build_backup_path(backup_id, namespace, external_backup_storage, blob_path), tracking_id)
143137

144138

145-
def get_key_name_by_backup_id(backup_id, namespace, external_backup_storage=None):
146-
status_path = build_backup_status_file_path(backup_id, namespace, external_backup_storage)
139+
def get_key_name_by_backup_id(backup_id, namespace, external_backup_storage=None, blob_path=None):
140+
status_path = build_backup_status_file_path(backup_id, namespace, external_backup_storage, blob_path)
147141
with open(status_path) as f:
148142
data = json.load(f)
149143
return data.get("key_name")

0 commit comments

Comments
 (0)