Exemple #1
0
 def _gen_src(self):
     if self.file_per_database:
         for db_name in self._databases:
             self._current_db = db_name
             params = __mysql__['mysqldump_options'].split()
             params.extend([
                 '--user', __mysql__['root_user'],
                 '--password={0}'.format(__mysql__['root_password']),
                 db_name
             ])
             _mysqldump.args(*params)
             with self._popen_creation_lock:
                 if self._killed:
                     return
                 popen = _mysqldump.popen(stdin=None, bufsize=-1)
                 popen.db_name = db_name
                 self._popens.append(popen)
             stream = popen.stdout
             yield cloudfs.NamedStream(stream, db_name)
     else:
         params = __mysql__['mysqldump_options'].split() + [
             '--all-databases'
         ]
         _mysqldump.args(*params)
         with self._popen_creation_lock:
             if self._killed:
                 return
             popen = _mysqldump.popen(stdin=None, bufsize=-1)
             popen.db_name = "all-databases"
             self._popens.append(popen)
         yield popen.stdout
Exemple #2
0
def i_upload_stream_with_gzipping(context, gzip):
    gzip == 'True'
    src = [cloudfs.NamedStream(stream.src, os.path.basename(stream.src.name)) for stream in context.sources]
    for s in src:
        LOG.debug(s.name)
    time.sleep(1)
    if len(src) == 1:
        src = src[0]
    context.tr = largetransfer.Upload(src, context.remote_dir, gzip=gzip, chunk_size=5)
    context.tr.apply_async()
    try:
        context.tr.join()
    except:
        context.error = sys.exc_info()
    context.manifest = context.tr.manifest
    context.gzip = True
Exemple #3
0
    def upload_lvm_snapshot(self, lvm_snap, tags, path):
        """
        Method which uploads data from lvm snapshot to cloud storage and
        updates snapshot status.

        EphVolume runs this method in separate thread
        """


        try:
            self._snap_status = self.QUEUED
            mpoint = tempfile.mkdtemp()
            opts = []
            if coreutils.blkid(lvm_snap.device).get('type') == 'xfs':
                opts += ['-o', 'nouuid,ro']
            mount.mount(lvm_snap.device, mpoint, *opts)

            self.data_size = coreutils.statvfs(mpoint)['used']

            try:
                cmd = ['/bin/tar', 'cp', mpoint]
                stream = subprocess.Popen(cmd, stdout=subprocess.PIPE, close_fds=True).stdout
                src = cloudfs.NamedStream(stream, 'lvm_snapshot', streamer='tar', extension='tar')
                dst = path
                transfer = largetransfer.Upload(src, dst, tags=tags, transfer_id=self.id)
                self._snap_status = self.IN_PROGRESS
                transfer.apply_async()
                transfer.join()
                manifesto = transfer.manifest
                self.path = manifesto.cloudfs_path
                self._snap_status = self.COMPLETED

            finally:
                mount.umount(mpoint)
                os.rmdir(mpoint)

        except:
            self._snap_status = self.FAILED
            LOG.exception('Caught error while uploading LVM snapshot')
        finally:
            lvm_snap.destroy()
Exemple #4
0
 def _gen_src(self):
     if self.file_per_database:
         for db_name in self._databases:
             self._current_db = db_name
             params = __mysql__['mysqldump_options'].split() + [db_name]
             _mysqldump.args(*params)
             with self._popen_creation_lock:
                 if self._killed:
                     return
                 popen = _mysqldump.popen(stdin=None, bufsize=-1)
                 self._popens.append(popen)
             stream = popen.stdout
             yield cloudfs.NamedStream(stream, db_name)
     else:
         params = __mysql__['mysqldump_options'].split() + [
             '--all-databases'
         ]
         _mysqldump.args(*params)
         with self._popen_creation_lock:
             if self._killed:
                 return
             popen = _mysqldump.popen(stdin=None, bufsize=-1)
             self._popens.append(popen)
         yield popen.stdout