mirror of
https://github.com/ceph/ceph
synced 2025-02-24 03:27:10 +00:00
Merge pull request #15654 from lixiaoy1/lisa_bid
bluestore: wrap blob id when it reaches maximum value of int16_t Reviewed-by: Kefu Chai <kchai@redhat.com> Reviewed-by: xie xingguo <xie.xingguo@zte.com.cn> Reviewed-by: Sage Weil <sage@redhat.com>
This commit is contained in:
commit
9f574bc826
@ -36,6 +36,8 @@
|
||||
#define dout_context cct
|
||||
#define dout_subsys ceph_subsys_bluestore
|
||||
|
||||
using bid_t = decltype(BlueStore::Blob::id);
|
||||
|
||||
// bluestore_cache_onode
|
||||
MEMPOOL_DEFINE_OBJECT_FACTORY(BlueStore::Onode, bluestore_onode,
|
||||
bluestore_cache_onode);
|
||||
@ -661,7 +663,7 @@ void BlueStore::GarbageCollector::process_protrusive_extents(
|
||||
}
|
||||
bExit = it == bi.last_lextent;
|
||||
++it;
|
||||
} while(!bExit);
|
||||
} while (!bExit);
|
||||
}
|
||||
expected_for_release += blob_expected_for_release;
|
||||
expected_allocations += bi.expected_allocations;
|
||||
@ -2012,6 +2014,28 @@ void BlueStore::ExtentMap::update(KeyValueDB::Transaction t,
|
||||
}
|
||||
}
|
||||
|
||||
bid_t BlueStore::ExtentMap::allocate_spanning_blob_id()
|
||||
{
|
||||
if (spanning_blob_map.empty())
|
||||
return 0;
|
||||
bid_t bid = spanning_blob_map.rbegin()->first + 1;
|
||||
// bid is valid and available.
|
||||
if (bid >= 0)
|
||||
return bid;
|
||||
// Find next unused bid;
|
||||
bid = rand() % (numeric_limits<bid_t>::max() + 1);
|
||||
const auto begin_bid = bid;
|
||||
do {
|
||||
if (!spanning_blob_map.count(bid))
|
||||
return bid;
|
||||
else {
|
||||
bid++;
|
||||
if (bid < 0) bid = 0;
|
||||
}
|
||||
} while (bid != begin_bid);
|
||||
assert(0 == "no available blob id");
|
||||
}
|
||||
|
||||
void BlueStore::ExtentMap::reshard(
|
||||
KeyValueDB *db,
|
||||
KeyValueDB::Transaction t)
|
||||
@ -2201,12 +2225,6 @@ void BlueStore::ExtentMap::reshard(
|
||||
} else {
|
||||
shard_end = sp->offset;
|
||||
}
|
||||
int bid;
|
||||
if (spanning_blob_map.empty()) {
|
||||
bid = 0;
|
||||
} else {
|
||||
bid = spanning_blob_map.rbegin()->first + 1;
|
||||
}
|
||||
Extent dummy(needs_reshard_begin);
|
||||
for (auto e = extent_map.lower_bound(dummy); e != extent_map.end(); ++e) {
|
||||
if (e->logical_offset >= needs_reshard_end) {
|
||||
@ -2260,7 +2278,8 @@ void BlueStore::ExtentMap::reshard(
|
||||
must_span = true;
|
||||
}
|
||||
if (must_span) {
|
||||
b->id = bid++;
|
||||
auto bid = allocate_spanning_blob_id();
|
||||
b->id = bid;
|
||||
spanning_blob_map[b->id] = b;
|
||||
dout(20) << __func__ << " adding spanning " << *b << dendl;
|
||||
}
|
||||
|
@ -776,6 +776,7 @@ public:
|
||||
}
|
||||
|
||||
void update(KeyValueDB::Transaction t, bool force);
|
||||
decltype(BlueStore::Blob::id) allocate_spanning_blob_id();
|
||||
void reshard(
|
||||
KeyValueDB *db,
|
||||
KeyValueDB::Transaction t);
|
||||
|
Loading…
Reference in New Issue
Block a user