This patch "sheep: always write store farm to config file" fix that config file has always the same size, gateway_only or not. Signed-off-by: Jens Weber <jweber at tek2b.org> --- sheep/group.c | 5 ++--- sheep/sheep_priv.h | 2 +- sheep/store.c | 23 +++++++++++++++-------- 3 files changed, 18 insertions(+), 12 deletions(-) diff --git a/sheep/group.c b/sheep/group.c index 05ffb3e..b82a081 100644 --- a/sheep/group.c +++ b/sheep/group.c @@ -728,13 +728,12 @@ static void finish_join(struct join_message *msg, struct sd_node *joined, if (msg->cluster_status != SD_STATUS_OK) update_exceptional_node_list(get_latest_epoch(), msg); - /* We don't need backend for gateway-only node */ - if (!sys->gateway_only && !sd_store && strlen((char *)msg->store)) { + if (!sd_store && strlen((char *)msg->store)) { sd_store = find_store_driver((char *)msg->store); if (sd_store) { if (sd_store->init(obj_path) != SD_RES_SUCCESS) panic("failed to initialize store\n"); - if (set_cluster_store(sd_store->name) != SD_RES_SUCCESS) + if (set_cluster_store(sd_store->name, sys->gateway_only) != SD_RES_SUCCESS) panic("failed to store into config file\n"); } else panic("backend store %s not supported\n", diff --git a/sheep/sheep_priv.h b/sheep/sheep_priv.h index 857cf87..46fd89f 100644 --- a/sheep/sheep_priv.h +++ b/sheep/sheep_priv.h @@ -240,7 +240,7 @@ int set_cluster_copies(uint8_t copies); int get_cluster_copies(uint8_t *copies); int set_cluster_flags(uint16_t flags); int get_cluster_flags(uint16_t *flags); -int set_cluster_store(const char *name); +int set_cluster_store(const char *name, uint8_t gateway_only); int get_cluster_store(char *buf); int set_cluster_space(uint64_t space); int get_cluster_space(uint64_t *space); diff --git a/sheep/store.c b/sheep/store.c index b093916..0a68d1e 100644 --- a/sheep/store.c +++ b/sheep/store.c @@ -705,7 +705,7 @@ out: return ret; } -int set_cluster_store(const char *name) +int set_cluster_store(const char *name, uint8_t gateway_only) { int fd, ret = SD_RES_EIO, len; void *jd; @@ -717,19 +717,26 @@ int set_cluster_store(const char *name) len = strlen(name) + 1; if (len > STORE_LEN) goto err; - jd = jrnl_begin(name, len, - offsetof(struct sheepdog_config, store), - config_path, jrnl_path); - if (!jd) { - ret = SD_RES_EIO; - goto err; + + /* We don't need this for gateway-only node */ + if (!gateway_only) { + jd = jrnl_begin(name, len, + offsetof(struct sheepdog_config, store), + config_path, jrnl_path); + if (!jd) { + ret = SD_RES_EIO; + goto err; + } } + ret = xpwrite(fd, name, len, offsetof(struct sheepdog_config, store)); if (ret != len) ret = SD_RES_EIO; else ret = SD_RES_SUCCESS; - jrnl_end(jd); + + /* We don't need this for gateway-only node */ + if (!gateway_only) jrnl_end(jd); err: close(fd); out: -- 1.7.10.4 |