summaryrefslogtreecommitdiffstats
path: root/storage
diff options
context:
space:
mode:
authorTor Egge <Tor.Egge@oath.com>2017-10-25 14:31:46 +0000
committerTor Egge <Tor.Egge@oath.com>2017-10-25 14:34:15 +0000
commitf056cc04011cb956e0a6f68b99004772691f57ca (patch)
tree6c64d2baf007f412eb6f2fa265e93b4a1cb22c62 /storage
parent9606e88b7ca082f36eb38b0e197a0513f76ef6eb (diff)
Make document::BucketSpace a mandatory argument to
ServiceLayerComponent::getBucketDatabase().
Diffstat (limited to 'storage')
-rw-r--r--storage/src/tests/bucketmover/bucketmovertest.cpp9
-rw-r--r--storage/src/vespa/storage/bucketdb/bucketmanager.cpp35
-rw-r--r--storage/src/vespa/storage/bucketdb/bucketmanager.h4
-rw-r--r--storage/src/vespa/storage/bucketdb/storagebucketdbinitializer.cpp2
-rw-r--r--storage/src/vespa/storage/bucketmover/bucketmover.cpp2
-rw-r--r--storage/src/vespa/storage/common/servicelayercomponent.cpp18
-rw-r--r--storage/src/vespa/storage/common/servicelayercomponent.h8
-rw-r--r--storage/src/vespa/storage/frameworkimpl/thread/deadlockdetector.cpp6
-rw-r--r--storage/src/vespa/storage/persistence/filestorage/filestormanager.cpp56
-rw-r--r--storage/src/vespa/storage/persistence/filestorage/filestormanager.h6
-rw-r--r--storage/src/vespa/storage/persistence/persistencethread.cpp2
-rw-r--r--storage/src/vespa/storage/persistence/persistenceutil.cpp2
-rw-r--r--storage/src/vespa/storage/persistence/persistenceutil.h2
-rw-r--r--storage/src/vespa/storage/storageserver/bucketintegritychecker.cpp4
14 files changed, 91 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