@@ -12,6 +12,19 @@ namespace NPDisk {
12
12
13
13
class TPDiskHashCalculator : public THashCalculator {
14
14
public:
15
+ ui64 OldHashSector (const ui64 sectorOffset, const ui64 magic, const ui8 *sector,
16
+ const ui32 sectorSize) {
17
+ REQUEST_VALGRIND_CHECK_MEM_IS_DEFINED (§orOffset, sizeof sectorOffset);
18
+ REQUEST_VALGRIND_CHECK_MEM_IS_DEFINED (&magic, sizeof magic);
19
+ REQUEST_VALGRIND_CHECK_MEM_IS_DEFINED (sector, sectorSize - sizeof (ui64));
20
+
21
+ THashCalculator::Clear ();
22
+ THashCalculator::Hash (§orOffset, sizeof sectorOffset);
23
+ THashCalculator::Hash (&magic, sizeof magic);
24
+ THashCalculator::Hash (sector, sectorSize - sizeof (ui64));
25
+ return THashCalculator::GetHashResult ();
26
+ }
27
+
15
28
template <class THasher >
16
29
ui64 T1ha0HashSector (const ui64 sectorOffset, const ui64 magic, const ui8 *sector,
17
30
const ui32 sectorSize) {
@@ -31,7 +44,11 @@ class TPDiskHashCalculator : public THashCalculator {
31
44
32
45
bool CheckSectorHash (const ui64 sectorOffset, const ui64 magic, const ui8 *sector,
33
46
const ui32 sectorSize, const ui64 sectorHash) {
34
- return sectorHash == T1ha0HashSector<TT1ha0NoAvxHasher>(sectorOffset, magic, sector, sectorSize);
47
+ // On production servers may be two versions.
48
+ // If by default used OldHash version, then use it first
49
+ // If by default used T1ha0NoAvx version, then use it
50
+ return sectorHash == T1ha0HashSector<TT1ha0NoAvxHasher>(sectorOffset, magic, sector, sectorSize)
51
+ || sectorHash == OldHashSector (sectorOffset, magic, sector, sectorSize);
35
52
}
36
53
};
37
54
0 commit comments