FSRecoveryLibrary.java

  1. /*
  2.  * GovWay - A customizable API Gateway
  3.  * https://govway.org
  4.  *
  5.  * Copyright (c) 2005-2025 Link.it srl (https://link.it).
  6.  *
  7.  * This program is free software: you can redistribute it and/or modify
  8.  * it under the terms of the GNU General Public License version 3, as published by
  9.  * the Free Software Foundation.
  10.  *
  11.  * This program is distributed in the hope that it will be useful,
  12.  * but WITHOUT ANY WARRANTY; without even the implied warranty of
  13.  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  14.  * GNU General Public License for more details.
  15.  *
  16.  * You should have received a copy of the GNU General Public License
  17.  * along with this program.  If not, see <http://www.gnu.org/licenses/>.
  18.  *
  19.  */
  20. package org.openspcoop2.monitor.engine.fs_recovery;

  21. import org.openspcoop2.core.commons.dao.DAOFactory;
  22. import org.openspcoop2.generic_project.utils.ServiceManagerProperties;
  23. import org.openspcoop2.monitor.engine.constants.Costanti;
  24. import org.openspcoop2.protocol.sdk.diagnostica.IDiagnosticProducer;
  25. import org.openspcoop2.protocol.sdk.dump.IDumpProducer;
  26. import org.openspcoop2.protocol.sdk.tracciamento.ITracciaProducer;
  27. import org.openspcoop2.utils.UtilsException;
  28. import org.slf4j.Logger;

  29. import java.io.File;
  30. import java.sql.Connection;

  31. /**
  32.  * FSRecoveryLibrary
  33.  *
  34.  * @author Poli Andrea (apoli@link.it)
  35.  * @author $Author$
  36.  * @version $Rev$, $Date$
  37.  */
  38. public class FSRecoveryLibrary {
  39.    
  40.     private FSRecoveryLibrary() {}

  41.     public static void generate(FSRecoveryConfig config,
  42.             DAOFactory daoFactory, Logger daoFactoryLogger, ServiceManagerProperties daoFactoryServiceManagerProperties,
  43.             long gestioneSerializableDBAttesaAttiva, int gestioneSerializableDBCheckInterval,
  44.             org.openspcoop2.core.transazioni.dao.IServiceManager transazioniSM,
  45.             ITracciaProducer tracciamentoAppender,
  46.             IDiagnosticProducer diagnosticoAppender,
  47.             IDumpProducer dumpAppender, boolean transazioniRegistrazioneDumpHeadersCompactEnabled,
  48.             org.openspcoop2.core.eventi.dao.IServiceManager pluginsEventiSM){
  49.         generate(config,
  50.                 daoFactory, daoFactoryLogger, daoFactoryServiceManagerProperties,
  51.                 gestioneSerializableDBAttesaAttiva, gestioneSerializableDBCheckInterval,
  52.                 transazioniSM, tracciamentoAppender, diagnosticoAppender,
  53.                 dumpAppender, transazioniRegistrazioneDumpHeadersCompactEnabled,
  54.                 pluginsEventiSM, null);
  55.     }
  56.     public static void generate(FSRecoveryConfig config,
  57.             DAOFactory daoFactory, Logger daoFactoryLogger, ServiceManagerProperties daoFactoryServiceManagerProperties,
  58.             long gestioneSerializableDBAttesaAttiva, int gestioneSerializableDBCheckInterval,
  59.             org.openspcoop2.core.transazioni.dao.IServiceManager transazioniSM,
  60.             ITracciaProducer tracciamentoAppender,
  61.             IDiagnosticProducer diagnosticoAppender,
  62.             IDumpProducer dumpAppender, boolean transazioniRegistrazioneDumpHeadersCompactEnabled,
  63.             org.openspcoop2.core.eventi.dao.IServiceManager pluginsEventiSM,
  64.             Connection connection){
  65.         try{
  66.            
  67.             File dir =  new File(config.getRepository());
  68.             checkDir(dir, false, false);
  69.            
  70.             if(config.isRipristinoEventi()){
  71.                 if(config.isDebug()){
  72.                     config.getLogCore().debug("Esecuzione thread per ripristino eventi ....");
  73.                 }
  74.                
  75.                 File dirEventi = new File(dir,Costanti.DIRECTORY_FILE_SYSTEM_REPOSITORY_EVENTI);
  76.                 checkDir(dirEventi, true, false);
  77.                 File dirEventiDLQ = new File(dirEventi,Costanti.DIRECTORY_FILE_SYSTEM_REPOSITORY_DLQ);
  78.                 checkDir(dirEventiDLQ, true, true);
  79.                
  80.                 FSRecoveryEventi fs = new FSRecoveryEventi(config.getLogCore(),config.isDebug(), pluginsEventiSM,
  81.                         dirEventi,dirEventiDLQ, config.getTentativi(), config.getProcessingEventFileAfterMs());
  82.                 fs.process();
  83.                
  84.                 if(config.isDebug()){
  85.                     config.getLogCore().debug("Esecuzione thread per ripristino eventi terminato");
  86.                 }
  87.             }else{
  88.                 if(config.isDebug()){
  89.                     config.getLogCore().debug("Thread per ripristino eventi disabilitato");
  90.                 }
  91.             }
  92.            
  93.             if(config.isRipristinoTransazioni()){
  94.                 if(config.isDebug()){
  95.                     config.getLogCore().debug("Esecuzione thread per ripristino transazioni ....");
  96.                 }
  97.                
  98.                 File dirDiagnostici = new File(dir,Costanti.DIRECTORY_FILE_SYSTEM_REPOSITORY_DIAGNOSTICO);
  99.                 checkDir(dirDiagnostici, true, false);
  100.                 File dirDiagnosticiDLQ = new File(dirDiagnostici,Costanti.DIRECTORY_FILE_SYSTEM_REPOSITORY_DLQ);
  101.                 checkDir(dirDiagnosticiDLQ, true, true);
  102.                
  103.                 File dirTracce = new File(dir,Costanti.DIRECTORY_FILE_SYSTEM_REPOSITORY_TRACCIA);
  104.                 checkDir(dirTracce, true, false);
  105.                 File dirTracceDLQ = new File(dirTracce,Costanti.DIRECTORY_FILE_SYSTEM_REPOSITORY_DLQ);
  106.                 checkDir(dirTracceDLQ, true, true);
  107.                
  108.                 File dirDump = new File(dir,Costanti.DIRECTORY_FILE_SYSTEM_REPOSITORY_DUMP);
  109.                 checkDir(dirDump, true, false);
  110.                 File dirDumpDLQ = new File(dirDump,Costanti.DIRECTORY_FILE_SYSTEM_REPOSITORY_DLQ);
  111.                 checkDir(dirDumpDLQ, true, true);
  112.                
  113.                 File dirTransazioniApplicativoServer = new File(dir,Costanti.DIRECTORY_FILE_SYSTEM_REPOSITORY_TRANSAZIONE_APPLICATIVO_SERVER);
  114.                 checkDir(dirTransazioniApplicativoServer, true, false);
  115.                 File dirTransazioniApplicativoServerDLQ = new File(dirTransazioniApplicativoServer,Costanti.DIRECTORY_FILE_SYSTEM_REPOSITORY_DLQ);
  116.                 checkDir(dirTransazioniApplicativoServerDLQ, true, true);
  117.                
  118.                 File dirTransazioniApplicativoServerConsegnaTerminata = new File(dir,Costanti.DIRECTORY_FILE_SYSTEM_REPOSITORY_TRANSAZIONE_APPLICATIVO_SERVER_CONSEGNA_TERMINATA);
  119.                 checkDir(dirTransazioniApplicativoServerConsegnaTerminata, true, false);
  120.                 File dirTransazioniApplicativoServerConsegnaTerminataDLQ = new File(dirTransazioniApplicativoServerConsegnaTerminata,Costanti.DIRECTORY_FILE_SYSTEM_REPOSITORY_DLQ);
  121.                 checkDir(dirTransazioniApplicativoServerConsegnaTerminataDLQ, true, true);
  122.                
  123.                 File dirTransazioni = new File(dir,Costanti.DIRECTORY_FILE_SYSTEM_REPOSITORY_TRANSAZIONE);
  124.                 checkDir(dirTransazioni, true, false);
  125.                 File dirTransazioniDLQ = new File(dirTransazioni,Costanti.DIRECTORY_FILE_SYSTEM_REPOSITORY_DLQ);
  126.                 checkDir(dirTransazioniDLQ, true, true);
  127.                
  128.                 FSRecoveryTransazioni fs = new FSRecoveryTransazioni(config.getLogCore(),config.isDebug(),
  129.                         daoFactory, daoFactoryLogger, daoFactoryServiceManagerProperties,
  130.                         gestioneSerializableDBAttesaAttiva, gestioneSerializableDBCheckInterval,
  131.                         transazioniSM,
  132.                         tracciamentoAppender, diagnosticoAppender,
  133.                         dumpAppender, transazioniRegistrazioneDumpHeadersCompactEnabled,
  134.                         dirDiagnostici,dirDiagnosticiDLQ,
  135.                         dirTracce,dirTracceDLQ,
  136.                         dirDump,dirDumpDLQ,
  137.                         dirTransazioniApplicativoServer, dirTransazioniApplicativoServerDLQ,
  138.                         dirTransazioniApplicativoServerConsegnaTerminata, dirTransazioniApplicativoServerConsegnaTerminataDLQ,
  139.                         dirTransazioni,dirTransazioniDLQ,
  140.                         config.getTentativi(), config.getProcessingTransactionFileAfterMs());
  141.                 fs.process(connection);
  142.                
  143.                 if(config.isDebug()){
  144.                     config.getLogCore().debug("Esecuzione thread per ripristino transazioni terminato");
  145.                 }
  146.             }else{
  147.                 if(config.isDebug()){
  148.                     config.getLogCore().debug("Thread per ripristino transazioni disabilitato");
  149.                 }
  150.             }
  151.            
  152.         }catch(Exception e){
  153.             config.getLogCore().error("Errore durante il recovery da file system: "+e.getMessage(),e);
  154.         }
  155.     }
  156.    
  157.     private static void checkDir(File dir, boolean checkWritable, boolean create) throws UtilsException{
  158.         String prefix = "Directory ["+dir.getAbsolutePath()+"] ";
  159.         if(!dir.exists()){
  160.             if(create){
  161.                 if(!dir.mkdir()){
  162.                     throw new UtilsException(prefix+"non esistente e creazione non riuscita");
  163.                 }
  164.             }else{
  165.                 throw new UtilsException(prefix+"non esistente");
  166.             }
  167.         }
  168.         if(!dir.canRead()){
  169.             throw new UtilsException(prefix+"non accessibile in lettura");
  170.         }
  171.         if(checkWritable &&
  172.             !dir.canWrite()){
  173.             throw new UtilsException(prefix+"non accessibile in scrittura");
  174.         }
  175.     }
  176.    
  177. }