diff options
| author | Saravanakumar Arumugam <sarumuga@redhat.com> | 2016-06-29 15:36:06 +0530 | 
|---|---|---|
| committer | Jeff Darcy <jdarcy@redhat.com> | 2016-07-11 15:50:13 -0700 | 
| commit | f938b3a26ffab9482d5f910ee76d2bb2b370517f (patch) | |
| tree | c5b8f275bfe3c405e5ed665505c80b81183f1d99 /xlators/mgmt/glusterd/src | |
| parent | bfbadab0d65f38d2719ceb4d5c9144377db9d4d5 (diff) | |
glusterd/geo-rep: Handle empty monitor.status during upgrade
Problem:
Consider geo-replication is in Stopped state.
Following which, glusterfs is upgraded (where monitor.status is the new status file).
Now, When geo-replication status command is run,
empty monitor status file gets created.
Now, if glusterd is restarted, it reads empty monitor status
and  starts geo-replication session. This is incorrect as session
was in Stopped state earlier.
Solution:
If monitor status is empty, error out and avoid
starting geo-replication session.
Note: if monitor status is empty, geo-rep session is displayed
as Stopped state.
Change-Id: Ifb3db896e5ed92b927764cf1163503765cb08bb4
BUG: 1351071
Signed-off-by: Saravanakumar Arumugam <sarumuga@redhat.com>
Reviewed-on: http://review.gluster.org/14830
Smoke: Gluster Build System <jenkins@build.gluster.org>
CentOS-regression: Gluster Build System <jenkins@build.gluster.org>
NetBSD-regression: NetBSD Build System <jenkins@build.gluster.org>
Reviewed-by: Jeff Darcy <jdarcy@redhat.com>
Diffstat (limited to 'xlators/mgmt/glusterd/src')
| -rw-r--r-- | xlators/mgmt/glusterd/src/glusterd-geo-rep.c | 5 | ||||
| -rw-r--r-- | xlators/mgmt/glusterd/src/glusterd-utils.c | 8 | 
2 files changed, 8 insertions, 5 deletions
diff --git a/xlators/mgmt/glusterd/src/glusterd-geo-rep.c b/xlators/mgmt/glusterd/src/glusterd-geo-rep.c index 4a0ef095efd..d2f3911170d 100644 --- a/xlators/mgmt/glusterd/src/glusterd-geo-rep.c +++ b/xlators/mgmt/glusterd/src/glusterd-geo-rep.c @@ -4278,7 +4278,10 @@ glusterd_gsync_read_frm_status (char *path, char *buf, size_t blen)                          while (isspace (*p))                                  *p-- = '\0';                  } -        } else if (ret < 0) +        } else if (ret == 0) +                gf_msg (this->name, GF_LOG_ERROR, 0, GD_MSG_GSYNCD_ERROR, +                        "Status file of gsyncd is empty"); +        else /* ret < 0 */                  gf_msg (this->name, GF_LOG_ERROR, 0, GD_MSG_GSYNCD_ERROR,                          "Status file of gsyncd is corrupt"); diff --git a/xlators/mgmt/glusterd/src/glusterd-utils.c b/xlators/mgmt/glusterd/src/glusterd-utils.c index 24c50a971a9..cd53087e6f7 100644 --- a/xlators/mgmt/glusterd/src/glusterd-utils.c +++ b/xlators/mgmt/glusterd/src/glusterd-utils.c @@ -5091,7 +5091,7 @@ _local_gsyncd_start (dict_t *this, char *key, data_t *value, void *data)          }          ret = glusterd_gsync_read_frm_status (statefile, buf, sizeof (buf)); -        if (ret < 0) { +        if (ret <= 0) {                  gf_msg (this1->name, GF_LOG_ERROR, 0,                          GD_MSG_STAT_FILE_READ_FAILED,                          "Unable to read the status"); @@ -5102,9 +5102,9 @@ _local_gsyncd_start (dict_t *this, char *key, data_t *value, void *data)          if ((key1 = strchr (slave, '/')))                  key1 = key1 + 2; -        /* Looks for the last status, to find if the sessiom was running -         * when the node went down. If the session was not started or -         * not started, do not restart the geo-rep session */ +        /* Looks for the last status, to find if the session was running +         * when the node went down. If the session was just created or +         * stopped, do not restart the geo-rep session */          if ((!strcmp (buf, "Created")) ||              (!strcmp (buf, "Stopped"))) {                  gf_msg (this1->name, GF_LOG_INFO, 0,  | 
