Example #1
0
 def _set_job_error(self, job_id, msg):
     self.logger.error(msg)
     try:
         Util.retry_update_job(self.cb, job_id, state='FAILED',
                               previous_state='RUNNING', progress=100,
                               msg=msg, executor=self.executor)
     except Exception as e:
         self.logger.error('cannot update %s: %s' % (job_id, str(e)))
Example #2
0
    def _create_volume(self, job):
        job_id = self._job_id(job)
        vol_docid = str(job['targetResource'])
        self.logger.info('creating %s' % vol_docid)

        try:
            rv = self.cb.get(vol_docid)
            cas = rv.cas
            volume = rv.value
        except couchbase.exceptions.NotFoundError:
            msg = 'cannot retrieve %s' % vol_docid
            self._set_job_error(job_id, msg)
            return

        try:
            kbytes = volume['capacity']
        except KeyError:
            msg = 'volume is missing capacity value'
            self._set_job_error(job_id, msg)
            self.update_volume_state(vol_docid, volume, cas, 'ERROR', msg=msg)
            return

        size = Controller.kb_to_gb(kbytes)

        try:
            tag = str(volume['name'])
        except KeyError:
            tag = None

        config_holder = ConfigHolder(config=self.cfg)

        try:
            pdisk = VolumeManagerFactory.create(config_holder)

            sl_uuid = pdisk.createVolume(size, tag, 'private')
        except Exception as e:
            msg = 'error creating volume: %s' % str(e)
            self._set_job_error(job_id, msg)
            self.update_volume_state(vol_docid, volume, cas, 'ERROR', msg=str(e))
            return

        self.logger.info('created pdisk uuid %s' % str(sl_uuid))

        self.update_volume_state(vol_docid, volume, cas, 'AVAILABLE', sl_uuid=sl_uuid)

        try:
            Util.retry_update_job(self.cb, job_id, state='SUCCESS',
                                  previous_state='RUNNING', progress=100,
                                  msg='OK', executor=self.executor)
        except Exception as e:
            self.logger.error('cannot update %s: %s' % (job_id, str(e)))
Example #3
0
    def _delete_volume(self, job):
        job_id = self._job_id(job)
        vol_docid = str(job['targetResource'])
        self.logger.info('deleting %s' % vol_docid)

        try:
            rv = self.cb.get(vol_docid)
            cas = rv.cas
            volume = rv.value
        except couchbase.exceptions.NotFoundError:
            msg = 'cannot retrieve %s' % vol_docid
            self._set_job_error(job_id, msg)
            return

        try:
            sl_uuid = str(volume['properties']['sl_uuid'])
        except Exception:
            msg = 'volume is missing sl_uuid property'
            self._set_job_error(job_id, msg)
            return

        config_holder = ConfigHolder(config=self.cfg)

        try:
            pdisk = VolumeManagerFactory.create(config_holder)
            pdisk.deleteVolume(sl_uuid)
        except Exception as e:
            msg = 'error deleting sl_uuid %s: %s' % (sl_uuid, str(e))
            self._set_job_error(job_id, msg)
            return

        try:
            self.cb.delete(vol_docid, cas=cas)
        except couchbase.exceptions.KeyExistsError:
            msg = 'cannot delete %s' % vol_docid
            self._set_job_error(job_id, msg)
            return

        try:
            Util.retry_update_job(self.cb, job_id, state='SUCCESS',
                                  previous_state='RUNNING', progress=100,
                                  msg='OK', executor=self.executor)
        except Exception as e:
            self.logger.error('cannot update %s: %s' % (job_id, str(e)))