Revert try_get

This commit is contained in:
Vitaliy Filippov
2025-11-23 19:08:24 +03:00
parent 7a894efcb7
commit 5d100b4e35
2 changed files with 17 additions and 13 deletions
+17 -11
View File
@@ -147,11 +147,11 @@ uint64_t blockstore_heap_t::get_pg_id(inode_t inode, uint64_t stripe)
{ {
uint64_t pg_num = 0; uint64_t pg_num = 0;
uint64_t pool_id = (inode >> (64-POOL_ID_BITS)); uint64_t pool_id = (inode >> (64-POOL_ID_BITS));
auto *sh = pool_shard_settings.try_get(pool_id); auto sh_it = pool_shard_settings.find(pool_id);
if (sh) if (sh_it != pool_shard_settings.end())
{ {
// like map_to_pg() // like map_to_pg()
pg_num = (stripe / sh->pg_stripe_size) % sh->pg_count + 1; pg_num = (stripe / sh_it->second.pg_stripe_size) % sh_it->second.pg_count + 1;
} }
return ((pool_id << (64-POOL_ID_BITS)) | pg_num); return ((pool_id << (64-POOL_ID_BITS)) | pg_num);
} }
@@ -968,24 +968,30 @@ bool blockstore_heap_t::unlock_entry(object_id oid, uint64_t copy_id)
heap_object_t *blockstore_heap_t::read_entry(object_id oid, uint32_t *block_num_ptr, bool for_update) heap_object_t *blockstore_heap_t::read_entry(object_id oid, uint32_t *block_num_ptr, bool for_update)
{ {
auto pool_pg_id = get_pg_id(oid.inode, oid.stripe); auto pool_pg_id = get_pg_id(oid.inode, oid.stripe);
auto *pg_index = block_index.try_get(pool_pg_id); auto & pg_index = block_index[pool_pg_id];
if (!pg_index) auto inode_it = pg_index.find(oid.inode);
if (inode_it == pg_index.end())
{
return NULL; return NULL;
auto *inode = pg_index->try_get(oid.inode); }
if (!inode) auto stripe_it = inode_it->second.find(oid.stripe);
if (stripe_it == inode_it->second.end())
{
return NULL; return NULL;
auto *stripe = inode->try_get(oid.stripe); }
if (!stripe) uint64_t block_pos = stripe_it->second;
return NULL;
uint64_t block_pos = *stripe;
uint32_t block_num = block_pos / dsk->meta_block_size; uint32_t block_num = block_pos / dsk->meta_block_size;
assert(block_info[block_num].data != NULL); assert(block_info[block_num].data != NULL);
heap_object_t *obj = (heap_object_t*)(block_info[block_num].data + (block_pos % dsk->meta_block_size)); heap_object_t *obj = (heap_object_t*)(block_info[block_num].data + (block_pos % dsk->meta_block_size));
assert(obj->inode == oid.inode && obj->stripe == oid.stripe); assert(obj->inode == oid.inode && obj->stripe == oid.stripe);
if (block_num_ptr) if (block_num_ptr)
{
*block_num_ptr = block_num; *block_num_ptr = block_num;
}
if (for_update) if (for_update)
{
mvcc_save_copy(obj); mvcc_save_copy(obj);
}
return obj; return obj;
} }
-2
View File
@@ -4,8 +4,6 @@
#pragma once #pragma once
#define EMH_EXT
#include <map> #include <map>
#include <unordered_map> #include <unordered_map>
#include <set> #include <set>