...
 
Commits (3)
...@@ -19,18 +19,23 @@ Les configurations se font par variable d'environnement : ...@@ -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. * `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 ## 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 Démarrer le transfert de toutes les données à partir de 2009
``` shell ``` 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` : Transférer les données listées dans le fichier `RESIFDD_KEYFILE` :
``` shell ``` 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 : 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 : ...@@ -48,4 +53,4 @@ Le ficher doit contenir une clé par ligne, comme rapportée dans les logs :
2016_RA_NCAD 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(){ ...@@ -135,7 +135,7 @@ irods_rollback(){
irods_commit(){ irods_commit(){
KEY=$1 KEY=$1
echo "[$KEY] If previous.tar exists, move it around but keep it safe" 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 imv $KEY/previous.tar $KEY/previous_to_delete.tar
if [[ $? -ne 0 ]]; then if [[ $? -ne 0 ]]; then
echo "[$KEY] Error 003 moving previous.tar around. Corrective action has to be taken manualy" echo "[$KEY] Error 003 moving previous.tar around. Corrective action has to be taken manualy"
...@@ -145,7 +145,7 @@ irods_commit(){ ...@@ -145,7 +145,7 @@ irods_commit(){
) )
echo "[$KEY] If latest.tar exists, move it to previous.tar" 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 imv $KEY/latest.tar $KEY/previous.tar
if [[ $? -ne 0 ]]; then if [[ $? -ne 0 ]]; then
echo "[$KEY] Error 004 moving latest.tar to previous.tar. Corrective action has to be taken manualy" echo "[$KEY] Error 004 moving latest.tar to previous.tar. Corrective action has to be taken manualy"
...@@ -160,7 +160,7 @@ irods_commit(){ ...@@ -160,7 +160,7 @@ irods_commit(){
zabbix_err "${KEY}:Error 005" zabbix_err "${KEY}:Error 005"
return 1 return 1
fi 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 # Choose if the data should be processed or skipped
...@@ -196,6 +196,7 @@ pack_and_send() { ...@@ -196,6 +196,7 @@ pack_and_send() {
if [[ $days -ge 0 ]]; then if [[ $days -ge 0 ]]; then
# We have an uptodate dump (newer than snapshot) # We have an uptodate dump (newer than snapshot)
echo "[$KEY] latest.tar is up to date" echo "[$KEY] latest.tar is up to date"
format_report $KEY "-" $(date +%Y-%m-%dT%H:%M:%S) "-" "-" "Skipped" >> $LOCAL_REPORT
return 0 return 0
fi fi
# find files modified in the last $days. If none, we can skip because latests irods version is up to date. # 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 ...@@ -312,6 +313,6 @@ if [[ ! -d $SNAPSHOT_DIR ]]; then
exit 1 exit 1
fi fi
echo "Starting dump of validated data with 4 jobs" echo "Starting dump of validated data with 3 jobs"
find $SNAPSHOT_DIR -maxdepth 3 -mindepth 3 -type d | sort | parallel --jobs 4 --max-args 1 pack_and_send {} {%} 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" echo "Dump of validated data done"
#!/usr/bin/python3 #!/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 subprocess
import re import re
...@@ -8,16 +15,16 @@ from collections import defaultdict ...@@ -8,16 +15,16 @@ from collections import defaultdict
def get_irods_content(): def get_irods_content():
remote_data = defaultdict(lambda: defaultdict(dict)) remote_data = defaultdict(lambda: defaultdict(dict))
result = subprocess.run(['ils','-r', '-L'], stdout=subprocess.PIPE) result = subprocess.run(['ils','-r', '-L'], stdout=subprocess.PIPE)
# On prepare une structure de donnees (dict) : # On prepare une structure de donnees (dict) :
# remote_data = [ # remote_data = [
# key => [ # key => [
# latest.tar => [sha2 => '', size => ''] , # latest.tar => [sha2 => '', size => ''] ,
# previous.tar => [sha2 => '', size => ''] # previous.tar => [sha2 => '', size => '']
# ] # ]
# ], ... # ], ...
# ] # ]
# Test # Test
# root_dir='/tempZone/home/jschaeffer/' # root_dir='/tempZone/home/jschaeffer/'
# Prod : # Prod :
...@@ -37,10 +44,10 @@ def get_irods_content(): ...@@ -37,10 +44,10 @@ def get_irods_content():
words = re.split(' +', line) words = re.split(' +', line)
remote_data[current_key][words[-1]]['size'] = words[4] remote_data[current_key][words[-1]]['size'] = words[4]
total_size = total_size + int(words[4]) total_size = total_size + int(words[4])
print("Total iRODS storage used : "+str(total_size/(1024^3))+"GB") print("Total iRODS storage used : "+str(total_size/(1024^3))+"GB")
return remote_data return remote_data
# Maintenant, on a l'état sur le serveur irods. Comparons avec notre dépôt : # 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 # Chercher les tribples YYYY/NET/STATION dans /osug-dc/resif/validated_seismic_data
# Pour chacun, vérifier son existence dans remote_data # Pour chacun, vérifier son existence dans remote_data
...@@ -49,8 +56,8 @@ def get_irods_content(): ...@@ -49,8 +56,8 @@ def get_irods_content():
def browse_local_data(): def browse_local_data():
filesDepth3 = glob.glob('/osug-dc/resif/validated_seismic_data/*/*/*') filesDepth3 = glob.glob('/osug-dc/resif/validated_seismic_data/*/*/*')
dirsDepth3 = filter(lambda f: os.path.isdir(f), filesDepth3) dirsDepth3 = filter(lambda f: os.path.isdir(f), filesDepth3)
return list(dirsDepth3) return list(dirsDepth3)
if __name__ == "__main__": if __name__ == "__main__":
dirs = browse_local_data() dirs = browse_local_data()
...@@ -66,4 +73,3 @@ if __name__ == "__main__": ...@@ -66,4 +73,3 @@ if __name__ == "__main__":
print("List of missing keys (usable with RESIFDD_KEYFILE) : ") print("List of missing keys (usable with RESIFDD_KEYFILE) : ")
print('\n'.join(missing_keys)) print('\n'.join(missing_keys))