Skip to content

Commit 93caa5c

Browse files
committed
Adjust Archive handling to save (original) mtime of files and always apply default checksum calculation when requested through the Schedule Tasks background jobs.
git-svn-id: svn+ssh://svn.code.sf.net/p/migrid/code/trunk@6045 b75ad72c-e7d7-11dd-a971-7dbc132099af
1 parent 2a16521 commit 93caa5c

File tree

5 files changed

+32
-9
lines changed

5 files changed

+32
-9
lines changed

mig/shared/freezefunctions.py

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -182,17 +182,24 @@ def build_freezeitem_object(configuration, freeze_dict, summary=False,
182182
'title': 'Show archive file %(name)s' % file_item,
183183
'text': ''
184184
}
185+
# NOTE: we have file creation time in archive as timestamp
185186
int_timestamp = int(file_item['timestamp'])
187+
# NOTE: we may have preserved file modification time as file_mtime
188+
int_origtime = int(file_item.get('file_mtime', int_timestamp))
186189
# NOTE: datetime is not json-serializable so we force to string
187190
dt_timestamp = datetime.datetime.fromtimestamp(int_timestamp)
191+
dt_origtime = datetime.datetime.fromtimestamp(int_origtime)
188192
str_timestamp = "%s" % dt_timestamp
193+
if dt_timestamp != dt_origtime:
194+
str_timestamp += " / %s" % dt_origtime
189195
# NOTE: xmlrpc is limited to 32-bit ints so force size to string
190196
str_size = "%(size)s" % file_item
191197
entry = {
192198
'object_type': 'frozenfile',
193199
'name': file_item['name'],
194200
'showfile_link': showfile_link,
195201
'timestamp': int_timestamp,
202+
'origtime': int_origtime,
196203
'date': str_timestamp,
197204
'size': str_size,
198205
}
@@ -713,14 +720,16 @@ def get_frozen_files(client_id, freeze_id, configuration,
713720
entry = file_map.get(rel_path, {})
714721
if not entry or needs_update:
715722
entry['name'] = entry.get('name', rel_path)
716-
file_ctime, file_size = -1, -1
723+
file_ctime, file_mtime, file_size = -1, -1, -1
717724
try:
718725
file_ctime = os.path.getctime(frozen_path)
726+
file_mtime = os.path.getmtime(frozen_path)
719727
file_size = os.path.getsize(frozen_path)
720728
except Exception as err:
721729
_logger.warning("failed to update cached %s stats: %s" %
722730
(frozen_path, err))
723-
entry['timestamp'] = file_ctime
731+
entry['timestamp'] = entry['file_ctime'] = file_ctime
732+
entry['file_mtime'] = file_mtime
724733
entry['size'] = file_size
725734
updates += 1
726735

mig/shared/functionality/addfreezedata.py

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
# --- BEGIN_HEADER ---
55
#
66
# addfreezedata - back end for adding data to existing freeze archive
7-
# Copyright (C) 2003-2018 The MiG Project lead by Brian Vinter
7+
# Copyright (C) 2003-2024 The MiG Project lead by Brian Vinter
88
#
99
# This file is part of MiG.
1010
#
@@ -26,10 +26,11 @@
2626
#
2727

2828
"""Add a file or folder to existing freeze archive e.g. in background job"""
29+
2930
from __future__ import absolute_import
3031

3132
from mig.shared.functionality.createfreeze import main as freeze_main, \
32-
signature as freeze_signature
33+
signature as freeze_signature, default_algo
3334

3435

3536
def main(client_id, user_arguments_dict):
@@ -39,4 +40,6 @@ def main(client_id, user_arguments_dict):
3940
args_dict = freeze_signature()[1]
4041
args_dict.update(user_arguments_dict)
4142
args_dict['flavor'] = ['freeze']
43+
# Always checksum when running in background
44+
args_dict['checksum_list'] = [default_algo]
4245
return freeze_main(client_id, args_dict)

mig/shared/functionality/createbackup.py

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
# --- BEGIN_HEADER ---
55
#
66
# createbackup - back end for one-shot backup archive creation
7-
# Copyright (C) 2003-2018 The MiG Project lead by Brian Vinter
7+
# Copyright (C) 2003-2024 The MiG Project lead by Brian Vinter
88
#
99
# This file is part of MiG.
1010
#
@@ -29,7 +29,7 @@
2929
from __future__ import absolute_import
3030

3131
from mig.shared.functionality.createfreeze import main as createfreeze_main, \
32-
signature as createfreeze_signature, keyword_final
32+
signature as createfreeze_signature, keyword_final, default_algo
3333

3434

3535
def main(client_id, user_arguments_dict):
@@ -39,5 +39,7 @@ def main(client_id, user_arguments_dict):
3939
args_dict = createfreeze_signature()[1]
4040
args_dict.update(user_arguments_dict)
4141
args_dict['flavor'] = ['backup']
42+
# Always checksum when running in background
43+
args_dict['checksum_list'] = [default_algo]
4244
args_dict['freeze_state'] = [keyword_final]
4345
return createfreeze_main(client_id, args_dict)

mig/shared/functionality/createfreeze.py

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
# --- BEGIN_HEADER ---
55
#
66
# createfreeze - back end for freezing archives
7-
# Copyright (C) 2003-2023 The MiG Project lead by Brian Vinter
7+
# Copyright (C) 2003-2024 The MiG Project lead by Brian Vinter
88
#
99
# This file is part of MiG.
1010
#
@@ -38,7 +38,7 @@
3838
keyword_auto, keyword_pending, keyword_final
3939
from mig.shared.fileio import strip_dir, walk
4040
from mig.shared.freezefunctions import create_frozen_archive, published_url, \
41-
is_frozen_archive
41+
is_frozen_archive, get_frozen_files, default_algo
4242
from mig.shared.functional import validate_input_and_cert, REJECT_UNSET
4343
from mig.shared.handlers import safe_handler, get_csrf_limit, make_csrf_token
4444
from mig.shared.html import man_base_js, man_base_html, html_post_helper
@@ -62,6 +62,7 @@ def signature():
6262
'freeze_department': [''],
6363
'freeze_organization': [''],
6464
'freeze_state': [keyword_auto],
65+
'checksum_list': [],
6566
}
6667
return ['text', defaults]
6768

@@ -243,6 +244,7 @@ def main(client_id, user_arguments_dict):
243244
freeze_department = accepted['freeze_department'][-1].strip()
244245
freeze_organization = accepted['freeze_organization'][-1].strip()
245246
freeze_publish = accepted['freeze_publish'][-1].strip()
247+
chksums = accepted['checksum_list']
246248
do_publish = (freeze_publish.lower() in ('on', 'true', 'yes', '1'))
247249

248250
# Share init of base meta with lookup of default state in freeze_flavors
@@ -336,6 +338,13 @@ def main(client_id, user_arguments_dict):
336338
freeze_id = freeze_meta['ID']
337339
logger.info("%s: successful for '%s': %s" % (op_name,
338340
freeze_id, client_id))
341+
# Calculate / update checksums if requested
342+
if chksums:
343+
(chksum_status, chksum_res) = get_frozen_files(client_id, freeze_id,
344+
configuration,
345+
checksum_list=chksums,
346+
force_refresh=True)
347+
339348
# Return simple status mainly for use in scripting
340349
output_objects.append({'object_type': 'freezestatus', 'freeze_id': freeze_id,
341350
'flavor': flavor, 'freeze_state': freeze_state})

mig/shared/output.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1619,7 +1619,7 @@ def html_format(configuration, ret_val, ret_msg, out_obj):
16191619
<tr>
16201620
<th>Name</th>
16211621
<th class="icon">Action<!-- Open, Delete --></th>
1622-
<th>Date</th>
1622+
<th>Date added / original</th>
16231623
<th>Size in bytes</th>'''
16241624
for algo in sorted_hash_algos:
16251625
checksum_field = '%ssum' % algo

0 commit comments

Comments
 (0)