Couchbase Transactions C++ Client  1.0.0
Transactions client for couchbase
cluster.hxx
1 /*
2  * Copyright 2021 Couchbase, Inc.
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  * http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16 
17 #pragma once
18 
19 #include <chrono>
20 #include <list>
21 #include <memory>
22 #include <mutex>
23 #include <string>
24 
25 #include <boost/optional.hpp>
27 #include <couchbase/support.hxx>
28 /*
29  * @file
30  * Provides cluster-level operations for Couchbase Transactions Client
31  */
32 namespace couchbase
33 {
34 class bucket;
35 
37 template<typename T>
38 class pool;
39 
41 struct instance_pool_event_counter;
42 
43 static const size_t DEFAULT_CLUSTER_MAX_INSTANCES = 4;
44 static const size_t DEFAULT_BUCKET_MAX_INSTANCES = 4;
45 
50 class cluster_options
51 {
52  private:
53  size_t max_instances_;
54  size_t max_bucket_instances_;
55  boost::optional<std::chrono::microseconds> kv_timeout_;
56  instance_pool_event_counter* event_counter_;
57 
58  public:
63  : max_instances_(DEFAULT_CLUSTER_MAX_INSTANCES)
64  , max_bucket_instances_(DEFAULT_BUCKET_MAX_INSTANCES)
65  , event_counter_(nullptr)
66  {
67  }
68 
78  CB_NODISCARD size_t max_instances() const
79  {
80  return max_instances_;
81  }
87  cluster_options& max_instances(size_t max)
88  {
89  max_instances_ = max;
90  return *this;
91  }
102  CB_NODISCARD size_t max_bucket_instances() const
103  {
104  return max_bucket_instances_;
105  }
113  {
114  max_bucket_instances_ = max;
115  return *this;
116  }
125  CB_NODISCARD boost::optional<std::chrono::microseconds> kv_timeout() const
126  {
127  return kv_timeout_;
128  }
138  template<typename T>
139  cluster_options& kv_timeout(T duration)
140  {
141  kv_timeout_ = std::chrono::duration_cast<std::chrono::microseconds>(duration);
142  return *this;
143  }
144 
149  CB_NODISCARD instance_pool_event_counter* event_counter() const
150  {
151  return event_counter_;
152  }
157  cluster_options& event_counter(instance_pool_event_counter* counter)
158  {
159  event_counter_ = counter;
160  return *this;
161  }
162 };
163 
168 class cluster
169 {
170  private:
171  lcb_st* lcb_;
172  std::string cluster_address_;
173  std::string user_name_;
174  std::string password_;
175  std::mutex mutex_;
176  size_t max_bucket_instances_;
177  std::list<std::shared_ptr<class bucket>> open_buckets_;
178  std::unique_ptr<pool<lcb_st*>> instance_pool_;
179  instance_pool_event_counter* event_counter_;
180  boost::optional<std::chrono::microseconds> kv_timeout_;
181 
182  public:
194  explicit cluster(std::string cluster_address,
195  std::string user_name,
196  std::string password,
197  const cluster_options& opts = cluster_options());
206  cluster(const cluster& cluster);
207 
214  ~cluster();
222  CB_NODISCARD std::list<std::string> buckets();
231  CB_NODISCARD std::shared_ptr<class bucket> bucket(const std::string& name);
240  CB_NODISCARD const std::string cluster_address() const
241  {
242  return cluster_address_;
243  }
256  CB_NODISCARD size_t max_instances() const;
257 
263  CB_NODISCARD size_t instances() const;
264 
270  CB_NODISCARD size_t available_instances() const;
271 
277  CB_NODISCARD std::chrono::microseconds default_kv_timeout() const;
278 
282  CB_NODISCARD bool operator==(const couchbase::cluster& other) const;
283 };
284 } // namespace couchbase
Definition: bucket.hxx:33
CB_NODISCARD size_t instances() const
return current number of libcouchbase instances the cluster has created.
CB_NODISCARD std::shared_ptr< class bucket > bucket(const std::string &name)
Open a connection to a bucket.
CB_NODISCARD instance_pool_event_counter * event_counter() const
Internal structure used for tests.
Definition: cluster.hxx:152
Options for cluster connections.
Definition: cluster.hxx:52
cluster_options()
Default constructor for cluster_options.
Definition: cluster.hxx:64
CB_NODISCARD size_t max_instances() const
get maximum number of libcouchbase instances for this cluster.
Definition: cluster.hxx:80
CB_NODISCARD size_t max_instances() const
return maximum number of libcouchbase instances this cluster can use
Connects to a couchbase cluster, exposes cluster operations and bucket accessors. ...
Definition: cluster.hxx:172
CB_NODISCARD const std::string cluster_address() const
return the cluster address
Definition: cluster.hxx:244
CB_NODISCARD std::list< std::string > buckets()
List buckets in this cluster.
cluster(std::string cluster_address, std::string user_name, std::string password, const cluster_options &opts=cluster_options())
Create a new cluster and connect to it.
CB_NODISCARD boost::optional< std::chrono::microseconds > kv_timeout() const
Default kv timeout.
Definition: cluster.hxx:127
~cluster()
Destroy a cluster.
CB_NODISCARD size_t available_instances() const
return the current number of libcouchbase instances that are not being used.
CB_NODISCARD size_t max_bucket_instances() const
get maximum number of libcouchbase instances for this cluster.
Definition: cluster.hxx:104
CB_NODISCARD bool operator==(const couchbase::cluster &other) const
compare two clusters for equality
CB_NODISCARD std::chrono::microseconds default_kv_timeout() const
Default kv timeout.