Skip to content

Commit c30349e

Browse files
committed
Cleanup, comments, able to filter on backup files
1 parent edba463 commit c30349e

File tree

22 files changed

+60
-50
lines changed

22 files changed

+60
-50
lines changed

src/backend/analysis/tests.py

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -770,7 +770,7 @@ def test_new_analysis_and_run_and_purge(self):
770770
'analysisserver_id': self.anaserver.pk,
771771
}
772772
resp = self.cl.post(self.url, content_type='application/json', data=postdata)
773-
timestamp = datetime.strftime(datetime.now(), '%Y%m%d_')
773+
774774
self.assertEqual(resp.status_code, 200)
775775
ana = am.Analysis.objects.last()
776776
self.assertEqual(ana.analysissampletable.samples, {'hello': 'yes'})
@@ -797,6 +797,7 @@ def test_new_analysis_and_run_and_purge(self):
797797
data={'analysis_id': resp.json()['analysis_id']})
798798
self.user.is_superuser = True
799799
self.user.save()
800+
# Make sure rename lib file waits until analysis is finished
800801
renameresp = self.cl.post('/files/rename/', content_type='application/json',
801802
data={'sf_id': self.sflib.pk, 'newname': 'testnewname'})
802803
self.user.is_superuser = False
@@ -814,7 +815,7 @@ def test_new_analysis_and_run_and_purge(self):
814815
self.assertTrue(usm_q.exists())
815816
self.assertTrue(hm.AnalysisMessage.objects.filter(analysis=ana, msg=usm_q.get().pk,
816817
msgtype=hm.AnalysisMsgTypes.COMPLETED).exists())
817-
self.run_job() # rsync the results
818+
self.run_job() # rsync the results, rename job
818819
self.assertTrue(renamejobs.filter(state=jj.Jobstates.PROCESSING).exists())
819820
reports = rm.StoredFileLoc.objects.filter(sfile__filename='report.html', purged=False)
820821
self.assertEqual(reports.count(), 3) # analysisruns, web, analysis storage

src/backend/datasets/models.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -113,6 +113,7 @@ class Dataset(models.Model):
113113
datatype = models.ForeignKey(Datatype, on_delete=models.CASCADE)
114114
securityclass = models.IntegerField(choices=DataSecurityClass.choices)
115115
deleted = models.BooleanField(default=False) # for UI only, indicate deleted from active storage
116+
# deprecate purged
116117
purged = models.BooleanField(default=False) # for UI only, indicate permanent deleted from cold storage too
117118
locked = models.BooleanField(default=False)
118119

src/backend/datasets/tasks.py

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,6 @@
1010
from kantele import settings
1111
from jobs.post import get_session_cookies, update_db, taskfail_update_db
1212
from analysis.tasks import create_runname_dirname, prepare_nextflow_run, run_nextflow, register_mzmlfile, process_error_from_nf_log, copy_stage_files
13-
from rawstatus.tasks import calc_md5, delete_empty_dir
1413

1514
# Updating stuff in tasks happens over the API, assume no DB is touched. This
1615
# avoids setting up auth for DB
@@ -38,12 +37,11 @@ def run_convert_mzml_nf(self, run, params, raws, ftype_name, nf_version, stagesc
3837
try:
3938
run_outdir = run_nextflow(run, params, run['dsspath'], gitwfdir, nf_version, scratchdir)
4039
except subprocess.CalledProcessError as e:
41-
print(e)
4240
errmsg = process_error_from_nf_log(os.path.join(gitwfdir, '.nextflow.log'))
4341
taskfail_update_db(self.request.id, errmsg)
4442
raise RuntimeError('Error occurred converting mzML files: '
4543
f'{basedir}\n\nERROR MESSAGE:\n{errmsg}')
46-
# Technically we can dump straight to infile paths
44+
# mzMLs go straight to infile paths
4745
token = False
4846
transfer_url = urljoin(settings.KANTELEHOST, reverse('jobs:updatestorage'))
4947
reg_session, reg_headers = get_session_cookies()

src/backend/datasets/views.py

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -619,7 +619,8 @@ def update_storage_shares(share_ids, project, experiment, dset, dtype, prefrac,
619619

620620
elif pre_alldss.exists():
621621
# there is a live dss somewhere, get it onto an rsync source first
622-
# This is VERY similar to what we do in home/views for mzml, except the local storage
622+
# This is VERY similar to what we do in home/views around L1050 and L1180
623+
# for mzml, except the local storage
623624
src_sfloc_ids = [x['pk'] for x in existing_sfl.filter(
624625
servershare=pre_alldss.first().storageshare,
625626
sfile__rawfile__datasetrawfile__dataset=dset).values('pk')]
@@ -1151,6 +1152,7 @@ def purge_project(request):
11511152

11521153

11531154
def get_dset_storestate(dset_id, ds_deleted):
1155+
# For archiving, reactivating, and showing on homepage
11541156
'''Count SFLoc associated with a dataset (created when adding/removing), in different
11551157
servershares and in backup - return a state for the dataset (currently a string)'''
11561158
dsf_c = filemodels.StoredFile.objects.exclude(mzmlfile__isnull=False).filter(
@@ -1298,7 +1300,9 @@ def reactivate_dataset(dset, share_ids, project, experiment, dtype, prefrac, hrr
12981300
sfls_inbox.update(path=buppath, active=True)
12991301

13001302
sflids = [x['pk'] for x in sfls_inbox.values('pk')]
1303+
# Queue restore job from backup
13011304
create_job('reactivate_dataset', dss_id=bupdss.pk, sfloc_ids=sflids)
1305+
# Now move from restored to other areas
13021306
if upd_stor_err := update_storage_shares(share_ids, project, experiment, dset,
13031307
dtype, prefrac, hrrange, user_id):
13041308
msg = json.loads(upd_stor_err.content)['error']
@@ -1757,7 +1761,6 @@ def save_or_update_files(data, user_id):
17571761
return {'error': 'Cannot find some of the files asked to remove on storage. '
17581762
'This should not happen. Contact admin' }, 403
17591763

1760-
17611764
# Errors checked, now store DB records and queue move jobs
17621765
if added_fnids:
17631766
# First restore from backup

src/backend/home/views.py

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -183,6 +183,10 @@ def find_files(userquery):
183183
query &= Q(deleted=True)
184184
case ['deleted', 'false']:
185185
query &= Q(deleted=False)
186+
case ['backup', 'false']:
187+
query &= Q(pdcbackedupfile__success=False)
188+
case ['backup', 'true']:
189+
query &= Q(pdcbackedupfile__success=True)
186190
case ['type', ftype]:
187191
match ftype:
188192
case 'qc':
@@ -224,9 +228,10 @@ def getxbytes(bytes, op=50):
224228
if bytes is None:
225229
return '0B'
226230
if bytes >> op:
227-
return '{}{}B'.format(bytes >> op, {0: '', 10: 'K', 20: 'M', 30: 'G', 40: 'T', 50: 'P'}[op])
231+
unit = {0: '', 10: 'K', 20: 'M', 30: 'G', 40: 'T', 50: 'P'}[op]
232+
return f'{bytes >> op}{unit}B'
228233
else:
229-
return getxbytes(bytes, op-10)
234+
return getxbytes(bytes, op - 10)
230235

231236

232237
def populate_files(dbfns):
@@ -1131,10 +1136,6 @@ def create_mzmls(request):
11311136
return JsonResponse({})
11321137

11331138

1134-
1135-
1136-
1137-
11381139
@require_POST
11391140
@login_required
11401141
def refine_mzmls(request):

src/backend/jobs/jobs.py

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -125,7 +125,6 @@ def _get_extrafiles_to_rsync(self, **kwargs):
125125
return []
126126

127127
def _select_rsync_server(self, srcshare_id, dstshare_id):
128-
# Select file servers to rsync from/to - FIXME share code!
129128
'''Shares should already have been confirmed to be active?
130129
Or can we do that here?
131130
'''

src/backend/jobs/management/commands/runjobs.py

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -135,14 +135,15 @@ def run_ready_jobs(job_fn_map, job_ds_map, active_jobs):
135135
job.state = Jobstates.PROCESSING
136136
if errmsg := jwrapper.check_error_on_running(**job.kwargs):
137137
jwrapper.set_error(job, errmsg=errmsg)
138+
print(f'Error found in check: "{errmsg}" --- not executing this job')
138139
else:
139140
try:
140141
jwrapper.run(**job.kwargs)
141142
except RuntimeError as e:
142-
print('Error occurred, trying again automatically in next round')
143+
print(f'Error occurred: {e}, not executing this job')
143144
jwrapper.set_error(job, errmsg=str(e))
144145
except Exception as e:
145-
print(f'Error occurred: {e} --- not executing this job')
146+
print(f'Uncaught error occurred: {e} --- not executing this job')
146147
jwrapper.set_error(job, errmsg=str(e))
147148
else:
148149
# PROCESSING state update saved here:

src/backend/jobs/views.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -307,6 +307,7 @@ def restored_archive_file(request):
307307

308308
@require_POST
309309
def analysis_run_done(request):
310+
'''Called when successfully finished analysis'''
310311
data = json.loads(request.body.decode('utf-8'))
311312
if ('client_id' not in data or
312313
data['client_id'] not in settings.CLIENT_APIKEYS):

src/backend/kantele/settings.py

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -47,9 +47,6 @@
4747
RSYNC_SSHKEY = os.environ.get('RSYNC_SSHKEY')
4848
RSYNC_SSHPORT = os.environ.get('RSYNC_SSHPORT')
4949

50-
SECONDARY_STORAGE_RSYNC_USER = os.environ.get('SECONDARY_STORAGE_RSYNC_USER')
51-
SECONDARY_STORAGE_RSYNC_KEY = os.environ.get('SECONDARY_STORAGE_RSYNC_KEY')
52-
5350
UPLOAD_URL = 'uploads'
5451

5552

src/backend/kantele/tests.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
import shutil
44
from time import sleep
55
from datetime import timedelta
6+
from unittest import TestCase
67

78
from django.contrib.auth.models import User
89
from django.test import TestCase, LiveServerTestCase, Client
@@ -32,6 +33,7 @@ def post_json(self, data):
3233

3334
def setUp(self):
3435
# Clean directory containing storage servers
36+
print('--------', TestCase.id(self))
3537
self.rootdir = '/storage'
3638
for dirname in os.listdir(self.rootdir):
3739
if os.path.isdir(os.path.join(self.rootdir, dirname)):

0 commit comments

Comments
 (0)