forked from vitalif/vitastor
Fix BS_OP_ROLLBACK removing an incorrect version
Instead of only removing versions with oid == X and version > Y it was also removing the previous version in list (with the previous oid or with version == Y)trace-sqes
parent
7df384031a
commit
d1602b50b3
|
@ -171,16 +171,16 @@ resume_5:
|
||||||
rm_start--;
|
rm_start--;
|
||||||
while (1)
|
while (1)
|
||||||
{
|
{
|
||||||
if (rm_start->first.oid != v->oid)
|
if (rm_start->first.oid != v->oid || rm_start->first.version <= v->version)
|
||||||
break;
|
{
|
||||||
else if (rm_start->first.version <= v->version)
|
rm_start++;
|
||||||
break;
|
break;
|
||||||
|
}
|
||||||
if (rm_start == dirty_db.begin())
|
if (rm_start == dirty_db.begin())
|
||||||
break;
|
break;
|
||||||
rm_start--;
|
rm_start--;
|
||||||
}
|
}
|
||||||
if (rm_end != rm_start)
|
erase_dirty(rm_start, rm_end, UINT64_MAX);
|
||||||
erase_dirty(rm_start, rm_end, UINT64_MAX);
|
|
||||||
}
|
}
|
||||||
journal.trim();
|
journal.trim();
|
||||||
inflight_writes--;
|
inflight_writes--;
|
||||||
|
|
|
@ -247,7 +247,6 @@ void osd_t::handle_primary_subop(uint64_t opcode, osd_op_t *cur_op, int retval,
|
||||||
{
|
{
|
||||||
if (op_data->fact_ver != 0 && op_data->fact_ver != version)
|
if (op_data->fact_ver != 0 && op_data->fact_ver != version)
|
||||||
{
|
{
|
||||||
// FIXME There is still a bug that leads to this exception sometimes :-((
|
|
||||||
throw std::runtime_error(
|
throw std::runtime_error(
|
||||||
"different fact_versions returned from "+std::string(osd_op_names[opcode])+
|
"different fact_versions returned from "+std::string(osd_op_names[opcode])+
|
||||||
" subops: "+std::to_string(version)+" vs "+std::to_string(op_data->fact_ver)
|
" subops: "+std::to_string(version)+" vs "+std::to_string(op_data->fact_ver)
|
||||||
|
|
Loading…
Reference in New Issue