Skip to content

Commit

Permalink
added a NULL_BUCKET placeholder for SaaS use-case
Browse files Browse the repository at this point in the history
With this change, clients can be assigned to a "NULL BUCKET" when they
first connect.  In future code, we imagine that binary clients can do
SASL auth to be reassigned to a different bucket.

To enable the NULL BUCKET codepath, specify an empty
default_bucket_name behavior, such as...

  ./moxi -Z default_bucket_name=,url=http://foo/bar

Change-Id: I1037a3061ea019f986dc9c3831b3c330549e64c8
Reviewed-on: http://review.northscale.com/1367
Reviewed-by: Aliaksey Kandratsenka <alkondratenko@gmail.com>
Tested-by: Aliaksey Kandratsenka <alkondratenko@gmail.com>
  • Loading branch information
steveyen authored and alk committed Jul 28, 2010
1 parent eeb6174 commit 522ddf0
Show file tree
Hide file tree
Showing 2 changed files with 40 additions and 6 deletions.
43 changes: 38 additions & 5 deletions agent_config.c
Expand Up @@ -38,6 +38,14 @@ char **parse_kvs_behavior(kvpair_t *kvs,
char *name,
proxy_behavior *behavior);

static char *NULL_BUCKET = "[<NULL_BUCKET>]";

static void cproxy_init_null_bucket(proxy_main *m);

static void cproxy_on_new_config(void *data0, void *data1);
static bool cproxy_on_new_config_json_one(proxy_main *m, uint32_t new_config_ver,
char *config, char *name);

static void agent_logger(void *userdata,
enum conflate_log_level lvl,
const char *msg, ...)
Expand Down Expand Up @@ -265,6 +273,10 @@ proxy_main *cproxy_init_agent_start(char *jid,
proxy_main *m = cproxy_gen_proxy_main(behavior, nthreads,
PROXY_CONF_TYPE_DYNAMIC);
if (m != NULL) {
if (behavior.default_bucket_name[0] == '\0') {
cproxy_init_null_bucket(m);
}

conflate_config_t config;

memset(&config, 0, sizeof(config));
Expand All @@ -287,7 +299,7 @@ proxy_main *cproxy_init_agent_start(char *jid,

if (start_conflate(config)) {
if (settings.verbose > 2) {
moxi_log_write("cproxy_init done\n");
moxi_log_write("cproxy_init_agent_start done\n");
}

return m;
Expand All @@ -303,9 +315,25 @@ proxy_main *cproxy_init_agent_start(char *jid,
return NULL;
}

static void cproxy_on_new_config(void *data0, void *data1);
static bool cproxy_on_new_config_json_one(proxy_main *m, uint32_t new_config_ver,
char *config, char *name);
static void cproxy_init_null_bucket(proxy_main *m) {
proxy_behavior proxyb = m->behavior;

int pool_port = proxyb.port_listen;
int nodes_num = 0;

if (pool_port > 0) {
proxy_behavior_pool behavior_pool = {
.base = proxyb,
.num = nodes_num,
.arr = calloc(nodes_num + 1, sizeof(proxy_behavior))
};

if (behavior_pool.arr != NULL) {
cproxy_on_new_pool(m, NULL_BUCKET, pool_port,
"", 0, &behavior_pool);
}
}
}

void on_conflate_new_config(void *userdata, kvpair_t *config) {
assert(config != NULL);
Expand Down Expand Up @@ -778,7 +806,12 @@ void close_outdated_proxies(proxy_main *m, uint32_t new_config_ver) {

pthread_mutex_unlock(&p->proxy_lock);

if (down) {
// Next, check that we're not shutting down the NULL_BUCKET.
//
// Otherwise, passing in a NULL config string signals that
// a bucket's proxy struct should be shut down.
//
if (down && (strcmp(NULL_BUCKET, name) != 0)) {
cproxy_on_new_pool(m, name, port, NULL, new_config_ver,
&empty_pool);
}
Expand Down
3 changes: 2 additions & 1 deletion cproxy_config.c
Expand Up @@ -600,7 +600,8 @@ void cproxy_parse_behavior_key_val(char *key,
* Size of array should be arr_size.
*/
proxy_behavior *cproxy_copy_behaviors(int arr_size, proxy_behavior *arr) {
proxy_behavior *rv = calloc(arr_size, sizeof(proxy_behavior));
int arr_size_alloc = arr_size > 0 ? arr_size : 1;
proxy_behavior *rv = calloc(arr_size_alloc, sizeof(proxy_behavior));
if (rv != NULL) {
memcpy(rv, arr, arr_size * sizeof(proxy_behavior));
}
Expand Down

0 comments on commit 522ddf0

Please sign in to comment.