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)))
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)))
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)))