0eb128cffa6c0925a714c8f178fc095bd3b8422a
[ep-engine.git] / src / vbucketmap.h
1 /* -*- Mode: C++; tab-width: 4; c-basic-offset: 4; indent-tabs-mode: nil -*- */
2 /*
3  *     Copyright 2011 Couchbase, Inc
4  *
5  *   Licensed under the Apache License, Version 2.0 (the "License");
6  *   you may not use this file except in compliance with the License.
7  *   You may obtain a copy of the License at
8  *
9  *       http://www.apache.org/licenses/LICENSE-2.0
10  *
11  *   Unless required by applicable law or agreed to in writing, software
12  *   distributed under the License is distributed on an "AS IS" BASIS,
13  *   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14  *   See the License for the specific language governing permissions and
15  *   limitations under the License.
16  */
17
18 #ifndef SRC_VBUCKETMAP_H_
19 #define SRC_VBUCKETMAP_H_ 1
20
21 #include "config.h"
22
23 #include <vector>
24
25 #include "kvshard.h"
26 #include "vbucket.h"
27 #include "utility.h"
28
29 /**
30  * A map of known vbuckets.
31  */
32 class VBucketMap {
33 friend class EventuallyPersistentStore;
34 friend class Warmup;
35
36     class VBucketConfigChangeListener : public ValueChangedListener {
37     public:
38         VBucketConfigChangeListener(VBucketMap& vbucketMap)
39             : map(vbucketMap) {}
40
41         void sizeValueChanged(const std::string &key, size_t value) override;
42
43     private:
44         VBucketMap& map;
45     };
46
47 public:
48
49     // This class uses the same id_type as VBucket
50     typedef VBucket::id_type id_type;
51
52     VBucketMap(Configuration &config, EventuallyPersistentStore &store);
53     ~VBucketMap();
54
55     ENGINE_ERROR_CODE addBucket(const RCPtr<VBucket> &b);
56     void removeBucket(id_type id);
57     void addBuckets(const std::vector<VBucket*> &newBuckets);
58     RCPtr<VBucket> getBucket(id_type id) const;
59
60     // Returns the size of the map, i.e. the total number of VBuckets it can
61     // contain.
62     id_type getSize() const;
63     std::vector<id_type> getBuckets(void) const;
64     std::vector<id_type> getBucketsSortedByState(void) const;
65     std::vector<std::pair<id_type, size_t> > getActiveVBucketsSortedByChkMgrMem(void) const;
66     bool isBucketDeletion(id_type id) const;
67     bool setBucketDeletion(id_type id, bool delBucket);
68     bool isBucketCreation(id_type id) const;
69     bool setBucketCreation(id_type id, bool rv);
70     uint64_t getPersistenceCheckpointId(id_type id) const;
71     void setPersistenceCheckpointId(id_type id, uint64_t checkpointId);
72     uint64_t getPersistenceSeqno(id_type id) const;
73     void setPersistenceSeqno(id_type id, uint64_t seqno);
74     KVShard* getShardByVbId(id_type id) const;
75     KVShard* getShard(KVShard::id_type shardId) const;
76     size_t getNumShards() const;
77     void setHLCDriftAheadThreshold(uint64_t threshold);
78     void setHLCDriftBehindThreshold(uint64_t threshold);
79
80     // Returns the current state of the given vBucket.
81     vbucket_state getVBucketState(VBucket::id_type id) const;
82
83 private:
84
85     std::vector<KVShard*> shards;
86     AtomicValue<bool> *bucketDeletion;
87     AtomicValue<bool> *bucketCreation;
88     AtomicValue<uint64_t> *persistenceSeqnos;
89     const id_type size;
90
91     DISALLOW_COPY_AND_ASSIGN(VBucketMap);
92 };
93
94 #endif  // SRC_VBUCKETMAP_H_