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.