Couchbase C Client  2.5.6
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 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 {
54  LCBVB_SVCTYPE__MAX
56 
59 typedef enum {
62  LCBVB_SVCMODE__MAX
64 
69 typedef struct {
70  lcb_U16 data;
71  lcb_U16 mgmt;
72  lcb_U16 views;
73  lcb_U16 ixquery;
74  lcb_U16 ixadmin;
75  lcb_U16 n1ql;
76  char *views_base_;
77  char *query_base_;
78  char *hoststrs[LCBVB_SVCTYPE__MAX];
80 
88 typedef struct {
91  char *authority;
92  char *hostname;
93  char *viewpath;
94  char *querypath;
95  unsigned nvbs;
96 } lcbvb_SERVER;
97 
99 typedef struct {
100  int servers[4];
101 } lcbvb_VBUCKET;
102 
104 typedef struct {
105  lcb_U32 index;
106  lcb_U32 point;
108 
111 typedef enum {
115 
118 typedef struct lcbvb_CONFIG_st {
120  unsigned nvb;
121  unsigned ndatasrv;
122  unsigned nsrv;
123  unsigned nrepl;
124  unsigned ncontinuum; /* number of continuum points */
125  unsigned is3x; /* whether server 3.0 config semantics are in place */
126  int revid; /* revision ID from the config (-1 if not present) */
127  char *buuid; /* bucket UUID */
128  char *bname; /* bucket name */
129  const char *errstr; /* last error */
130  lcbvb_SERVER *servers; /* nodes */
131  lcbvb_VBUCKET *vbuckets; /* vbucket map */
132  lcbvb_VBUCKET *ffvbuckets; /* fast-forward map */
133  lcbvb_CONTINUUM *continuum; /* ketama continuums */
134  int *randbuf; /* Used for random server selection */
135 } lcbvb_CONFIG;
136 
137 
138 #define LCBVB_NSERVERS(cfg) (cfg)->nsrv
139 #define LCBVB_NDATASERVERS(cfg) (cfg)->ndatasrv
140 #define LCBVB_NREPLICAS(cfg) (cfg)->nrepl
141 #define LCBVB_DISTTYPE(cfg) (cfg)->dtype
142 #define LCBVB_GET_SERVER(conf, ix) ((conf)->servers + ix)
143 
157 LIBCOUCHBASE_API
158 lcbvb_CONFIG *
159 lcbvb_create(void);
160 
167 LIBCOUCHBASE_API
168 lcbvb_CONFIG *
169 lcbvb_parse_json(const char *data);
170 
181 LIBCOUCHBASE_API
182 int
183 lcbvb_load_json(lcbvb_CONFIG *vbc, const char *data);
184 
190 LIBCOUCHBASE_API
191 char *
193 
199 LIBCOUCHBASE_API
200 const char *
201 lcbvb_get_error(const lcbvb_CONFIG *vbc);
202 
213 LIBCOUCHBASE_API
214 void
215 lcbvb_replace_host(lcbvb_CONFIG *cfg, const char *hostname);
216 
222 LIBCOUCHBASE_API
223 void
225 
236 LIBCOUCHBASE_API
237 int
238 lcbvb_vbmaster(lcbvb_CONFIG *cfg, int vbid);
239 
253 LIBCOUCHBASE_API
254 int
255 lcbvb_vbreplica(lcbvb_CONFIG *cfg, int vbid, unsigned ix);
256 
263 #define lcbvb_vbserver(cfg, vbid, ix) ( (ix == 0) ? \
264  lcbvb_vbmaster(cfg, vbid) : lcbvb_vbreplica(cfg, vbid, ix-1) )
265 
266 
280 int
281 lcbvb_nmv_remap(lcbvb_CONFIG *cfg, int vbid, int bad);
282 
294 LIBCOUCHBASE_API
295 int
296 lcbvb_map_key(lcbvb_CONFIG *cfg, const void *key, lcb_SIZE n,
297  int *vbid, int *srvix);
298 
308 LIBCOUCHBASE_API
309 int
310 lcbvb_k2vb(lcbvb_CONFIG *cfg, const void *key, lcb_SIZE n);
311 
322 LIBCOUCHBASE_API
323 int
324 lcbvb_has_vbucket(lcbvb_CONFIG *vbc, int vbid, int ix);
325 
332 LIBCOUCHBASE_API
333 unsigned
334 lcbvb_get_nservers(const lcbvb_CONFIG *cfg);
335 
342 LIBCOUCHBASE_API
343 unsigned
345 
351 LIBCOUCHBASE_API
353 lcbvb_get_distmode(const lcbvb_CONFIG *cfg);
354 
368 LIBCOUCHBASE_API
369 int
370 lcbvb_get_revision(const lcbvb_CONFIG *cfg);
371 
382 LIBCOUCHBASE_API
383 unsigned
384 lcbvb_get_port(lcbvb_CONFIG *cfg, unsigned ix,
385  lcbvb_SVCTYPE type, lcbvb_SVCMODE mode);
386 
387 
403 LIBCOUCHBASE_API
404 const char *
405 lcbvb_get_hostport(lcbvb_CONFIG *cfg, unsigned ix,
406  lcbvb_SVCTYPE type, lcbvb_SVCMODE mode);
407 
420 LIBCOUCHBASE_API
421 const char *
422 lcbvb_get_hostname(const lcbvb_CONFIG *cfg, unsigned ix);
423 
435 LIBCOUCHBASE_API
436 const char *
437 lcbvb_get_resturl(lcbvb_CONFIG *cfg, unsigned ix,
438  lcbvb_SVCTYPE type, lcbvb_SVCMODE mode);
439 
445 LIBCOUCHBASE_API
446 int
448  lcbvb_SVCTYPE type, lcbvb_SVCMODE mode);
449 
463 LIBCOUCHBASE_API
464 int
466  lcbvb_SVCTYPE type, lcbvb_SVCMODE mode, int *used);
467 
469 typedef struct {
479 
481 typedef enum {
485 } lcbvb_CHANGETYPE, VBUCKET_CHANGE_STATUS;
486 
497 LIBCOUCHBASE_API
500 
502 LIBCOUCHBASE_API
503 void
505 
509 LIBCOUCHBASE_API
512 
527 LIBCOUCHBASE_API
528 int
530  const char *name, const char *uuid,
531  const lcbvb_SERVER *servers,
532  unsigned nservers, unsigned nreplica, unsigned nvbuckets);
533 
549 LIBCOUCHBASE_API
550 int
552  unsigned nservers, unsigned nreplica, unsigned nvbuckets);
553 
554 
560 LIBCOUCHBASE_API
561 void
563 
573 LIBCOUCHBASE_API
574 const char *
575 lcbvb_get_capibase(lcbvb_CONFIG *cfg, unsigned ix, lcbvb_SVCMODE mode);
578 /*the rest of these symbols are deprecated and should not be touched by
579  * doxygen */
580 
581 typedef enum {
582  LIBVBUCKET_SOURCE_FILE,
583  LIBVBUCKET_SOURCE_MEMORY
584 } vbucket_source_t;
585 
588 #define VBUCKET_DISTRIBUTION_VBUCKET LCBVB_DIST_VBUCKET
589 #define VBUCKET_DISTRIBUTION_KETAMA LCBVB_DIST_KETAMA
590 #define VBUCKET_NO_CHANGES LCBVB_NO_CHANGES
591 #define VBUCKET_SERVERS_MODIFIED LCBVB_SERVERS_MODIFIED
592 #define VBUCKET_MAP_MODIFIED LCVBVB_MAP_MODIFIED
593 
594 LIBCOUCHBASE_API int vbucket_config_parse(lcbvb_CONFIG*,vbucket_source_t,const char*);
595 LIBCOUCHBASE_API const char *vbucket_get_error_message(lcbvb_CONFIG*);
596 LIBCOUCHBASE_API lcbvb_CONFIG* vbucket_config_create(void);
597 LIBCOUCHBASE_API void vbucket_config_destroy(lcbvb_CONFIG*);
598 LIBCOUCHBASE_API int vbucket_config_get_num_replicas(lcbvb_CONFIG*);
599 LIBCOUCHBASE_API int vbucket_config_get_num_vbuckets(lcbvb_CONFIG*);
600 LIBCOUCHBASE_API int vbucket_config_get_num_servers(lcbvb_CONFIG*);
601 LIBCOUCHBASE_API const char *vbucket_config_get_server(lcbvb_CONFIG*,int);
602 LIBCOUCHBASE_API const char *vbucket_config_get_couch_api_base(lcbvb_CONFIG*,int);
603 LIBCOUCHBASE_API const char *vbucket_config_get_rest_api_server(lcbvb_CONFIG*,int);
604 LIBCOUCHBASE_API lcbvb_DISTMODE vbucket_config_get_distribution_type(lcbvb_CONFIG*);
605 LIBCOUCHBASE_API int vbucket_map(lcbvb_CONFIG*,const void*,lcb_SIZE,int*,int*);
606 LIBCOUCHBASE_API int vbucket_get_vbucket_by_key(lcbvb_CONFIG*,const void*,lcb_SIZE);
607 LIBCOUCHBASE_API int vbucket_get_master(lcbvb_CONFIG*,int);
608 LIBCOUCHBASE_API int vbucket_get_replica(lcbvb_CONFIG*,int,int);
609 LIBCOUCHBASE_API lcbvb_CONFIGDIFF* vbucket_compare(lcbvb_CONFIG*,lcbvb_CONFIG*);
610 LIBCOUCHBASE_API void vbucket_free_diff(lcbvb_CONFIGDIFF*);
611 LIBCOUCHBASE_API int vbucket_config_get_revision(lcbvb_CONFIG*);
612 LIBCOUCHBASE_API lcbvb_CHANGETYPE vbucket_what_changed(lcbvb_CONFIGDIFF *diff);
613 LIBCOUCHBASE_API int vbucket_config_generate(lcbvb_CONFIG *vb, unsigned, unsigned, unsigned);
614 
615 
616 #ifdef __cplusplus
617 }
618 #endif
619 #endif
int n_vb_changes
How many vBuckets have had an ownership change.
Definition: vbucket.h:475
unsigned ndatasrv
Number of data (memcached) servers.
Definition: vbucket.h:121
int lcbvb_get_revision(const lcbvb_CONFIG *cfg)
Get the revision for this configuration.
lcb_U16 mgmt
Port for adminsitrative operations (HTTP)
Definition: vbucket.h:71
char * hostname
Hostname for the node.
Definition: vbucket.h:92
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 of...
Servers have been added or removed.
Definition: vbucket.h:483
char * lcbvb_save_json(lcbvb_CONFIG *vbc)
Serialize the current config as a JSON string.
int lcbvb_nmv_remap(lcbvb_CONFIG *cfg, int vbid, int bad)
Services which may be provided by a node.
Definition: vbucket.h:69
unsigned nrepl
Number of servers.
Definition: vbucket.h:123
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 'key' 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:111
int lcbvb_vbreplica(lcbvb_CONFIG *cfg, int vbid, unsigned ix)
lcb_U16 ixadmin
Indexing admin port (HTTP)
Definition: vbucket.h:74
unsigned nvb
Number of vbuckets.
Definition: vbucket.h:120
lcbvb_SERVICES svc_ssl
SSL Services.
Definition: vbucket.h:90
unsigned nvbs
Total number of vbuckets the server has assigned.
Definition: vbucket.h:95
Structure representing changes between two configurations.
Definition: vbucket.h:469
Definition: vbucket.h:99
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...
char ** servers_added
List of strings of servers added (via host:data_port)
Definition: vbucket.h:471
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)
uncommitted Determines if a given server index is either a master or a replica for a vbucket ...
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 hostnames...
lcbvb_SERVICES svc
Plain services.
Definition: vbucket.h:89
vBuckets have been transferred
Definition: vbucket.h:484
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)
char * viewpath
Path prefix for view queries.
Definition: vbucket.h:93
memcached/Data port
Definition: vbucket.h:48
lcb_U16 ixquery
Indexing query port.
Definition: vbucket.h:73
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:60
Administrative/'REST' 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_DISTMODE dtype
Type of bucket/distribution.
Definition: vbucket.h:119
char * querypath
Path prefix for n1ql queries.
Definition: vbucket.h:94
int sequence_changed
Whether the ordering of the nodes has changed as well.
Definition: vbucket.h:477
lcbvb_CONFIG * lcbvb_parse_json(const char *data)
char * query_base_
N1QL base URL.
Definition: vbucket.h:77
N1QL Query.
Definition: vbucket.h:53
void lcbvb_make_ketama(lcbvb_CONFIG *vb)
char ** servers_removed
List of strings of servers removed (via host:data_port)
Definition: vbucket.h:473
lcb_U16 data
Data port for key-value operations (memcached protocol)
Definition: vbucket.h:70
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:482
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:112
Index administration.
Definition: vbucket.h:52
Definition: vbucket.h:104
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.
char * views_base_
Views base URL.
Definition: vbucket.h:76
void lcbvb_replace_host(lcbvb_CONFIG *cfg, const char *hostname)
Replace hostname placeholders with specific host string This function shall replace hostname placehol...
lcb_U16 views
Port for view queries (HTTP)
Definition: vbucket.h:72
Node in the cluster This structure represents a node in the cluster. The node has a hostname (hostnam...
Definition: vbucket.h:88
SSL Transport.
Definition: vbucket.h:61
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 'mode' of the service.
Definition: vbucket.h:59
Ketama hashing ("memcached") bucket.
Definition: vbucket.h:113
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.
char * authority
host:dataport for comparison
Definition: vbucket.h:91
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:481
lcb_U16 n1ql
Query port.
Definition: vbucket.h:75
Structure containing the configuration.
Definition: vbucket.h:118
const char * lcbvb_get_error(const lcbvb_CONFIG *vbc)
Return a string indicating why parsing the configuration failed.