Skip to content

Commit a5f96c2

Browse files
committed
fix mismatch log range struct
1 parent e03673a commit a5f96c2

File tree

1 file changed

+30
-1
lines changed

1 file changed

+30
-1
lines changed

database/db.cpp

Lines changed: 30 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -224,6 +224,21 @@ bool _db_get_log_ranges(uint32_t tick, LogRangesPerTxInTick &logRange) {
224224
if (!val) {
225225
return false;
226226
}
227+
if (sizeof(LogRangesPerTxInTick) - val->size() == 16) // oracle machine logging mismatches
228+
{
229+
struct {
230+
long long fromLogId[1024+5];
231+
long long length[1024+5];
232+
} old_struct;
233+
memcpy(&old_struct, val->data(), val->size());
234+
memset(&logRange, 0, sizeof(logRange));
235+
for (int i = 0; i < 1024+5; i++)
236+
{
237+
logRange.fromLogId[i] = old_struct.fromLogId[i];
238+
logRange.length[i] = old_struct.length[i];
239+
}
240+
return true;
241+
}
227242
if (val->size() != sizeof(LogRangesPerTxInTick)) {
228243
Logger::get()->warn("LogRange size mismatch for key {}: got {}, expected {}",
229244
key.c_str(), val->size(), sizeof(LogRangesPerTxInTick));
@@ -1509,7 +1524,21 @@ bool db_get_cLogRange_from_kvrocks(uint32_t tick, LogRangesPerTxInTick& outLogRa
15091524
ZSTD_getErrorName(dSize));
15101525
return false;
15111526
}
1512-
1527+
if (dstSize - dSize == 16) // oracle machine logging mismatches
1528+
{
1529+
struct {
1530+
long long fromLogId[1024+5];
1531+
long long length[1024+5];
1532+
} old_struct;
1533+
memcpy(&old_struct, &outLogRange, dSize);
1534+
memset(&outLogRange, 0, sizeof(outLogRange));
1535+
for (int i = 0; i < 1024+5; i++)
1536+
{
1537+
outLogRange.fromLogId[i] = old_struct.fromLogId[i];
1538+
outLogRange.length[i] = old_struct.length[i];
1539+
}
1540+
return true;
1541+
}
15131542
if (dSize != dstSize) {
15141543
Logger::get()->warn("Decompressed ResponseAllLogIdRangesFromTick size mismatch for key {}: got {}, expected {}",
15151544
key.c_str(), dSize, dstSize);

0 commit comments

Comments
 (0)