FSRecoveryLibrary.java
/*
* GovWay - A customizable API Gateway
* https://govway.org
*
* Copyright (c) 2005-2024 Link.it srl (https://link.it).
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License version 3, as published by
* the Free Software Foundation.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*
*/
package org.openspcoop2.monitor.engine.fs_recovery;
import org.openspcoop2.core.commons.dao.DAOFactory;
import org.openspcoop2.generic_project.utils.ServiceManagerProperties;
import org.openspcoop2.monitor.engine.constants.Costanti;
import org.openspcoop2.protocol.sdk.diagnostica.IDiagnosticProducer;
import org.openspcoop2.protocol.sdk.dump.IDumpProducer;
import org.openspcoop2.protocol.sdk.tracciamento.ITracciaProducer;
import org.openspcoop2.utils.UtilsException;
import org.slf4j.Logger;
import java.io.File;
import java.sql.Connection;
/**
* FSRecoveryLibrary
*
* @author Poli Andrea (apoli@link.it)
* @author $Author$
* @version $Rev$, $Date$
*/
public class FSRecoveryLibrary {
private FSRecoveryLibrary() {}
public static void generate(FSRecoveryConfig config,
DAOFactory daoFactory, Logger daoFactoryLogger, ServiceManagerProperties daoFactoryServiceManagerProperties,
long gestioneSerializableDBAttesaAttiva, int gestioneSerializableDBCheckInterval,
org.openspcoop2.core.transazioni.dao.IServiceManager transazioniSM,
ITracciaProducer tracciamentoAppender,
IDiagnosticProducer diagnosticoAppender,
IDumpProducer dumpAppender, boolean transazioniRegistrazioneDumpHeadersCompactEnabled,
org.openspcoop2.core.eventi.dao.IServiceManager pluginsEventiSM){
generate(config,
daoFactory, daoFactoryLogger, daoFactoryServiceManagerProperties,
gestioneSerializableDBAttesaAttiva, gestioneSerializableDBCheckInterval,
transazioniSM, tracciamentoAppender, diagnosticoAppender,
dumpAppender, transazioniRegistrazioneDumpHeadersCompactEnabled,
pluginsEventiSM, null);
}
public static void generate(FSRecoveryConfig config,
DAOFactory daoFactory, Logger daoFactoryLogger, ServiceManagerProperties daoFactoryServiceManagerProperties,
long gestioneSerializableDBAttesaAttiva, int gestioneSerializableDBCheckInterval,
org.openspcoop2.core.transazioni.dao.IServiceManager transazioniSM,
ITracciaProducer tracciamentoAppender,
IDiagnosticProducer diagnosticoAppender,
IDumpProducer dumpAppender, boolean transazioniRegistrazioneDumpHeadersCompactEnabled,
org.openspcoop2.core.eventi.dao.IServiceManager pluginsEventiSM,
Connection connection){
try{
File dir = new File(config.getRepository());
checkDir(dir, false, false);
if(config.isRipristinoEventi()){
if(config.isDebug()){
config.getLogCore().debug("Esecuzione thread per ripristino eventi ....");
}
File dirEventi = new File(dir,Costanti.DIRECTORY_FILE_SYSTEM_REPOSITORY_EVENTI);
checkDir(dirEventi, true, false);
File dirEventiDLQ = new File(dirEventi,Costanti.DIRECTORY_FILE_SYSTEM_REPOSITORY_DLQ);
checkDir(dirEventiDLQ, true, true);
FSRecoveryEventi fs = new FSRecoveryEventi(config.getLogCore(),config.isDebug(), pluginsEventiSM,
dirEventi,dirEventiDLQ, config.getTentativi(), config.getProcessingEventFileAfterMs());
fs.process();
if(config.isDebug()){
config.getLogCore().debug("Esecuzione thread per ripristino eventi terminato");
}
}else{
if(config.isDebug()){
config.getLogCore().debug("Thread per ripristino eventi disabilitato");
}
}
if(config.isRipristinoTransazioni()){
if(config.isDebug()){
config.getLogCore().debug("Esecuzione thread per ripristino transazioni ....");
}
File dirDiagnostici = new File(dir,Costanti.DIRECTORY_FILE_SYSTEM_REPOSITORY_DIAGNOSTICO);
checkDir(dirDiagnostici, true, false);
File dirDiagnosticiDLQ = new File(dirDiagnostici,Costanti.DIRECTORY_FILE_SYSTEM_REPOSITORY_DLQ);
checkDir(dirDiagnosticiDLQ, true, true);
File dirTracce = new File(dir,Costanti.DIRECTORY_FILE_SYSTEM_REPOSITORY_TRACCIA);
checkDir(dirTracce, true, false);
File dirTracceDLQ = new File(dirTracce,Costanti.DIRECTORY_FILE_SYSTEM_REPOSITORY_DLQ);
checkDir(dirTracceDLQ, true, true);
File dirDump = new File(dir,Costanti.DIRECTORY_FILE_SYSTEM_REPOSITORY_DUMP);
checkDir(dirDump, true, false);
File dirDumpDLQ = new File(dirDump,Costanti.DIRECTORY_FILE_SYSTEM_REPOSITORY_DLQ);
checkDir(dirDumpDLQ, true, true);
File dirTransazioniApplicativoServer = new File(dir,Costanti.DIRECTORY_FILE_SYSTEM_REPOSITORY_TRANSAZIONE_APPLICATIVO_SERVER);
checkDir(dirTransazioniApplicativoServer, true, false);
File dirTransazioniApplicativoServerDLQ = new File(dirTransazioniApplicativoServer,Costanti.DIRECTORY_FILE_SYSTEM_REPOSITORY_DLQ);
checkDir(dirTransazioniApplicativoServerDLQ, true, true);
File dirTransazioniApplicativoServerConsegnaTerminata = new File(dir,Costanti.DIRECTORY_FILE_SYSTEM_REPOSITORY_TRANSAZIONE_APPLICATIVO_SERVER_CONSEGNA_TERMINATA);
checkDir(dirTransazioniApplicativoServerConsegnaTerminata, true, false);
File dirTransazioniApplicativoServerConsegnaTerminataDLQ = new File(dirTransazioniApplicativoServerConsegnaTerminata,Costanti.DIRECTORY_FILE_SYSTEM_REPOSITORY_DLQ);
checkDir(dirTransazioniApplicativoServerConsegnaTerminataDLQ, true, true);
File dirTransazioni = new File(dir,Costanti.DIRECTORY_FILE_SYSTEM_REPOSITORY_TRANSAZIONE);
checkDir(dirTransazioni, true, false);
File dirTransazioniDLQ = new File(dirTransazioni,Costanti.DIRECTORY_FILE_SYSTEM_REPOSITORY_DLQ);
checkDir(dirTransazioniDLQ, true, true);
FSRecoveryTransazioni fs = new FSRecoveryTransazioni(config.getLogCore(),config.isDebug(),
daoFactory, daoFactoryLogger, daoFactoryServiceManagerProperties,
gestioneSerializableDBAttesaAttiva, gestioneSerializableDBCheckInterval,
transazioniSM,
tracciamentoAppender, diagnosticoAppender,
dumpAppender, transazioniRegistrazioneDumpHeadersCompactEnabled,
dirDiagnostici,dirDiagnosticiDLQ,
dirTracce,dirTracceDLQ,
dirDump,dirDumpDLQ,
dirTransazioniApplicativoServer, dirTransazioniApplicativoServerDLQ,
dirTransazioniApplicativoServerConsegnaTerminata, dirTransazioniApplicativoServerConsegnaTerminataDLQ,
dirTransazioni,dirTransazioniDLQ,
config.getTentativi(), config.getProcessingTransactionFileAfterMs());
fs.process(connection);
if(config.isDebug()){
config.getLogCore().debug("Esecuzione thread per ripristino transazioni terminato");
}
}else{
if(config.isDebug()){
config.getLogCore().debug("Thread per ripristino transazioni disabilitato");
}
}
}catch(Exception e){
config.getLogCore().error("Errore durante il recovery da file system: "+e.getMessage(),e);
}
}
private static void checkDir(File dir, boolean checkWritable, boolean create) throws UtilsException{
String prefix = "Directory ["+dir.getAbsolutePath()+"] ";
if(!dir.exists()){
if(create){
if(!dir.mkdir()){
throw new UtilsException(prefix+"non esistente e creazione non riuscita");
}
}else{
throw new UtilsException(prefix+"non esistente");
}
}
if(!dir.canRead()){
throw new UtilsException(prefix+"non accessibile in lettura");
}
if(checkWritable &&
!dir.canWrite()){
throw new UtilsException(prefix+"non accessibile in scrittura");
}
}
}