Account

Account Auditor

class swift.account.auditor.AccountAuditor(conf, logger=None)

基类: DatabaseAuditor

审计账户。

broker_class

AccountBroker 的别名

server_type = 'account'
swift.account.auditor.main()

Account Backend

Account 服务器的可插拔后端

class swift.account.backend.AccountBroker(db_file, timeout=25, logger=None, account=None, container=None, pending_timeout=None, stale_reads_ok=False, skip_commits=False)

基类: DatabaseBroker

封装了与账户数据库的交互。

create_account_stat_table(conn, put_timestamp)

创建 account_stat 表,该表特定于账户数据库。不是可插拔后端的一部分,而是基线代码的内部组件。

参数:
  • conn – 数据库连接对象

  • put_timestamp – 放入时间戳

create_container_table(conn)

创建 container 表,该表特定于账户数据库。

参数:

conn – 数据库连接对象

create_policy_stat_table(conn)

创建 policy_stat 表,该表特定于账户数据库。不是可插拔后端的一部分,而是基线代码的内部组件。

参数:

conn – 数据库连接对象

db_contains_type = 'container'
db_reclaim_timestamp = 'delete_timestamp'
db_type = 'account'
empty()

检查账户数据库是否为空。

返回值:

如果数据库没有活动的容器,则返回 True。

get_db_version(conn)
get_info()

获取账户的全局数据。

返回值:

字典,包含键:account、created_at、put_timestamp、delete_timestamp、status_changed_at、container_count、object_count、bytes_used、hash、id

get_policy_stats(do_migrations=False)

获取账户的全局策略统计信息。

参数:

do_migrations – 布尔值,如果为 True,则策略统计信息字典将始终包含 ‘container_count’ 键;否则,在迁移旧版数据库之前,它可能会被省略。

返回值:

策略统计信息的字典,其中键是策略索引,值是类似于 {‘object_count’: M, ‘bytes_used’: N, ‘container_count’: L} 的字典

is_status_deleted()

仅当状态字段设置为 DELETED 时才返回 True。

list_containers_iter(limit, marker, end_marker, prefix, delimiter, reverse=False, allow_reserved=False)

按名称排序获取容器列表,从 marker 开始,最多 limit 个条目。条目将以 prefix 开头,并且不会在 prefix 之后带有 delimiter。

参数:
  • limit – 获取的最大条目数

  • marker – marker 查询

  • end_marker – 结束 marker 查询

  • prefix – prefix 查询

  • delimiter – delimiter 查询

  • reverse – 反转结果顺序。

  • allow_reserved – 默认排除带有保留字节名称

返回值:

元组列表,格式为 (name, object_count, bytes_used, put_timestamp, storage_policy_index, is_subdir)

make_tuple_for_pickle(record)

将此数据库记录字典转换为此服务用于待定 pickles 的格式。

merge_items(item_list, source=None)

将条目合并到容器表中。

参数:
  • item_list – 字典列表,格式为 {‘name’, ‘put_timestamp’, ‘delete_timestamp’, ‘object_count’, ‘bytes_used’, ‘deleted’, ‘storage_policy_index’}

  • source – 如果已定义,则使用 source 更新 incoming_sync

put_container(name, put_timestamp, delete_timestamp, object_count, bytes_used, storage_policy_index)

使用给定的属性创建容器。

参数:
  • name – 要创建的容器的名称(本机字符串)

  • put_timestamp – 要创建的容器的 put_timestamp

  • delete_timestamp – 要创建的容器的 delete_timestamp

  • object_count – 容器中的对象数

  • bytes_used – 容器使用的字节数

  • storage_policy_index – 此容器的存储策略

Account Reaper

class swift.account.reaper.AccountReaper(conf, logger=None)

基类: Daemon

删除状态为 DELETED 的账户的数据。这些账户是由 reseller 通过 services remove_storage_account XMLRPC 调用请求删除的账户。

账户不会立即被 services 调用删除,而是账户的 status 列在账户数据库的 account_stat 表中被设置为 DELETED,从而将账户标记为删除。此账户 reaper 扫描此类账户,并在后台删除数据。后台删除过程将发生在账户的主要账户服务器上。

参数:
  • server_conf – 账户服务器配置文件中的 [account-server] 字典

  • reaper_conf – 账户服务器配置文件中的 [account-reaper] 字典

有关可能的配置参数的信息,请参阅 etc/account-server.conf-sample。

get_account_ring()

集群的账户 swift.common.ring.Ring

get_container_ring()

集群的容器 swift.common.ring.Ring

get_object_ring(policy_idx)

获取由策略索引标识的环

参数:

policy_idx – 存储策略索引

返回值:

与存储策略匹配的环

reap_account(broker, partition, nodes, container_shard=None)

每当此服务器是账户的主服务器时,将为每个账户调用一次,并尝试删除给定账户的数据。reaper 将一次只删除一个账户。它将并发调用 reap_container() 最多 sqrt(self.concurrency) 次,同时回收账户。

如果删除单个容器时发生任何异常,该过程将继续进行其他容器,并且失败的容器将在下次使用相同参数调用此函数时再次尝试。

如果列出要删除的容器时发生任何异常,该过程将停止(但显然会在下次使用相同参数调用此函数时再次尝试)。这不太可能发生,因为列表来自本地数据库。

完成过程后(成功或不成功),将记录有关已完成情况的统计信息。

此函数不返回任何内容,也不应引发任何异常,而应仅更新各种 self.stats_* 值以反映发生的情况。

参数:
  • broker – 要删除的账户的 AccountBroker。

  • partition – 账户所在的账户环中的分区。

  • nodes – 要删除的账户的主要节点字典。

  • container_shard – 用于分片回收容器的整数。如果为 None,将回收所有容器。

参见

swift.account.backend.AccountBroker 用于 broker 类。

参见

swift.common.ring.Ring.get_nodes() 描述了节点字典。

reap_container(account, account_partition, account_nodes, container)

删除给定容器的数据和容器本身。这将并发调用 reap_object() 最多 sqrt(self.concurrency) 次,用于容器中的对象。

如果删除单个对象时发生任何异常,该过程将继续进行容器中的其他对象,并且失败的对象将在下次使用相同参数调用此函数时再次尝试。

如果列出要删除的对象时发生任何异常,该过程将停止(但显然会在下次使用相同参数调用此函数时再次尝试)。这是一种可能性,因为列表是通过查询仅主要远程容器服务器获得的。

在尝试删除所有对象后,将尝试通过向所有容器节点发送删除请求来删除容器本身。删除请求的格式如下:每个容器服务器将更新相应的帐户服务器,从帐户的列表中删除该容器。

此函数不返回任何内容,也不应引发任何异常,而应仅更新各种 self.stats_* 值以反映发生的情况。

参数:
  • account – 容器的帐户名称。

  • account_partition – 帐户环上的帐户分区。

  • account_nodes – 帐户的主节点字典。

  • container – 要删除的容器的名称。

  • 参见:swift.common.ring.Ring.get_nodes(),了解帐户节点字典的说明。

reap_device(device)

针对服务器上的每个设备,每轮调用一次。这将扫描设备的帐户目录,查找该设备是主设备的分区,然后查找标记为 status=DELETED 并且仍然具有容器的帐户数据库,并调用 reap_account()。标记为 status=DELETED 且不再具有容器的帐户数据库最终将由帐户复制器内的回收过程永久删除(参见 swift.db_replicator)。

参数:

device – 要查找要删除的帐户的设备。

reap_object(account, container, container_partition, container_nodes, obj, policy_index)

通过向对象的每个节点发出删除请求来删除给定的对象。删除请求的格式如下:每个对象服务器将更新相应的容器服务器,从容器的列表中删除该对象。

此函数不返回任何内容,也不应引发任何异常,而应仅更新各种 self.stats_* 值以反映发生的情况。

参数:
  • account – 对象的帐户名称。

  • container – 对象的容器名称。

  • container_partition – 容器环上的容器分区。

  • container_nodes – 容器的主节点字典。

  • obj – 要删除的对象名称。

  • policy_index – 对象的容器的存储策略索引

  • 参见:swift.common.ring.Ring.get_nodes(),了解容器节点字典的说明。

reset_stats()
run_forever(*args, **kwargs)

以正常守护程序模式运行回收器时的主要入口点。

此函数会重复调用 run_once(),频率不低于配置间隔。

run_once(*args, **kwargs)

以“一次”模式运行回收器时的主要入口点,它将对服务器上的所有帐户进行一次扫描。此函数由 run_forever() 重复调用。此函数将针对服务器上的每个设备调用 reap_device() 一次。

swift.account.reaper.main()

帐户服务器

class swift.account.server.AccountController(conf, logger=None)

基类:BaseStorageServer

帐户服务器的 WSGI 控制器。

DELETE(req)

处理 HTTP DELETE 请求。

GET(req)

处理 HTTP GET 请求。

HEAD(req)

处理 HTTP HEAD 请求。

POST(req)

处理 HTTP POST 请求。

PUT(req)

处理 HTTP PUT 请求。

REPLICATE(req)

处理 HTTP REPLICATE 请求。帐户复制的 RPC 调用处理程序。

check_free_space(drive)
server_type = 'account-server'
swift.account.server.app_factory(global_conf, **local_conf)

用于创建 WSGI 帐户服务器应用程序的 paste.deploy 应用程序工厂

swift.account.server.get_account_name_and_placement(req)

拆分并验证帐户的路径。

参数:

req – swob 请求

返回值:

路径部分作为字符串的元组

swift.account.server.get_container_name_and_placement(req)

拆分并验证容器的路径。

参数:

req – swob 请求

返回值:

路径部分作为字符串的元组

swift.account.server.main()