swift.container.auditor.
ContainerAuditor
(conf, logger=None)¶Bases: swift.common.daemon.Daemon
Audit containers.
container_audit
(path)¶Audits the given container path
Parameters: | path – the path to a container db |
---|
run_forever
(*args, **kwargs)¶Run the container audit until stopped.
run_once
(*args, **kwargs)¶Run the container audit once.
swift.container.auditor.
random
() → x in the interval [0, 1).¶Pluggable Back-ends for Container Server
swift.container.backend.
ContainerBroker
(db_file, timeout=25, logger=None, account=None, container=None, pending_timeout=None, stale_reads_ok=False, skip_commits=False, force_db_file=False)¶Bases: swift.common.db.DatabaseBroker
Encapsulates working with a container database.
Note that this may involve multiple on-disk DB files if the container becomes sharded:
_db_file
is the path to the legacy container DB name, i.e.<hash>.db
. This file should exist for an initialised broker that has never been sharded, but will not exist once a container has been sharded.db_files
is a list of existing db files for the broker. This list should have at least one entry for an initialised broker, and should have two entries while a broker is in SHARDING state.db_file
is the path to whichever db is currently authoritative for the container. Depending on the container’s state, this may not be the same as thedb_file
argument given to__init__()
, unlessforce_db_file
is True in which casedb_file
is always equal to thedb_file
argument given to__init__()
.pending_file
is always equal to_db_file
extended with.pending
, i.e.<hash>.db.pending
.
create_broker
(device_path, part, account, container, logger=None, epoch=None, put_timestamp=None, storage_policy_index=None)¶Create a ContainerBroker instance. If the db doesn’t exist, initialize the db file.
Parameters: |
|
---|---|
Returns: | a |
create_container_info_table
(conn, put_timestamp, storage_policy_index)¶Create the container_info table which is specific to the container DB. Not a part of Pluggable Back-ends, internal to the baseline code. Also creates the container_stat view.
Parameters: |
|
---|
create_object_table
(conn)¶Create the object table which is specific to the container DB. Not a part of Pluggable Back-ends, internal to the baseline code.
Parameters: | conn – DB connection object |
---|
create_policy_stat_table
(conn, storage_policy_index=0)¶Create policy_stat table.
Parameters: |
|
---|
create_shard_range_table
(conn)¶Create the shard_range table which is specific to the container DB.
Parameters: | conn – DB connection object |
---|
db_contains_type
= 'object'¶db_epoch
¶db_file
¶Get the path to the primary db file for this broker. This is typically
the db file for the most recent sharding epoch. However, if no db files
exist on disk, or if force_db_file
was True when the broker was
constructed, then the primary db file is the file passed to the broker
constructor.
Returns: | A path to a db file; the file does not necessarily exist. |
---|
db_files
¶Gets the cached list of valid db files that exist on disk for this broker.
reload_db_files()
.Returns: | A list of paths to db files ordered by ascending epoch; the list may be empty. |
---|
db_reclaim_timestamp
= 'created_at'¶db_type
= 'container'¶delete_object
(name, timestamp, storage_policy_index=0)¶Mark an object deleted.
Parameters: |
|
---|
empty
()¶Check if container DB is empty.
This method uses more stringent checks on object count than
is_deleted()
: this method checks that there are no objects in any
policy; if the container is in the process of sharding then both fresh
and retiring databases are checked to be empty; if a root container has
shard ranges then they are checked to be empty.
Returns: | True if the database has no active objects, False otherwise |
---|
enable_sharding
(epoch)¶Updates this broker’s own shard range with the given epoch, sets its state to SHARDING and persists it in the DB.
Parameters: | epoch – a Timestamp |
---|---|
Returns: | the broker’s updated own shard range. |
find_shard_ranges
(shard_size, limit=-1, existing_ranges=None)¶Scans the container db for shard ranges. Scanning will start at the
upper bound of the any existing_ranges
that are given, otherwise
at ShardRange.MIN
. Scanning will stop when limit
shard ranges
have been found or when no more shard ranges can be found. In the
latter case, the upper bound of the final shard range will be equal to
the upper bound of the container namespace.
This method does not modify the state of the db; callers are responsible for persisting any shard range data in the db.
Parameters: |
|
---|---|
Returns: | a tuple; the first value in the tuple is a list of dicts each having keys {‘index’, ‘lower’, ‘upper’, ‘object_count’} in order of ascending ‘upper’; the second value in the tuple is a boolean which is True if the last shard range has been found, False otherwise. |
get_all_shard_range_data
()¶Returns a list of all shard range data, including own shard range and deleted shard ranges.
Returns: | A list of dict representations of a ShardRange. |
---|
get_brokers
()¶Return a list of brokers for component dbs. The list has two entries
while the db state is sharding: the first entry is a broker for the
retiring db with skip_commits
set to True
; the second entry is
a broker for the fresh db with skip_commits
set to False
. For
any other db state the list has one entry.
Returns: | a list of ContainerBroker |
---|
get_db_state
()¶Returns the current state of on disk db files.
get_db_version
(conn)¶get_info
()¶Get global data for the container.
Returns: | dict with keys: account, container, created_at, put_timestamp, delete_timestamp, status_changed_at, object_count, bytes_used, reported_put_timestamp, reported_delete_timestamp, reported_object_count, reported_bytes_used, hash, id, x_container_sync_point1, x_container_sync_point2, and storage_policy_index, db_state. |
---|
get_info_is_deleted
()¶Get the is_deleted status and info for the container.
Returns: | a tuple, in the form (info, is_deleted) info is a dict as returned by get_info and is_deleted is a boolean. |
---|
get_misplaced_since
(start, count)¶Get a list of objects which are in a storage policy different from the container’s storage policy.
Parameters: |
|
---|---|
Returns: | list of dicts with keys: name, created_at, size, content_type, etag, storage_policy_index |
get_objects
(limit=None, marker='', end_marker='', include_deleted=None, since_row=None)¶Returns a list of objects, including deleted objects, in all policies. Each object in the list is described by a dict with keys {‘name’, ‘created_at’, ‘size’, ‘content_type’, ‘etag’, ‘deleted’, ‘storage_policy_index’}.
Parameters: |
|
---|---|
Returns: | a list of dicts, each describing an object. |
get_own_shard_range
(no_default=False)¶Returns a shard range representing this broker’s own shard range. If no such range has been persisted in the broker’s shard ranges table then a default shard range representing the entire namespace will be returned.
The returned shard range will be updated with the current object stats for this broker and a meta timestamp set to the current time. For these values to be persisted the caller must merge the shard range.
Parameters: | no_default – if True and the broker’s own shard range is not found in the shard ranges table then None is returned, otherwise a default shard range is returned. |
---|---|
Returns: | an instance of ShardRange |
get_policy_stats
()¶get_reconciler_sync
()¶get_replication_info
()¶Get information about the DB required for replication.
Returns: | dict containing keys from get_info plus max_row and metadata |
---|
get_shard_ranges
(marker=None, end_marker=None, includes=None, reverse=False, include_deleted=False, states=None, include_own=False, exclude_others=False, fill_gaps=False)¶Returns a list of persisted shard ranges.
Parameters: |
|
---|---|
Returns: | a list of instances of |
get_shard_usage
()¶Get the aggregate object stats for all shard ranges in states ACTIVE, SHARDING or SHRINKING.
Returns: | a dict with keys {bytes_used, object_count} |
---|
get_sharding_sysmeta
(key=None)¶Returns sharding specific info from the broker’s metadata.
Parameters: | key – if given the value stored under key in the sharding
info will be returned. |
---|---|
Returns: | either a dict of sharding info or the value stored under
key in that dict. |
get_sharding_sysmeta_with_timestamps
()¶Returns sharding specific info from the broker’s metadata with timestamps.
Parameters: | key – if given the value stored under key in the sharding
info will be returned. |
---|---|
Returns: | a dict of sharding info with their timestamps. |
has_multiple_policies
()¶is_own_shard_range
(shard_range)¶is_reclaimable
(now, reclaim_age)¶Check if the broker abstraction is empty, and has been marked deleted for at least a reclaim age.
is_root_container
()¶Returns True if this container is a root container, False otherwise.
A root container is a container that is not a shard of another container.
is_sharded
()¶list_objects_iter
(limit, marker, end_marker, prefix, delimiter, path=None, storage_policy_index=0, reverse=False, include_deleted=False, since_row=None, transform_func=None, all_policies=False)¶Get a list of objects sorted by name starting at marker onward, up to limit entries. Entries will begin with the prefix and will not have the delimiter after the prefix.
Parameters: |
|
---|---|
Returns: | list of tuples of (name, created_at, size, content_type, etag, deleted) |
make_tuple_for_pickle
(record)¶Turn this db record dict into the format this service uses for pending pickles.
merge_items
(item_list, source=None)¶Merge items into the object table.
Parameters: |
|
---|
merge_shard_ranges
(shard_ranges)¶Merge shard ranges into the shard range table.
Parameters: | shard_ranges – a shard range or a list of shard ranges; each
shard range should be an instance of
ShardRange or a dict representation of
a shard range having SHARD_RANGE_KEYS . |
---|
path
¶put_object
(name, timestamp, size, content_type, etag, deleted=0, storage_policy_index=0, ctype_timestamp=None, meta_timestamp=None)¶Creates an object in the DB with its metadata.
Parameters: |
|
---|
reload_db_files
()¶Reloads the cached list of valid on disk db files for this broker.
remove_objects
(lower, upper, max_row=None)¶Removes object records in the given namespace range from the object table.
Note that objects are removed regardless of their storage_policy_index.
Parameters: |
|
---|
reported
(put_timestamp, delete_timestamp, object_count, bytes_used)¶Update reported stats, available with container’s get_info.
Parameters: |
|
---|
resolve_shard_range_states
(states)¶Given a list of values each of which may be the name of a state, the number of a state, or an alias, return the set of state numbers described by the list.
The following alias values are supported: ‘listing’ maps to all states that are considered valid when listing objects; ‘updating’ maps to all states that are considered valid for redirecting an object update.
Parameters: | states – a list of values each of which may be the name of a state, the number of a state, or an alias |
---|---|
Returns: | a set of integer state numbers, or None if no states are given |
Raises: | ValueError – if any value in the given list is neither a valid state nor a valid alias |
root_account
¶root_container
¶root_path
¶set_sharded_state
()¶Unlink’s the broker’s retiring DB file.
Returns: | True if the retiring DB was successfully unlinked, False otherwise. |
---|
set_sharding_state
()¶Creates and initializes a fresh DB file in preparation for sharding a retiring DB. The broker’s own shard range must have an epoch timestamp for this method to succeed.
Returns: | True if the fresh DB was successfully created, False otherwise. |
---|
set_sharding_sysmeta
(key, value)¶Updates the broker’s metadata metadata stored under the given key prefixed with a sharding specific namespace.
Parameters: |
|
---|
set_storage_policy_index
(policy_index, timestamp=None)¶Update the container_stat policy_index and status_changed_at.
set_x_container_sync_points
(sync_point1, sync_point2)¶sharding_initiated
()¶Returns True if a broker has shard range state that would be necessary for sharding to have been initiated, False otherwise.
sharding_required
()¶Returns True if a broker has shard range state that would be necessary for sharding to have been initiated but has not yet completed sharding, False otherwise.
storage_policy_index
¶update_reconciler_sync
(point)¶swift.container.backend.
merge_shards
(shard_data, existing)¶Compares shard_data
with existing
and updates shard_data
with
any items of existing
that take precedence over the corresponding item
in shard_data
.
Parameters: |
|
---|---|
Returns: | True if |
swift.container.backend.
update_new_item_from_existing
(new_item, existing)¶Compare the data and meta related timestamps of a new object item with the timestamps of an existing object record, and update the new item with data and/or meta related attributes from the existing record if their timestamps are newer.
The multiple timestamps are encoded into a single string for storing in the ‘created_at’ column of the objects db table.
Parameters: |
|
---|---|
Returns: | True if any attributes of the new item dict were found to be newer than the existing and therefore not updated, otherwise False implying that the updated item is equal to the existing. |
swift.container.replicator.
ContainerReplicator
(conf, logger=None)¶Bases: swift.common.db_replicator.Replicator
brokerclass
¶cleanup_post_replicate
(broker, orig_info, responses)¶Cleanup non primary database from disk if needed.
Parameters: |
|
---|---|
Return success: | returns False if deletion of the database was attempted but unsuccessful, otherwise returns True. |
datadir
= 'containers'¶default_port
= 6201¶delete_db
(broker)¶Ensure that reconciler databases are only cleaned up at the end of the replication run.
dump_to_reconciler
(broker, point)¶Look for object rows for objects updates in the wrong storage policy
in broker with a ROWID
greater than the rowid given as point.
Parameters: |
|
---|---|
Returns: | the last successful enqueued rowid |
feed_reconciler
(container, item_list)¶Add queue entries for rows in item_list to the local reconciler container database.
Parameters: |
|
---|---|
Returns: | True if successfully enqueued |
find_local_handoff_for_part
(part)¶Look through devices in the ring for the first handoff device that was identified during job creation as available on this node.
Returns: | a node entry from the ring |
---|
get_reconciler_broker
(timestamp)¶Get a local instance of the reconciler container broker that is appropriate to enqueue the given timestamp.
Parameters: | timestamp – the timestamp of the row to be enqueued |
---|---|
Returns: | a local reconciler broker |
replicate_reconcilers
()¶Ensure any items merged to reconciler containers during replication are pushed out to correct nodes and any reconciler containers that do not belong on this node are removed.
report_up_to_date
(full_info)¶run_once
(*args, **kwargs)¶Run a replication pass once.
server_type
= 'container'¶swift.container.replicator.
ContainerReplicatorRpc
(root, datadir, broker_class, mount_check=True, logger=None)¶Bases: swift.common.db_replicator.ReplicatorRpc
get_shard_ranges
(broker, args)¶merge_shard_ranges
(broker, args)¶swift.container.server.
ContainerController
(conf, logger=None)¶Bases: swift.common.base_storage_server.BaseStorageServer
WSGI Controller for the container server.
DELETE
(*args, **kwargs)¶Handle HTTP DELETE request.
GET
(*args, **kwargs)¶Handle HTTP GET request.
The body of the response to a successful GET request contains a listing of either objects or shard ranges. The exact content of the listing is determined by a combination of request headers and query string parameters, as follows:
The type of the listing is determined by the
X-Backend-Record-Type
header. If this header has value shard
then the response body will be a list of shard ranges; if this header
has value auto
, and the container state is sharding
or
sharded
, then the listing will be a list of shard ranges;
otherwise the response body will be a list of objects.
Both shard range and object listings may be constrained to a name
range by the marker
and end_marker
query string parameters.
Object listings will only contain objects whose names are greater
than any marker
value and less than any end_marker
value.
Shard range listings will only contain shard ranges whose namespace
is greater than or includes any marker
value and is less than or
includes any end_marker
value.
Shard range listings may also be constrained by an includes
query
string parameter. If this parameter is present the listing will only
contain shard ranges whose namespace includes the value of the
parameter; any marker
or end_marker
parameters are ignored
The length of an object listing may be constrained by the limit
parameter. Object listings may also be constrained by prefix
,
delimiter
and path
query string parameters.
Shard range listings will include deleted shard ranges if and only if
the X-Backend-Include-Deleted
header value is one of
swift.common.utils.TRUE_VALUES
. Object listings never
include deleted objects.
Shard range listings may be constrained to include only shard ranges
whose state is specified by a query string states
parameter. If
present, the states
parameter should be a comma separated list of
either the string or integer representation of
STATES
.
Two alias values may be used in a states
parameter value:
listing
will cause the listing to include all shard ranges in a
state suitable for contributing to an object listing; updating
will cause the listing to include all shard ranges in a state
suitable to accept an object update.
If either of these aliases is used then the shard range listing will if necessary be extended with a synthesised ‘filler’ range in order to satisfy the requested name range when insufficient actual shard ranges are found. Any ‘filler’ shard range will cover the otherwise uncovered tail of the requested name range and will point back to the same container.
Listings are not normally returned from a deleted container. However,
the X-Backend-Override-Deleted
header may be used with a value in
swift.common.utils.TRUE_VALUES
to force a shard range
listing to be returned from a deleted container whose DB file still
exists.
Parameters: | req – an instance of swift.common.swob.Request |
---|---|
Returns: | an instance of swift.common.swob.Response |
HEAD
(*args, **kwargs)¶Handle HTTP HEAD request.
POST
(*args, **kwargs)¶Handle HTTP POST request.
PUT
(*args, **kwargs)¶Handle HTTP PUT request.
REPLICATE
(*args, **kwargs)¶Handle HTTP REPLICATE request (json-encoded RPC calls for replication.)
account_update
(req, account, container, broker)¶Update the account server(s) with latest container info.
Parameters: |
|
---|---|
Returns: | if all the account requests return a 404 error code, HTTPNotFound response object, if the account cannot be updated due to a malformed header, an HTTPBadRequest response object, otherwise None. |
allowed_sync_hosts
= None¶The list of hosts we’re allowed to send syncs to. This can be overridden by data in self.realms_conf
check_free_space
(drive)¶create_listing
(req, out_content_type, info, resp_headers, metadata, container_list, container)¶get_and_validate_policy_index
(req)¶Validate that the index supplied maps to a policy.
Returns: | policy index from request, or None if not present |
---|---|
Raises: | HTTPBadRequest – if the supplied index is bogus |
realms_conf
= None¶ContainerSyncCluster instance for validating sync-to values.
save_headers
= ['x-container-read', 'x-container-write', 'x-container-sync-key', 'x-container-sync-to']¶server_type
= 'container-server'¶update_data_record
(record)¶Perform any mutations to container listing records that are common to all serialization formats, and returns it as a dict.
Converts created time to iso timestamp. Replaces size with ‘swift_bytes’ content type parameter.
Params record: | object entry record |
---|---|
Returns: | modified record |
swift.container.server.
app_factory
(global_conf, **local_conf)¶paste.deploy app factory for creating WSGI container server apps
swift.container.server.
gen_resp_headers
(info, is_deleted=False)¶Convert container info dict to headers.
swift.container.reconciler.
ContainerReconciler
(conf)¶Bases: swift.common.daemon.Daemon
Move objects that are in the wrong storage policy.
ensure_object_in_right_location
(q_policy_index, account, container, obj, q_ts, path, container_policy_index, source_ts, source_obj_status, source_obj_info, source_obj_iter, **kwargs)¶Validate source object will satisfy the misplaced object queue entry and move to destination.
Parameters: |
|
---|
ensure_tombstone_in_right_location
(q_policy_index, account, container, obj, q_ts, path, container_policy_index, source_ts, **kwargs)¶Issue a DELETE request against the destination to match the misplaced DELETE against the source.
log_stats
(force=False)¶Dump stats to logger, noop when stats have been already been logged in the last minute.
pop_queue
(container, obj, q_ts, q_record)¶Issue a delete object request to the container for the misplaced object queue entry.
Parameters: |
|
---|
N.B. q_ts will normally be the same time as q_record except when an object was manually re-enqued.
reconcile
()¶Main entry point for processing misplaced objects.
Iterate over all queue entries and delegate to reconcile_object.
reconcile_object
(info)¶Process a possibly misplaced object write request. Determine correct destination storage policy by checking with primary containers. Check source and destination, copying or deleting into destination and cleaning up the source as needed.
This method wraps _reconcile_object for exception handling.
Parameters: | info – a queue entry dict |
---|---|
Returns: | True to indicate the request is fully processed successfully, otherwise False. |
run_forever
(*args, **kwargs)¶Override this to run forever
run_once
(*args, **kwargs)¶Process every entry in the queue.
stats_log
(metric, msg, *args, **kwargs)¶Update stats tracking for metric and emit log message.
throw_tombstones
(account, container, obj, timestamp, policy_index, path)¶Issue a delete object request to the given storage_policy.
Parameters: |
|
---|
swift.container.reconciler.
add_to_reconciler_queue
(container_ring, account, container, obj, obj_policy_index, obj_timestamp, op, force=False, conn_timeout=5, response_timeout=15)¶Add an object to the container reconciler’s queue. This will cause the container reconciler to move it from its current storage policy index to the correct storage policy index.
Parameters: |
|
---|---|
Returns: | .misplaced_object container name, False on failure. “Success” means a majority of containers got the update. |
swift.container.reconciler.
best_policy_index
(headers)¶swift.container.reconciler.
cmp_policy_info
(info, remote_info)¶You have to squint to see it, but the general strategy is just:
I tried cleaning it up for awhile, but settled on just writing a bunch of tests instead. Once you get an intuitive sense for the nuance here you can try and see there’s a better way to spell the boolean logic but it all ends up looking sorta hairy.
Returns: | -1 if info is correct, 1 if remote_info is better |
---|
swift.container.reconciler.
direct_delete_container_entry
(container_ring, account_name, container_name, object_name, headers=None)¶Talk directly to the primary container servers to delete a particular object listing. Does not talk to object servers; use this only when a container entry does not actually have a corresponding object.
swift.container.reconciler.
get_reconciler_container_name
(obj_timestamp)¶Get the name of a container into which a misplaced object should be enqueued. The name is the object’s last modified time rounded down to the nearest hour.
Parameters: | obj_timestamp – a string representation of the object’s ‘created_at’ time from it’s container db row. |
---|---|
Returns: | a container name |
swift.container.reconciler.
get_reconciler_content_type
(op)¶swift.container.reconciler.
get_reconciler_obj_name
(policy_index, account, container, obj)¶swift.container.reconciler.
get_row_to_q_entry_translator
(broker)¶swift.container.reconciler.
incorrect_policy_index
(info, remote_info)¶Compare remote_info to info and decide if the remote storage policy index should be used instead of ours.
swift.container.reconciler.
parse_raw_obj
(obj_info)¶Translate a reconciler container listing entry to a dictionary containing the parts of the misplaced object queue entry.
Parameters: | obj_info – an entry in an a container listing with the required keys: name, content_type, and hash |
---|---|
Returns: | a queue entry dict with the keys: q_policy_index, account, container, obj, q_op, q_ts, q_record, and path |
swift.container.reconciler.
slightly_later_timestamp
(ts, offset=1)¶swift.container.reconciler.
translate_container_headers_to_info
(headers)¶swift.container.sharder.
CleavingContext
(ref, cursor='', max_row=None, cleave_to_row=None, last_cleave_to_row=None, cleaving_done=False, misplaced_done=False, ranges_done=0, ranges_todo=0)¶Bases: object
cursor
¶delete
(broker)¶done
()¶load
(broker)¶Returns a context dict for tracking the progress of cleaving this broker’s retiring DB. The context is persisted in sysmeta using a key that is based off the retiring db id and max row. This form of key ensures that a cleaving context is only loaded for a db that matches the id and max row when the context was created; if a db is modified such that its max row changes then a different context, or no context, will be loaded.
Returns: | A dict to which cleave progress metadata may be added. The
dict initially has a key ref which should not be modified by
any caller. |
---|
load_all
(broker)¶Returns all cleaving contexts stored in the broker.
Parameters: | broker – |
---|---|
Returns: | list of tuples of (CleavingContext, timestamp) |
marker
¶reset
()¶start
()¶store
(broker)¶swift.container.sharder.
ContainerSharder
(conf, logger=None)¶Bases: swift.container.replicator.ContainerReplicator
Shards containers.
run_forever
(*args, **kwargs)¶Run the container sharder until stopped.
run_once
(*args, **kwargs)¶Run the container sharder once.
yield_objects
(broker, src_shard_range, since_row=None)¶Iterates through all objects in src_shard_range
in name order
yielding them in lists of up to CONTAINER_LISTING_LIMIT length.
Parameters: |
|
---|---|
Returns: | a generator of tuples of (list of objects, broker info dict) |
yield_objects_to_shard_range
(broker, src_shard_range, dest_shard_ranges)¶Iterates through all objects in src_shard_range
to place them in
destination shard ranges provided by the next_shard_range
function.
Yields tuples of (object list, destination shard range in which those
objects belong). Note that the same destination shard range may be
referenced in more than one yielded tuple.
Parameters: |
|
---|---|
Returns: | a generator of tuples of (object list, shard range, broker info dict) |
swift.container.sharder.
find_missing_ranges
(shard_ranges)¶Find any ranges in the entire object namespace that are not covered by any shard range in the given list.
Parameters: | shard_ranges – A list of ShardRange |
---|---|
Returns: | a list of missing ranges |
swift.container.sharder.
find_overlapping_ranges
(shard_ranges)¶Find all pairs of overlapping ranges in the given list.
Parameters: | shard_ranges – A list of ShardRange |
---|---|
Returns: | a set of tuples, each tuple containing ranges that overlap with each other. |
swift.container.sharder.
find_sharding_candidates
(broker, threshold, shard_ranges=None)¶swift.container.sharder.
find_shrinking_candidates
(broker, shrink_threshold, merge_size)¶swift.container.sharder.
is_sharding_candidate
(shard_range, threshold)¶swift.container.sharder.
make_shard_ranges
(broker, shard_data, shards_account_prefix)¶swift.container.sharder.
random
() → x in the interval [0, 1).¶swift.container.sharder.
sharding_enabled
(broker)¶swift.container.sync.
ContainerSync
(conf, container_ring=None, logger=None)¶Bases: swift.common.daemon.Daemon
Daemon to sync syncable containers.
This is done by scanning the local devices for container databases and checking for x-container-sync-to and x-container-sync-key metadata values. If they exist, newer rows since the last sync will trigger PUTs or DELETEs to the other container.
The actual syncing is slightly more complicated to make use of the three (or number-of-replicas) main nodes for a container without each trying to do the exact same work but also without missing work if one node happens to be down.
Two sync points are kept per container database. All rows between the two sync points trigger updates. Any rows newer than both sync points cause updates depending on the node’s position for the container (primary nodes do one third, etc. depending on the replica count of course). After a sync run, the first sync point is set to the newest ROWID known and the second sync point is set to newest ROWID for which all updates have been sent.
An example may help. Assume replica count is 3 and perfectly matching ROWIDs starting at 1.
First sync run, database has 6 rows:
- SyncPoint1 starts as -1.
- SyncPoint2 starts as -1.
- No rows between points, so no “all updates” rows.
- Six rows newer than SyncPoint1, so a third of the rows are sent by node 1, another third by node 2, remaining third by node 3.
- SyncPoint1 is set as 6 (the newest ROWID known).
- SyncPoint2 is left as -1 since no “all updates” rows were synced.
Next sync run, database has 12 rows:
- SyncPoint1 starts as 6.
- SyncPoint2 starts as -1.
- The rows between -1 and 6 all trigger updates (most of which should short-circuit on the remote end as having already been done).
- Six more rows newer than SyncPoint1, so a third of the rows are sent by node 1, another third by node 2, remaining third by node 3.
- SyncPoint1 is set as 12 (the newest ROWID known).
- SyncPoint2 is set as 6 (the newest “all updates” ROWID).
In this way, under normal circumstances each node sends its share of updates each run and just sends a batch of older updates to ensure nothing was missed.
Parameters: |
|
---|
allowed_sync_hosts
= None¶The list of hosts we’re allowed to send syncs to. This can be overridden by data in self.realms_conf
conf
= None¶The dict of configuration values from the [container-sync] section of the container-server.conf.
container_deletes
= None¶Number of successful DELETEs triggered.
container_failures
= None¶Number of containers that had a failure of some type.
container_puts
= None¶Number of successful PUTs triggered.
container_report
(start, end, sync_point1, sync_point2, info, max_row)¶container_ring
= None¶swift.common.ring.Ring for locating containers.
container_skips
= None¶Number of containers whose sync has been turned off, but are not yet cleared from the sync store.
container_stats
= None¶Per container stats. These are collected per container. puts - the number of puts that were done for the container deletes - the number of deletes that were fot the container bytes - the total number of bytes transferred per the container
container_sync
(path)¶Checks the given path for a container database, determines if syncing is turned on for that database and, if so, sends any updates to the other container.
Parameters: | path – the path to a container db |
---|
container_sync_row
(row, sync_to, user_key, broker, info, realm, realm_key)¶Sends the update the row indicates to the sync_to container. Update can be either delete or put.
Parameters: |
|
---|---|
Returns: | True on success |
container_syncs
= None¶Number of containers with sync turned on that were successfully synced.
container_time
= None¶Maximum amount of time to spend syncing a container before moving on to the next one. If a container sync hasn’t finished in this time, it’ll just be resumed next scan.
devices
= None¶Path to the local device mount points.
interval
= None¶Minimum time between full scans. This is to keep the daemon from running wild on near empty systems.
logger
= None¶Logger to use for container-sync log lines.
mount_check
= None¶Indicates whether mount points should be verified as actual mount points (normally true, false for tests and SAIO).
realms_conf
= None¶ContainerSyncCluster instance for validating sync-to values.
report
()¶Writes a report of the stats to the logger and resets the stats for the next report.
reported
= None¶Time of last stats report.
run_forever
(*args, **kwargs)¶Runs container sync scans until stopped.
run_once
(*args, **kwargs)¶Runs a single container sync scan.
select_http_proxy
()¶sync_store
= None¶ContainerSyncStore instance for iterating over synced containers
swift.container.sync.
random
() → x in the interval [0, 1).¶swift.container.updater.
ContainerUpdater
(conf, logger=None)¶Bases: swift.common.daemon.Daemon
Update container information in account listings.
container_report
(node, part, container, put_timestamp, delete_timestamp, count, bytes, storage_policy_index)¶Report container info to an account server.
Parameters: |
|
---|
container_sweep
(path)¶Walk the path looking for container DBs and process them.
Parameters: | path – path to walk |
---|
get_account_ring
()¶Get the account ring. Load it if it hasn’t been yet.
get_paths
()¶Get paths to all of the partitions on each drive to be processed.
Returns: | a list of paths |
---|
process_container
(dbfile)¶Process a container, and update the information in the account.
Parameters: | dbfile – container DB to process |
---|
run_forever
(*args, **kwargs)¶Run the updater continuously.
run_once
(*args, **kwargs)¶Run the updater once.
swift.container.updater.
random
() → x in the interval [0, 1).¶Except where otherwise noted, this document is licensed under Creative Commons Attribution 3.0 License. See all OpenStack Legal Documents.