cache_t *get_empty_cache(int (*sync)(struct ce_t *), char *name) { cache_t *c = (void *)kmalloc(sizeof(cache_t)); c->sync = sync; c->syncing=0; c->dirty=0; c->rwl = rwlock_create(0); c->count=0; c->slow=1000; c->hash = chash_create(100000); strncpy(c->name, name, 32); ll_create(&c->dirty_ll); ll_create(&c->primary_ll); ll_insert(cache_list, c); printk(0, "[cache]: Allocated new cache '%s'\n", name); return c; }
shardcache_client_t * shardcache_client_create(shardcache_node_t **nodes, int num_nodes, char *auth) { int i; if (!num_nodes) { SHC_ERROR("Can't create a shardcache client with no nodes"); return NULL; } shardcache_client_t *c = calloc(1, sizeof(shardcache_client_t)); size_t shard_lens[num_nodes]; char *shard_names[num_nodes]; c->shards = malloc(sizeof(shardcache_node_t *) * num_nodes); c->connections = connections_pool_create(SHARDCACHE_TCP_TIMEOUT_DEFAULT, SHARDCACHE_CONNECTION_EXPIRE_DEFAULT, 1); for (i = 0; i < num_nodes; i++) { c->shards[i] = shardcache_node_copy(nodes[i]); shard_names[i] = shardcache_node_get_label(c->shards[i]); shard_lens[i] = strlen(shard_names[i]); } c->num_shards = num_nodes; c->chash = chash_create((const char **)shard_names, shard_lens, c->num_shards, 200); if (auth && *auth) { c->auth = calloc(1, 16); strncpy((char *)c->auth, auth, 16); } struct timeval tv; gettimeofday(&tv, NULL); srandom((unsigned)tv.tv_usec); c->pipeline_max = SHC_PIPELINE_MAX_DEFAULT; c->async_jobs = queue_create(); return c; }