diff options
Diffstat (limited to 'xlators/mgmt/glusterd/src/glusterd-store.c')
-rw-r--r-- | xlators/mgmt/glusterd/src/glusterd-store.c | 78 |
1 files changed, 29 insertions, 49 deletions
diff --git a/xlators/mgmt/glusterd/src/glusterd-store.c b/xlators/mgmt/glusterd/src/glusterd-store.c index 8dee4d421..944652bd8 100644 --- a/xlators/mgmt/glusterd/src/glusterd-store.c +++ b/xlators/mgmt/glusterd/src/glusterd-store.c @@ -1974,10 +1974,9 @@ out: int32_t -glusterd_store_retrieve_rbstate (char *volname, glusterd_snap_t *snap) +glusterd_store_retrieve_rbstate (glusterd_volinfo_t *volinfo) { int32_t ret = -1; - glusterd_volinfo_t *volinfo = NULL; gf_store_iter_t *iter = NULL; char *key = NULL; char *value = NULL; @@ -1985,19 +1984,13 @@ glusterd_store_retrieve_rbstate (char *volname, glusterd_snap_t *snap) glusterd_conf_t *priv = NULL; char path[PATH_MAX] = {0,}; gf_store_op_errno_t op_errno = GD_STORE_SUCCESS; + xlator_t *this = NULL; - priv = THIS->private; - - if (snap) { - volinfo = snap->snap_volume; - } else { - ret = glusterd_volinfo_find (volname, &volinfo); - if (ret) { - gf_log (THIS->name, GF_LOG_ERROR, "Couldn't get" - "volinfo for %s.", volname); - goto out; - } - } + this = THIS; + GF_ASSERT (this); + priv = this->private; + GF_ASSERT (priv); + GF_ASSERT (volinfo); GLUSTERD_GET_VOLUME_DIR(volpath, volinfo, priv); snprintf (path, sizeof (path), "%s/%s", volpath, @@ -2074,16 +2067,15 @@ glusterd_store_retrieve_rbstate (char *volname, glusterd_snap_t *snap) goto out; out: - gf_log ("", GF_LOG_DEBUG, "Returning with %d", ret); + gf_log (this->name, GF_LOG_TRACE, "Returning with %d", ret); return ret; } int32_t -glusterd_store_retrieve_node_state (char *volname, glusterd_snap_t *snap) +glusterd_store_retrieve_node_state (glusterd_volinfo_t *volinfo) { int32_t ret = -1; - glusterd_volinfo_t *volinfo = NULL; gf_store_iter_t *iter = NULL; char *key = NULL; char *value = NULL; @@ -2091,19 +2083,13 @@ glusterd_store_retrieve_node_state (char *volname, glusterd_snap_t *snap) glusterd_conf_t *priv = NULL; char path[PATH_MAX] = {0,}; gf_store_op_errno_t op_errno = GD_STORE_SUCCESS; + xlator_t *this = NULL; - priv = THIS->private; - - if (snap) { - volinfo = snap->snap_volume; - } else { - ret = glusterd_volinfo_find (volname, &volinfo); - if (ret) { - gf_log (THIS->name, GF_LOG_ERROR, "Couldn't get" - "volinfo for %s.", volname); - goto out; - } - } + this = THIS; + GF_ASSERT (this); + priv = this->private; + GF_ASSERT (priv); + GF_ASSERT (volinfo); GLUSTERD_GET_VOLUME_DIR(volpath, volinfo, priv); snprintf (path, sizeof (path), "%s/%s", volpath, @@ -2155,7 +2141,7 @@ glusterd_store_retrieve_node_state (char *volname, glusterd_snap_t *snap) goto out; out: - gf_log ("", GF_LOG_DEBUG, "Returning with %d", ret); + gf_log (this->name, GF_LOG_TRACE, "Returning with %d", ret); return ret; } @@ -2383,7 +2369,7 @@ out: return ret; } -int32_t +glusterd_volinfo_t* glusterd_store_retrieve_volume (char *volname, glusterd_snap_t *snap) { int32_t ret = -1; @@ -2437,11 +2423,15 @@ glusterd_store_retrieve_volume (char *volname, glusterd_snap_t *snap) glusterd_list_add_snapvol (origin_volinfo, volinfo); } out: - /*TODO: cleanup volinfo pointer on failure */ + if (ret) { + if (volinfo) + glusterd_volinfo_delete (volinfo); + volinfo = NULL; + } - gf_log ("", GF_LOG_TRACE, "Returning with %d", ret); + gf_log (this->name, GF_LOG_TRACE, "Returning with %d", ret); - return ret; + return volinfo; } inline void @@ -2575,38 +2565,28 @@ glusterd_store_retrieve_volumes (xlator_t *this, glusterd_snap_t *snap) if ( entry->d_type != DT_DIR ) goto next; - ret = glusterd_store_retrieve_volume (entry->d_name, snap); - if (ret) { + volinfo = glusterd_store_retrieve_volume (entry->d_name, snap); + if (!volinfo) { gf_log ("", GF_LOG_ERROR, "Unable to restore " "volume: %s", entry->d_name); + ret = -1; goto out; } - ret = glusterd_store_retrieve_rbstate (entry->d_name, snap); + ret = glusterd_store_retrieve_rbstate (volinfo); if (ret) { /* Backward compatibility */ gf_log ("", GF_LOG_INFO, "Creating a new rbstate " "for volume: %s.", entry->d_name); - if (snap) { - volinfo = snap->snap_volume; - } else { - ret = glusterd_volinfo_find (entry->d_name, - &volinfo); - } ret = glusterd_store_create_rbstate_shandle_on_absence (volinfo); ret = glusterd_store_perform_rbstate_store (volinfo); } - ret = glusterd_store_retrieve_node_state (entry->d_name, snap); + ret = glusterd_store_retrieve_node_state (volinfo); if (ret) { /* Backward compatibility */ gf_log ("", GF_LOG_INFO, "Creating a new node_state " "for volume: %s.", entry->d_name); - if (snap) { - volinfo = snap->snap_volume; - } else { - ret = glusterd_volinfo_find (entry->d_name, &volinfo); - } glusterd_store_create_nodestate_sh_on_absence (volinfo); ret = glusterd_store_perform_node_state_store (volinfo); |