documentazione_3di_riservata:replicatore_ader
Differenze
Queste sono le differenze tra la revisione selezionata e la versione attuale della pagina.
Entrambe le parti precedenti la revisioneRevisione precedenteProssima revisione | Revisione precedente | ||
documentazione_3di_riservata:replicatore_ader [2022/07/22 15:41] – [dcw2mysql.lua] chiara.pavanati | documentazione_3di_riservata:replicatore_ader [Data sconosciuta] (versione attuale) – eliminata - modifica esterna (Data sconosciuta) 127.0.0.1 | ||
---|---|---|---|
Linea 1: | Linea 1: | ||
- | ===== Replicatore AdEr ===== | ||
- | |||
- | Progetto in CVS: / | ||
- | |||
- | ==== Struttura del progetto ==== | ||
- | |||
- | Ci sono 2 '' | ||
- | |||
- | * '' | ||
- | |||
- | * '' | ||
- | |||
- | * '' | ||
- | |||
- | ==== Funzionamento della replica, live & past ==== | ||
- | |||
- | === Avvio === | ||
- | |||
- | Il processo viene avviato tramite '' | ||
- | |||
- | Il '' | ||
- | |||
- | * La '' | ||
- | * La '' | ||
- | |||
- | Il file '' | ||
- | |||
- | < | ||
- | <cmd stored=" | ||
- | </ | ||
- | </ | ||
- | < | ||
- | <cmd stored=" | ||
- | </ | ||
- | </ | ||
- | |||
- | Si indica il '' | ||
- | |||
- | ==== Comandi principali ==== | ||
- | |||
- | * '' | ||
- | * '' | ||
- | |||
- | ==== liveReplicator ==== | ||
- | |||
- | Anche se il file '' | ||
- | |||
- | Il file ha questa '' | ||
- | |||
- | <?xml version=" | ||
- | <replica db=" | ||
- | |||
- | === Attributi === | ||
- | |||
- | * '' | ||
- | * '' | ||
- | * '' | ||
- | * '' | ||
- | |||
- | La '' | ||
- | |||
- | In origine il processo si bloccava ad ogni '' | ||
- | |||
- | Il '' | ||
- | |||
- | * Invio di mail di '' | ||
- | * Invio di una mail '' | ||
- | * Invio di mail di '' | ||
- | |||
- | === Server coinvolti === | ||
- | |||
- | == Vecchio server di produzione SDR == | ||
- | |||
- | * '' | ||
- | * '' | ||
- | * '' | ||
- | |||
- | == Server di produzione AdER == | ||
- | |||
- | * '' | ||
- | * '' | ||
- | |||
- | ==== pastReplicator ==== | ||
- | |||
- | Quando chiedono interventi con efficacia retroattiva, | ||
- | |||
- | Anche in questo caso si usa un Job che lavora solitamente negli orari di minore attività. | ||
- | |||
- | La filosofia è simile a quella del '' | ||
- | |||
- | < | ||
- | <cmd stored=" | ||
- | < | ||
- | </ | ||
- | </ | ||
- | |||
- | Evoca il comando '' | ||
- | |||
- | '' | ||
- | |||
- | Il file sul quale si basa la '' | ||
- | |||
- | <?xml version=" | ||
- | <replica db=" | ||
- | |||
- | Esso si compone di: | ||
- | |||
- | * '' | ||
- | * '' | ||
- | * '' | ||
- | * '' | ||
- | * '' | ||
- | |||
- | L’esempio prevede di partire dal fondo e procedere a ritroso verso l’inizio. Questo perché solitamente i record più recenti sono quelli che gli interessa vengano replicati prima. | ||
- | |||
- | Di volta in volta, mentre '' | ||
- | Mettendo “step” con valore positivo, la replica non procede da “last” verso “first” ma in senso inverso ed inversamente verrà rettificato “first” e lasciato invariato “last”. | ||
- | |||
- | Come il processo di replica live, la '' | ||
- | |||
- | Quando '' | ||
- | |||
- | ==== dcw2mysql.lua ==== | ||
- | |||
- | Questo script viene lanciato su due tipologie di archivio, '' | ||
- | |||
- | Che si usi '' | ||
- | |||
- | Vediamo ora come funziona il processo di replica vero e proprio. | ||
- | |||
- | La modalità di '' | ||
- | |||
- | * In assenza di connessione attiva ne apre una nei confronti di MySQL sulla base dei dati raccolti; | ||
- | * Imposta l’encoding UTF ed apre la transazione; | ||
- | * Controlla di che tipo di record si tratta ed evoca uno specifico replicatore per ciascuno di essi, distinguendo le modalità “ins” e “mod”, trattate nello stesso modo, dalla modalità “del”. In realtà solo la modalità “mod” viene usata; | ||
- | * Ciascuna funzione di replica acquisisce elementi ed attributi dal record e popola una tabella principale, poi, in seguito, procede con gli elementi ripetibili, in modo analogo, e popola le tabelle correlate; | ||
- | * Tutte le operazioni di inserimento sono di fatto delle UPSERT che vengono composte in questo modo: | ||
- | - Man mano che si aggiungono campi (elementi o attributi) si popola una tabella con nome colonna e valore ed eventualmente una tabella parallela con i valori “if null”; | ||
- | - Il valore della colonna può essere popolato in modo standard ('' | ||
- | * Ciascuna delle '' | ||
- | - Il record XML; | ||
- | - Eventuale nodo dal quale prendere il valore con percorso relativo; | ||
- | - xPath da cui prendere il valore ('' | ||
- | - Nome della colonna che lo ospiterà; | ||
- | - Modalità di conversione (standard, bool, num, date); | ||
- | - La tabella dove introdurre l’espressione, | ||
- | - Solo per il tradotto, una tabellina dei valori tradotti ed un default. | ||
- | * Una volta preparata la tabella coi valori ('' | ||
- | Segue altro trucco per sostituire il termine UPDATE# che serve a togliere la prima virgola e poi si annullano i valori da non toccare. | ||
- | * Viene eseguita l’operazione su MySQL ('' | ||
- | * A seguire, per tutte le aree ripetibili, si segue la stessa filosofia, usando dove necessario il nodo ripetuto dal quale prendere un valore e così via. Praticametne in tutti i casi si procede alla cancellazione delle righe della tabella che si andrà a popolare per tener conto dei casi di rimozione. | ||
- | * Al termine del processo di replica, la funzione torna: | ||
- | - '' | ||
- | - '' | ||
- | - eventuale parametro '' | ||
- | |||
- | Per fare le attività dette si avvale ampiamente di '' | ||
- | |||
- | === Trattamento degli errori === | ||
- | |||
- | Vediamo il file '' | ||
- | |||
- | <WRAP prewrap> | ||
- | < | ||
- | -- DocWay to MySQL sample configuration | ||
- | |||
- | local dcw2mysqlcfg = { | ||
- | onErrorAction = {major=' | ||
- | notifyTo = {to=' | ||
- | mailTemplate = ' | ||
- | doubleAttachmentMailTemplate = 'A record contains a double rif to the same attachment.\nYou don\'t need to do anything but please pay attention to attachment #attach# on record # | ||
- | doubleFolderMailTemplate = 'A record contains a double rif to the same folder.\nYou don\'t need to do anything but please pay attention to folder #cod_fasc# on record # | ||
- | missingAttachmentMailTemplate = 'A record contains a rif to an empty attachment.\nYou don\'t need to do anything but please pay attention to record # | ||
- | missingCfgReplicaFile = ' | ||
- | pastReplicaCompleted = ' | ||
- | mailOpt = { | ||
- | from = ' | ||
- | from_label = ' | ||
- | -- user = nil, -- Admin smtp user name if login enabled nil otherwise | ||
- | -- password = nil, --Admin smtp password if login enabled nil otherwise | ||
- | -- server = ' | ||
- | -- port = 25, -- smtp server port {25 | 465} | ||
- | -- ssl = true --true if there is an ssl communication { true | false } | ||
- | }, | ||
- | | ||
- | } | ||
- | |||
- | return dcw2mysqlcfg | ||
- | |||
- | </ | ||
- | </ | ||
- | |||
- | In particolare ci interessa la tabella '' | ||
- | |||
- | * '' | ||
- | * '' | ||
- | * '' | ||
- | * '' | ||
- | * '' | ||
- | |||
- | Per ciascuno di essi i '' | ||
- | |||
- | * '' | ||
- | * '' | ||
- | * '' | ||
- | |||
- | In tutti i casi d’errore che non vengono trattati come '' | ||
- | |||
- | Se c’è errore e per quella tipologia d’errore (major/ | ||
- | |||
- | Attualmente hanno richiesto di non essere interrotti neanche in caso di errore major perché preferiscono avere alcuni record in meno che si possono anche replicare a mano, che dover rinunciare a molti record replicabili. | ||
- | |||
- | === customReplicator === | ||
- | |||
- | Compie esattamente lo stesso lavoro del '' | ||
- | |||
- | Il comportamento è del tutto analogo, compreso l’invio delle mail di inizio e fine lavorazione. | ||
- | |||
- | <WRAP prewrap> | ||
- | < | ||
- | |||
- | <cmd stored=" | ||
- | < | ||
- | </ | ||
- | |||
- | </ | ||
- | </ | ||
- | |||
- | === pecReplicator === | ||
- | |||
- | Processo “super-custom” fatto per replicare solo i record di struttura esterna o persona esterna per le quali fosse necessario aggiornare le pec in ACL. | ||
- | |||
- | Si poteva fare con '' | ||
- | |||
- | Questo processo può essere ignorato o preso a spunto per altre customizzazioni. | ||
- | |||
- | ==== Nuovi campi ==== | ||
- | |||
- | L’introduzione dei nuovi campi si fa così: | ||
- | |||
- | * Accedere all’archivio con MySQL WorkBench. | ||
- | * Applicare le varianti (es. aggiunta campo “pippo”). Impostare ‘pk’ per primary key, ‘nn’ per not null, ‘uq‘ per unique index, ‘b’ per binary e così via... | ||
- | * e quando si è pronti ad eseguirle, (‘Apply’) copiare il comando che viene presentato ed eseguirlo. | ||
- | * Creare un nuovo file changes_< | ||
- | N.B.: dal momento che la versione di MySQL che siamo soliti usare noi (5.7.X) differisce da quella che usano loro (5.6.35), i comandi che vengono segnalati come ‘CHANGE COLUMN’ devono essere invece espressi come ‘MODIFY’. (Vds. changes_20191028.sql). | ||
- | * Raccolte le istruzioni, variazioni al file dcw2mysql.lua (ed eventuali a dcw2ysqlcfg.lua), | ||
- | |||
- | ==== L’accesso al DB MySQL del cliente ==== | ||
- | |||
- | Il '' | ||
- | |||
- | Vale quindi la pena di aprire un tunnel con la porta desiderata localmente[2] che, una volta collegati al '' | ||
- | |||
- | Il collegamento con strumenti quali MySQL Workbench darà accesso e visibilità direttamente dell’archivio del cliente. Le credenziali d’accesso sono le stesse registrate nei file '' | ||
- | |||
- | ==== Gestione degli scarti ==== | ||
- | |||
- | A intervalli regolari ADER apre delle segnalazioni relative agli scarti del replicatore. | ||
- | |||
- | I possibili '' | ||
- | |||
- | * '' | ||
- | * '' | ||
- | * Relativamente al repertorio Atti Successivi è capitato che il campo '' | ||
- | ________________ | ||
- | [1] Lo script era stato originariamente concepito per essere usato col replicato di eXtraWay EE. Col replicatore sono previste altre modalità di replica, quali “ins”, “del”, e “attach”. In questo caso si opera sempre in modalità “mod”. | ||
- | |||
- | [2] MySQL utilizza la porta 3306, ma per essere sicuri di non interferire con il proprio MySQL locale e soprattutto di non trovarsi ad osservare un archivio pensando che sia quello del cliente (o quello locale e vice versa) e farci sopra interventi non appropriati, | ||
/data/attic/documentazione_3di_riservata/replicatore_ader.1658497293.txt.gz · Ultima modifica: 2022/07/22 15:41 da chiara.pavanati