MCPcopy Create free account
hub / github.com/1a1a11a/libCacheSim / ch_ring_get_servers

Function ch_ring_get_servers

example/cacheCluster/consistentHash.c:148–172  ·  view source on GitHub ↗

n: the number of servers that's going to retrieve */

Source from the content-addressed store, hash-verified

146
147/* n: the number of servers that's going to retrieve */
148void ch_ring_get_servers(const char *const key, const ring_t *const ring,
149 const unsigned int n, unsigned int *idxs) {
150 vnode_t *vnodes = ring->vnodes;
151 int start_vnode_idx = ch_ring_get_vnode_idx(key, ring);
152
153 unsigned int i = 0, vnode_pos = 0;
154 char chosen_server[ring->n_server];
155 memset(chosen_server, 0, sizeof(char) * ring->n_server);
156 while (i < n) {
157 unsigned int server_id =
158 vnodes[(start_vnode_idx + vnode_pos) % (ring->n_point)].server_id;
159 if (chosen_server[server_id] == 0) {
160 idxs[i] = server_id;
161 chosen_server[server_id] = 1;
162 i++;
163 }
164 vnode_pos++;
165 if (vnode_pos > ring->n_point) {
166 printf(
167 "ERROR: searched all points on the consistent hash ring, but cannot "
168 "find enough servers\n");
169 abort();
170 }
171 }
172}
173
174void ch_ring_get_available_servers(const char *const key,
175 const ring_t *const ring,

Callers

nothing calls this directly

Calls 1

ch_ring_get_vnode_idxFunction · 0.85

Tested by

no test coverage detected