summaryrefslogtreecommitdiffstats
path: root/extras/snap_scheduler
diff options
context:
space:
mode:
authorAvra Sengupta <asengupt@redhat.com>2015-08-05 13:49:41 +0530
committerRajesh Joseph <rjoseph@redhat.com>2015-08-23 23:57:42 -0700
commit4c3cf5c6ba58946c2f26a34cdfeaacdc25e20803 (patch)
treece0b88e6d741c6f8bfd8ce9896cb8a6fe66abf58 /extras/snap_scheduler
parent246dae5b89770a4642d4fbe4650a44475144c55a (diff)
snapshot/scheduler: Check if volume exists before adding/editing schedules
Backport of http://review.gluster.org/#/c/11830/ Before adding or editing a scheduler, check if the volume name provided in the schedule, exists in the cluster or not. Added return code VOLUME_DOES_NOT_EXIST(17) for the same. Change-Id: Ia3fe3cc1e1568ddd10f9193bbf40a098f0fe990a BUG: 1245923 Signed-off-by: Avra Sengupta <asengupt@redhat.com> Reviewed-on: http://review.gluster.org/11917 Tested-by: NetBSD Build System <jenkins@build.gluster.org> Tested-by: Gluster Build System <jenkins@build.gluster.com> Reviewed-by: mohammed rafi kc <rkavunga@redhat.com> Reviewed-by: Rajesh Joseph <rjoseph@redhat.com>
Diffstat (limited to 'extras/snap_scheduler')
-rwxr-xr-xextras/snap_scheduler/snap_scheduler.py88
1 files changed, 67 insertions, 21 deletions
diff --git a/extras/snap_scheduler/snap_scheduler.py b/extras/snap_scheduler/snap_scheduler.py
index ce808cf16ba..1af7712e8d0 100755
--- a/extras/snap_scheduler/snap_scheduler.py
+++ b/extras/snap_scheduler/snap_scheduler.py
@@ -53,6 +53,7 @@ INVALID_JOBNAME = 13
INVALID_VOLNAME = 14
INVALID_SCHEDULE = 15
INVALID_ARG = 16
+VOLUME_DOES_NOT_EXIST = 17
def output(msg):
print("%s: %s" % (SCRIPT_NAME, msg))
@@ -324,6 +325,34 @@ def update_current_scheduler(data):
return ret
+def isVolumePresent(volname):
+ success = False
+ if volname == "":
+ log.debug("No volname given")
+ return success
+
+ cli = ["gluster",
+ "volume",
+ "info",
+ volname]
+ log.debug("Running command '%s'", " ".join(cli))
+
+ p = subprocess.Popen(cli, stdout=subprocess.PIPE,
+ stderr=subprocess.PIPE)
+ out, err = p.communicate()
+ rv = p.returncode
+
+ log.debug("Command '%s' returned '%d'", " ".join(cli), rv)
+
+ if rv:
+ log.error("Command output:")
+ log.error(err)
+ else:
+ success = True;
+
+ return success
+
+
def add_schedules(jobname, schedule, volname):
log.info("Adding snapshot schedules.")
ret = load_tasks_from_file()
@@ -335,22 +364,31 @@ def add_schedules(jobname, schedule, volname):
output(print_str)
ret = JOB_ALREADY_EXISTS
else:
- tasks[jobname] = schedule + ":" + volname
- ret = write_tasks_to_file()
- if ret == 0:
- # Create a LOCK_FILE for the job
- job_lockfile = LOCK_FILE_DIR + jobname
- try:
- f = os.open(job_lockfile, os.O_CREAT | os.O_NONBLOCK, 0644)
- os.close(f)
- except OSError as (errno, strerror):
- log.error("Failed to open %s. Error: %s.",
- job_lockfile, strerror)
- ret = INTERNAL_ERROR
- return ret
- log.info("Successfully added snapshot schedule %s" % jobname)
- output("Successfully added snapshot schedule")
- ret = 0
+ if not isVolumePresent(volname):
+ print_str = ("Volume %s does not exist. Create %s and retry." %
+ (volname, volname))
+ log.error(print_str)
+ output(print_str)
+ ret = VOLUME_DOES_NOT_EXIST
+ else:
+ tasks[jobname] = schedule + ":" + volname
+ ret = write_tasks_to_file()
+ if ret == 0:
+ # Create a LOCK_FILE for the job
+ job_lockfile = LOCK_FILE_DIR + jobname
+ try:
+ f = os.open(job_lockfile, os.O_CREAT | os.O_NONBLOCK,
+ 0644)
+ os.close(f)
+ except OSError as (errno, strerror):
+ log.error("Failed to open %s. Error: %s.",
+ job_lockfile, strerror)
+ ret = INTERNAL_ERROR
+ return ret
+ log.info("Successfully added snapshot schedule %s" %
+ jobname)
+ output("Successfully added snapshot schedule")
+ ret = 0
else:
print_str = "Failed to add snapshot schedule. " \
"Error: Failed to load tasks from "+GCRON_ENABLED
@@ -401,11 +439,19 @@ def edit_schedules(jobname, schedule, volname):
ret = load_tasks_from_file()
if ret == 0:
if jobname in tasks:
- tasks[jobname] = schedule+":"+volname
- ret = write_tasks_to_file()
- if ret == 0:
- log.info("Successfully edited snapshot schedule %s" % jobname)
- output("Successfully edited snapshot schedule")
+ if not isVolumePresent(volname):
+ print_str = ("Volume %s does not exist. Create %s and retry." %
+ (volname, volname))
+ log.error(print_str)
+ output(print_str)
+ ret = VOLUME_DOES_NOT_EXIST
+ else:
+ tasks[jobname] = schedule+":"+volname
+ ret = write_tasks_to_file()
+ if ret == 0:
+ log.info("Successfully edited snapshot schedule %s" %
+ jobname)
+ output("Successfully edited snapshot schedule")
else:
print_str = ("Failed to edit %s. Error: No such "
"job scheduled" % jobname)