diff options
| author | Avra Sengupta <asengupt@redhat.com> | 2015-08-05 13:49:41 +0530 | 
|---|---|---|
| committer | Rajesh Joseph <rjoseph@redhat.com> | 2015-08-23 23:57:42 -0700 | 
| commit | 4c3cf5c6ba58946c2f26a34cdfeaacdc25e20803 (patch) | |
| tree | ce0b88e6d741c6f8bfd8ce9896cb8a6fe66abf58 /extras | |
| parent | 246dae5b89770a4642d4fbe4650a44475144c55a (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')
| -rwxr-xr-x | extras/snap_scheduler/snap_scheduler.py | 88 | 
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)  | 
