Offre froide en mode INA¶
Cette procédure décrit l’installation en local d’une offre froide configurée en mode INA, et les vérifications associées : écriture et lecture d’archives par une entrée et un export DIP, puis commande de bandes.
Note
Pour le paramétrage d’une offre froide sur une plate-forme déployée, se reporter à doc/fr/installation/installation/21-addons.rst.
1. Démarrez les COTS¶
Restreignez les droits des clés privées, sinon le sshd du conteneur ignore sa clé d’hôte au démarrage :
chmod 600 /vitam/conf/ina-tape-proxy/ssh/sftp_server_key
chmod 600 /vitam/conf/ina-tape-proxy/ssh/vitam_client_key
Depuis dev-deployment/docker-cots :
docker compose up -d
Le docker-compose de développement démarre, en plus des COTS habituels, un conteneur SFTP qui tient lieu de canal vers l’INA.
2. Créez la configuration de lancement de l’offre froide¶
Dans IntelliJ, dupliquez la configuration Offer et modifiez :
Name Offer3
Main class fr.gouv.vitam.storage.offers.rest.DefaultOfferMain
Module vitam-offer
Program arguments /vitam/conf/offer3/offer.conf
Working directory /vitam/conf/offer3/
VM options identiques à celles de Offer
Ajoutez Offer3 à la configuration Multirun Vitam, après InaTapeProxy qui y figure déjà.
3. Déclarez l’offre auprès du moteur de stockage¶
Dans /etc/hosts :
127.0.0.1 offer-tape-1.service.consul
Dans vitam-conf-dev/conf/storage/static-offer.json :
{
"id": "offer-tape-1.service.consul",
"baseUrl": "http://offer-tape-1.service.consul:9902",
"asyncRead": true
}
Vérifiez que le fichier de rattachement au driver contient l’offre froide, et ajoutez-la sinon :
cat /vitam/data/storage/fr.gouv.vitam.storage.offers.workspace.driver.DriverImpl
# offer-fs-1.service.consul;offer-tape-1.service.consul
4. Lancez les services¶
Lancez la configuration Multirun Vitam.
5. Routez les entrées vers l’offre froide¶
Créez un contrat de gestion dont la stratégie de stockage est tape ou tape_only, et rattachez-le au contrat d’entrée utilisé pour les versements.
6. Lancez le simulateur INA¶
sudo apt install python3-paramiko
python3 dev-deployment/ina-simulator/ina_simulator.py
Prudence
Sans le simulateur, les écritures aboutissent mais toute lecture d’archive reste bloquée jusqu’à expiration de pollingTimeoutMS, quinze minutes par défaut.
7. Versez un SIP et vérifiez l’écriture sur bande¶
Versez un SIP par le moyen habituel.
Important
Les objets n’atteignent la bande qu’une fois le tar finalisé : à maxTarFileSize, ou après tarBufferingTimeoutInMinutes — deux minutes en configuration de développement.
État du tar, dans /vitam/data/offer3/inputTars/<file-bucket>/ :
<horodatage>-<uuid>.tar.tmp tar ouvert, objets en cours d'accumulation
<horodatage>-<uuid>.tar tar scellé, ordre d'écriture en file
(plus rien) écrit sur bande, déplacé vers cachedTars
Traces du proxy :
POST /drives/0/io/write?inputPath=.../inputTars/test-objects/<horodatage>-<guid>.tar
SftpIoService - Upload completed successfully: /input/<archive>.tar
SftpIoService - Remote marker sent to INA: WRITE_OK at /request/<archive>.tar.WRITE_OK
Sortie du simulateur :
Marqueur WRITE_OK détecté : '<archive>.tar.WRITE_OK'
Archivé sur la 'bande' : '/input/tape/<archive>.tar'
8. Exportez un DIP et vérifiez la lecture depuis la bande¶
Exportez un DIP portant sur l’opération versée.
Traces du proxy :
GET /drives/0/io/read?outputPath=.../tmpTarOutput/<archive>.tar
SftpIoService - Download completed for /output/<archive>.tar
Sortie du simulateur :
Requête de lecture détectée : '<archive>.tar.READ_REQUEST'
Copié avec succès vers : '/output/<archive>.tar'
9. Vérifiez que les labels ne transitent pas par l’INA¶
Le label d’une bande est écrit au premier versement sur une bande vierge, et relu à chaque montage de bande.
Traces du proxy, à l’écriture :
POST /drives/0/io/write?inputPath=.../inputTars/tmp/tape-Label-TAPE_0001
TapeLabelIoServiceDecorator - Tape label tape-Label-TAPE_0001 stored successfully
Traces du proxy, à la lecture :
GET /drives/0/io/read?outputPath=.../tmpTarOutput/tape-Label-TAPE_0001
TapeLabelIoServiceDecorator - Tape label tape-Label-TAPE_0001 retrieved successfully
Le label est dans le répertoire local :
ls /vitam/data/ina-tape-proxy/labels
10. Lancez une commande de bandes¶
Appelez le port d’administration de l’offre froide, qui répond 202 :
curl -i -X POST http://localhost:29902/offer/v1/tapeorder \
-H 'Content-Type: application/json' \
-d '{"tapeCodes":["TAPE_0001"]}'
Traces du proxy :
POST /tapeorder tapeOrders=[...]
SftpIoService - Sending order request for 1 tape(s) to /request/tape_order_request_<horodatage>.json
Le fichier de commande reste dans /request du serveur SFTP : le simulateur ne traite que les marqueurs WRITE_OK et READ_REQUEST.
Note
Sur une plate-forme déployée, la commande de bandes se lance par le playbook deployment/ansible-vitam-exploitation/tape_order.yml, décrit dans doc/fr/exploitation/topics/46-tapeorder.rst.