《Openstack Swift》第一章到第三章的读书笔记

每个对象(只要不超过尺寸最大限制,默认5G)会被以单一文件的格式存储在本地。如果过大了,则分成若干段存储,信息己在manifest文件中。
Each object is stored as a single file on disk unless its size exceeds the maximum
file size configured for the Swift cluster.
If an object to be stored is very large, it is divided into
several segments and stored with a manifest to allow reassembly later.

Replicator进程: 只把本地数据推送到远端,而不把远端数据拉回本地
It should be noted that the replicators are only pushing their
local data out to remote nodes; they do not pull remote copies in if their local data
is missing or out of date

三种一致性哈希算法
simplified version of a consistent hashing ring: only one marker per drive. 简化版
In practice: there are multiple markers placed around the circle for each drive 实际版本
The Rings: Modified Consistent Hashing Ring 修改版本

修改后的版本,每个区间(range)大小相同,并且数量固定
Modified Consistent Hashing Ring: Although the ring is still divided up into numerous small hash ranges, these ranges are all the same size and will not change in number.

One account ring will be generated for a cluster and be used to determine where the account data is located. 一个cluster一个account ring
One container ring will be generated for a cluster and used to determine where the container data is located. 一个cluster 一个 container ring
One object storage policy ring will be created for each storage policy in use and used to determine where object data is located. 一个storage policy 一个 object ring

尽管磁盘的数量会发生变化,分区的数量不会改变
Although the number of drives might change in a cluster, the number of partitions will not.

副本数量,可能为小数。例如 3.15,是说15%的磁盘驱动器上会有第四个副本
Replica count
In the less common instance where a non-integer replica count is used, a percentage of the partitions will have one additional replica; for instance, a 3.15 replica count means that 15% of the drives will have one extra replica for a total of four

Unique-as-possible算法: 选择最少使用的region,zone,server,甚至是disk来放置partition。 还包括将相同副本放置的尽量远
Unique-as-possible: The algorithm identifies the least-used region, then zone, then server
(IP:port), and then, if necessary, the least-used disk, and then places the partition
there. The “least-used” formula also attempts to place the partition replicas as far
from each other as possible.

Account,container 和object ring文件相互独立,可以只在account 和 container builder中添加新的磁盘,而不给object 添加
it is possible to add some drives to the account and container builder files but not the object files.

Ring 文件的格式
Inside the Rings
Devices list: 设备列表
Devices lookup table: This table contains one row per replica and one column per partition in the cluster. Typically it is three rows by thousands of columns
The ring-builder
calculates the optimal drive to place each partition replica on using the drive weights
and the unique-as-possible placement algorithm. It then records the drive in the
table.
设备查找表:
N行,n=replica 数目
M列,m=partition 数目。
在这里插入图片描述

内容用来查找数据的位置。
首先,计算要查找数据的哈希值,根据哈希值找到对应的partition,接下来在每一列中查找每个副本的设备信息,
使用该信息,在设备列表中进行二次查询,找到数据在哪块磁盘上的位置。
These internal structures are what get called upon by any Swift process seeking to learn
where its data is located. The Swift process will calculate the hash of the data that it is
seeking. This hash value will then get mapped to a partition, which can be looked up in
the partition column on the devices lookup table. The calling process will check each
replica row at that specific column to see what drives the data is on. It then makes a
second set of searches to the devices list to get the information it needs about those
drives. From there, the process can call on all the data locations.

使用 pickle 打开ring file
$ python

import pickle
print pickle.load(open(‘object.builder’))
{‘devs’: [{‘replication_port’: 6000, ‘zone’: 1, ‘weight’: 70.0, ‘ip’: ‘192.168.111.162’, ‘region’: 1, ‘id’: 0, ‘replication_ip’: ‘192.168.111.162’, ‘parts’: 1024, ‘meta’: ‘’, ‘device’: ‘sdb’, ‘parts_wanted’: 0, ‘port’: 6000}, {‘replication_port’: 6000, ‘zone’: 3, ‘weight’: 45.0, ‘ip’: ‘192.168.111.164’, ‘region’: 1, ‘port’: 6000, ‘replication_ip’: ‘192.168.111.164’, ‘parts’: 801, ‘meta’: ‘’, ‘device’: ‘sdb’, ‘parts_wanted’: 0, ‘id’: 1}, {‘replication_port’: 6000, ‘zone’: 4, ‘weight’: 30.0, ‘ip’: ‘192.168.111.167’, ‘region’: 1, ‘id’: 2, ‘replication_ip’: ‘192.168.111.167’, ‘parts’: 535, ‘meta’: ‘’, ‘device’: ‘sdb’, ‘parts_wanted’: 0, ‘port’: 6000}, {‘replication_port’: 6000, ‘zone’: 2, ‘weight’: 40.0, ‘ip’: ‘192.168.111.163’, ‘region’: 1, ‘port’: 6000, ‘replication_ip’: ‘192.168.111.163’, ‘parts’: 712, ‘meta’: ‘’, ‘device’: ‘sdb’, ‘parts_wanted’: 0, ‘id’: 3}], ‘_replica2part2dev’: [array(‘H’, [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0]), array(‘H’, [1, 1, 1, 1, 1, 3, 1, 1, 3, 3, 1, 2, 2, 1, 1, 2, 1, 1, 1, 1, 1, 2, 1, 3, 1, 2, 3, 3, 1, 1, 3, 3, 1, 1, 3, 1, 3, 1, 3, 3, 1, 1, 1, 1, 2, 1, 1, 2, 3, 1, 1, 1, 1, 1, 1, 3, 1, 2, 2, 3, 2, 1, 1, 2, 3, 1, 2, 1, 1, 1, 1, 1, 3, 2, 3, 1, 3, 3, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 3, 1, 1, 1, 1, 1, 2, 2, 2, 3, 2, 1, 1, 2, 1, 1, 1, 1, 2, 2, 3, 2, 1, 1, 1, 3, 2, 3, 1, 1, 3, 1, 3, 2, 1, 1, 1, 1, 1, 3, 3, 1, 1, 1, 1, 3, 1, 1, 3, 1, 1, 2, 3, 2, 3, 1, 1, 1, 3, 3, 1, 1, 1, 1, 1, 2, 3, 3, 3, 3, 1, 1, 1, 3, 1, 2, 1, 1, 2, 1, 1, 2, 1, 2, 1, 1, 1, 3, 1, 2, 3, 3, 3, 1, 3, 2, 1, 1, 1, 1, 2, 1, 3, 2, 2, 3, 3, 1, 1, 3, 2, 1, 3, 1, 1, 1, 2, 3, 2, 3, 1, 1, 2, 1, 3, 1, 2, 2, 1, 1, 2, 3, 1, 3, 1, 1, 1, 1, 2, 3, 1, 1, 2, 1, 2, 3, 2, 2, 3, 1, 1, 3, 1, 3, 1, 1, 1, 1, 2, 1, 3, 1, 1, 1, 1, 3, 1, 2, 2, 1, 1, 1, 3, 2, 1, 3, 1, 3, 2, 1, 3, 1, 1, 1, 1, 1, 1, 2, 2, 3, 3, 1, 3, 2, 3, 1, 3, 3, 3, 1, 2, 2, 2, 3, 2, 3, 1, 3, 1, 3, 1, 1, 1, 1, 1, 1, 1, 2, 1, 2, 3, 3, 3, 2, 3, 1, 2, 1, 1, 3, 1, 1, 1, 1, 1, 2, 3, 1, 1, 1, 1, 1, 1, 3, 1, 3, 2, 2, 1, 1, 2, 2, 1, 1, 1, 1, 3, 2, 1, 2, 2, 1, 1, 1, 2, 1, 2, 1, 2, 1, 3, 1, 1, 1, 3, 1, 1, 1, 1, 1, 1, 1, 2, 3, 2, 3, 1, 1, 1, 1, 1, 1, 2, 1, 3, 1, 1, 1, 1, 1, 1, 3, 1, 2, 1, 3, 2, 3, 1, 3, 1, 1, 1, 1, 1, 2, 1, 3, 1, 2, 1, 2, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 2, 3, 3, 2, 3, 1, 1, 3, 1, 1, 1, 1, 3, 1, 2, 2, 1, 1, 2, 1, 1, 1, 2, 3, 2, 1, 1, 3, 2, 1, 1, 1, 3, 1, 3, 1, 2, 1, 2, 2, 1, 1, 1, 2, 1, 1, 2, 2, 1, 1, 1, 1, 3, 1, 2, 3, 1, 1, 3, 2, 2, 1, 2, 1, 1, 3, 1, 1, 1, 3, 1, 3, 2, 1, 2, 3, 1, 1, 3, 1, 1, 1, 1, 3, 1, 2, 1, 1, 1, 1, 3, 2, 2, 1, 3, 1, 2, 2, 1, 3, 1, 1, 2, 2, 2, 1, 1, 2, 1, 1, 1, 1, 1, 3, 1, 2, 1, 1, 1, 1, 2, 1, 3, 1, 1, 3, 2, 1, 2, 1, 3, 1, 3, 1, 2, 1, 2, 1, 1, 3, 1, 1, 3, 2, 3, 3, 2, 1, 1, 1, 3, 2, 1, 3, 1, 3, 1, 1, 1, 2, 3, 1, 3, 1, 2, 2, 2, 1, 2, 2, 1, 1, 1, 2, 2, 1, 1, 1, 1, 1, 3, 3, 1, 1, 1, 1, 3, 1, 1, 2, 2, 3, 1, 3, 3, 1, 3, 3, 3, 2, 1, 2, 1, 3, 1, 1, 1, 1, 3, 1, 2, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 2, 1, 1, 2, 3, 2, 1, 1, 3, 1, 1, 2, 1, 2, 2, 2, 1, 2, 1, 1, 3, 1, 1, 1, 3, 3, 1, 1, 3, 1, 1, 1, 2, 2, 1, 1, 2, 1, 2, 3, 3, 1, 1, 3, 2, 1, 1, 1, 2, 2, 2, 1, 1, 1, 1, 3, 1, 1, 1, 3, 2, 1, 3, 1, 2, 3, 3, 3, 1, 1, 1, 2, 1, 1, 3, 1, 1, 3, 1, 3, 3, 1, 2, 1, 3, 1, 1, 3, 1, 1, 1, 3, 1, 1, 2, 2, 1, 3, 1, 1, 2, 1, 2, 3, 1, 3, 1, 1, 2, 1, 3, 2, 1, 3, 3, 2, 3, 3, 1, 2, 1, 2, 3, 3, 1, 2, 1, 3, 2, 1, 3, 3, 3, 3, 1, 3, 1, 1, 3, 3, 1, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 2, 3, 3, 1, 1, 2, 1, 3, 1, 1, 2, 3, 1, 1, 1, 1, 3, 1, 1, 2, 1, 2, 2, 1, 1, 2, 3, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 1, 3, 2, 1, 2, 1, 1, 1, 2, 3, 1, 3, 1, 2, 2, 1, 1, 2, 2, 1, 1, 3, 1, 1, 2, 1, 2, 1, 3, 3, 1, 1, 1, 1, 2, 2, 1, 1, 1, 1, 1, 1, 2, 1, 1, 2, 3, 3, 1, 2, 1, 1, 1, 1, 3, 1, 1, 3, 3, 2, 3, 2, 1, 2, 3, 2, 3, 1, 3, 1, 1, 1, 1, 3, 1, 1, 2, 1, 1, 3, 1, 1, 1, 2, 2, 2, 1, 2, 3, 1, 1, 1, 1, 1, 1, 1, 1, 3, 1, 3, 3, 2, 2, 2, 2, 1, 2, 2, 1, 2, 2, 2, 3, 2, 1, 1, 1, 3, 1, 3, 1, 2, 3, 1, 2, 2, 1, 1, 1, 2, 3, 1, 2, 2, 1, 1, 1, 3, 3, 1, 1, 1, 1, 2, 1, 1, 3, 1, 1, 1, 1, 1, 2, 1, 3, 1, 1, 1, 3, 1, 1, 1, 1, 2, 1, 3, 1, 1, 1, 1, 1, 1, 3, 1, 1, 1, 3, 2, 1, 0, 1, 2, 2]), array(‘H’, [2, 3, 2, 3, 2, 1, 3, 2, 1, 1, 3, 3, 3, 2, 3, 3, 3, 2, 2, 2, 3, 3, 3, 1, 3, 3, 1, 1, 2, 2, 1, 1, 2, 2, 1, 2, 1, 2, 1, 1, 2, 3, 2, 3, 3, 2, 2, 3, 1, 2, 2, 3, 2, 3, 3, 1, 3, 3, 3, 1, 3, 3, 3, 3, 1, 3, 3, 3, 2, 2, 3, 3, 1, 3, 1, 3, 1, 1, 3, 3, 3, 3, 2, 2, 3, 2, 2, 3, 3, 2, 3, 3, 1, 2, 2, 3, 3, 2, 3, 3, 3, 1, 3, 3, 3, 3, 3, 3, 2, 2, 3, 3, 1, 3, 3, 2, 3, 1, 3, 1, 3, 3, 1, 3, 1, 3, 2, 3, 3, 3, 3, 1, 1, 3, 3, 2, 3, 1, 3, 3, 1, 2, 2, 3, 1, 3, 1, 2, 2, 2, 1, 1, 2, 2, 3, 3, 2, 3, 1, 1, 1, 1, 2, 3, 2, 1, 2, 3, 3, 3, 3, 2, 3, 3, 2, 3, 2, 2, 2, 1, 3, 3, 1, 1, 1, 3, 1, 3, 3, 2, 3, 3, 3, 2, 1, 3, 3, 1, 1, 2, 3, 1, 3, 2, 1, 2, 3, 2, 3, 1, 3, 1, 2, 2, 3, 3, 1, 3, 3, 3, 3, 3, 3, 1, 2, 1, 2, 2, 3, 2, 3, 1, 2, 3, 3, 2, 3, 1, 3, 3, 1, 2, 2, 1, 2, 1, 2, 3, 2, 3, 3, 3, 1, 3, 3, 2, 3, 1, 2, 3, 3, 2, 3, 2, 1, 3, 2, 1, 3, 1, 3, 2, 1, 2, 2, 2, 2, 2, 2, 3, 3, 1, 1, 2, 1, 3, 1, 3, 1, 1, 1, 2, 3, 3, 3, 1, 3, 1, 2, 1, 3, 1, 3, 3, 3, 2, 2, 2, 3, 3, 3, 3, 1, 1, 1, 3, 1, 3, 3, 3, 2, 1, 2, 3, 2, 3, 2, 3, 1, 2, 2, 2, 3, 3, 3, 1, 3, 1, 3, 3, 3, 3, 3, 3, 3, 2, 3, 3, 1, 3, 3, 3, 3, 2, 3, 2, 3, 3, 3, 3, 3, 2, 1, 3, 2, 3, 1, 3, 3, 2, 3, 3, 2, 2, 3, 1, 3, 1, 3, 2, 3, 2, 2, 2, 3, 2, 1, 3, 3, 3, 3, 2, 2, 1, 3, 3, 3, 1, 3, 1, 3, 1, 2, 2, 2, 2, 2, 3, 3, 1, 2, 3, 3, 3, 2, 3, 2, 2, 2, 3, 3, 3, 2, 2, 3, 3, 1, 1, 3, 1, 3, 3, 1, 2, 2, 3, 2, 1, 2, 3, 3, 3, 2, 3, 3, 2, 3, 3, 1, 3, 2, 3, 1, 3, 2, 2, 3, 1, 2, 1, 3, 3, 3, 3, 3, 2, 2, 2, 3, 3, 3, 3, 3, 2, 2, 3, 3, 1, 2, 3, 1, 2, 2, 1, 3, 3, 3, 3, 2, 2, 1, 2, 2, 3, 1, 3, 1, 3, 3, 3, 1, 2, 3, 1, 2, 2, 3, 3, 1, 2, 3, 2, 2, 3, 3, 1, 3, 3, 2, 1, 2, 3, 3, 2, 1, 2, 2, 3, 3, 3, 3, 2, 3, 2, 3, 2, 3, 3, 1, 2, 3, 2, 3, 3, 2, 3, 3, 1, 2, 3, 1, 3, 2, 3, 2, 1, 3, 1, 2, 3, 3, 3, 3, 3, 1, 3, 3, 1, 3, 1, 1, 3, 2, 2, 3, 1, 3, 2, 1, 2, 1, 2, 3, 2, 3, 1, 3, 1, 3, 3, 3, 3, 2, 3, 3, 2, 3, 3, 3, 3, 2, 2, 2, 2, 3, 1, 1, 2, 3, 2, 2, 1, 2, 3, 3, 3, 1, 2, 1, 1, 2, 1, 1, 1, 3, 3, 3, 2, 1, 3, 2, 2, 2, 1, 2, 3, 3, 2, 2, 2, 3, 2, 2, 2, 2, 3, 3, 2, 3, 3, 1, 3, 3, 2, 1, 2, 2, 3, 3, 3, 3, 3, 2, 3, 3, 2, 1, 3, 3, 2, 1, 1, 2, 3, 1, 2, 3, 3, 3, 3, 2, 3, 3, 2, 3, 1, 1, 3, 2, 1, 3, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 1, 2, 2, 3, 1, 3, 2, 1, 3, 3, 1, 1, 1, 3, 2, 2, 3, 2, 2, 1, 3, 3, 1, 3, 1, 1, 2, 3, 2, 1, 2, 2, 1, 2, 3, 3, 1, 2, 2, 3, 3, 2, 1, 3, 2, 3, 2, 3, 1, 3, 1, 3, 3, 3, 2, 1, 3, 2, 1, 1, 3, 1, 1, 3, 3, 2, 3, 1, 1, 2, 3, 2, 1, 3, 2, 1, 1, 1, 1, 3, 1, 3, 3, 1, 1, 2, 1, 3, 2, 3, 2, 3, 3, 2, 3, 3, 2, 3, 2, 3, 3, 2, 3, 3, 1, 1, 2, 2, 3, 2, 1, 2, 3, 3, 1, 2, 3, 3, 2, 1, 2, 2, 3, 2, 3, 3, 3, 3, 3, 1, 3, 2, 3, 3, 3, 2, 3, 2, 3, 3, 3, 1, 3, 2, 3, 2, 2, 2, 3, 1, 3, 1, 3, 3, 3, 3, 2, 3, 3, 3, 2, 1, 2, 2, 3, 2, 3, 2, 1, 1, 2, 2, 3, 2, 3, 3, 2, 3, 3, 3, 2, 3, 3, 0, 3, 3, 1, 1, 2, 3, 3, 3, 2, 2, 1, 2, 3, 1, 1, 3, 1, 3, 2, 3, 1, 3, 1, 3, 1, 2, 3, 2, 3, 1, 2, 2, 3, 3, 3, 1, 2, 3, 2, 3, 3, 3, 2, 3, 1, 3, 2, 2, 3, 3, 3, 3, 2, 1, 3, 1, 1, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 1, 3, 2, 3, 2, 1, 2, 1, 3, 3, 1, 3, 3, 3, 2, 2, 2, 3, 1, 2, 3, 3, 2, 2, 2, 1, 1, 2, 2, 2, 2, 3, 3, 2, 1, 3, 2, 3, 3, 2, 3, 3, 1, 3, 2, 2, 1, 2, 2, 2, 2, 3, 2, 1, 3, 3, 3, 3, 2, 2, 1, 3, 2, 2, 1, 3, 2, 2, 2, 3, 3])], ‘replicas’: 3.0, ‘next_part_power’: None, ‘_dispersion_graph’: {(1, 2): [312, 712, 0, 0], (1, 3, ‘192.168.111.164’): [223, 801, 0, 0], (1, 3): [223, 801, 0, 0], (1,): [0, 0, 0, 1024], (1, 1, ‘192.168.111.162’): [0, 1024, 0, 0], (1, 4): [489, 535, 0, 0], (1, 1, ‘192.168.111.162’, 0): [0, 1024, 0, 0], (1, 4, ‘192.168.111.167’, 2): [489, 535, 0, 0], (1, 3, ‘192.168.111.164’, 1): [223, 801, 0, 0], (1, 2, ‘192.168.111.163’, 3): [312, 712, 0, 0], (1, 4, ‘192.168.111.167’): [489, 535, 0, 0], (1, 2, ‘192.168.111.163’): [312, 712, 0, 0], (1, 1): [0, 1024, 0, 0]}, ‘min_part_hours’: 1, ‘_last_part_gather_start’: 418, ‘parts’: 1024, ‘overload’: 0.0, ‘part_power’: 10, ‘dispersion’: 0.0, ‘devs_changed’: False, ‘version’: 5, ‘_last_part_moves_epoch’: 1541404124, ‘_last_part_moves’: array(‘B’, [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]), ‘id’: ‘57670786b087492490c228716a3b36e4’, ‘_remove_devs’: []}

list1 = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0]
len(list1)
1024

第一部分,第四章 Swift Basics
Swift 的请求/应答,认证,还有一些常用的http的工具。
此处没有仔细阅读,因此没有相关笔记。

第二部分是关于怎么利用Swift进行开发的,还没有来得及仔细阅读,笔记稍后奉上。

下一章 第三部分,第9章,Installing Openstack Swift from Source 的读书笔记

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值