diff options
author | Tor Egge <Tor.Egge@oath.com> | 2017-11-21 13:50:33 +0000 |
---|---|---|
committer | Tor Egge <Tor.Egge@oath.com> | 2017-11-21 13:50:33 +0000 |
commit | 06bc77caeb6aa730e35fef1666319085727b5fbb (patch) | |
tree | 1ba1e1fe9b595c733919cbfdc22efbb44a891f8e /storage | |
parent | 0c1c80913fd80baf149c1d8cc31e985697757cf0 (diff) |
Reduce number of additional lock operations at startup.
Diffstat (limited to 'storage')
-rw-r--r-- | storage/src/vespa/storage/bucketdb/storagebucketdbinitializer.cpp | 12 | ||||
-rw-r--r-- | storage/src/vespa/storage/bucketdb/storagebucketdbinitializer.h | 1 |
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); /** |