Commit 492cc4b8 authored by Jonathan Schaeffer's avatar Jonathan Schaeffer

Commit de la version parrallele

parent 345a3f79
......@@ -8,12 +8,12 @@ Description du workflow dans notre wiki : https://wiki.osug.fr/!isterre-geodata/
## Utilisation
Le script lance 6 jobs en parallele pour effectuer ses tâches.
Le script lance 4 jobs en parallele pour effectuer ses tâches.
Les configurations se font par variable d'environnement :
* `RESIFDD_WORKDIR`: le répertoire de travail dans lequel le script prépare ses paquets avant expédition, écrit son rapport, etc.
* `RESIFDD_DATADIR` : le répertoire où le script pourra trouver les points de montage SUMMER `validated_seismic_metadata` et `validated_seismic_data`
* `RESIFDD_WORKDIR` : *obligatoire* le répertoire de travail dans lequel le script prépare ses paquets avant expédition, écrit son rapport, etc.
* `RESIFDD_DATADIR` : *obligatoire* le répertoire où le script pourra trouver les points de montage SUMMER `validated_seismic_metadata` et `validated_seismic_data`
* `RESIFDD_CONTINUE_FROM` : la valeur est un fichier de rapport précédent à partir duquel le script pourra reprendre le travail là où il l'a laissé. Si le rapport mentionne des erreurs de transfert, le script réessayera
* `RESIFDD_START_AT` : permet d'indiquer une année à partir de laquelle reprendre le transfert. Tous les éléments appartenant à une année inférieur sont ignorés
* `RESIFDD_KEYFILE` : si cette variable indique le chemin d'un fichier valide, alors il sera utilisé pour transférer les données correspondantes aux clés listées dans le fichier.
......@@ -24,13 +24,13 @@ Les configurations se font par variable d'environnement :
Démarrer le transfert de toutes les données à partir de 2009
``` shell
RESIFDD_WORKDIR=/osug-dc/resif RESIFDD_DATATIR=/scratch/resifdumper RESIFDD_START_AT=2009 src/resifdatadump
RESIFDD_WORKDIR=/osug-dc/resif RESIFDD_DATATIR=/scratch/resifdumper RESIFDD_START_AT=2009 src/resifdatadump-parallel
```
Transférer les données listées dans le fichier `RESIFDD_KEYFILE` :
``` shell
RESIFDD_WORKDIR=/osug-dc/resif RESIFDD_DATATIR=/scratch/resifdumper RESIFDD_KEYFILE=/scratch/resifdumper/keys.txt src/resifdatadump
RESIFDD_WORKDIR=/osug-dc/resif RESIFDD_DATATIR=/scratch/resifdumper RESIFDD_KEYFILE=/scratch/resifdumper/keys.txt src/resifdatadump-parallel
```
Le ficher doit contenir une clé par ligne, comme rapportée dans les logs :
......@@ -47,3 +47,5 @@ Le ficher doit contenir une clé par ligne, comme rapportée dans les logs :
2016_MT_CLP2
2016_RA_NCAD
```
On peut générer un fichier de clés avec le script python `src/scan_dupms.py`.
This diff is collapsed.
#!/usr/bin/python3
import subprocess
import re
import glob,os.path
from collections import defaultdict
def get_irods_content():
remote_data = defaultdict(lambda: defaultdict(dict))
result = subprocess.run(['ils','-r', '-L'], stdout=subprocess.PIPE)
# On prepare une structure de donnees (dict) :
# remote_data = [
# key => [
# latest.tar => [sha2 => '', size => ''] ,
# previous.tar => [sha2 => '', size => '']
# ]
# ], ...
# ]
# Test
# root_dir='/tempZone/home/jschaeffer/'
# Prod :
root_dir='/cc-lyon/synchro/resif/'
current_key = ''
total_size = 0
for line in result.stdout.decode('utf-8').split('\n'):
if line.startswith(root_dir):
current_key = line.replace(root_dir, '').replace('_','/').replace(':','')
elif re.search('[0-9]{4}/[A-Z0-9]+/[A-Z0-9]+', current_key):
if re.search('generic.*\.tar\s*$', line):
# sha2:g+RIFc7e6CVgkxpuucvj8GFpE7C8Vg0n4JdJmvUZtkE= generic /irods/Vault/archivage/resif/synchro/resif/2008_ZO_Y111/latest.tar
if re.search('sha2:', line):
remote_data[current_key][words[-1]]['sha2'] = re.split('\s+', line)[1].split(':')[1]
elif re.search('\.tar\s*$', line) :
# resif 0 Resif1;resifcache1 3985223680 2019-07-19.04:36 & latest.tar
words = re.split(' +', line)
remote_data[current_key][words[-1]]['size'] = words[4]
total_size = total_size + int(words[4])
print("Total iRODS storage used : "+str(total_size/(1024^3))+"GB")
return remote_data
# Maintenant, on a l'état sur le serveur irods. Comparons avec notre dépôt :
# Chercher les tribples YYYY/NET/STATION dans /osug-dc/resif/validated_seismic_data
# Pour chacun, vérifier son existence dans remote_data
# S'il n'existe pas, on affiche un message et on garde la clé sous le coude.
def browse_local_data():
filesDepth3 = glob.glob('/osug-dc/resif/validated_seismic_data/*/*/*')
dirsDepth3 = filter(lambda f: os.path.isdir(f), filesDepth3)
return list(dirsDepth3)
if __name__ == "__main__":
dirs = browse_local_data()
remote_data = get_irods_content()
missing_keys = []
for d in dirs:
key = d.replace('/osug-dc/resif/validated_seismic_data/', '')
if key in remote_data.keys():
print(key+" => OK")
else :
missing_keys.append(key.replace('/','_'))
print(key+" missing")
print("List of missing keys (usable with RESIFDD_KEYFILE) : ")
print('\n'.join(missing_keys))
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment