Skip to content

Commit c59dfd1

Browse files
Merge pull request #1147 from arcaneframework/dev/gg-add-read-compare-hash
Save and restore comparison hash in 'BasicReader' and 'BasicWriter'
2 parents daed886 + 73197eb commit c59dfd1

14 files changed

+467
-236
lines changed

arcane/src/arcane/std/BasicGenericReader.cc

+16-7
Original file line numberDiff line numberDiff line change
@@ -121,11 +121,9 @@ initialize(const String& path, Int32 rank)
121121
if (!hash_algorithm_name.null())
122122
hash_algorithm = BasicReaderWriterCommon::_createHashAlgorithm(m_application, hash_algorithm_name);
123123

124-
for (Integer i = 0, is = variables_elem.size(); i < is; ++i) {
125-
XmlNode n = variables_elem[i];
124+
for (const XmlNode& n : variables_elem) {
126125
String var_full_name = n.attrValue("full-name");
127-
Ref<VariableDataInfo> vdi = makeRef(new VariableDataInfo(var_full_name, n));
128-
m_variables_data_info.insert(std::make_pair(var_full_name, vdi));
126+
m_variables_data_info.add(var_full_name, n);
129127
}
130128

131129
if (!m_text_reader.get()) {
@@ -148,11 +146,10 @@ initialize(const String& path, Int32 rank)
148146
Ref<VariableDataInfo> BasicGenericReader::
149147
_getVarInfo(const String& full_name)
150148
{
151-
VariableDataInfoMap::const_iterator ivar = m_variables_data_info.find(full_name);
152-
if (ivar == m_variables_data_info.end())
149+
Ref<VariableDataInfo> vdi = m_variables_data_info.find(full_name);
150+
if (!vdi.get())
153151
ARCANE_THROW(ReaderWriterException,
154152
"Can not find own metadata infos for data var={0} rank={1}", full_name, m_rank);
155-
Ref<VariableDataInfo> vdi = ivar->second;
156153
return vdi;
157154
}
158155

@@ -241,6 +238,18 @@ readItemGroup(const String& group_full_name, Int64Array& written_unique_ids,
241238
/*---------------------------------------------------------------------------*/
242239
/*---------------------------------------------------------------------------*/
243240

241+
String BasicGenericReader::
242+
comparisonHashValue(const String& var_full_name) const
243+
{
244+
Ref<VariableDataInfo> vdi = m_variables_data_info.find(var_full_name);
245+
if (vdi.get())
246+
return vdi->comparisonHashValue();
247+
return {};
248+
}
249+
250+
/*---------------------------------------------------------------------------*/
251+
/*---------------------------------------------------------------------------*/
252+
244253
} // namespace Arcane::impl
245254

246255
/*---------------------------------------------------------------------------*/

arcane/src/arcane/std/BasicGenericWriter.cc

+4-3
Original file line numberDiff line numberDiff line change
@@ -61,13 +61,14 @@ initialize(const String& path, Int32 rank)
6161
/*---------------------------------------------------------------------------*/
6262

6363
void BasicGenericWriter::
64-
writeData(const String& var_full_name, const ISerializedData* sdata)
64+
writeData(const String& var_full_name, const ISerializedData* sdata,
65+
const String& comparison_hash)
6566
{
6667
//TODO: Verifier que initialize() a bien été appelé.
67-
auto var_data_info = makeRef(new VariableDataInfo(var_full_name, sdata));
68+
auto var_data_info = m_variables_data_info.add(var_full_name, sdata);
6869
KeyValueTextWriter* writer = m_text_writer.get();
6970
var_data_info->setFileOffset(writer->fileOffset());
70-
m_variables_data_info.insert(std::make_pair(var_full_name, var_data_info));
71+
var_data_info->setComparisonHashValue(comparison_hash);
7172
info(4) << " SDATA name=" << var_full_name << " nb_element=" << sdata->nbElement()
7273
<< " dim=" << sdata->nbDimension() << " datatype=" << sdata->baseDataType()
7374
<< " nb_basic_element=" << sdata->nbBaseElement()

arcane/src/arcane/std/BasicReader.cc

+11-2
Original file line numberDiff line numberDiff line change
@@ -71,6 +71,7 @@ initialize()
7171
}
7272
String data_compressor_name;
7373
String hash_algorithm_name;
74+
String comparison_hash_algorithm_name;
7475
if (has_db_file) {
7576
UniqueArray<Byte> bytes;
7677
pm->ioMng()->collectiveRead(db_filename, bytes, false);
@@ -82,10 +83,12 @@ initialize()
8283
m_nb_written_part = jv_arcane_db.expectedChild("NbPart").valueAsInt32();
8384
data_compressor_name = jv_arcane_db.child("DataCompressor").value();
8485
hash_algorithm_name = jv_arcane_db.child("HashAlgorithm").value();
86+
comparison_hash_algorithm_name = jv_arcane_db.child("ComparisonHashAlgorithm").value();
8587
info() << "**--** Begin read using database version=" << m_version
8688
<< " nb_part=" << m_nb_written_part
8789
<< " compressor=" << data_compressor_name
88-
<< " hash_algorithm=" << hash_algorithm_name;
90+
<< " hash_algorithm=" << hash_algorithm_name
91+
<< " comparison_hash_algorithm=" << comparison_hash_algorithm_name;
8992
}
9093
else {
9194
// Ancien format
@@ -120,6 +123,10 @@ initialize()
120123
Ref<IHashAlgorithm> v = _createHashAlgorithm(m_application, hash_algorithm_name);
121124
m_forced_rank_to_read_text_reader->setHashAlgorithm(v);
122125
}
126+
if (!comparison_hash_algorithm_name.empty()) {
127+
Ref<IHashAlgorithm> v = _createHashAlgorithm(m_application, comparison_hash_algorithm_name);
128+
m_comparison_hash_algorithm = v;
129+
}
123130
}
124131
}
125132

@@ -130,7 +137,7 @@ void BasicReader::
130137
_directReadVal(VariableMetaData* varmd, IData* data)
131138
{
132139
info(4) << "DIRECT READ VAL v=" << varmd->fullName();
133-
140+
134141
bool is_item_variable = !varmd->itemFamilyName().null();
135142
Int32 nb_rank_to_read = m_nb_rank_to_read;
136143
// S'il s'agit d'une variable qui n'est pas sur le maillage,
@@ -153,6 +160,8 @@ _directReadVal(VariableMetaData* varmd, IData* data)
153160
String vname = varmd->fullName();
154161
info(4) << " TRY TO READ var_full_name=" << vname;
155162
m_global_readers[i]->readData(vname, written_data[i]);
163+
if (i==0 && m_comparison_hash_algorithm.get() )
164+
info(5) << "COMPARISON_HASH =" << m_global_readers[i]->comparisonHashValue(vname);
156165
}
157166

158167
if (is_item_variable) {

arcane/src/arcane/std/BasicReaderWriter.cc

-78
Original file line numberDiff line numberDiff line change
@@ -31,84 +31,6 @@ namespace Arcane::impl
3131
/*---------------------------------------------------------------------------*/
3232
/*---------------------------------------------------------------------------*/
3333

34-
VariableDataInfo::
35-
VariableDataInfo(const String& full_name, const ISerializedData* sdata)
36-
: m_full_name(full_name)
37-
, m_nb_dimension(sdata->nbDimension())
38-
, m_nb_element(sdata->nbElement())
39-
, m_nb_base_element(sdata->nbBaseElement())
40-
, m_is_multi_size(sdata->isMultiSize())
41-
{
42-
Int64ConstArrayView extents = sdata->extents();
43-
44-
if (m_nb_dimension == 2 && !m_is_multi_size) {
45-
m_dim1_size = extents[0];
46-
m_dim2_size = extents[1];
47-
}
48-
m_dimension_array_size = extents.size();
49-
m_base_data_type = sdata->baseDataType();
50-
m_memory_size = sdata->memorySize();
51-
m_shape = sdata->shape();
52-
}
53-
54-
/*---------------------------------------------------------------------------*/
55-
/*---------------------------------------------------------------------------*/
56-
57-
VariableDataInfo::
58-
VariableDataInfo(const String& full_name, const XmlNode& element)
59-
: m_full_name(full_name)
60-
{
61-
m_nb_dimension = _readInteger(element, "nb-dimension");
62-
m_dim1_size = _readInt64(element, "dim1-size");
63-
m_dim2_size = _readInt64(element, "dim2-size");
64-
m_nb_element = _readInt64(element, "nb-element");
65-
m_nb_base_element = _readInt64(element, "nb-base-element");
66-
m_dimension_array_size = _readInteger(element, "dimension-array-size");
67-
m_is_multi_size = _readBool(element, "is-multi-size");
68-
m_base_data_type = (eDataType)_readInteger(element, "base-data-type");
69-
m_memory_size = _readInt64(element, "memory-size");
70-
m_file_offset = _readInt64(element, "file-offset");
71-
// L'élément est nul si on repart d'une veille protection (avant Arcane 3.7)
72-
XmlNode shape_attr = element.attr("shape");
73-
if (!shape_attr.null()) {
74-
String shape_str = shape_attr.value();
75-
if (!shape_str.empty()) {
76-
UniqueArray<Int32> values;
77-
if (builtInGetValue(values, shape_str))
78-
ARCANE_FATAL("Can not read values '{0}' for attribute 'shape'", shape_str);
79-
m_shape.setDimensions(values);
80-
}
81-
}
82-
}
83-
84-
/*---------------------------------------------------------------------------*/
85-
/*---------------------------------------------------------------------------*/
86-
87-
void VariableDataInfo::
88-
write(XmlNode element) const
89-
{
90-
_addAttribute(element, "nb-dimension", m_nb_dimension);
91-
_addAttribute(element, "dim1-size", m_dim1_size);
92-
_addAttribute(element, "dim2-size", m_dim2_size);
93-
_addAttribute(element, "nb-element", m_nb_element);
94-
_addAttribute(element, "nb-base-element", m_nb_base_element);
95-
_addAttribute(element, "dimension-array-size", m_dimension_array_size);
96-
_addAttribute(element, "is-multi-size", (m_is_multi_size) ? 1 : 0);
97-
_addAttribute(element, "base-data-type", (Integer)m_base_data_type);
98-
_addAttribute(element, "memory-size", m_memory_size);
99-
_addAttribute(element, "file-offset", m_file_offset);
100-
_addAttribute(element, "shape-size", m_shape.dimensions().size());
101-
{
102-
String s;
103-
if (builtInPutValue(m_shape.dimensions().smallView(), s))
104-
ARCANE_FATAL("Can not write '{0}'", m_shape.dimensions());
105-
_addAttribute(element, "shape", s);
106-
}
107-
}
108-
109-
/*---------------------------------------------------------------------------*/
110-
/*---------------------------------------------------------------------------*/
111-
11234
String BasicReaderWriterCommon::
11335
_getArcaneDBTag()
11436
{

0 commit comments

Comments
 (0)