summaryrefslogtreecommitdiffstats
path: root/storage
diff options
context:
space:
mode:
authorTor Egge <Tor.Egge@oath.com>2017-11-21 13:50:33 +0000
committerTor Egge <Tor.Egge@oath.com>2017-11-21 13:50:33 +0000
commit06bc77caeb6aa730e35fef1666319085727b5fbb (patch)
tree1ba1e1fe9b595c733919cbfdc22efbb44a891f8e /storage
parent0c1c80913fd80baf149c1d8cc31e985697757cf0 (diff)
Reduce number of additional lock operations at startup.
Diffstat (limited to 'storage')
-rw-r--r--storage/src/vespa/storage/bucketdb/storagebucketdbinitializer.cpp12
-rw-r--r--storage/src/vespa/storage/bucketdb/storagebucketdbinitializer.h1
2 files changed, 7 insertions, 6 deletions
diff --git a/storage/src/vespa/storage/bucketdb/storagebucketdbinitializer.cpp b/storage/src/vespa/storage/bucketdb/storagebucketdbinitializer.cpp
index c4f566f0286..fc2c2066b6f 100644
--- a/storage/src/vespa/storage/bucketdb/storagebucketdbinitializer.cpp
+++ b/storage/src/vespa/storage/bucketdb/storagebucketdbinitializer.cpp
@@ -371,11 +371,11 @@ StorageBucketDBInitializer::reportHtmlStatus(
// Always called from worker thread. Worker monitor already grabbed
void
StorageBucketDBInitializer::registerBucket(const document::Bucket &bucket,
+ const lib::Distribution &distribution,
spi::PartitionId partition,
api::BucketInfo bucketInfo)
{
document::BucketId bucketId(bucket.getBucketId());
- const auto &contentBucketSpace(_system._bucketSpaceRepo.get(bucket.getBucketSpace()));
StorBucketDatabase::WrappedEntry entry(_system.getBucketDatabase(bucket.getBucketSpace()).get(
bucketId, "StorageBucketDBInitializer::registerBucket",
StorBucketDatabase::CREATE_IF_NONEXISTING));
@@ -403,8 +403,7 @@ StorageBucketDBInitializer::registerBucket(const document::Bucket &bucket,
return;
}
uint32_t keepOnDisk, joinFromDisk;
- auto distribution(contentBucketSpace.getDistribution());
- if (distribution->getPreferredAvailableDisk(
+ if (distribution.getPreferredAvailableDisk(
_system._nodeState, _system._nodeIndex,
bucketId.stripUnused()) == partition)
{
@@ -430,8 +429,7 @@ StorageBucketDBInitializer::registerBucket(const document::Bucket &bucket,
bucketId.toString().c_str(), int(partition));
entry->disk = partition;
entry.write();
- auto distribution(contentBucketSpace.getDistribution());
- uint16_t disk(distribution->getIdealDisk(
+ uint16_t disk(distribution.getIdealDisk(
_system._nodeState, _system._nodeIndex, bucketId.stripUnused(),
lib::Distribution::IDEAL_DISK_EVEN_IF_DOWN));
if (disk != partition) {
@@ -623,8 +621,10 @@ StorageBucketDBInitializer::handleReadBucketListReply(
const spi::BucketIdListResult::List& list(reply.getBuckets());
api::BucketInfo info;
assert(!info.valid());
+ const auto &contentBucketSpace(_system._bucketSpaceRepo.get(reply.getBucketSpace()));
+ auto distribution(contentBucketSpace.getDistribution());
for (uint32_t i=0, n=list.size(); i<n; ++i) {
- registerBucket(document::Bucket(reply.getBucketSpace(), list[i]), reply.getPartition(), info);
+ registerBucket(document::Bucket(reply.getBucketSpace(), list[i]), *distribution, reply.getPartition(), info);
}
if (++_state._dirsListed == _state._dirsToList) {
handleListingCompleted();
diff --git a/storage/src/vespa/storage/bucketdb/storagebucketdbinitializer.h b/storage/src/vespa/storage/bucketdb/storagebucketdbinitializer.h
index eeb86eaff55..57b95e14f48 100644
--- a/storage/src/vespa/storage/bucketdb/storagebucketdbinitializer.h
+++ b/storage/src/vespa/storage/bucketdb/storagebucketdbinitializer.h
@@ -187,6 +187,7 @@ public:
std::vector<uint32_t>& path);
/** Register a bucket in the bucket database. */
void registerBucket(const document::Bucket &bucket,
+ const lib::Distribution &distribution,
spi::PartitionId,
api::BucketInfo bucketInfo);
/**