Remove compact_queue_lsn map

This commit is contained in:
Vitaliy Filippov
2025-11-23 19:07:43 +03:00
parent 5222c2724f
commit 7ad3001afd
2 changed files with 13 additions and 43 deletions
+13 -42
View File
@@ -596,7 +596,6 @@ skip_object:
} }
// Allocate space // Allocate space
bool to_compact = false; bool to_compact = false;
uint64_t to_compact_queue = 0;
used_space += obj->size; used_space += obj->size;
for (auto wr = obj->get_writes(); wr; wr = wr->next(), wr_i++) for (auto wr = obj->get_writes(); wr; wr = wr->next(), wr_i++)
{ {
@@ -612,7 +611,7 @@ skip_object:
} }
if (wr->needs_compact(this->compacted_lsn)) if (wr->needs_compact(this->compacted_lsn))
{ {
to_compact_queue = to_compact_queue ? to_compact_queue : wr->lsn; compact_queue.push_back((heap_object_lsn_t){ .oid = oid, .lsn = wr->lsn });
} }
else if (wr->is_compacted(this->compacted_lsn)) else if (wr->is_compacted(this->compacted_lsn))
{ {
@@ -624,7 +623,7 @@ skip_object:
{ {
// We can't just collapse the object entry when csum_block_size is larger // We can't just collapse the object entry when csum_block_size is larger
// than bitmap_granularity, so we add the object into the compact queue // than bitmap_granularity, so we add the object into the compact queue
to_compact_queue = to_compact_queue ? to_compact_queue : wr->lsn; compact_queue.push_back((heap_object_lsn_t){ .oid = oid, .lsn = wr->lsn });
} }
} }
} }
@@ -636,14 +635,6 @@ skip_object:
{ {
next_lsn = lsn; next_lsn = lsn;
} }
if (to_compact_queue)
{
if (compact_queue_lsn.find(oid) == compact_queue_lsn.end())
{
compact_queue.push_back(oid);
}
compact_queue_lsn[oid] = to_compact_queue;
}
if (to_recheck) if (to_recheck)
{ {
recheck_queue.push_back(oid); recheck_queue.push_back(oid);
@@ -676,9 +667,9 @@ skip_object:
void blockstore_heap_t::finish_load() void blockstore_heap_t::finish_load()
{ {
std::sort(compact_queue.begin(), compact_queue.end(), [this](const object_id & a, const object_id & b) std::sort(compact_queue.begin(), compact_queue.end(), [this](const heap_object_lsn_t & a, const heap_object_lsn_t & b)
{ {
return compact_queue_lsn[a] < compact_queue_lsn[b]; return a.lsn < b.lsn;
}); });
} }
@@ -1009,7 +1000,6 @@ uint32_t blockstore_heap_t::compact_object_to(heap_object_t *obj, uint64_t compa
const int cap = dsk->meta_block_size/sizeof(heap_write_t); const int cap = dsk->meta_block_size/sizeof(heap_write_t);
heap_write_t *compacted_wrs[cap]; heap_write_t *compacted_wrs[cap];
int compacted_wr_count = 0; int compacted_wr_count = 0;
bool has_more = false;
bool skip = false; bool skip = false;
heap_write_t *big_wr = NULL, *pre_wr = NULL; heap_write_t *big_wr = NULL, *pre_wr = NULL;
for (auto wr = obj->get_writes(); wr; wr = wr->next()) for (auto wr = obj->get_writes(); wr; wr = wr->next())
@@ -1018,10 +1008,6 @@ uint32_t blockstore_heap_t::compact_object_to(heap_object_t *obj, uint64_t compa
{ {
compacted_wrs[compacted_wr_count++] = wr; compacted_wrs[compacted_wr_count++] = wr;
} }
else if (wr->needs_compact(compact_lsn))
{
has_more = true;
}
if (compacted_wr_count) if (compacted_wr_count)
{ {
bool is_last = !wr->next(); bool is_last = !wr->next();
@@ -1045,10 +1031,6 @@ uint32_t blockstore_heap_t::compact_object_to(heap_object_t *obj, uint64_t compa
{ {
return 0; return 0;
} }
if (!has_more)
{
compact_queue_lsn.erase((object_id){ .inode = obj->inode, .stripe = obj->stripe });
}
free_object_space(obj->inode, compacted_wrs[0], big_wr); free_object_space(obj->inode, compacted_wrs[0], big_wr);
// Collapse compacted_wrs[] into big_wr // Collapse compacted_wrs[] into big_wr
big_wr->lsn = compacted_wrs[0]->lsn; big_wr->lsn = compacted_wrs[0]->lsn;
@@ -1289,11 +1271,9 @@ int blockstore_heap_t::add_object(object_id oid, heap_write_t *wr, uint32_t *mod
memset(int_bitmap, 0, dsk->clean_entry_bitmap_size); memset(int_bitmap, 0, dsk->clean_entry_bitmap_size);
bitmap_set(int_bitmap, wr->offset, wr->len, dsk->bitmap_granularity); bitmap_set(int_bitmap, wr->offset, wr->len, dsk->bitmap_granularity);
} }
if (wr->needs_compact(0) && if (wr->needs_compact(0))
compact_queue_lsn.find(oid) == compact_queue_lsn.end())
{ {
compact_queue.push_back(oid); compact_queue.push_back({ .oid = oid, .lsn = new_wr->lsn });
compact_queue_lsn[oid] = new_wr->lsn;
} }
new_entry->size = sizeof(heap_object_t); new_entry->size = sizeof(heap_object_t);
new_entry->crc32c = new_entry->calc_crc32c(); new_entry->crc32c = new_entry->calc_crc32c();
@@ -1444,11 +1424,9 @@ int blockstore_heap_t::update_object(uint32_t block_num, heap_object_t *obj, hea
obj->write_pos = offset - ((uint8_t*)obj - inf.data); obj->write_pos = offset - ((uint8_t*)obj - inf.data);
obj->crc32c = obj->calc_crc32c(); obj->crc32c = obj->calc_crc32c();
// Add to compaction queue // Add to compaction queue
if (new_wr->needs_compact(0) && if (new_wr->needs_compact(0))
compact_queue_lsn.find(oid) == compact_queue_lsn.end())
{ {
compact_queue.push_back(oid); compact_queue.push_back({ .oid = oid, .lsn = new_wr->lsn });
compact_queue_lsn[oid] = new_wr->lsn;
} }
// Change block free space // Change block free space
unmark_allocated_block(block_num); unmark_allocated_block(block_num);
@@ -1528,15 +1506,14 @@ int blockstore_heap_t::post_stabilize(object_id oid, uint64_t version, uint32_t
{ {
wr->flags |= BS_HEAP_STABLE; wr->flags |= BS_HEAP_STABLE;
} }
if (wr->needs_compact(0)) if (wr->needs_compact(0) && to_compact == 0)
{ {
to_compact = wr->lsn; to_compact = wr->lsn;
} }
} }
if (to_compact && compact_queue_lsn.find(oid) == compact_queue_lsn.end()) if (to_compact)
{ {
compact_queue.push_back(oid); compact_queue.push_back({ .oid = oid, .lsn = to_compact });
compact_queue_lsn[oid] = to_compact;
} }
obj->crc32c = obj->calc_crc32c(); obj->crc32c = obj->calc_crc32c();
return 0; return 0;
@@ -1619,15 +1596,9 @@ int blockstore_heap_t::get_next_compact(object_id & oid)
{ {
while (compact_queue.size()) while (compact_queue.size())
{ {
auto qoid = compact_queue.front(); oid = compact_queue.front().oid;
compact_queue.pop_front(); compact_queue.pop_front();
auto lsn_it = compact_queue_lsn.find(qoid); return 0;
if (lsn_it != compact_queue_lsn.end())
{
oid = qoid;
compact_queue_lsn.erase(lsn_it);
return 0;
}
} }
return ENOENT; return ENOENT;
} }
-1
View File
@@ -145,7 +145,6 @@ class blockstore_heap_t
// PG => inode => stripe => block number // PG => inode => stripe => block number
std::map<uint64_t, std::map<inode_t, btree::btree_map<uint64_t, uint64_t>>> block_index; std::map<uint64_t, std::map<inode_t, btree::btree_map<uint64_t, uint64_t>>> block_index;
std::deque<object_id> compact_queue; std::deque<object_id> compact_queue;
std::map<object_id, uint64_t> compact_queue_lsn;
std::vector<heap_block_info_t> block_info; std::vector<heap_block_info_t> block_info;
allocator_t *data_alloc = NULL; allocator_t *data_alloc = NULL;
allocator_t *meta_alloc = NULL; allocator_t *meta_alloc = NULL;