diff options
author | Tor Brede Vekterli <vekterli@yahoo-inc.com> | 2017-10-26 09:08:15 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2017-10-26 09:08:15 +0200 |
commit | d8d2d40bceaeedbdeae89619589515b138cad21b (patch) | |
tree | a65d3e9b5ac7927f904ce1bb1ce3e14030d438e0 | |
parent | 307304bbd461aa040a5cb0f1a3be7b59474e2c9a (diff) | |
parent | f056cc04011cb956e0a6f68b99004772691f57ca (diff) |
Merge pull request #3886 from vespa-engine/toregge/pass-bucket-space-to-getbucketdatabase
Make document::BucketSpace a mandatory argument to ServiceLayerComponent::getBucketDatabase()
15 files changed, 92 insertions, 65 deletions
diff --git a/storage/src/tests/bucketmover/bucketmovertest.cpp b/storage/src/tests/bucketmover/bucketmovertest.cpp index f7c69c4cec4..aad66624e89 100644 --- a/storage/src/tests/bucketmover/bucketmovertest.cpp +++ b/storage/src/tests/bucketmover/bucketmovertest.cpp @@ -3,6 +3,8 @@ #include <vespa/storage/bucketdb/storbucketdb.h> #include <vespa/storage/common/bucketmessages.h> #include <vespa/storage/bucketmover/bucketmover.h> +#include <vespa/document/test/make_bucket_space.h> +#include <vespa/document/test/make_document_bucket.h> #include <tests/common/dummystoragelink.h> #include <tests/common/testhelper.h> #include <tests/common/teststorageapp.h> @@ -10,6 +12,9 @@ bool debug = false; +using document::test::makeBucketSpace; +using document::test::makeDocumentBucket; + namespace storage { namespace bucketmover { @@ -66,14 +71,14 @@ BucketMoverTest::addBucket(const document::BucketId& id, uint16_t idealDiff) { StorBucketDatabase::WrappedEntry entry( - _component->getBucketDatabase().get( + _component->getBucketDatabase(makeBucketSpace()).get( id, "", StorBucketDatabase::CREATE_IF_NONEXISTING)); entry->setBucketInfo(api::BucketInfo(1,1,1)); - uint16_t idealDisk = _component->getIdealPartition(id); + uint16_t idealDisk = _component->getIdealPartition(makeDocumentBucket(id)); entry->disk = (idealDisk + idealDiff) % _component->getDiskCount(); entry.write(); } diff --git a/storage/src/vespa/storage/bucketdb/bucketmanager.cpp b/storage/src/vespa/storage/bucketdb/bucketmanager.cpp index 37b58364814..ccec207cadc 100644 --- a/storage/src/vespa/storage/bucketdb/bucketmanager.cpp +++ b/storage/src/vespa/storage/bucketdb/bucketmanager.cpp @@ -23,6 +23,8 @@ #include <vespa/log/bufferedlogger.h> LOG_SETUP(".storage.bucketdb.manager"); +using document::BucketSpace; + namespace storage { BucketManager::BucketManager(const config::ConfigUri & configUri, @@ -205,10 +207,10 @@ namespace { } // End of anonymous namespace StorBucketDatabase::Entry -BucketManager::getBucketInfo(const document::BucketId& id) const +BucketManager::getBucketInfo(const document::Bucket &bucket) const { StorBucketDatabase::WrappedEntry entry( - _component.getBucketDatabase().get(id, "BucketManager::getBucketInfo")); + _component.getBucketDatabase(bucket.getBucketSpace()).get(bucket.getBucketId(), "BucketManager::getBucketInfo")); return *entry; } @@ -218,13 +220,13 @@ BucketManager::updateMetrics(bool updateDocCount) LOG(debug, "Iterating bucket database to update metrics%s%s", updateDocCount ? "" : ", minusedbits only", _doneInitialized ? "" : ", server is not done initializing"); - uint64_t dbMemSize = _component.getBucketDatabase().getMemoryUsage(); + uint64_t dbMemSize = _component.getBucketDatabase(BucketSpace::placeHolder()).getMemoryUsage(); _bucketDBMemoryToken->resize(dbMemSize, dbMemSize); uint32_t diskCount = _component.getDiskCount(); if (!updateDocCount || _doneInitialized) { MetricsUpdater m(diskCount); - _component.getBucketDatabase().chunkedAll( + _component.getBucketDatabase(BucketSpace::placeHolder()).chunkedAll( m, "BucketManager::updateMetrics"); if (updateDocCount) { for (uint16_t i = 0; i< diskCount; i++) { @@ -241,7 +243,7 @@ BucketManager::updateMetrics(bool updateDocCount) void BucketManager::updateMinUsedBits() { MetricsUpdater m(_component.getDiskCount()); - _component.getBucketDatabase().chunkedAll( + _component.getBucketDatabase(BucketSpace::placeHolder()).chunkedAll( m, "BucketManager::updateMetrics"); // When going through to get sizes, we also record min bits MinimumUsedBitsTracker& bitTracker(_component.getMinUsedBitsTracker()); @@ -340,7 +342,7 @@ BucketManager::reportStatus(std::ostream& out, framework::PartlyXmlStatusReporter xmlReporter(*this, out, path); xmlReporter << vespalib::xml::XmlTag("buckets"); BucketDBDumper dumper(xmlReporter.getStream()); - _component.getBucketDatabase().chunkedAll( + _component.getBucketDatabase(BucketSpace::placeHolder()).chunkedAll( dumper, "BucketManager::getStatus"); xmlReporter << vespalib::xml::XmlEndTag(); } else { @@ -359,7 +361,7 @@ BucketManager::dump(std::ostream& out) const { vespalib::XmlOutputStream xos(out); BucketDBDumper dumper(xos); - _component.getBucketDatabase().chunkedAll(dumper, 0); + _component.getBucketDatabase(BucketSpace::placeHolder()).chunkedAll(dumper, 0); } @@ -399,12 +401,13 @@ bool BucketManager::onRequestBucketInfo( ScopedQueueDispatchGuard queueGuard(*this); + BucketSpace bucketSpace(cmd->getBucketSpace()); api::RequestBucketInfoReply::EntryVector info; if (cmd->getBuckets().size()) { typedef std::map<document::BucketId, StorBucketDatabase::WrappedEntry> BucketMap; for (uint32_t i = 0; i < cmd->getBuckets().size(); i++) { - BucketMap entries(_component.getBucketDatabase().getAll( + BucketMap entries(_component.getBucketDatabase(bucketSpace).getAll( cmd->getBuckets()[i], "BucketManager::onRequestBucketInfo")); for (BucketMap::iterator it = entries.begin(); @@ -598,12 +601,12 @@ BucketManager::processRequestBucketInfoCommands(BIList& reqs) if (LOG_WOULD_LOG(spam)) { DistributorInfoGatherer<true> builder( *clusterState, result, idFac, distribution); - _component.getBucketDatabase().chunkedAll(builder, + _component.getBucketDatabase(BucketSpace::placeHolder()).chunkedAll(builder, "BucketManager::processRequestBucketInfoCommands-1"); } else { DistributorInfoGatherer<false> builder( *clusterState, result, idFac, distribution); - _component.getBucketDatabase().chunkedAll(builder, + _component.getBucketDatabase(BucketSpace::placeHolder()).chunkedAll(builder, "BucketManager::processRequestBucketInfoCommands-2"); } _metrics->fullBucketInfoLatency.addValue( @@ -639,7 +642,7 @@ BucketManager::onUp(const std::shared_ptr<api::StorageMessage>& msg) bool BucketManager::verifyAndUpdateLastModified(api::StorageCommand& cmd, - const document::BucketId& bucketId, + const document::Bucket &bucket, uint64_t lastModified) { LOG(spam, "Received operation %s with modification timestamp %zu", @@ -650,7 +653,7 @@ BucketManager::verifyAndUpdateLastModified(api::StorageCommand& cmd, { StorBucketDatabase::WrappedEntry entry( - _component.getBucketDatabase().get(bucketId, "BucketManager::verify")); + _component.getBucketDatabase(bucket.getBucketSpace()).get(bucket.getBucketId(), "BucketManager::verify")); if (entry.exist()) { prevLastModified = entry->info.getLastModified(); @@ -674,7 +677,7 @@ BucketManager::verifyAndUpdateLastModified(api::StorageCommand& cmd, "bucket %s, with timestamp %zu", cmd.toString().c_str(), lastModified, - bucketId.toString().c_str(), + bucket.toString().c_str(), prevLastModified))); @@ -735,7 +738,7 @@ bool BucketManager::onRemove(const api::RemoveCommand::SP& cmd) { if (!verifyAndUpdateLastModified(*cmd, - cmd->getBucketId(), + cmd->getBucket(), cmd->getTimestamp())) { return true; } @@ -753,7 +756,7 @@ bool BucketManager::onPut(const api::PutCommand::SP& cmd) { if (!verifyAndUpdateLastModified(*cmd, - cmd->getBucketId(), + cmd->getBucket(), cmd->getTimestamp())) { return true; } @@ -771,7 +774,7 @@ bool BucketManager::onUpdate(const api::UpdateCommand::SP& cmd) { if (!verifyAndUpdateLastModified(*cmd, - cmd->getBucketId(), + cmd->getBucket(), cmd->getTimestamp())) { return true; } diff --git a/storage/src/vespa/storage/bucketdb/bucketmanager.h b/storage/src/vespa/storage/bucketdb/bucketmanager.h index a9655eae8ad..c680ff7ed6c 100644 --- a/storage/src/vespa/storage/bucketdb/bucketmanager.h +++ b/storage/src/vespa/storage/bucketdb/bucketmanager.h @@ -106,7 +106,7 @@ public: void dump(std::ostream& out) const; /** Get info for given bucket (Used for whitebox testing) */ - StorBucketDatabase::Entry getBucketInfo(const document::BucketId& id) const; + StorBucketDatabase::Entry getBucketInfo(const document::Bucket &id) const; private: friend class BucketManagerTest; @@ -227,7 +227,7 @@ private: const std::shared_ptr<api::NotifyBucketChangeReply>&) override; bool verifyAndUpdateLastModified(api::StorageCommand& cmd, - const document::BucketId& bucketId, + const document::Bucket& bucket, uint64_t lastModified); bool onSplitBucketReply( const std::shared_ptr<api::SplitBucketReply>&) override; diff --git a/storage/src/vespa/storage/bucketdb/storagebucketdbinitializer.cpp b/storage/src/vespa/storage/bucketdb/storagebucketdbinitializer.cpp index cf6d5183ce1..3a832f0fe3b 100644 --- a/storage/src/vespa/storage/bucketdb/storagebucketdbinitializer.cpp +++ b/storage/src/vespa/storage/bucketdb/storagebucketdbinitializer.cpp @@ -65,7 +65,7 @@ StorageBucketDBInitializer::System::System( : _doneInitializeHandler(doneInitializeHandler), _component(compReg, "storagebucketdbinitializer"), _partitions(partitions), - _bucketDatabase(_component.getBucketDatabase()), + _bucketDatabase(_component.getBucketDatabase(BucketSpace::placeHolder())), _nodeIndex(_component.getIndex()), _distribution(*_component.getDistribution()), _nodeState() diff --git a/storage/src/vespa/storage/bucketmover/bucketmover.cpp b/storage/src/vespa/storage/bucketmover/bucketmover.cpp index 01276db8087..b9073ca2cdc 100644 --- a/storage/src/vespa/storage/bucketmover/bucketmover.cpp +++ b/storage/src/vespa/storage/bucketmover/bucketmover.cpp @@ -112,7 +112,7 @@ BucketMover::startNewRun() LOG(debug, "Starting new move cycle at time %s.", _component.getClock().getTimeInSeconds().toString().c_str()); _currentRun.reset(new bucketmover::Run( - _component.getBucketDatabase(), + _component.getBucketDatabase(BucketSpace::placeHolder()), _component.getDistribution(), *_component.getStateUpdater().getReportedNodeState(), _component.getIndex(), diff --git a/storage/src/vespa/storage/common/servicelayercomponent.cpp b/storage/src/vespa/storage/common/servicelayercomponent.cpp index 59dbafc756e..a5f33fb28b8 100644 --- a/storage/src/vespa/storage/common/servicelayercomponent.cpp +++ b/storage/src/vespa/storage/common/servicelayercomponent.cpp @@ -5,22 +5,32 @@ #include <vespa/storage/common/nodestateupdater.h> #include <vespa/vdslib/distribution/distribution.h> +using document::BucketSpace; + namespace storage { +StorBucketDatabase& +ServiceLayerComponent::getBucketDatabase(BucketSpace bucketSpace) const +{ + assert(bucketSpace == BucketSpace::placeHolder()); + assert(_bucketDatabase != 0); + return *_bucketDatabase; +} + uint16_t -ServiceLayerComponent::getIdealPartition(const document::BucketId& bucket) const +ServiceLayerComponent::getIdealPartition(const document::Bucket& bucket) const { return getDistribution()->getIdealDisk( - *getStateUpdater().getReportedNodeState(), getIndex(), bucket, + *getStateUpdater().getReportedNodeState(), getIndex(), bucket.getBucketId(), lib::Distribution::IDEAL_DISK_EVEN_IF_DOWN); } uint16_t ServiceLayerComponent::getPreferredAvailablePartition( - const document::BucketId& bucket) const + const document::Bucket& bucket) const { return getDistribution()->getPreferredAvailableDisk( - *getStateUpdater().getReportedNodeState(), getIndex(), bucket); + *getStateUpdater().getReportedNodeState(), getIndex(), bucket.getBucketId()); } } // storage diff --git a/storage/src/vespa/storage/common/servicelayercomponent.h b/storage/src/vespa/storage/common/servicelayercomponent.h index 6599d4bfdb1..3e6ccaaa5a0 100644 --- a/storage/src/vespa/storage/common/servicelayercomponent.h +++ b/storage/src/vespa/storage/common/servicelayercomponent.h @@ -26,6 +26,7 @@ #pragma once #include "storagecomponent.h" +#include <vespa/document/bucket/bucket.h> namespace storage { @@ -74,8 +75,7 @@ public: } uint16_t getDiskCount() const { return _diskCount; } - StorBucketDatabase& getBucketDatabase() const - { assert(_bucketDatabase != 0); return *_bucketDatabase; } + StorBucketDatabase& getBucketDatabase(document::BucketSpace bucketSpace) const; MinimumUsedBitsTracker& getMinUsedBitsTracker() { assert(_minUsedBitsTracker != 0); return *_minUsedBitsTracker; @@ -84,8 +84,8 @@ public: assert(_minUsedBitsTracker != 0); return *_minUsedBitsTracker; } - uint16_t getIdealPartition(const document::BucketId&) const; - uint16_t getPreferredAvailablePartition(const document::BucketId&) const; + uint16_t getIdealPartition(const document::Bucket&) const; + uint16_t getPreferredAvailablePartition(const document::Bucket&) const; }; } // storage diff --git a/storage/src/vespa/storage/frameworkimpl/thread/deadlockdetector.cpp b/storage/src/vespa/storage/frameworkimpl/thread/deadlockdetector.cpp index 39b7aa22ee7..b2a370aa490 100644 --- a/storage/src/vespa/storage/frameworkimpl/thread/deadlockdetector.cpp +++ b/storage/src/vespa/storage/frameworkimpl/thread/deadlockdetector.cpp @@ -8,6 +8,8 @@ #include <vespa/log/bufferedlogger.h> LOG_SETUP(".deadlock.detector"); +using document::BucketSpace; + namespace storage { DeadLockDetector::DeadLockDetector(StorageComponentRegister& compReg, @@ -128,8 +130,8 @@ DeadLockDetector::getBucketLockInfo() const if (_dComponent.get() != nullptr) { ost << "No bucket lock information available for distributor\n"; } else { - if (_slComponent->getBucketDatabase().size() > 0) { - _slComponent->getBucketDatabase().showLockClients(ost); + if (_slComponent->getBucketDatabase(BucketSpace::placeHolder()).size() > 0) { + _slComponent->getBucketDatabase(BucketSpace::placeHolder()).showLockClients(ost); } } return ost.str(); diff --git a/storage/src/vespa/storage/persistence/filestorage/filestormanager.cpp b/storage/src/vespa/storage/persistence/filestorage/filestormanager.cpp index 7abf480e80b..d688ae85204 100644 --- a/storage/src/vespa/storage/persistence/filestorage/filestormanager.cpp +++ b/storage/src/vespa/storage/persistence/filestorage/filestormanager.cpp @@ -23,6 +23,7 @@ LOG_SETUP(".persistence.filestor.manager"); using std::shared_ptr; +using document::BucketSpace; namespace storage { @@ -155,7 +156,7 @@ FileStorManager::configure(std::unique_ptr<vespa::config::content::StorFilestorC void FileStorManager::replyDroppedOperation(api::StorageMessage& msg, - const document::BucketId& bucket, + const document::Bucket& bucket, api::ReturnCode::Result returnCode, vespalib::stringref reason) { @@ -173,7 +174,7 @@ FileStorManager::replyDroppedOperation(api::StorageMessage& msg, void FileStorManager::replyWithBucketNotFound(api::StorageMessage& msg, - const document::BucketId& bucket) + const document::Bucket& bucket) { replyDroppedOperation(msg, bucket, @@ -185,10 +186,10 @@ StorBucketDatabase::WrappedEntry FileStorManager::mapOperationToDisk(api::StorageMessage& msg, const document::Bucket& bucket) { - StorBucketDatabase::WrappedEntry entry(_component.getBucketDatabase().get( + StorBucketDatabase::WrappedEntry entry(_component.getBucketDatabase(bucket.getBucketSpace()).get( bucket.getBucketId(), "FileStorManager::mapOperationToDisk")); if (!entry.exist()) { - replyWithBucketNotFound(msg, bucket.getBucketId()); + replyWithBucketNotFound(msg, bucket); } return entry; } @@ -197,7 +198,7 @@ StorBucketDatabase::WrappedEntry FileStorManager::mapOperationToBucketAndDisk(api::BucketCommand& cmd, const document::DocumentId* docId) { - StorBucketDatabase::WrappedEntry entry(_component.getBucketDatabase().get( + StorBucketDatabase::WrappedEntry entry(_component.getBucketDatabase(BucketSpace::placeHolder()).get( cmd.getBucketId(), "FileStorManager::mapOperationToBucketAndDisk")); if (!entry.exist()) { document::BucketId specific(cmd.getBucketId()); @@ -209,7 +210,7 @@ FileStorManager::mapOperationToBucketAndDisk(api::BucketCommand& cmd, std::shared_ptr<api::StorageReply> reply; { BucketMap results( - _component.getBucketDatabase().getContained( + _component.getBucketDatabase(BucketSpace::placeHolder()).getContained( specific, "FileStorManager::mapOperationToBucketAndDisk-2")); if (results.size() == 1) { LOG(debug, @@ -423,9 +424,10 @@ FileStorManager::onCreateBucket( { api::ReturnCode code(api::ReturnCode::OK); { + document::Bucket bucket(cmd->getBucket()); StorBucketDatabase::WrappedEntry entry( - _component.getBucketDatabase().get( - cmd->getBucketId(), "FileStorManager::onCreateBucket", + _component.getBucketDatabase(bucket.getBucketSpace()).get( + bucket.getBucketId(), "FileStorManager::onCreateBucket", StorBucketDatabase::CREATE_IF_NONEXISTING)); if (entry.preExisted()) { LOG(debug, @@ -435,7 +437,7 @@ FileStorManager::onCreateBucket( code = api::ReturnCode(api::ReturnCode::EXISTS, "Bucket already exist"); } else { - entry->disk = _component.getIdealPartition(cmd->getBucketId()); + entry->disk = _component.getIdealPartition(cmd->getBucket()); if (_partitions[entry->disk].isUp()) { // Newly created buckets are ready but not active, unless // explicitly marked as such by the distributor. @@ -471,7 +473,8 @@ FileStorManager::onDeleteBucket(const shared_ptr<api::DeleteBucketCommand>& cmd) { uint16_t disk; { - StorBucketDatabase::WrappedEntry entry(_component.getBucketDatabase().get(cmd->getBucketId(), + document::Bucket bucket(cmd->getBucket()); + StorBucketDatabase::WrappedEntry entry(_component.getBucketDatabase(bucket.getBucketSpace()).get(bucket.getBucketId(), "FileStorManager::onDeleteBucket")); if (!entry.exist()) { LOG(debug, "%s was already deleted", cmd->getBucketId().toString().c_str()); @@ -525,14 +528,14 @@ FileStorManager::onDeleteBucket(const shared_ptr<api::DeleteBucketCommand>& cmd) StorBucketDatabase::WrappedEntry FileStorManager::ensureConsistentBucket( - const document::BucketId& bucket, + const document::Bucket& bucket, api::StorageMessage& msg, const char* callerId) { - StorBucketDatabase::WrappedEntry entry(_component.getBucketDatabase().get( - bucket, callerId, StorBucketDatabase::CREATE_IF_NONEXISTING)); + StorBucketDatabase::WrappedEntry entry(_component.getBucketDatabase(bucket.getBucketSpace()).get( + bucket.getBucketId(), callerId, StorBucketDatabase::CREATE_IF_NONEXISTING)); assert(entry.exist()); - if (!_component.getBucketDatabase().isConsistent(entry)) { + if (!_component.getBucketDatabase(bucket.getBucketSpace()).isConsistent(entry)) { if (!entry.preExisted()) { // Don't create empty bucket if merge isn't allowed to continue. entry.remove(); @@ -547,14 +550,14 @@ FileStorManager::ensureConsistentBucket( bool FileStorManager::onMergeBucket(const shared_ptr<api::MergeBucketCommand>& cmd) { - StorBucketDatabase::WrappedEntry entry(ensureConsistentBucket(cmd->getBucketId(), *cmd, + StorBucketDatabase::WrappedEntry entry(ensureConsistentBucket(cmd->getBucket(), *cmd, "FileStorManager::onMergeBucket")); if (!entry.exist()) { return true; } if (!entry.preExisted()) { - entry->disk = _component.getIdealPartition(cmd->getBucketId()); + entry->disk = _component.getIdealPartition(cmd->getBucket()); if (_partitions[entry->disk].isUp()) { entry->info = api::BucketInfo(0, 0, 0, 0, 0, true, false); LOG(debug, "Created bucket %s on disk %d (node index is %d) due to merge being received.", @@ -587,14 +590,14 @@ FileStorManager::onGetBucketDiff( const shared_ptr<api::GetBucketDiffCommand>& cmd) { StorBucketDatabase::WrappedEntry entry( - ensureConsistentBucket(cmd->getBucketId(), + ensureConsistentBucket(cmd->getBucket(), *cmd, "FileStorManager::onGetBucketDiff")); if (!entry.exist()) { return true; } if (!entry.preExisted()) { - entry->disk = _component.getIdealPartition(cmd->getBucketId()); + entry->disk = _component.getIdealPartition(cmd->getBucket()); if (_partitions[entry->disk].isUp()) { LOG(debug, "Created bucket %s on disk %d (node index is %d) due " "to get bucket diff being received.", @@ -635,8 +638,10 @@ FileStorManager::validateApplyDiffCommandBucket(api::StorageMessage& msg, const if (!entry.exist()) { return false; } - if (!_component.getBucketDatabase().isConsistent(entry)) { - replyDroppedOperation(msg, entry.getBucketId(), api::ReturnCode::ABORTED, + BucketSpace bucketSpace(msg.getBucket().getBucketSpace()); + if (!_component.getBucketDatabase(bucketSpace).isConsistent(entry)) { + document::Bucket bucket(bucketSpace, entry.getBucketId()); + replyDroppedOperation(msg, bucket, api::ReturnCode::ABORTED, "bucket became inconsistent during merging"); return false; } @@ -652,7 +657,7 @@ FileStorManager::validateDiffReplyBucket(const StorBucketDatabase::WrappedEntry& api::ReturnCode(api::ReturnCode::BUCKET_NOT_FOUND, "Bucket removed during merge")); return false; } - if (!_component.getBucketDatabase().isConsistent(entry)) { + if (!_component.getBucketDatabase(bucket.getBucketSpace()).isConsistent(entry)) { _filestorHandler->clearMergeStatus(bucket, api::ReturnCode(api::ReturnCode::ABORTED, "Bucket became inconsistent during merging")); return false; @@ -694,13 +699,14 @@ FileStorManager::onApplyBucketDiffReply(const shared_ptr<api::ApplyBucketDiffRep bool FileStorManager::onJoinBuckets(const std::shared_ptr<api::JoinBucketsCommand>& cmd) { - StorBucketDatabase::WrappedEntry entry(_component.getBucketDatabase().get( - cmd->getBucketId(), "FileStorManager::onJoinBuckets")); + document::Bucket bucket(cmd->getBucket()); + StorBucketDatabase::WrappedEntry entry(_component.getBucketDatabase(bucket.getBucketSpace()).get( + bucket.getBucketId(), "FileStorManager::onJoinBuckets")); uint16_t disk; if (entry.exist()) { disk = entry->disk; } else { - disk = _component.getPreferredAvailablePartition(cmd->getBucketId()); + disk = _component.getPreferredAvailablePartition(bucket); } return handlePersistenceMessage(cmd, disk); } @@ -967,7 +973,7 @@ FileStorManager::updateState() if (_nodeUpInLastNodeStateSeenByProvider && !nodeUp) { LOG(debug, "Received cluster state where this node is down; de-activating all buckets in database"); Deactivator deactivator; - _component.getBucketDatabase().all(deactivator, "FileStorManager::updateState"); + _component.getBucketDatabase(BucketSpace::placeHolder()).all(deactivator, "FileStorManager::updateState"); } _provider->setClusterState(spiState); _nodeUpInLastNodeStateSeenByProvider = nodeUp; diff --git a/storage/src/vespa/storage/persistence/filestorage/filestormanager.h b/storage/src/vespa/storage/persistence/filestorage/filestormanager.h index 1f4186bf625..fe103fdcdd0 100644 --- a/storage/src/vespa/storage/persistence/filestorage/filestormanager.h +++ b/storage/src/vespa/storage/persistence/filestorage/filestormanager.h @@ -127,15 +127,15 @@ public: private: void configure(std::unique_ptr<vespa::config::content::StorFilestorConfig> config) override; - void replyWithBucketNotFound(api::StorageMessage&, const document::BucketId&); + void replyWithBucketNotFound(api::StorageMessage&, const document::Bucket&); void replyDroppedOperation(api::StorageMessage& msg, - const document::BucketId& bucket, + const document::Bucket& bucket, api::ReturnCode::Result returnCode, vespalib::stringref reason); StorBucketDatabase::WrappedEntry ensureConsistentBucket( - const document::BucketId& bucket, + const document::Bucket& bucket, api::StorageMessage& msg, const char* callerId); diff --git a/storage/src/vespa/storage/persistence/persistencethread.cpp b/storage/src/vespa/storage/persistence/persistencethread.cpp index 074e5aafb3c..1988321a7b1 100644 --- a/storage/src/vespa/storage/persistence/persistencethread.cpp +++ b/storage/src/vespa/storage/persistence/persistencethread.cpp @@ -868,7 +868,7 @@ PersistenceThread::handleRecheckBucketInfo(RecheckBucketInfoCommand& cmd) { // Update bucket database StorBucketDatabase::WrappedEntry entry( - _component->getBucketDatabase().get( + _component->getBucketDatabase(bucket.getBucketSpace()).get( bucket.getBucketId(), "handleRecheckBucketInfo")); diff --git a/storage/src/vespa/storage/persistence/persistenceutil.cpp b/storage/src/vespa/storage/persistence/persistenceutil.cpp index 25578048f69..d388f52f6f2 100644 --- a/storage/src/vespa/storage/persistence/persistenceutil.cpp +++ b/storage/src/vespa/storage/persistence/persistenceutil.cpp @@ -115,7 +115,7 @@ PersistenceUtil::updateBucketDatabase(const document::Bucket &bucket, uint16_t PersistenceUtil::getPreferredAvailableDisk(const document::Bucket &bucket) const { - return _component.getPreferredAvailablePartition(bucket.getBucketId()); + return _component.getPreferredAvailablePartition(bucket); } PersistenceUtil::LockResult diff --git a/storage/src/vespa/storage/persistence/persistenceutil.h b/storage/src/vespa/storage/persistence/persistenceutil.h index 49ea5c82ab4..94feb98bfec 100644 --- a/storage/src/vespa/storage/persistence/persistenceutil.h +++ b/storage/src/vespa/storage/persistence/persistenceutil.h @@ -86,7 +86,7 @@ struct PersistenceUtil { ~PersistenceUtil(); StorBucketDatabase& getBucketDatabase() - { return _component.getBucketDatabase(); } + { return _component.getBucketDatabase(document::BucketSpace::placeHolder()); } void updateBucketDatabase(const document::Bucket &bucket, const api::BucketInfo& info); diff --git a/storage/src/vespa/storage/storageserver/bucketintegritychecker.cpp b/storage/src/vespa/storage/storageserver/bucketintegritychecker.cpp index 337eaef69a5..5a3c7e5c35c 100644 --- a/storage/src/vespa/storage/storageserver/bucketintegritychecker.cpp +++ b/storage/src/vespa/storage/storageserver/bucketintegritychecker.cpp @@ -567,7 +567,7 @@ BucketIntegrityChecker::run(framework::ThreadHandle& thread) LOG(info, "Starting new verification/repair cycle at time %s.", currentTime.toString().c_str()); _lastCycleStart = currentTime; - _cycleStartBucketCount = _component.getBucketDatabase().size(); + _cycleStartBucketCount = _component.getBucketDatabase(BucketSpace::placeHolder()).size(); _lastCycleCompleted = false; _currentRunWithFullVerification = (state == SchedulingOptions::RUN_FULL); @@ -578,7 +578,7 @@ BucketIntegrityChecker::run(framework::ThreadHandle& thread) < _scheduleOptions._maxPendingCount) { document::BucketId bid(_status[i].iterate( - _component.getBucketDatabase())); + _component.getBucketDatabase(BucketSpace::placeHolder()))); if (bid == document::BucketId(0, 0)) { LOG(debug, "Completed repair cycle for disk %u.", i); // If there is no next bucket, we might have completed diff --git a/storageapi/src/vespa/storageapi/message/bucket.h b/storageapi/src/vespa/storageapi/message/bucket.h index 0c97772d184..05838600a24 100644 --- a/storageapi/src/vespa/storageapi/message/bucket.h +++ b/storageapi/src/vespa/storageapi/message/bucket.h @@ -362,6 +362,7 @@ public: const lib::ClusterState& getSystemState() const { return *_state; } const vespalib::string& getDistributionHash() const { return _distributionHash; } + document::BucketSpace getBucketSpace() const { return _bucketSpace; } void print(std::ostream& out, bool verbose, const std::string& indent) const override; |