Couchbase C Client  3.2.2
Asynchronous C Client for Couchbase
vbucket.h
Go to the documentation of this file.
1 /* -*- Mode: C; tab-width: 4; c-basic-offset: 4; indent-tabs-mode: nil -*- */
2 /*
3  * Copyright 2014-2020 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 LCB_VBUCKET_H
19 #define LCB_VBUCKET_H
20 #include <libcouchbase/visibility.h>
21 #include <libcouchbase/sysdefs.h>
22 
23 #ifdef __cplusplus
24 extern "C" {
25 #endif
26 
47 typedef enum {
57 /* for backward compatiblity */
58 #define LCBVB_SVCTYPE_CBAS LCBVB_SVCTYPE_ANALYTICS
59  LCBVB_SVCTYPE__MAX
61 
64 typedef enum {
67  LCBVB_SVCMODE__MAX
69 
74 typedef struct {
75  lcb_U16 data;
76  lcb_U16 mgmt;
77  lcb_U16 views;
78  lcb_U16 ixquery;
79  lcb_U16 ixadmin;
80  lcb_U16 n1ql;
81  lcb_U16 fts;
82  lcb_U16 cbas;
83  lcb_U16 eventing;
84  char *views_base_;
85  char *query_base_;
86  char *fts_base_;
87  char *cbas_base_;
88  char *eventing_base_;
89  char *hoststrs[LCBVB_SVCTYPE__MAX];
91 
99 typedef struct {
100  lcbvb_SERVICES svc;
101  lcbvb_SERVICES svc_ssl;
102  char *authority;
103  char *hostname;
104  char *viewpath;
105  char *querypath;
106  char *ftspath;
107  char *cbaspath;
108  char *eventingpath;
109  unsigned nvbs;
110  char *alt_hostname;
111  lcbvb_SERVICES alt_svc;
112  lcbvb_SERVICES alt_svc_ssl;
116 typedef struct {
117  int servers[4];
118 } lcbvb_VBUCKET;
121 typedef struct {
122  lcb_U32 index;
123  lcb_U32 point;
128 typedef enum {
129  LCBVB_DIST_VBUCKET = 0,
130  LCBVB_DIST_KETAMA = 1,
131  LCBVB_DIST_UNKNOWN = 2
134 typedef enum {
135  LCBVB_CAP_XATTR = 1 << 0,
136  LCBVB_CAP_CBHELLO = 1 << 1,
137  LCBVB_CAP_CCCP = 1 << 2,
138  LCBVB_CAP_COUCHAPI = 1 << 3,
139  LCBVB_CAP_DCP = 1 << 4,
140  LCBVB_CAP_NODES_EXT = 1 << 5,
141  LCBVB_CAP_TOUCH = 1 << 6,
142  LCBVB_CAP_XDCR_CHECKPOINTING = 1 << 7,
143  LCBVB_CAP_COLLECTIONS = 1 << 8,
144  LCBVB_CAP_DURABLE_WRITE = 1 << 9,
145  LCBVB_CAP_TOMBSTONED_USER_XATTRS = 1 << 10
146 } lcbvb_BUCKET_CAPABILITIES;
147 
148 typedef enum {
149  LCBVB_CCAP_N1QL_ENHANCED_PREPARED_STATEMENTS = 1 << 0,
150 } lcbvb_CLUSTER_CAPABILITIES;
151 
154 typedef struct lcbvb_CONFIG_st {
155  lcbvb_DISTMODE dtype;
156  unsigned nvb;
157  unsigned ndatasrv;
158  unsigned nsrv;
159  unsigned nrepl;
160  unsigned ncontinuum; /* number of continuum points */
161  unsigned is3x; /* whether server 3.0 config semantics are in place */
162  int64_t revepoch; /* revision Epoch from the config (-1 if not present) */
163  int64_t revid; /* revision ID from the config (-1 if not present) */
164  char *buuid; /* bucket UUID */
165  char *bname; /* bucket name */
166  size_t bname_len; /* bucket name */
167  const char *errstr; /* last error */
168  lcbvb_SERVER *servers; /* nodes */
169  lcbvb_VBUCKET *vbuckets; /* vbucket map */
170  lcbvb_VBUCKET *ffvbuckets; /* fast-forward map */
171  lcbvb_CONTINUUM *continuum; /* ketama continuums */
172  int *randbuf; /* Used for random server selection */
173  uint64_t caps;
174  uint64_t ccaps;
175 } lcbvb_CONFIG;
176 
177 #define LCBVB_BUCKET_NAME(cfg) (cfg)->bname
178 #define LCBVB_NSERVERS(cfg) (cfg)->nsrv
179 #define LCBVB_NDATASERVERS(cfg) (cfg)->ndatasrv
180 #define LCBVB_NREPLICAS(cfg) (cfg)->nrepl
181 #define LCBVB_DISTTYPE(cfg) (cfg)->dtype
182 #define LCBVB_CAPS(cfg) (cfg)->caps
183 #define LCBVB_CCAPS(cfg) (cfg)->ccaps
184 #define LCBVB_GET_SERVER(conf, ix) ((conf)->servers + ix)
185 
199 LIBCOUCHBASE_API
201 
208 LIBCOUCHBASE_API
209 lcbvb_CONFIG *lcbvb_parse_json(const char *data);
210 
228 LIBCOUCHBASE_API
229 int lcbvb_load_json(lcbvb_CONFIG *vbc, const char *data);
230 
234 LIBCOUCHBASE_API
235 int lcbvb_load_json_ex(lcbvb_CONFIG *vbc, const char *data, const char *source, char **network);
236 
242 LIBCOUCHBASE_API
243 char *lcbvb_save_json(lcbvb_CONFIG *vbc);
244 
250 LIBCOUCHBASE_API
251 const char *lcbvb_get_error(const lcbvb_CONFIG *vbc);
252 
263 LIBCOUCHBASE_API
264 void lcbvb_replace_host(lcbvb_CONFIG *cfg, const char *hostname);
265 
271 LIBCOUCHBASE_API
272 void lcbvb_destroy(lcbvb_CONFIG *conf);
273 
284 LIBCOUCHBASE_API
285 int lcbvb_vbmaster(lcbvb_CONFIG *cfg, int vbid);
286 
300 LIBCOUCHBASE_API
301 int lcbvb_vbreplica(lcbvb_CONFIG *cfg, int vbid, unsigned ix);
302 
309 #define lcbvb_vbserver(cfg, vbid, ix) ((ix == 0) ? lcbvb_vbmaster(cfg, vbid) : lcbvb_vbreplica(cfg, vbid, ix - 1))
310 
318 #define lcbvb_nmv_remap(cfg, vbid, bad) lcbvb_nmv_remap_ex(cfg, vbid, bad, 0)
319 
335 int lcbvb_nmv_remap_ex(lcbvb_CONFIG *cfg, int vbid, int bad, int use_heuristics);
336 
348 LIBCOUCHBASE_API
349 int lcbvb_map_key(lcbvb_CONFIG *cfg, const void *key, lcb_SIZE n, int *vbid, int *srvix);
350 
360 LIBCOUCHBASE_API
361 int lcbvb_k2vb(lcbvb_CONFIG *cfg, const void *key, lcb_SIZE n);
362 
373 LIBCOUCHBASE_API
374 int lcbvb_has_vbucket(lcbvb_CONFIG *vbc, int vbid, int ix);
375 
382 LIBCOUCHBASE_API
383 unsigned lcbvb_get_nservers(const lcbvb_CONFIG *cfg);
384 
391 LIBCOUCHBASE_API
392 unsigned lcbvb_get_nreplicas(const lcbvb_CONFIG *cfg);
393 
398 LIBCOUCHBASE_API
399 unsigned lcbvb_get_nvbuckets(const lcbvb_CONFIG *cfg);
400 
406 LIBCOUCHBASE_API
408 
422 LIBCOUCHBASE_API
423 int lcbvb_get_revision(const lcbvb_CONFIG *cfg);
424 
435 LIBCOUCHBASE_API
436 unsigned lcbvb_get_port(lcbvb_CONFIG *cfg, unsigned ix, lcbvb_SVCTYPE type, lcbvb_SVCMODE mode);
437 
453 LIBCOUCHBASE_API
454 const char *lcbvb_get_hostport(lcbvb_CONFIG *cfg, unsigned ix, lcbvb_SVCTYPE type, lcbvb_SVCMODE mode);
455 
468 LIBCOUCHBASE_API
469 const char *lcbvb_get_hostname(const lcbvb_CONFIG *cfg, unsigned ix);
470 
482 LIBCOUCHBASE_API
483 const char *lcbvb_get_resturl(lcbvb_CONFIG *cfg, unsigned ix, lcbvb_SVCTYPE type, lcbvb_SVCMODE mode);
484 
490 LIBCOUCHBASE_API
491 int lcbvb_get_randhost(const lcbvb_CONFIG *cfg, lcbvb_SVCTYPE type, lcbvb_SVCMODE mode);
492 
506 LIBCOUCHBASE_API
507 int lcbvb_get_randhost_ex(const lcbvb_CONFIG *cfg, lcbvb_SVCTYPE type, lcbvb_SVCMODE mode, int *used);
508 
510 typedef struct {
512  char **servers_added;
514  char **servers_removed;
516  int n_vb_changes;
518  int sequence_changed;
520  int n_repl_changed;
522 
524 typedef enum {
525  LCBVB_NO_CHANGES = 0,
526  LCBVB_SERVERS_MODIFIED = 1u << 0u,
527  LCBVB_MAP_MODIFIED = 1u << 1u,
528  LCBVB_REPLICAS_MODIFIED = 1u << 2u
530  VBUCKET_CHANGE_STATUS;
531 
542 LIBCOUCHBASE_API
546 LIBCOUCHBASE_API
552 LIBCOUCHBASE_API
569 LIBCOUCHBASE_API
570 int lcbvb_genconfig_ex(lcbvb_CONFIG *vb, const char *name, const char *uuid, const lcbvb_SERVER *servers,
571  unsigned nservers, unsigned nreplica, unsigned nvbuckets);
572 
588 LIBCOUCHBASE_API
589 int lcbvb_genconfig(lcbvb_CONFIG *vb, unsigned nservers, unsigned nreplica, unsigned nvbuckets);
590 
596 LIBCOUCHBASE_API
597 void lcbvb_genffmap(lcbvb_CONFIG *vb);
598 
604 LIBCOUCHBASE_API
606 
616 LIBCOUCHBASE_API
617 const char *lcbvb_get_capibase(lcbvb_CONFIG *cfg, unsigned ix, lcbvb_SVCMODE mode);
620 /*the rest of these symbols are deprecated and should not be touched by
621  * doxygen */
622 
623 typedef enum { LIBVBUCKET_SOURCE_FILE, LIBVBUCKET_SOURCE_MEMORY } vbucket_source_t;
624 
627 #define VBUCKET_DISTRIBUTION_VBUCKET LCBVB_DIST_VBUCKET
628 #define VBUCKET_DISTRIBUTION_KETAMA LCBVB_DIST_KETAMA
629 #define VBUCKET_NO_CHANGES LCBVB_NO_CHANGES
630 #define VBUCKET_SERVERS_MODIFIED LCBVB_SERVERS_MODIFIED
631 #define VBUCKET_MAP_MODIFIED LCVBVB_MAP_MODIFIED
632 
633 LIBCOUCHBASE_API int vbucket_config_parse(lcbvb_CONFIG *, vbucket_source_t, const char *);
634 LIBCOUCHBASE_API const char *vbucket_get_error_message(lcbvb_CONFIG *);
635 LIBCOUCHBASE_API lcbvb_CONFIG *vbucket_config_create(void);
636 LIBCOUCHBASE_API void vbucket_config_destroy(lcbvb_CONFIG *);
637 LIBCOUCHBASE_API int vbucket_config_get_num_replicas(lcbvb_CONFIG *);
638 LIBCOUCHBASE_API int vbucket_config_get_num_vbuckets(lcbvb_CONFIG *);
639 LIBCOUCHBASE_API int vbucket_config_get_num_servers(lcbvb_CONFIG *);
640 LIBCOUCHBASE_API const char *vbucket_config_get_server(lcbvb_CONFIG *, int);
641 LIBCOUCHBASE_API const char *vbucket_config_get_couch_api_base(lcbvb_CONFIG *, int);
642 LIBCOUCHBASE_API const char *vbucket_config_get_rest_api_server(lcbvb_CONFIG *, int);
643 LIBCOUCHBASE_API lcbvb_DISTMODE vbucket_config_get_distribution_type(lcbvb_CONFIG *);
644 LIBCOUCHBASE_API int vbucket_map(lcbvb_CONFIG *, const void *, lcb_SIZE, int *, int *);
645 LIBCOUCHBASE_API int vbucket_get_vbucket_by_key(lcbvb_CONFIG *, const void *, lcb_SIZE);
646 LIBCOUCHBASE_API int vbucket_get_master(lcbvb_CONFIG *, int);
647 LIBCOUCHBASE_API int vbucket_get_replica(lcbvb_CONFIG *, int, int);
648 LIBCOUCHBASE_API lcbvb_CONFIGDIFF *vbucket_compare(lcbvb_CONFIG *, lcbvb_CONFIG *);
649 LIBCOUCHBASE_API void vbucket_free_diff(lcbvb_CONFIGDIFF *);
650 LIBCOUCHBASE_API int vbucket_config_get_revision(lcbvb_CONFIG *);
651 LIBCOUCHBASE_API lcbvb_CHANGETYPE vbucket_what_changed(lcbvb_CONFIGDIFF *diff);
652 LIBCOUCHBASE_API int vbucket_config_generate(lcbvb_CONFIG *vb, unsigned, unsigned, unsigned);
653 
654 #ifdef __cplusplus
655 }
656 #endif
657 #endif
int lcbvb_get_revision(const lcbvb_CONFIG *cfg)
Get the revision for this configuration.
N1QL Query.
Definition: vbucket.h:53
int lcbvb_nmv_remap_ex(lcbvb_CONFIG *cfg, int vbid, int bad, int use_heuristics)
Unknown distribution (cluster config)
Definition: vbucket.h:135
const char * lcbvb_get_hostport(lcbvb_CONFIG *cfg, unsigned ix, lcbvb_SVCTYPE type, lcbvb_SVCMODE mode)
Return a string for the given service This is like lcbvb_get_port but returns a string in the form o...
number of replicas has been modified
Definition: vbucket.h:556
Servers have been added or removed.
Definition: vbucket.h:554
char * lcbvb_save_json(lcbvb_CONFIG *vbc)
Serialize the current config as a JSON string.
Eventing Management.
Definition: vbucket.h:56
Services which may be provided by a node
Definition: vbucket.h:75
unsigned lcbvb_get_nreplicas(const lcbvb_CONFIG *cfg)
Get the number of replicas the bucket is configured with Note that not all replicas may necessarily b...
lcbvb_SVCTYPE
This enum functions as a &#39;key&#39; to indicate a specific service offered by a node.
Definition: vbucket.h:47
lcbvb_DISTMODE
Type of algorithm used to distribute keys.
Definition: vbucket.h:132
int lcbvb_vbreplica(lcbvb_CONFIG *cfg, int vbid, unsigned ix)
unsigned lcbvb_get_nvbuckets(const lcbvb_CONFIG *cfg)
Get the number of vbuckets the bucket is configured with.
Structure representing changes between two configurations.
Definition: vbucket.h:538
Definition: vbucket.h:119
int lcbvb_load_json_ex(lcbvb_CONFIG *vbc, const char *data, const char *source, char **network)
lcbvb_CONFIG * lcbvb_create(void)
Allocate a new config This can be used to create new config object and load it with a JSON config...
lcbvb_CHANGETYPE lcbvb_get_changetype(lcbvb_CONFIGDIFF *diff)
Get a quick summary of the changes in the passed object.
int lcbvb_has_vbucket(lcbvb_CONFIG *vbc, int vbid, int ix)
const char * lcbvb_get_capibase(lcbvb_CONFIG *cfg, unsigned ix, lcbvb_SVCMODE mode)
const char * lcbvb_get_hostname(const lcbvb_CONFIG *cfg, unsigned ix)
Get the hostname of a given server index. This may be used if all nodes reside on different hostname...
vBuckets have been transferred
Definition: vbucket.h:555
int lcbvb_genconfig_ex(lcbvb_CONFIG *vb, const char *name, const char *uuid, const lcbvb_SERVER *servers, unsigned nservers, unsigned nreplica, unsigned nvbuckets)
Generate a sample configuration.
int lcbvb_vbmaster(lcbvb_CONFIG *cfg, int vbid)
memcached/Data port
Definition: vbucket.h:48
unsigned lcbvb_get_nservers(const lcbvb_CONFIG *cfg)
Get the number of servers in the bucket. Note that not all servers may actually be available...
Plain transport.
Definition: vbucket.h:65
Administrative/&#39;REST&#39; UI.
Definition: vbucket.h:50
lcbvb_DISTMODE lcbvb_get_distmode(const lcbvb_CONFIG *cfg)
Get the distribution mode (AKA bucket type) of the bucket.
int lcbvb_load_json(lcbvb_CONFIG *vbc, const char *data)
int lcbvb_map_key(lcbvb_CONFIG *cfg, const void *key, lcb_SIZE n, int *vbid, int *srvix)
lcbvb_CONFIG * lcbvb_parse_json(const char *data)
Analytics Query.
Definition: vbucket.h:55
void lcbvb_make_ketama(lcbvb_CONFIG *vb)
lcbvb_CONFIGDIFF * lcbvb_compare(lcbvb_CONFIG *from, lcbvb_CONFIG *to)
Compare two configurations and return information on the changes
No changes between configs.
Definition: vbucket.h:553
int lcbvb_genconfig(lcbvb_CONFIG *vb, unsigned nservers, unsigned nreplica, unsigned nvbuckets)
Generate a sample configuration used for testing.
vBucket hashing ("couchbase") bucket
Definition: vbucket.h:133
Index administration.
Definition: vbucket.h:52
Definition: vbucket.h:125
unsigned lcbvb_get_port(lcbvb_CONFIG *cfg, unsigned ix, lcbvb_SVCTYPE type, lcbvb_SVCMODE mode)
Gets the port associated with a given service of a given mode on a given server
int lcbvb_get_randhost_ex(const lcbvb_CONFIG *cfg, lcbvb_SVCTYPE type, lcbvb_SVCMODE mode, int *used)
Get random node, excluding nodes already tried.
void lcbvb_replace_host(lcbvb_CONFIG *cfg, const char *hostname)
Replace hostname placeholders with specific host string This function shall replace hostname placeho...
void lcbvb_genffmap(lcbvb_CONFIG *vb)
Node in the cluster This structure represents a node in the cluster. The node has a hostname (hostna...
Definition: vbucket.h:101
Fulltext.
Definition: vbucket.h:54
SSL Transport.
Definition: vbucket.h:66
Index query.
Definition: vbucket.h:51
void lcbvb_destroy(lcbvb_CONFIG *conf)
const char * lcbvb_get_resturl(lcbvb_CONFIG *cfg, unsigned ix, lcbvb_SVCTYPE type, lcbvb_SVCMODE mode)
Function to return the URL prefix for a REST service.
void lcbvb_free_diff(lcbvb_CONFIGDIFF *diff)
Free the structure returned by lcbvb_compare()
lcbvb_SVCMODE
This enum functions to indicate the &#39;mode&#39; of the service.
Definition: vbucket.h:64
Ketama hashing ("memcached") bucket.
Definition: vbucket.h:134
Views/CAPI port.
Definition: vbucket.h:49
int lcbvb_get_randhost(const lcbvb_CONFIG *cfg, lcbvb_SVCTYPE type, lcbvb_SVCMODE mode)
Convenience function to select a random node for a service.
int lcbvb_k2vb(lcbvb_CONFIG *cfg, const void *key, lcb_SIZE n)
lcbvb_CHANGETYPE
Convenience enum to determine the mode of change.
Definition: vbucket.h:552
Structure containing the configuration.
Definition: vbucket.h:159
const char * lcbvb_get_error(const lcbvb_CONFIG *vbc)
Return a string indicating why parsing the configuration failed