当前位置: 首页>>代码示例>>Python>>正文


Python utils.lock_parent_directory函数代码示例

本文整理汇总了Python中swift.common.utils.lock_parent_directory函数的典型用法代码示例。如果您正苦于以下问题:Python lock_parent_directory函数的具体用法?Python lock_parent_directory怎么用?Python lock_parent_directory使用的例子?那么恭喜您, 这里精选的函数代码示例或许可以为您提供帮助。


在下文中一共展示了lock_parent_directory函数的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的Python代码示例。

示例1: reclaim

    def reclaim(self, age_timestamp, sync_timestamp):
        """
        Delete rows from the db_contains_type table that are marked deleted
        and whose created_at timestamp is < age_timestamp.  Also deletes rows
        from incoming_sync and outgoing_sync where the updated_at timestamp is
        < sync_timestamp.

        In addition, this calls the DatabaseBroker's :func:`_reclaim` method.

        :param age_timestamp: max created_at timestamp of object rows to delete
        :param sync_timestamp: max update_at timestamp of sync rows to delete
        """
        if self.db_file != ':memory:' and os.path.exists(self.pending_file):
            with lock_parent_directory(self.pending_file,
                                       self.pending_timeout):
                self._commit_puts()
        with self.get() as conn:
            conn.execute('''
                DELETE FROM %s WHERE deleted = 1 AND %s < ?
            ''' % (self.db_contains_type, self.db_reclaim_timestamp),
                (age_timestamp,))
            try:
                conn.execute('''
                    DELETE FROM outgoing_sync WHERE updated_at < ?
                ''', (sync_timestamp,))
                conn.execute('''
                    DELETE FROM incoming_sync WHERE updated_at < ?
                ''', (sync_timestamp,))
            except sqlite3.OperationalError as err:
                # Old dbs didn't have updated_at in the _sync tables.
                if 'no such column: updated_at' not in str(err):
                    raise
            DatabaseBroker._reclaim(self, conn, age_timestamp)
            conn.commit()
开发者ID:bebule,项目名称:swift,代码行数:34,代码来源:db.py

示例2: start

 def start(self):
     """Start up the ring master"""
     self.logger.notice("Ring-Master starting up")
     self.logger.notice("-> Entering ring orchestration loop.")
     while True:
         try:
             self.pause_if_asked()
             if self.in_change_window():
                 for btype in sorted(self.builder_files.keys()):
                     with lock_parent_directory(self.builder_files[btype],
                                                self.lock_timeout):
                         ring_changed = self.orchestration_pass(btype)
                     if ring_changed:
                         sleep(self.recheck_after_change_interval)
                     else:
                         sleep(self.recheck_interval)
             else:
                 self.logger.debug('Not in change window')
                 sleep(60)
         except exceptions.LockTimeout:
             self.logger.exception('Orchestration LockTimeout Encountered')
         except Exception:
             self.logger.exception('Orchestration Error')
             sleep(60)
         sleep(1)
开发者ID:briancline,项目名称:swift-ring-master,代码行数:25,代码来源:ringmasterd.py

示例3: _validate_file

 def _validate_file(self, filename):
     """Validate md5 of file"""
     if self._changed(filename):
         self.logger.debug("updating md5")
         with lock_parent_directory(self.swiftdir, self.lock_timeout):
             self.last_tstamp[filename] = stat(filename).st_mtime
             self.current_md5[filename] = get_md5sum(filename)
开发者ID:pandemicsyn,项目名称:swift-ring-master,代码行数:7,代码来源:ringmasterwsgi.py

示例4: _commit_puts

    def _commit_puts(self, item_list=None):
        """
        Scan for .pending files and commit the found records by feeding them
        to merge_items().

        :param item_list: A list of items to commit in addition to .pending
        """
        if self.db_file == ':memory:' or not os.path.exists(self.pending_file):
            return
        if item_list is None:
            item_list = []
        with lock_parent_directory(self.pending_file, self.pending_timeout):
            self._preallocate()
            if not os.path.getsize(self.pending_file):
                if item_list:
                    self.merge_items(item_list)
                return
            with open(self.pending_file, 'r+b') as fp:
                for entry in fp.read().split(':'):
                    if entry:
                        try:
                            self._commit_puts_load(item_list, entry)
                        except Exception:
                            self.logger.exception(
                                _('Invalid pending entry %(file)s: %(entry)s'),
                                {'file': self.pending_file, 'entry': entry})
                if item_list:
                    self.merge_items(item_list)
                try:
                    os.ftruncate(fp.fileno(), 0)
                except OSError as err:
                    if err.errno != errno.ENOENT:
                        raise
开发者ID:HoO-Group,项目名称:swift,代码行数:33,代码来源:db.py

示例5: main

def main(arguments=None):
    global argv, backup_dir, builder, builder_file, ring_file
    if arguments:
        argv = arguments
    else:
        argv = sys_argv

    if len(argv) < 2:
        print "swift-ring-builder %(MAJOR_VERSION)s.%(MINOR_VERSION)s\n" % \
              globals()
        print Commands.default.__doc__.strip()
        print
        cmds = [c for c, f in Commands.__dict__.iteritems()
                if f.__doc__ and c[0] != '_' and c != 'default']
        cmds.sort()
        for cmd in cmds:
            print Commands.__dict__[cmd].__doc__.strip()
            print
        print parse_search_value.__doc__.strip()
        print
        for line in wrap(' '.join(cmds), 79, initial_indent='Quick list: ',
                         subsequent_indent='            '):
            print line
        print('Exit codes: 0 = operation successful\n'
              '            1 = operation completed with warnings\n'
              '            2 = error')
        exit(EXIT_SUCCESS)

    builder_file, ring_file = parse_builder_ring_filename_args(argv)

    if exists(builder_file):
        builder = RingBuilder.load(builder_file)
    elif len(argv) < 3 or argv[2] not in('create', 'write_builder'):
        print 'Ring Builder file does not exist: %s' % argv[1]
        exit(EXIT_ERROR)

    backup_dir = pathjoin(dirname(argv[1]), 'backups')
    try:
        mkdir(backup_dir)
    except OSError as err:
        if err.errno != EEXIST:
            raise

    if len(argv) == 2:
        command = "default"
    else:
        command = argv[2]
    if argv[0].endswith('-safe'):
        try:
            with lock_parent_directory(abspath(argv[1]), 15):
                Commands.__dict__.get(command, Commands.unknown.im_func)()
        except exceptions.LockTimeout:
            print "Ring/builder dir currently locked."
            exit(2)
    else:
        Commands.__dict__.get(command, Commands.unknown.im_func)()
开发者ID:701,项目名称:swift,代码行数:56,代码来源:ringbuilder.py

示例6: delete_db

 def delete_db(self, object_file):
     hash_dir = os.path.dirname(object_file)
     suf_dir = os.path.dirname(hash_dir)
     with lock_parent_directory(object_file):
         shutil.rmtree(hash_dir, True)
     try:
         os.rmdir(suf_dir)
     except OSError, err:
         if err.errno not in (errno.ENOENT, errno.ENOTEMPTY):
             self.logger.exception(_("ERROR while trying to clean up %s") % suf_dir)
开发者ID:rushikeshjadhav,项目名称:swift,代码行数:10,代码来源:db_replicator.py

示例7: test_ringmaster_validate_locked_dir

 def test_ringmaster_validate_locked_dir(self):
     self._setup_builder_rings()
     rma = RingMasterApp({'swiftdir': self.testdir, 'log_path': self.test_log_path, 'locktimeout': "0.1"})
     for i in rma.current_md5:
         self.assertEquals(rma._changed(i), False)
     self._setup_builder_rings(count=5)
     for i in rma.current_md5:
         t = time.time() - 300
         os.utime(i, (t, t))
     with lock_parent_directory(self.testdir):
         for i in rma.current_md5:
             self.assertRaises(LockTimeout, rma._validate_file, i)
开发者ID:briancline,项目名称:swift-ring-master,代码行数:12,代码来源:test_ringmasterwsgi.py

示例8: _commit_puts_stale_ok

 def _commit_puts_stale_ok(self):
     """
     Catch failures of _commit_puts() if broker is intended for
     reading of stats, and thus does not care for pending updates.
     """
     if self.db_file == ":memory:" or not os.path.exists(self.pending_file):
         return
     try:
         with lock_parent_directory(self.pending_file, self.pending_timeout):
             self._commit_puts()
     except LockTimeout:
         if not self.stale_reads_ok:
             raise
开发者ID:kirubakk,项目名称:swift,代码行数:13,代码来源:db.py

示例9: _commit_puts_stale_ok

 def _commit_puts_stale_ok(self):
     """
     Catch failures of _commit_puts() if broker is intended for
     reading of stats, and thus does not care for pending updates.
     """
     if self._skip_commit_puts():
         return
     try:
         with lock_parent_directory(self.pending_file,
                                    self.pending_timeout):
             self._commit_puts()
     except (LockTimeout, sqlite3.OperationalError):
         if not self.stale_reads_ok:
             raise
开发者ID:mahak,项目名称:swift,代码行数:14,代码来源:db.py

示例10: delete_db

 def delete_db(self, object_file):
     hash_dir = os.path.dirname(object_file)
     suf_dir = os.path.dirname(hash_dir)
     with lock_parent_directory(object_file):
         shutil.rmtree(hash_dir, True)
     try:
         os.rmdir(suf_dir)
     except OSError as err:
         if err.errno not in (errno.ENOENT, errno.ENOTEMPTY):
             self.logger.exception(
                 _('ERROR while trying to clean up %s') % suf_dir)
     self.stats['remove'] += 1
     device_name = self.extract_device(object_file)
     self.logger.increment('removes.' + device_name)
开发者ID:sa4250mnpo70,项目名称:swift,代码行数:14,代码来源:db_replicator.py

示例11: put_object

    def put_object(self, name, timestamp, size, content_type, etag, deleted=0, storage_policy_index=0):
        """
        Creates an object in the DB with its metadata.

        :param name: object name to be created
        :param timestamp: timestamp of when the object was created
        :param size: object size
        :param content_type: object content-type
        :param etag: object etag
        :param deleted: if True, marks the object as deleted and sets the
                        deleted_at timestamp to timestamp
        :param storage_policy_index: the storage policy index for the object
        """
        record = {
            "name": name,
            "created_at": timestamp,
            "size": size,
            "content_type": content_type,
            "etag": etag,
            "deleted": deleted,
            "storage_policy_index": storage_policy_index,
        }
        if self.db_file == ":memory:":
            self.merge_items([record])
            return
        if not os.path.exists(self.db_file):
            raise DatabaseConnectionError(self.db_file, "DB doesn't exist")
        pending_size = 0
        try:
            pending_size = os.path.getsize(self.pending_file)
        except OSError as err:
            if err.errno != errno.ENOENT:
                raise
        if pending_size > PENDING_CAP:
            self._commit_puts([record])
        else:
            with lock_parent_directory(self.pending_file, self.pending_timeout):
                with open(self.pending_file, "a+b") as fp:
                    # Colons aren't used in base64 encoding; so they are our
                    # delimiter
                    fp.write(":")
                    fp.write(
                        pickle.dumps(
                            (name, timestamp, size, content_type, etag, deleted, storage_policy_index),
                            protocol=PICKLE_PROTOCOL,
                        ).encode("base64")
                    )
                    fp.flush()
开发者ID:nagyist,项目名称:swift,代码行数:48,代码来源:backend.py

示例12: put_container

    def put_container(self, name, put_timestamp, delete_timestamp,
                      object_count, bytes_used, storage_policy_index):
        """
        Create a container with the given attributes.

        :param name: name of the container to create
        :param put_timestamp: put_timestamp of the container to create
        :param delete_timestamp: delete_timestamp of the container to create
        :param object_count: number of objects in the container
        :param bytes_used: number of bytes used by the container
        :param storage_policy_index:  the storage policy for this container
        """
        if delete_timestamp > put_timestamp and \
                object_count in (None, '', 0, '0'):
            deleted = 1
        else:
            deleted = 0
        record = {'name': name, 'put_timestamp': put_timestamp,
                  'delete_timestamp': delete_timestamp,
                  'object_count': object_count,
                  'bytes_used': bytes_used,
                  'deleted': deleted,
                  'storage_policy_index': storage_policy_index}
        if self.db_file == ':memory:':
            self.merge_items([record])
            return
        if not os.path.exists(self.db_file):
            raise DatabaseConnectionError(self.db_file, "DB doesn't exist")
        pending_size = 0
        try:
            pending_size = os.path.getsize(self.pending_file)
        except OSError as err:
            if err.errno != errno.ENOENT:
                raise
        if pending_size > PENDING_CAP:
            self._commit_puts([record])
        else:
            with lock_parent_directory(self.pending_file,
                                       self.pending_timeout):
                with open(self.pending_file, 'a+b') as fp:
                    # Colons aren't used in base64 encoding; so they are our
                    # delimiter
                    fp.write(':')
                    fp.write(pickle.dumps(
                        (name, put_timestamp, delete_timestamp, object_count,
                         bytes_used, deleted, storage_policy_index),
                        protocol=PICKLE_PROTOCOL).encode('base64'))
                    fp.flush()
开发者ID:7yue,项目名称:swift,代码行数:48,代码来源:backend.py

示例13: put_container

    def put_container(self, name, put_timestamp, delete_timestamp, object_count, bytes_used):
        """
        Create a container with the given attributes.

        :param name: name of the container to create
        :param put_timestamp: put_timestamp of the container to create
        :param delete_timestamp: delete_timestamp of the container to create
        :param object_count: number of objects in the container
        :param bytes_used: number of bytes used by the container
        """
        if delete_timestamp > put_timestamp and object_count in (None, "", 0, "0"):
            deleted = 1
        else:
            deleted = 0
        record = {
            "name": name,
            "put_timestamp": put_timestamp,
            "delete_timestamp": delete_timestamp,
            "object_count": object_count,
            "bytes_used": bytes_used,
            "deleted": deleted,
        }
        if self.db_file == ":memory:":
            self.merge_items([record])
            return
        if not os.path.exists(self.db_file):
            raise DatabaseConnectionError(self.db_file, "DB doesn't exist")
        pending_size = 0
        try:
            pending_size = os.path.getsize(self.pending_file)
        except OSError as err:
            if err.errno != errno.ENOENT:
                raise
        if pending_size > PENDING_CAP:
            self._commit_puts([record])
        else:
            with lock_parent_directory(self.pending_file, self.pending_timeout):
                with open(self.pending_file, "a+b") as fp:
                    # Colons aren't used in base64 encoding; so they are our
                    # delimiter
                    fp.write(":")
                    fp.write(
                        pickle.dumps(
                            (name, put_timestamp, delete_timestamp, object_count, bytes_used, deleted),
                            protocol=PICKLE_PROTOCOL,
                        ).encode("base64")
                    )
                    fp.flush()
开发者ID:anishnarang,项目名称:gswift-multinode,代码行数:48,代码来源:backend.py

示例14: dump_builder

    def dump_builder(self):
        """Write out new builder files

        :param builder: The builder to dump
        :builder_file: The builder file to write to
        """
        with lock_parent_directory(self.builder_file, 15):
            bfile, bmd5 = self._make_backup()
            print "Backed up %s to %s (%s)" % (self.builder_file, bfile, bmd5)
            fd, tmppath = mkstemp(
                dir=dirname(self.builder_file), suffix='.tmp.builder')
            pickle.dump(self.builder.to_dict(), fdopen(fd, 'wb'), protocol=2)
            rename(tmppath, self.builder_file)
        print "Success. %s updated. (%s)" % (
            self.builder_file, self.get_md5sum(self.builder_file))
        print "Rebalance still required."
开发者ID:pandemicsyn,项目名称:swiftscout,代码行数:16,代码来源:drivescout.py

示例15: put_container

    def put_container(self, name, put_timestamp, delete_timestamp, object_count, bytes_used):
        """
        Create a container with the given attributes.

        :param name: name of the container to create
        :param put_timestamp: put_timestamp of the container to create
        :param delete_timestamp: delete_timestamp of the container to create
        :param object_count: number of objects in the container
        :param bytes_used: number of bytes used by the container
        """
        if delete_timestamp > put_timestamp and object_count in (None, "", 0, "0"):
            deleted = 1
        else:
            deleted = 0
        record = {
            "name": name,
            "put_timestamp": put_timestamp,
            "delete_timestamp": delete_timestamp,
            "object_count": object_count,
            "bytes_used": bytes_used,
            "deleted": deleted,
        }
        if self.db_file == ":memory:":
            self.merge_items([record])
            return
        commit = False
        with lock_parent_directory(self.pending_file, self.pending_timeout):
            with open(self.pending_file, "a+b") as fp:
                # Colons aren't used in base64 encoding; so they are our
                # delimiter
                fp.write(":")
                fp.write(
                    pickle.dumps(
                        (name, put_timestamp, delete_timestamp, object_count, bytes_used, deleted),
                        protocol=PICKLE_PROTOCOL,
                    ).encode("base64")
                )
                fp.flush()
                if fp.tell() > PENDING_CAP:
                    commit = True
        if commit:
            self._commit_puts()
开发者ID:github-lmp,项目名称:zft,代码行数:42,代码来源:db_broker_test.py


注:本文中的swift.common.utils.lock_parent_directory函数示例由纯净天空整理自Github/MSDocs等开源代码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。