14#include "arcane/std/internal/BasicReader.h"
15#include "arcane/std/internal/BasicWriter.h"
17#include "arcane/utils/StringBuilder.h"
18#include "arcane/utils/OStringStream.h"
19#include "arcane/utils/PlatformUtils.h"
21#include "arcane/core/IXmlDocumentHolder.h"
22#include "arcane/core/IParallelMng.h"
23#include "arcane/core/CheckpointService.h"
24#include "arcane/core/Directory.h"
25#include "arcane/core/IParallelReplication.h"
26#include "arcane/core/IVariableUtilities.h"
27#include "arcane/core/VerifierService.h"
28#include "arcane/core/IVariableMng.h"
29#include "arcane/core/CheckpointInfo.h"
31#include "arcane/std/ArcaneBasicCheckpoint_axl.h"
38using namespace Arcane::impl;
45class ArcaneBasicCheckpointService
57 XmlNode root = xml_doc->documentNode().documentElement();
62 md.m_version = version;
95 info() <<
"USE DEFAULT FILE NAME index=" << currentIndex();
103 info() <<
"FILE_NAME is " << buf;
106 Directory _defaultDirectory()
120class ArcaneBasic2CheckpointService
121:
public ArcaneBasicCheckpointService
126 : ArcaneBasicCheckpointService(sbi)
141 <<
" version=" << md.m_version
145 if (filename.
null()) {
147 filename = dump_dir.
file(_defaultFileName());
150 filename = filename +
"_n" + currentIndex();
151 info() <<
" READ CHECKPOINT FILENAME = " << filename;
154 bool want_parallel =
false;
155 m_reader =
new BasicReader(app, pm, A_NULL_RANK, filename, want_parallel);
156 m_reader->initialize();
175 auto open_mode = BasicReaderWriterCommon::OpenModeAppend;
178 if (write_index == 0)
179 open_mode = BasicReaderWriterCommon::OpenModeTruncate;
182 if (filename.
null()) {
184 filename = dump_dir.
file(_defaultFileName());
187 filename = filename +
"_n" + write_index;
192 version =
options()->formatVersion();
196 data_compressor =
options()->dataCompressor.instanceRef();
200 info() <<
"Writing checkpoint with 'ArcaneBasicCheckpointService'"
201 <<
" version=" << version
202 <<
" filename='" << filename <<
"'\n";
209 want_parallel =
false;
210 m_writer =
new BasicWriter(app, pm, filename, open_mode, version, want_parallel);
211 m_writer->setDataCompressor(data_compressor);
212 m_writer->initialize();
223 const int meta_data_version = 1;
224 ostr() <<
" version='" << meta_data_version <<
"'";
237class ArcaneBasic2CheckpointReaderService
262 Integer index = ci.checkpointIndex();
263 bool has_replication = ci.nbReplication() > 1;
264 Int32 replication_rank = ci.replicationRank();
265 info() <<
"USE DEFAULT FILE NAME index=" << index;
267 String buf =
"arcanedump";
268 if (has_replication) {
270 buf = buf + replication_rank;
272 info() <<
"FILE_NAME is " << buf;
284 String reader_meta_data_str = ci.readerMetaData();
285 auto md = ArcaneBasicCheckpointService::MetaData::parse(reader_meta_data_str,
traceMng());
287 info() <<
"Basic2CheckpointReader GET META DATA READER " << reader_meta_data_str
288 <<
" version=" << md.m_version;
291 String filename = dump_dir.
file(_defaultFileName(ci));
292 filename = filename +
"_n" + ci.checkpointIndex();
294 info() <<
" READ CHECKPOINT FILENAME = " << filename;
296 bool want_parallel =
false;
297 m_reader =
new BasicReader(m_application, pm, ci.subDomainRank(), filename, want_parallel);
298 m_reader->initialize();
#define ARCANE_THROW(exception_class,...)
Macro pour envoyer une exception avec formattage.
#define ARCANE_SERVICE_INTERFACE(ainterface)
Macro pour déclarer une interface lors de l'enregistrement d'un service.
AbstractService(const ServiceBuildInfo &)
Constructeur à partir d'un ServiceBuildInfo.
ArcaneArcaneBasicCheckpointObject(const Arcane::ServiceBuildInfo &sbi)
Constructeur.
CaseOptionsArcaneBasicCheckpoint * options() const
Options du jeu de données du service.
Relecture de protection (version 2).
void notifyBeginRead(const CheckpointReadInfo &cri) override
Notifie qu'une protection va être lue avec les informations issues de checkpoint_info.
void notifyEndRead() override
Notifie de la fin de la lecture d'une protection.
IDataReader2 * dataReader() override
Retourne le lecteur de données associé à ce lecteur de protection.
Protection/reprise basique (version 2).
String readerServiceName() const override
Nom du service du lecteur associé à cet écrivain.
Protection/reprise basique (version 1).
String readerServiceName() const override
Nom du service du lecteur associé à cet écrivain.
void notifyEndRead() override
Notifie qu'une protection vient d'être lue.
void notifyBeginRead() override
Notifie qu'une protection va être lue avec les paramètres courants.
void notifyBeginWrite() override
Notifie qu'une protection va être écrite avec les paramètres courants.
IDataReader * dataReader() override
Retourne le lecteur associé
void notifyEndWrite() override
Notifie qu'une protection vient d'être écrite.
IDataWriter * dataWriter() override
Retourne l'écrivain associé.
void close() override
Ferme les protections.
Informations sur une protection.
Informations de relecture d'une protection.
virtual void setReaderMetaData(const String &s)
Méta données associées à ce lecteur.
virtual void setFileName(const String &file_name)
Positionne le nom du fichier de la protection.
virtual String fileName() const
Nom du fichier de la protection.
RealConstArrayView checkpointTimes() const
Temps des protections.
virtual String baseDirectoryName() const
Nom du répertoire de base de la protection.
virtual String readerMetaData() const
Méta données pour le lecteur associé à cet écrivain.
constexpr Integer size() const noexcept
Nombre d'éléments du tableau.
Classe gérant un répertoire.
virtual String file(const String &file_name) const
Retourne le chemin complet du fichier file_name dans le répertoire.
Interface de l'application.
Interface du service de lecture d'une protection/reprise (V2)
Interface du service de lecture d'une protection/reprise.
Interface du service d'écriture d'une protection/reprise.
Interface de lecture des données d'une variable (Version 2)
Interface de lecture des données d'une variable.
Interface d'écriture des données d'une variable.
Interface du gestionnaire de parallélisme pour un sous-domaine.
virtual IParallelReplication * replication() const =0
Informations sur la réplication.
virtual bool isParallel() const =0
Retourne true si l'exécution est parallèle.
Informations sur la réplication des sous-domaines en parallèle.
virtual bool hasReplication() const =0
Indique si la réplication est active.
virtual Int32 replicationRank() const =0
Rang dans la réplication (de 0 à nbReplication()-1)
virtual IParallelMng * parallelMng()=0
Retourne le gestionnaire de parallélisme.
Interface du gestionnaire de traces.
static IXmlDocumentHolder * loadFromBuffer(Span< const Byte > buffer, const String &name, ITraceMng *tm)
Charge un document XML.
Flot de sortie lié à une String.
Exception dans un lecteur ou écrivain.
Référence à une instance.
Encapsulation d'un pointeur qui se détruit automatiquement.
IApplication * application() const
Accès à l'application IApplication associé.
Structure contenant les informations pour créer un service.
Propriétés de création d'un service.
Chaîne de caractères unicode.
bool null() const
Retourne true si la chaîne est nulle.
Span< const Byte > bytes() const
Retourne la conversion de l'instance dans l'encodage UTF-8.
TraceMessage info() const
Flot pour un message d'information.
ITraceMng * traceMng() const
Gestionnaire de trace.
XmlNode attr(const String &name, bool throw_exception=false) const
Retourne l'attribut de nom name.
Integer valueAsInteger(bool throw_exception=false) const
Valeur du noeud convertie en entier.
#define ARCANE_REGISTER_SERVICE(aclass, a_service_property,...)
Macro pour enregistrer un service.
-*- tab-width: 2; indent-tabs-mode: nil; coding: utf-8-with-signature -*-
Int32 Integer
Type représentant un entier.
@ ST_Application
Le service s'utilise au niveau de l'application.
@ ST_CaseOption
Le service s'utilise au niveau du jeu de données.
@ ST_SubDomain
Le service s'utilise au niveau du sous-domaine.
std::int32_t Int32
Type entier signé sur 32 bits.