aboutsummaryrefslogtreecommitdiffstats
path: root/storage
diff options
context:
space:
mode:
authorTor Brede Vekterli <vekterli@oath.com>2017-11-02 13:51:37 +0100
committerGitHub <noreply@github.com>2017-11-02 13:51:37 +0100
commit719cf8af520257638d050be199a31b724622125d (patch)
tree01b8da9c34349506301e3ce484ebbbaa29f19dc3 /storage
parent220b9ce4c63a3a51cd6db0ae9a23128b076eb1e9 (diff)
parenta6753ddae21efca86788dc0c91eddc755ae167b5 (diff)
Merge pull request #3980 from vespa-engine/geirst/add-content-bucket-space-repo
Add repo for all bucket spaces (with associated bucket databases) on …
Diffstat (limited to 'storage')
-rw-r--r--storage/src/tests/common/teststorageapp.h4
-rw-r--r--storage/src/vespa/storage/common/CMakeLists.txt2
-rw-r--r--storage/src/vespa/storage/common/content_bucket_space.cpp12
-rw-r--r--storage/src/vespa/storage/common/content_bucket_space.h21
-rw-r--r--storage/src/vespa/storage/common/content_bucket_space_repo.cpp24
-rw-r--r--storage/src/vespa/storage/common/content_bucket_space_repo.h24
-rw-r--r--storage/src/vespa/storage/common/servicelayercomponent.cpp5
-rw-r--r--storage/src/vespa/storage/common/servicelayercomponent.h11
-rw-r--r--storage/src/vespa/storage/frameworkimpl/component/servicelayercomponentregisterimpl.cpp4
-rw-r--r--storage/src/vespa/storage/frameworkimpl/component/servicelayercomponentregisterimpl.h6
10 files changed, 100 insertions, 13 deletions
diff --git a/storage/src/tests/common/teststorageapp.h b/storage/src/tests/common/teststorageapp.h
index 268ba7aafdc..6906d41ac47 100644
--- a/storage/src/tests/common/teststorageapp.h
+++ b/storage/src/tests/common/teststorageapp.h
@@ -125,7 +125,9 @@ public:
spi::PartitionStateList& getPartitions();
uint16_t getPartition(const document::BucketId&);
- StorBucketDatabase& getStorageBucketDatabase() override { return _compReg.getBucketDatabase(); }
+ StorBucketDatabase& getStorageBucketDatabase() override {
+ return _compReg.getBucketSpaceRepo().get(document::BucketSpace::placeHolder()).bucketDatabase();
+ }
private:
// For storage server interface implementation we'll get rid of soon.
diff --git a/storage/src/vespa/storage/common/CMakeLists.txt b/storage/src/vespa/storage/common/CMakeLists.txt
index 59e27307c77..b98058b3c3d 100644
--- a/storage/src/vespa/storage/common/CMakeLists.txt
+++ b/storage/src/vespa/storage/common/CMakeLists.txt
@@ -3,6 +3,8 @@ vespa_add_library(storage_common OBJECT
SOURCES
bucketmessages.cpp
bucketoperationlogger.cpp
+ content_bucket_space.cpp
+ content_bucket_space_repo.cpp
distributorcomponent.cpp
messagebucket.cpp
messagesender.cpp
diff --git a/storage/src/vespa/storage/common/content_bucket_space.cpp b/storage/src/vespa/storage/common/content_bucket_space.cpp
new file mode 100644
index 00000000000..b78be81c9de
--- /dev/null
+++ b/storage/src/vespa/storage/common/content_bucket_space.cpp
@@ -0,0 +1,12 @@
+// Copyright 2017 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
+
+#include "content_bucket_space.h"
+
+namespace storage {
+
+ContentBucketSpace::ContentBucketSpace()
+ : _bucketDatabase()
+{
+}
+
+}
diff --git a/storage/src/vespa/storage/common/content_bucket_space.h b/storage/src/vespa/storage/common/content_bucket_space.h
new file mode 100644
index 00000000000..2efb2eca06d
--- /dev/null
+++ b/storage/src/vespa/storage/common/content_bucket_space.h
@@ -0,0 +1,21 @@
+// Copyright 2017 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
+#pragma once
+
+#include <vespa/storage/bucketdb/storbucketdb.h>
+
+namespace storage {
+
+/**
+ * Class representing a bucket space (with associated bucket database) on a content node.
+ */
+class ContentBucketSpace {
+private:
+ StorBucketDatabase _bucketDatabase;
+
+public:
+ using UP = std::unique_ptr<ContentBucketSpace>;
+ ContentBucketSpace();
+ StorBucketDatabase &bucketDatabase() { return _bucketDatabase; }
+};
+
+}
diff --git a/storage/src/vespa/storage/common/content_bucket_space_repo.cpp b/storage/src/vespa/storage/common/content_bucket_space_repo.cpp
new file mode 100644
index 00000000000..74a2b912602
--- /dev/null
+++ b/storage/src/vespa/storage/common/content_bucket_space_repo.cpp
@@ -0,0 +1,24 @@
+// Copyright 2017 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
+
+#include "content_bucket_space_repo.h"
+
+using document::BucketSpace;
+
+namespace storage {
+
+ContentBucketSpaceRepo::ContentBucketSpaceRepo()
+ : _map()
+{
+ _map.emplace(BucketSpace::placeHolder(), std::make_unique<ContentBucketSpace>());
+}
+
+ContentBucketSpace &
+ContentBucketSpaceRepo::get(BucketSpace bucketSpace) const
+{
+ assert(bucketSpace == BucketSpace::placeHolder());
+ auto itr = _map.find(bucketSpace);
+ assert(itr != _map.end());
+ return *itr->second;
+}
+
+}
diff --git a/storage/src/vespa/storage/common/content_bucket_space_repo.h b/storage/src/vespa/storage/common/content_bucket_space_repo.h
new file mode 100644
index 00000000000..258edf2d0c9
--- /dev/null
+++ b/storage/src/vespa/storage/common/content_bucket_space_repo.h
@@ -0,0 +1,24 @@
+// Copyright 2017 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
+#pragma once
+
+#include "content_bucket_space.h"
+#include <vespa/document/bucket/bucketspace.h>
+#include <unordered_map>
+
+namespace storage {
+
+/**
+ * Class managing the set of bucket spaces (with associated bucket databases) on a content node.
+ */
+class ContentBucketSpaceRepo {
+private:
+ using BucketSpaceMap = std::unordered_map<document::BucketSpace, ContentBucketSpace::UP, document::BucketSpace::hash>;
+
+ BucketSpaceMap _map;
+
+public:
+ ContentBucketSpaceRepo();
+ ContentBucketSpace &get(document::BucketSpace bucketSpace) const;
+};
+
+}
diff --git a/storage/src/vespa/storage/common/servicelayercomponent.cpp b/storage/src/vespa/storage/common/servicelayercomponent.cpp
index a5f33fb28b8..72f65ebaee1 100644
--- a/storage/src/vespa/storage/common/servicelayercomponent.cpp
+++ b/storage/src/vespa/storage/common/servicelayercomponent.cpp
@@ -2,6 +2,7 @@
#include "servicelayercomponent.h"
+#include <vespa/storage/common/content_bucket_space_repo.h>
#include <vespa/storage/common/nodestateupdater.h>
#include <vespa/vdslib/distribution/distribution.h>
@@ -13,8 +14,8 @@ StorBucketDatabase&
ServiceLayerComponent::getBucketDatabase(BucketSpace bucketSpace) const
{
assert(bucketSpace == BucketSpace::placeHolder());
- assert(_bucketDatabase != 0);
- return *_bucketDatabase;
+ assert(_bucketSpaceRepo != nullptr);
+ return _bucketSpaceRepo->get(bucketSpace).bucketDatabase();
}
uint16_t
diff --git a/storage/src/vespa/storage/common/servicelayercomponent.h b/storage/src/vespa/storage/common/servicelayercomponent.h
index 3e6ccaaa5a0..bd46e6ba4f9 100644
--- a/storage/src/vespa/storage/common/servicelayercomponent.h
+++ b/storage/src/vespa/storage/common/servicelayercomponent.h
@@ -30,6 +30,7 @@
namespace storage {
+class ContentBucketSpaceRepo;
class MinimumUsedBitsTracker;
class StorBucketDatabase;
@@ -38,7 +39,7 @@ struct ServiceLayerManagedComponent
virtual ~ServiceLayerManagedComponent() {}
virtual void setDiskCount(uint16_t count) = 0;
- virtual void setBucketDatabase(StorBucketDatabase&) = 0;
+ virtual void setBucketSpaceRepo(ContentBucketSpaceRepo&) = 0;
virtual void setMinUsedBitsTracker(MinimumUsedBitsTracker&) = 0;
};
@@ -52,12 +53,12 @@ class ServiceLayerComponent : public StorageComponent,
private ServiceLayerManagedComponent
{
uint16_t _diskCount;
- StorBucketDatabase* _bucketDatabase;
+ ContentBucketSpaceRepo* _bucketSpaceRepo;
MinimumUsedBitsTracker* _minUsedBitsTracker;
// ServiceLayerManagedComponent implementation
void setDiskCount(uint16_t count) override { _diskCount = count; }
- void setBucketDatabase(StorBucketDatabase& db) override { _bucketDatabase = &db; }
+ void setBucketSpaceRepo(ContentBucketSpaceRepo& repo) override { _bucketSpaceRepo = &repo; }
void setMinUsedBitsTracker(MinimumUsedBitsTracker& tracker) override {
_minUsedBitsTracker = &tracker;
}
@@ -68,8 +69,8 @@ public:
vespalib::stringref name)
: StorageComponent(compReg, name),
_diskCount(0),
- _bucketDatabase(0),
- _minUsedBitsTracker(0)
+ _bucketSpaceRepo(nullptr),
+ _minUsedBitsTracker(nullptr)
{
compReg.registerServiceLayerComponent(*this);
}
diff --git a/storage/src/vespa/storage/frameworkimpl/component/servicelayercomponentregisterimpl.cpp b/storage/src/vespa/storage/frameworkimpl/component/servicelayercomponentregisterimpl.cpp
index a2699edd258..da734c07c2d 100644
--- a/storage/src/vespa/storage/frameworkimpl/component/servicelayercomponentregisterimpl.cpp
+++ b/storage/src/vespa/storage/frameworkimpl/component/servicelayercomponentregisterimpl.cpp
@@ -9,7 +9,7 @@ using vespalib::IllegalStateException;
ServiceLayerComponentRegisterImpl::ServiceLayerComponentRegisterImpl()
: _diskCount(0),
- _bucketDatabase()
+ _bucketSpaceRepo()
{ }
void
@@ -19,7 +19,7 @@ ServiceLayerComponentRegisterImpl::registerServiceLayerComponent(
vespalib::LockGuard lock(_componentLock);
_components.push_back(&smc);
smc.setDiskCount(_diskCount);
- smc.setBucketDatabase(_bucketDatabase);
+ smc.setBucketSpaceRepo(_bucketSpaceRepo);
smc.setMinUsedBitsTracker(_minUsedBitsTracker);
}
diff --git a/storage/src/vespa/storage/frameworkimpl/component/servicelayercomponentregisterimpl.h b/storage/src/vespa/storage/frameworkimpl/component/servicelayercomponentregisterimpl.h
index b46d795cfcc..5b3e54e3831 100644
--- a/storage/src/vespa/storage/frameworkimpl/component/servicelayercomponentregisterimpl.h
+++ b/storage/src/vespa/storage/frameworkimpl/component/servicelayercomponentregisterimpl.h
@@ -9,7 +9,7 @@
#include "storagecomponentregisterimpl.h"
#include <vespa/storage/bucketdb/minimumusedbitstracker.h>
-#include <vespa/storage/bucketdb/storbucketdb.h>
+#include <vespa/storage/common/content_bucket_space_repo.h>
#include <vespa/storage/common/servicelayercomponent.h>
namespace storage {
@@ -21,7 +21,7 @@ class ServiceLayerComponentRegisterImpl
vespalib::Lock _componentLock;
std::vector<ServiceLayerManagedComponent*> _components;
uint16_t _diskCount;
- StorBucketDatabase _bucketDatabase;
+ ContentBucketSpaceRepo _bucketSpaceRepo;
MinimumUsedBitsTracker _minUsedBitsTracker;
public:
@@ -30,7 +30,7 @@ public:
ServiceLayerComponentRegisterImpl();
uint16_t getDiskCount() const { return _diskCount; }
- StorBucketDatabase& getBucketDatabase() { return _bucketDatabase; }
+ ContentBucketSpaceRepo& getBucketSpaceRepo() { return _bucketSpaceRepo; }
MinimumUsedBitsTracker& getMinUsedBitsTracker() {
return _minUsedBitsTracker;
}