10.6.2. Workflow¶
10.6.2.1. DefaultIngestWorkflow¶
Un Workflow est défini en JSON avec la structure suivante :
- un identifiant (id)
- une clé (identifier)
- un nom (name)
- une catégorie (typeProc)
- une liste de Steps : La structure d’une step donnée est la suivante
un identifiant de famille de Workers (workerGroupId)
un identifiant de Step (stepName)
un modèle d’exécution (behavior) pouvant être : BLOCKING : le traitement est bloqué en cas d’erreur, il est nécessaire de recommencer le workflow NOBLOCKING : le traitement peut continuer malgrée les erreurs FINALLY: le traitement est executé quelque soit la statut des traitements precedants
un modèle de distribution :
kind: un type pouvant être :
- REF : pas de distribution pour ce step et définit une référence vers un fichier à traiter. (Exemple: manifest.xml)
- LIST :
- si la valeur de “element” est “Units” : la liste des éléments à traiter est incluse dans un fichier ingestLevelStack.json. Ce fichier contient les guid des archive units ordonnés par niveau de graphe.
- si la valeur de “element” est autre : la liste des éléments à traiter est représentée par les fichiers présents dans le sous-répertoire représenté par “element” (ex : “ObjectGroup”)
- LIST_IN_FILE: Fichier contenant une liste de GUID à traiter dans la distribution
l’élément de distribution (element) indiquant l’élément unique (REF) ou le chemin vers un dossier ou un fichier sur le Workspace (LIST, LIST_IN_FILE)
type: est-ce une distribution sur des unités archivistiques ou sur des groupes d’objets.
statusOnEmptyDistribution: Le statut qu’on attribue au step si jamais la distribution n’a pas eu lieu. Par defaut: WARNING
bulkSize: La taille du bulk : c’est à dire le nombre d’élément qui sera envoyé au worker. Par défaut, la valeur est récupérée depuis la configuration avec la variable workerBulkSize.
une liste d’Actions :
un nom d’action (actionKey)
un modèle d’exécution (behavior) pouvant être BLOCKING ou NOBLOCKING
des paramètres d’entrées (in) :
un nom (name) utilisé pour référencer cet élément entre différents handlers d’une même étape
une cible (uri) comportant un schema (WORKSPACE, MEMORY, VALUE) et un path :
- WORKSPACE:path indique le chemin relatif sur le workspace
- WORKSPACE_OBJECT:path indique le chemin relatif sur un dossier intitulé au nom d’objet courant situé au workspace
- MEMORY:path indique le nom de la clef de valeur
- MEMORY_SINGLE:path indique le nom de la clef de valeur
- VALUE:path indique la valeur statique en entrée
chaque handler peut accéder à ces valeurs, définies dans l’ordre stricte, via le handlerIO
- WORKSPACE, WOKSPACE_OBJECT : implicitement un File
- MEMORY, MEMORY_SINGLE : implicitement un objet mémoire déjà alloué par un Handler précédent
- VALUE : implicitement une valeur String
des paramètres de sortie (out) :
un nom (name) utilisé pour référencer cet élément entre différents handlers d’une même étape
une cible (uri) comportant un schema (WORKSPACE, MEMORY) et un path :
- WORKSPACE:path indique le chemin relatif sur le workspace
- WORKSPACE_OBJECT:path indique le chemin relatif sur un dossier intitulé au nom d’objet courant situé au workspace
- MEMORY:path indique le nom de la clef de valeur
- MEMORY_SINGLE:path indique le nom de la clef de valeur
chaque handler peut stocker les valeurs finales, définies dans l’ordre stricte, via le handlerIO
- WORKSPACE, WORKSPACE_OBJECT : implicitement un File local
- MEMORY, MEMORY_SINGLE : implicitement un objet mémoire
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 | {
"id": "DEFAULT_WORKFLOW",
"name": "Default Ingest Workflow",
"identifier": "PROCESS_SIP_UNITARY",
"typeProc": "INGEST",
"comment": "Default Ingest Workflow V6",
"steps": [
{
"workerGroupId": "DefaultWorker",
"stepName": "STP_INGEST_CONTROL_SIP",
"behavior": "BLOCKING",
"distribution": {
"kind": "REF",
"element": "SIP/manifest.xml"
},
"actions": [
{
"action": {
"actionKey": "CHECK_SEDA",
"behavior": "BLOCKING"
}
},
{
"action": {
"actionKey": "CHECK_HEADER",
"behavior": "BLOCKING",
"in": [
{
"name": "checkOriginatingAgency",
"uri": "VALUE:true"
},
{
"name": "checkProfile",
"uri": "VALUE:true"
}
]
}
},
{
"action": {
"actionKey": "CHECK_DATAOBJECTPACKAGE",
"behavior": "BLOCKING",
"in": [
{
"name": "checkNoObject",
"uri": "VALUE:false"
},
{
"name": "UnitType",
"uri": "VALUE:INGEST"
}
],
"out": [
{
"name": "unitsLevel.file",
"uri": "WORKSPACE:UnitsLevel/ingestLevelStack.json"
},
{
"name": "mapsDOtoOG.file",
"uri": "WORKSPACE:Maps/DATA_OBJECT_TO_OBJECT_GROUP_ID_MAP.json"
},
{
"name": "mapsDO.file",
"uri": "WORKSPACE:Maps/DATA_OBJECT_ID_TO_GUID_MAP.json"
},
{
"name": "mapsObjectGroup.file",
"uri": "WORKSPACE:Maps/OBJECT_GROUP_ID_TO_GUID_MAP.json"
},
{
"name": "mapsObjectGroup.file",
"uri": "MEMORY:MapsMemory/OG_TO_ARCHIVE_ID_MAP.json"
},
{
"name": "mapsDOIdtoDODetail.file",
"uri": "WORKSPACE:Maps/DATA_OBJECT_ID_TO_DATA_OBJECT_DETAIL_MAP.json"
},
{
"name": "mapsUnits.file",
"uri": "WORKSPACE:Maps/ARCHIVE_ID_TO_GUID_MAP.json"
},
{
"name": "globalSEDAParameters.file",
"uri": "WORKSPACE:ATR/globalSEDAParameters.json"
},
{
"name": "mapsObjectGroup.file",
"uri": "MEMORY:MapsMemory/OBJECT_GROUP_ID_TO_GUID_MAP.json"
}
]
}
}
]
},
{
"workerGroupId": "DefaultWorker",
"stepName": "STP_OG_CHECK_AND_TRANSFORME",
"behavior": "BLOCKING",
"distribution": {
"kind": "LIST_ORDERING_IN_FILE",
"element": "ObjectGroup"
},
"actions": [
{
"action": {
"actionKey": "CHECK_DIGEST",
"behavior": "BLOCKING",
"in": [
{
"name": "algo",
"uri": "VALUE:SHA-512"
}
],
"out": [
{
"name": "groupObject",
"uri": "MEMORY:groupObjectId"
}
]
}
},
{
"action": {
"actionKey": "OG_OBJECTS_FORMAT_CHECK",
"behavior": "BLOCKING",
"in": [
{
"name": "groupObject",
"uri": "MEMORY:groupObjectId"
}
]
}
}
]
},
{
"workerGroupId": "DefaultWorker",
"stepName": "STP_UNIT_CHECK_AND_PROCESS",
"behavior": "BLOCKING",
"distribution": {
"kind": "LIST_ORDERING_IN_FILE",
"element": "Units"
},
"actions": [
{
"action": {
"actionKey": "CHECK_UNIT_SCHEMA",
"behavior": "BLOCKING",
"out": [
{
"name": "unit",
"uri": "MEMORY:unitId"
}
]
}
},
{
"action": {
"actionKey": "UNITS_RULES_COMPUTE",
"behavior": "BLOCKING",
"in": [
{
"name": "unit",
"uri": "MEMORY:unitId"
}
]
}
}
]
},
{
"workerGroupId": "DefaultWorker",
"stepName": "STP_STORAGE_AVAILABILITY_CHECK",
"behavior": "BLOCKING",
"distribution": {
"kind": "REF",
"element": "SIP/manifest.xml"
},
"actions": [
{
"action": {
"actionKey": "STORAGE_AVAILABILITY_CHECK",
"behavior": "BLOCKING"
}
}
]
},
{
"workerGroupId": "DefaultWorker",
"stepName": "STP_OBJ_STORING",
"behavior": "BLOCKING",
"distribution": {
"kind": "LIST_ORDERING_IN_FILE",
"element": "ObjectGroup"
},
"actions": [
{
"action": {
"actionKey": "OBJ_STORAGE",
"behavior": "BLOCKING",
"out": [
{
"name": "groupObject",
"uri": "MEMORY:groupObjectId"
}
]
}
},
{
"action": {
"actionKey": "OG_METADATA_INDEXATION",
"behavior": "BLOCKING",
"in": [
{
"name": "groupObject",
"uri": "MEMORY:groupObjectId"
}
]
}
}
]
},
{
"workerGroupId": "DefaultWorker",
"stepName": "STP_UNIT_METADATA",
"behavior": "BLOCKING",
"distribution": {
"kind": "LIST_ORDERING_IN_FILE",
"element": "Units"
},
"actions": [
{
"action": {
"actionKey": "UNIT_METADATA_INDEXATION",
"behavior": "BLOCKING",
"in": [
{
"name": "globalSEDAParameters.file",
"uri": "WORKSPACE:ATR/globalSEDAParameters.json"
}
]
}
}
]
},
{
"workerGroupId": "DefaultWorker",
"stepName": "STP_OG_STORING",
"behavior": "BLOCKING",
"distribution": {
"kind": "LIST",
"element": "ObjectGroup"
},
"actions": [
{
"action": {
"actionKey": "OG_METADATA_STORAGE",
"behavior": "BLOCKING"
}
},
{
"action": {
"actionKey": "COMMIT_LIFE_CYCLE_OBJECT_GROUP",
"behavior": "BLOCKING"
}
},
]
},
{
"workerGroupId": "DefaultWorker",
"stepName": "STP_UNIT_STORING",
"behavior": "BLOCKING",
"distribution": {
"kind": "LIST",
"element": "Units"
},
"actions": [
{
"action": {
"actionKey": "UNIT_METADATA_STORAGE",
"behavior": "BLOCKING"
}
},
{
"action": {
"actionKey": "COMMIT_LIFE_CYCLE_UNIT",
"behavior": "BLOCKING"
}
}
]
},
{
"workerGroupId": "DefaultWorker",
"stepName": "STP_ACCESSION_REGISTRATION",
"behavior": "BLOCKING",
"distribution": {
"kind": "REF",
"element": "SIP/manifest.xml"
},
"actions": [
{
"action": {
"actionKey": "ACCESSION_REGISTRATION",
"behavior": "BLOCKING",
"in": [
{
"name": "mapsUnits.file",
"uri": "WORKSPACE:Maps/ARCHIVE_ID_TO_GUID_MAP.json"
},
{
"name": "mapsDO.file",
"uri": "WORKSPACE:Maps/OBJECT_GROUP_ID_TO_GUID_MAP.json"
},
{
"name": "mapsDO.file",
"uri": "WORKSPACE:Maps/DATA_OBJECT_ID_TO_DATA_OBJECT_DETAIL_MAP.json"
},
{
"name": "globalSEDAParameters.file",
"uri": "WORKSPACE:ATR/globalSEDAParameters.json"
}
]
}
}
]
},
{
"workerGroupId": "DefaultWorker",
"stepName": "STP_INGEST_FINALISATION",
"behavior": "FINALLY",
"distribution": {
"kind": "REF",
"element": "SIP/manifest.xml"
},
"actions": [
{
"action": {
"actionKey": "ATR_NOTIFICATION",
"behavior": "NOBLOCKING",
"in": [
{
"name": "mapsUnits.file",
"uri": "WORKSPACE:Maps/ARCHIVE_ID_TO_GUID_MAP.json",
"optional": true
},
{
"name": "mapsDO.file",
"uri": "WORKSPACE:Maps/DATA_OBJECT_ID_TO_GUID_MAP.json",
"optional": true
},
{
"name": "mapsDOtoOG.file",
"uri": "WORKSPACE:Maps/DATA_OBJECT_TO_OBJECT_GROUP_ID_MAP.json",
"optional": true
},
{
"name": "mapsDOtoVersionBDO.file",
"uri": "WORKSPACE:Maps/DATA_OBJECT_ID_TO_DATA_OBJECT_DETAIL_MAP.json",
"optional": true
},
{
"name": "globalSEDAParameters.file",
"uri": "WORKSPACE:ATR/globalSEDAParameters.json",
"optional": true
},
{
"name": "mapsOG.file",
"uri": "WORKSPACE:Maps/OBJECT_GROUP_ID_TO_GUID_MAP.json",
"optional": true
}
],
"out": [
{
"name": "atr.file",
"uri": "WORKSPACE:ATR/responseReply.xml"
}
]
}
},
{
"action": {
"actionKey": "ROLL_BACK",
"behavior": "BLOCKING"
}
}
]
}
]
}
|
10.6.2.1.1. Etapes¶
Step 1 - STP_SANITY_CHECK_SIP : Vérification des opérations effectuées dans la partie external : vérification par Antivirus, vérification des formats et vérification du nom & empreinte du fichier manifest
- SANITY_CHECK_SIP : Scanner le SIP par antivirus
- CHECK_CONTAINER : Contrôle du format du conteneur du SIP
- MANIFEST_FILE_NAME_CHECK : Contrôle du nom du bordereau de transfert
- MANIFEST_DIGEST_CHECK : Contrôle de l’empreinte du bordereau de transfert
Step 2 - STP_UPLOAD_SIP : Vérification la décompression du SIP en workspace
- UPLOAD_SIP : Validation de l’existence du SIP dans workspace
Step 3 - STP_INGEST_CONTROL_SIP : Check SIP / distribution sur REF GUID/SIP/manifest.xml
CHECK_SEDA : - Test existence manifest.xml - Validation XSD SEDA manifest.xml
CHECK_HEADER : - CHECK_AGENT: Vérifier l’existence des services agents dans le manifest et dans le référentiel des services agents. - CHECK_CONTRACT_INGEST : Vérifier l’existence des contrats d’entrée dans le manifest et dans le référentiel des contrats d’entrée - CHECK_IC_AP_RELATION: Vérifier le profile d’archivage et sa relation avec le contrat d’entrée - CHECK_ARCHIVEPROFILE: valider le manifest avec le fichier XSD/RNG défini dans le profile d’archivage
- PREPARE_STORAGE_INFO :
- Vérifier que le storage est disponible
- Récupérer les informations de connection au storage et les offres de stockage.
CHECK_DATAOBJECTPACKAGE:
Cas 1: arbres et plans d’accès
- CHECK_NO_OBJECT
- CHECK_MANIFEST_OBJECTNUMBER
- CHECK_MANIFEST
- Cas 2: SIP
- CHECK_MANIFEST_DATAOBJECT_VERSION
- CHECK_MANIFEST_OBJECTNUMBER
- CHECK_MANIFEST
- CHECK_CONSISTENCY
CHECK_ATTACHEMENT: Vérification du rattachement entre objets, groupes d’objets et unités archivistiques existantes et les nouveaux
Step 4 - STP_OG_CHECK_AND_TRANSFORME : Check Objects Compliance du SIP / distribution sur LIST GUID/BinaryDataObject
- CHECK_DIGEST : Contrôle de l’objet binaire correspondant du BDO taille et empreinte via Workspace
- CHECK_OBJECT_SIZE : Vérification de la taille des fichiers
- OG_OBJECTS_FORMAT_CHECK : - Contrôle du format des objets binaires - Consolidation de l’information du format dans l’object groupe correspondant si nécessaire
Step 5 - STP_UNIT_CHECK_AND_PROCESS : Check des archive unit et de leurs règles associées
- CHECK_UNIT_SCHEMA : Contrôles intelligents du Json représentant l’Archive Unit par rapport à un schéma Json
- CHECK_ARCHIVE_UNIT_PROFILE : Vérification de la conformité aux profils d’unité archivistique
- CHECK_CLASSIFICATION_LEVEL : Vérification du niveau de classification
- UNITS_RULES_COMPUTE : Calcul des règles de gestion
Step 6 - STP_STORAGE_AVAILABILITY_CHECK : Check Storage Availability / distribution REF GUID/SIP/manifest.xml
- STORAGE_AVAILABILITY_CHECK : Contrôle de la taille totale à stocker par rapport à la capacité des offres de stockage pour une stratégie et un tenant donnés
Step 7 - STP_OBJ_STORING : Rangement et indexation des objets
- OBJ_STORAGE : Écriture des objets sur l’offre de stockage des BDO des GO
- OG_METADATA_INDEXATION : Indexation des métadonnées des ObjectGroup
Step 8 - STP_UNIT_METADATA : Indexation des métadonnées des Units
- UNIT_METADATA_INDEXATION : Transformation Json Unit et intégration GUID Unit + GUID GO
Step 9 - STP_OG_STORING : Rangement des métadonnées des objets
- COMMIT_LIFE_CYCLE_OBJECT_GROUP : Écriture des objets sur l’offre de stockage des BDO des GO
- OG_METADATA_STORAGE : Enregistrement en base des métadonnées des ObjectGroup ainsi que leurs journaux de cycle de vie
Step 10 - STP_UNIT_STORING : Index Units / distribution sur LIST GUID/Units
- COMMIT_LIFE_CYCLE_UNIT : Écriture des métadonnées des Units sur l’offre de stockage des BDO des GO
- UNIT_METADATA_STORAGE : Enregistrement en base des métadonnées des Units ainsi que leurs journaux de cycle de vie
Step 11 - STP_UPDATE_OBJECT_GROUP : Processus de mise à jour du groupe d’objets
- OBJECT_GROUP_UPDATE : Mise à jour des groupes d’objets existants
- COMMIT_LIFE_CYCLE_OBJECT_GROUP : Enregistrement des journaux du cycle de vie des groupes d’objets
- OG_METADATA_STORAGE : Écriture des métadonnées du groupe d’objets sur les offres de stockage
Step 12 - STP_ACCESSION_REGISTRATION : Alimentation du registre de fond
- ACCESSION_REGISTRATION : enregistrement des archives prises en charge dans le Registre des Fonds
Step 13 et finale - STP_INGEST_FINALISATION : Notification de la fin de l’opération d’entrée. Cette étape est obligatoire et sera toujours exécutée, en dernière position.
- ATR_NOTIFICATION : - génération de l’ArchiveTransferReply xml (OK ou KO) - enregistrement de l’ArchiveTransferReply xml dans les offres de stockage
- ROLL_BACK : Mise en cohérence des Journaux du Cycle de Vie
10.6.2.1.2. Création d’un nouveau step¶
Un step est une étape de workflow. Il regroupe un ensemble d’actions (handler). Ces steps sont définis dans le workflowJSONvX.json (X=1,2).