...
 
Commits (3)
......@@ -19,18 +19,23 @@ Les configurations se font par variable d'environnement :
* `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.
## Exemples
### Lancer tout le dump
### Invoquer l'outil
``` shell
RESIFDD_WORKDIR=/osug-dc/resif RESIFDD_DATATIR=/scratch/resifdumper resifdatadump
```
### Options particulières de l'outil
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-parallel
RESIFDD_WORKDIR=/osug-dc/resif RESIFDD_DATATIR=/scratch/resifdumper RESIFDD_START_AT=2009 src/resifdatadump
```
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-parallel
RESIFDD_WORKDIR=/osug-dc/resif RESIFDD_DATATIR=/scratch/resifdumper RESIFDD_KEYFILE=/scratch/resifdumper/keys.txt src/resifdatadump
```
Le ficher doit contenir une clé par ligne, comme rapportée dans les logs :
......@@ -48,4 +53,4 @@ Le ficher doit contenir une clé par ligne, comme rapportée dans les logs :
2016_RA_NCAD
```
On peut générer un fichier de clés avec le script python `src/scan_dupms.py`.
On peut générer un fichier de clés avec le script python `src/scan_dupms.py` qui
......@@ -135,7 +135,7 @@ irods_rollback(){
irods_commit(){
KEY=$1
echo "[$KEY] If previous.tar exists, move it around but keep it safe"
ils $KEY/previous.tar 2&1>/dev/null && (
ils $KEY/previous.tar >/dev/null 2>&1 && (
imv $KEY/previous.tar $KEY/previous_to_delete.tar
if [[ $? -ne 0 ]]; then
echo "[$KEY] Error 003 moving previous.tar around. Corrective action has to be taken manualy"
......@@ -145,7 +145,7 @@ irods_commit(){
)
echo "[$KEY] If latest.tar exists, move it to previous.tar"
ils $KEY/latest.tar 2&1>/dev/null && (
ils $KEY/latest.tar >/dev/null 2>&1 && (
imv $KEY/latest.tar $KEY/previous.tar
if [[ $? -ne 0 ]]; then
echo "[$KEY] Error 004 moving latest.tar to previous.tar. Corrective action has to be taken manualy"
......@@ -160,7 +160,7 @@ irods_commit(){
zabbix_err "${KEY}:Error 005"
return 1
fi
ils $KEY/previous_to_delete.tar 2>/dev/null && irm -f $KEY/previous_to_delete.tar
ils $KEY/previous_to_delete.tar >/dev/null 2>&1 && irm -f $KEY/previous_to_delete.tar
}
# Choose if the data should be processed or skipped
......@@ -196,6 +196,7 @@ pack_and_send() {
if [[ $days -ge 0 ]]; then
# We have an uptodate dump (newer than snapshot)
echo "[$KEY] latest.tar is up to date"
format_report $KEY "-" $(date +%Y-%m-%dT%H:%M:%S) "-" "-" "Skipped" >> $LOCAL_REPORT
return 0
fi
# find files modified in the last $days. If none, we can skip because latests irods version is up to date.
......@@ -312,6 +313,6 @@ if [[ ! -d $SNAPSHOT_DIR ]]; then
exit 1
fi
echo "Starting dump of validated data with 4 jobs"
find $SNAPSHOT_DIR -maxdepth 3 -mindepth 3 -type d | sort | parallel --jobs 4 --max-args 1 pack_and_send {} {%}
echo "Starting dump of validated data with 3 jobs"
find $SNAPSHOT_DIR -maxdepth 3 -mindepth 3 -type d | sort | parallel --jobs 3 --max-args 1 pack_and_send {} {%}
echo "Dump of validated data done"
#!/usr/bin/python3
"""
Ce script compare l'archive locale avec ce qui est sur irods.
Il compare seulement le nom des répertoires.
Si le répertoire existe en local et n'existe pas sur iRODS alors le script l'ajoute
à la liste des répertoires manquant
"""
import subprocess
import re
......@@ -8,16 +15,16 @@ 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 => '']
# key => [
# latest.tar => [sha2 => '', size => ''] ,
# previous.tar => [sha2 => '', size => '']
# ]
# ], ...
# ]
# Test
# root_dir='/tempZone/home/jschaeffer/'
# Prod :
......@@ -37,10 +44,10 @@ def get_irods_content():
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
......@@ -49,8 +56,8 @@ def get_irods_content():
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)
return list(dirsDepth3)
if __name__ == "__main__":
dirs = browse_local_data()
......@@ -66,4 +73,3 @@ if __name__ == "__main__":
print("List of missing keys (usable with RESIFDD_KEYFILE) : ")
print('\n'.join(missing_keys))