Skip to content

Commit 29ddb20

Browse files
[arcane,std] Sauve le hash de comparaison dans les données de la variable.
1 parent b2c704d commit 29ddb20

File tree

6 files changed

+29
-11
lines changed

6 files changed

+29
-11
lines changed

arcane/src/arcane/std/BasicGenericWriter.cc

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -61,12 +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& compare_hash)
6566
{
6667
//TODO: Verifier que initialize() a bien été appelé.
6768
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());
71+
var_data_info->setCompareHashValue(compare_hash);
7072
info(4) << " SDATA name=" << var_full_name << " nb_element=" << sdata->nbElement()
7173
<< " dim=" << sdata->nbDimension() << " datatype=" << sdata->baseDataType()
7274
<< " nb_basic_element=" << sdata->nbBaseElement()

arcane/src/arcane/std/BasicWriter.cc

Lines changed: 12 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -183,10 +183,10 @@ _directWriteVal(IVariable* var, IData* data)
183183
}
184184

185185
Ref<ISerializedData> sdata(write_data->createSerializedDataRef(false));
186-
m_global_writer->writeData(var->fullName(), sdata.get());
187-
186+
String compare_hash;
188187
if (is_mesh_variable)
189-
_computeCompareHash(var, write_data);
188+
compare_hash = _computeCompareHash(var, write_data);
189+
m_global_writer->writeData(var->fullName(), sdata.get(), compare_hash);
190190
}
191191

192192
/*---------------------------------------------------------------------------*/
@@ -199,13 +199,16 @@ _directWriteVal(IVariable* var, IData* data)
199199
*
200200
* Comme ce tableau est trié suivant les uniqueId(), il peut servir à
201201
* comparer directement la valeur de la variable.
202+
*
203+
* \return le hash sous-forme de chaîne de caratères si un algorithme de hash
204+
* est spécifié.
202205
*/
203-
void BasicWriter::
206+
String BasicWriter::
204207
_computeCompareHash(IVariable* var, IData* write_data)
205208
{
206209
IHashAlgorithm* hash_algo = m_compare_hash_algorithm.get();
207210
if (!hash_algo)
208-
return;
211+
return {};
209212

210213
INumericDataInternal* num_data = write_data->_commonInternal()->numericData();
211214
if (!num_data)
@@ -224,12 +227,14 @@ _computeCompareHash(IVariable* var, IData* write_data)
224227

225228
pm->gatherVariable(Arccore::asSpan<Byte>(memory_view.bytes()).smallView(), bytes, master_rank);
226229

230+
String hash_string;
227231
if (my_rank == master_rank) {
228232
HashAlgorithmValue hash_value;
229233
hash_algo->computeHash(asBytes(bytes), hash_value);
230-
info() << "VAR_HASH=" << Convert::toHexaString(asBytes(hash_value.bytes()))
231-
<< " name=" << var->fullName();
234+
hash_string = Convert::toHexaString(asBytes(hash_value.bytes()));
235+
info() << "VAR_HASH=" << hash_string << " name=" << var->fullName();
232236
}
237+
return hash_string;
233238
}
234239

235240
/*---------------------------------------------------------------------------*/

arcane/src/arcane/std/VariableDataInfo.cc

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -77,6 +77,12 @@ VariableDataInfo(const String& full_name, const XmlNode& element)
7777
m_shape.setDimensions(values);
7878
}
7979
}
80+
{
81+
// L'attribut 'compare-hash' est nul si on repart d'une veille protection (avant Arcane 3.12)
82+
XmlNode hash_attr = element.attr("compare-hash");
83+
if (!hash_attr.null())
84+
m_compare_hash_value = hash_attr.value();
85+
}
8086
}
8187

8288
/*---------------------------------------------------------------------------*/
@@ -96,6 +102,7 @@ write(XmlNode element) const
96102
_addAttribute(element, "memory-size", m_memory_size);
97103
_addAttribute(element, "file-offset", m_file_offset);
98104
_addAttribute(element, "shape-size", m_shape.dimensions().size());
105+
_addAttribute(element, "compare-hash", m_compare_hash_value);
99106
{
100107
String s;
101108
if (builtInPutValue(m_shape.dimensions().smallView(), s))

arcane/src/arcane/std/internal/BasicReaderWriter.h

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -149,7 +149,8 @@ class IGenericWriter
149149
public:
150150

151151
virtual void initialize(const String& path, Int32 rank) = 0;
152-
virtual void writeData(const String& var_full_name, const ISerializedData* sdata) = 0;
152+
virtual void writeData(const String& var_full_name, const ISerializedData* sdata,
153+
const String& compare_hash) = 0;
153154
virtual void writeItemGroup(const String& group_full_name,
154155
SmallSpan<const Int64> written_unique_ids,
155156
SmallSpan<const Int64> wanted_unique_ids) = 0;
@@ -171,7 +172,7 @@ class BasicGenericWriter
171172
public:
172173

173174
void initialize(const String& path, Int32 rank) override;
174-
void writeData(const String& var_full_name, const ISerializedData* sdata) override;
175+
void writeData(const String& var_full_name, const ISerializedData* sdata, const String& compare_hash) override;
175176
void writeItemGroup(const String& group_full_name, SmallSpan<const Int64> written_unique_ids,
176177
SmallSpan<const Int64> wanted_unique_ids) override;
177178
void endWrite() override;

arcane/src/arcane/std/internal/BasicWriter.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -85,7 +85,7 @@ class BasicWriter
8585
private:
8686

8787
void _directWriteVal(IVariable* v, IData* data);
88-
void _computeCompareHash(IVariable* var, IData* write_data);
88+
String _computeCompareHash(IVariable* var, IData* write_data);
8989
Ref<ParallelDataWriter> _getWriter(IVariable* var);
9090
void _endWriteV3();
9191
void _checkNoInit();

arcane/src/arcane/std/internal/VariableDataInfo.h

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -56,6 +56,8 @@ class VariableDataInfo
5656
const ArrayShape& shape() const { return m_shape; }
5757
void setFileOffset(Int64 v) { m_file_offset = v; }
5858
Int64 fileOffset() const { return m_file_offset; }
59+
void setCompareHashValue(const String& v) { m_compare_hash_value = v; }
60+
const String& compareHashValue() const { return m_compare_hash_value; }
5961

6062
public:
6163

@@ -107,6 +109,7 @@ class VariableDataInfo
107109
Int64 m_memory_size = 0;
108110
Int64 m_file_offset = 0;
109111
ArrayShape m_shape;
112+
String m_compare_hash_value;
110113
};
111114

112115
/*---------------------------------------------------------------------------*/

0 commit comments

Comments
 (0)