Fixed incorrect assert in blob manager

This commit is contained in:
Josh Slocum 2022-01-21 08:28:36 -06:00
parent a8f1d6fa00
commit be98fc9a58
1 changed files with 27 additions and 3 deletions

View File

@ -861,13 +861,37 @@ ACTOR Future<Void> maybeSplitRange(Reference<BlobManagerData> bmData,
}
return Void();
}
int64_t ownerEpoch = std::get<0>(prevGranuleLock);
int64_t ownerSeqno = std::get<1>(prevGranuleLock);
if (newLockSeqno == -1) {
newLockSeqno = bmData->seqNo;
bmData->seqNo++;
ASSERT(newLockSeqno > std::get<1>(prevGranuleLock));
if (!(bmData->epoch > ownerEpoch || (bmData->epoch == ownerEpoch && newLockSeqno > ownerSeqno))) {
printf("BM seqno for granule [%s - %s) out of order for lock! manager: (%lld, %lld), owner: %lld, "
"%lld)\n",
granuleRange.begin.printable().c_str(),
granuleRange.end.printable().c_str(),
bmData->epoch,
newLockSeqno,
ownerEpoch,
ownerSeqno);
}
ASSERT(bmData->epoch > ownerEpoch || (bmData->epoch == ownerEpoch && newLockSeqno > ownerSeqno));
} else {
// previous transaction could have succeeded but got commit_unknown_result
ASSERT(newLockSeqno >= std::get<1>(prevGranuleLock));
if (!(bmData->epoch > ownerEpoch || (bmData->epoch == ownerEpoch && newLockSeqno >= ownerSeqno))) {
printf("BM seqno for granule [%s - %s) out of order for lock on retry! manager: (%lld, %lld), "
"owner: %lld, "
"%lld)\n",
granuleRange.begin.printable().c_str(),
granuleRange.end.printable().c_str(),
bmData->epoch,
newLockSeqno,
ownerEpoch,
ownerSeqno);
}
// previous transaction could have succeeded but got commit_unknown_result, so use >= instead of > for
// seqno if epochs are equal
ASSERT(bmData->epoch > ownerEpoch || (bmData->epoch == ownerEpoch && newLockSeqno >= ownerSeqno));
}
// acquire granule lock so nobody else can make changes to this granule.