Module Import alias ImportFrom alias Import alias Import alias Import alias ImportFrom alias alias alias ImportFrom alias ImportFrom alias ImportFrom alias alias alias alias ImportFrom alias alias ImportFrom alias alias alias alias alias alias alias alias Assign NameStore Str Assign NameStore Num Assign NameStore Num FunctionDef arguments args NameParam NameParam defaults body Expr Str FunctionDef arguments args NameParam defaults body Return BoolOpAnd CompareGt SubscriptLoad NameLoad Index Str SubscriptLoad NameLoad Index Str CompareEq Call AttributeLoad NameLoad attr Str Call AttributeLoad NameLoad attr Str Num Num decorator_list Assign NameStore Call NameLoad NameLoad Assign NameStore Call NameLoad NameLoad If Call NameLoad ListLoad NameLoad NameLoad body If UnaryOpNot NameLoad body Return Num orelse If UnaryOpNot NameLoad body Return Num Return Call NameLoad SubscriptLoad NameLoad Index Str SubscriptLoad NameLoad Index Str FunctionDef arguments args NameParam defaults body Return CompareGtGt SubscriptLoad NameLoad Index Str SubscriptLoad NameLoad Index Str Call NameLoad Num decorator_list Assign NameStore Call NameLoad NameLoad Assign NameStore Call NameLoad NameLoad If Call NameLoad ListLoad NameLoad NameLoad body If UnaryOpNot NameLoad body Return Num orelse If UnaryOpNot NameLoad body Return Num Return Call NameLoad SubscriptLoad NameLoad Index Str SubscriptLoad NameLoad Index Str Return Call NameLoad SubscriptLoad NameLoad Index Str SubscriptLoad NameLoad Index Str decorator_list FunctionDef arguments args NameParam NameParam defaults body Expr Str If CompareNotIn Str NameLoad body Return NameLoad If CompareEq SubscriptLoad NameLoad Index Str SubscriptLoad NameLoad Index Str body Return NameLoad Return CompareNotEq SubscriptLoad NameLoad Index Str SubscriptLoad SubscriptLoad Call NameLoad ListLoad NameLoad NameLoad keyword NameLoad Index Num Index Str decorator_list FunctionDef arguments args NameParam defaults body Assign NameStore AttributeLoad Call NameLoad Num attr Return Dict Str Str Str Str Call NameLoad SubscriptLoad NameLoad Index Str Call AttributeLoad NameLoad attr Str NameLoad Call AttributeLoad NameLoad attr Str NameLoad Call AttributeLoad NameLoad attr Str NameLoad decorator_list FunctionDef arguments args NameParam defaults body Assign NameStore Call NameLoad NameLoad NameLoad Expr Call AttributeLoad NameLoad attr keyword NameLoad Return SubscriptLoad SubscriptLoad NameLoad Index Num Index Str decorator_list FunctionDef arguments args NameParam defaults body Expr Str Assign TupleStore NameStore NameStore NameStore Call NameLoad NameLoad Return Call NameLoad BinOpMult BinOpFloorDiv Call NameLoad NameLoad NameLoad NameLoad decorator_list FunctionDef arguments args NameParam NameParam NameParam NameParam defaults body Return BinOpMod Str Dict Str Str Str Str NameLoad NameLoad NameLoad NameLoad decorator_list FunctionDef arguments args NameParam defaults body TryExcept body Return SubscriptLoad Dict Str Str Str Str Index Call AttributeLoad NameLoad attr handlers ExceptHandler type NameLoad body Raise Call NameLoad BinOpMod Str NameLoad decorator_list FunctionDef arguments args NameParam defaults body Assign NameStore AttributeLoad NameLoad attr Assign NameStore AttributeLoad NameLoad attr Assign NameStore Dict Num Num Call NameLoad Str Call NameLoad Str FunctionDef arguments args NameParam defaults body Assign NameStore Call NameLoad SubscriptLoad NameLoad Index Str NameLoad NameLoad SubscriptLoad NameLoad Index Str Return Dict Str Str Str Str Str Str NameLoad Num SubscriptLoad NameLoad Index Str SubscriptLoad NameLoad Index Str SubscriptLoad NameLoad Index SubscriptLoad NameLoad Index Str Num decorator_list Return NameLoad decorator_list FunctionDef arguments args NameParam NameParam NameParam NameParam NameParam NameParam NameParam NameParam NameParam NameParam defaults NameLoad Num Num body Expr Str Assign NameStore Call NameLoad NameLoad Assign NameStore Call NameLoad NameLoad NameLoad NameLoad NameLoad If NameLoad body Assign NameStore AttributeLoad Call NameLoad Call AttributeLoad NameLoad attr attr orelse Assign NameStore NameLoad Assign NameStore Call NameLoad NameLoad Assign NameStore Dict Str Str Str Str Num NameLoad NameLoad NameLoad FunctionDef arguments args defaults vararg kwarg body TryExcept body Expr Call NameLoad NameLoad NameLoad Return Num handlers ExceptHandler type TupleLoad NameLoad NameLoad AttributeLoad NameLoad attr body Return Num decorator_list Assign NameStore Call NameLoad Assign TupleStore NameStore NameStore Call AttributeLoad NameLoad attr NameLoad NameLoad For NameStore NameLoad body Expr Call AttributeLoad NameLoad attr NameLoad NameLoad NameLoad NameLoad NameLoad NameLoad keyword NameLoad keyword NameLoad keyword NameLoad Assign NameStore Call NameLoad NameLoad If CompareGtE NameLoad Call NameLoad Call NameLoad NameLoad body Return NameLoad orelse Return NameLoad decorator_list FunctionDef arguments args NameParam NameParam defaults Num body Return AttributeLoad Call NameLoad NameLoad keyword NameLoad attr decorator_list FunctionDef arguments args NameParam defaults body Expr Str Assign NameStore Call AttributeLoad SubscriptLoad NameLoad Index Str attr Str Assign TupleStore NameStore NameStore Call AttributeLoad NameLoad attr Str Num Assign NameStore Call NameLoad NameLoad Assign TupleStore NameStore NameStore NameStore Call NameLoad NameLoad Num Num keyword NameLoad TryExcept body Assign NameStore SubscriptLoad Dict Str Str Str Str Index SubscriptLoad NameLoad Index Str handlers ExceptHandler type NameLoad body Raise Call NameLoad BinOpMod Str Call AttributeLoad NameLoad attr Str NameLoad Return Dict Str Str Str Str Str Str Str Str NameLoad NameLoad NameLoad NameLoad NameLoad SubscriptLoad Call NameLoad SubscriptLoad NameLoad Index Str Index Num Call NameLoad SubscriptLoad NameLoad Index Str BinOpMod Str TupleLoad NameLoad NameLoad NameLoad decorator_list FunctionDef arguments args NameParam NameParam NameParam defaults body Expr Str FunctionDef arguments args defaults vararg body TryExcept body Return Call NameLoad NameLoad handlers ExceptHandler type NameLoad name NameStore body If CompareEq AttributeLoad NameLoad attr Num body Return AttributeLoad NameLoad attr ExceptHandler type TupleLoad NameLoad AttributeLoad NameLoad attr body Pass decorator_list Assign NameStore Call NameLoad Assign TupleStore NameStore NameStore Call AttributeLoad NameLoad attr NameLoad NameLoad For NameStore NameLoad body Expr Call AttributeLoad NameLoad attr NameLoad NameLoad NameLoad NameLoad NameLoad Assign NameStore ListComp NameLoad comprehension NameStore NameLoad CompareIsNot NameLoad NameLoad If CompareLt Call NameLoad NameLoad Call NameLoad Call NameLoad NameLoad body Return Return Call NameLoad NameLoad decorator_list Call NameLoad keyword NameLoad FunctionDef arguments args NameParam NameParam NameParam NameParam NameParam defaults NameLoad body Expr Str Assign NameStore Call NameLoad Assign TupleStore NameStore NameStore Call AttributeLoad NameLoad attr NameLoad NameLoad For NameStore NameLoad body Expr Call AttributeLoad NameLoad attr NameLoad NameLoad NameLoad NameLoad NameLoad NameLoad keyword NameLoad Expr Call AttributeLoad NameLoad attr decorator_list ClassDef bases NameLoad body Expr Str FunctionDef arguments args NameParam NameParam defaults body Assign AttributeStore NameLoad attr NameLoad Assign AttributeStore NameLoad attr Call NameLoad Call AttributeLoad NameLoad attr Str BinOpMult Num Num Assign AttributeStore NameLoad attr Call NameLoad Call AttributeLoad NameLoad attr Str Num Assign NameStore BoolOpOr Call AttributeLoad NameLoad attr Str Str Assign AttributeStore NameLoad attr Call NameLoad NameLoad keyword Str Assign NameStore Call NameLoad BoolOpOr Call AttributeLoad NameLoad attr Str Num Assign AttributeStore NameLoad attr Call NameLoad NameLoad Str NameLoad Assign AttributeStore NameLoad attr Call NameLoad NameLoad Assign AttributeStore NameLoad attr Call AttributeLoad NameLoad attr decorator_list FunctionDef arguments args NameParam NameParam NameParam defaults vararg kwarg body Expr Str Assign NameStore Call AttributeLoad NameLoad attr Str AttributeLoad NameLoad attr Assign NameStore BinOpAdd BinOpMod Str NameLoad NameLoad Expr Call AttributeLoad AttributeLoad NameLoad attr attr NameLoad NameLoad NameLoad NameLoad AugAssignAdd SubscriptStore AttributeLoad NameLoad attr Index NameLoad Num decorator_list FunctionDef arguments args NameParam NameParam defaults NameLoad body Expr Str Assign NameStore Call AttributeLoad NameLoad attr Assign NameStore BoolOpOr NameLoad CompareGt BinOpSub NameLoad AttributeLoad NameLoad attr Num If NameLoad body Assign AttributeStore NameLoad attr NameLoad Expr Call AttributeLoad AttributeLoad NameLoad attr attr Str Call NameLoad AttributeLoad NameLoad attr decorator_list FunctionDef arguments args NameParam NameParam NameParam NameParam NameParam defaults body Expr Str Assign NameStore BinOpMod Str TupleLoad NameLoad NameLoad NameLoad Assign NameStore Call NameLoad Call NameLoad NameLoad NameLoad Expr Call AttributeLoad NameLoad attr Str Str NameLoad NameLoad NameLoad Assign NameStore Dict Str NameLoad Expr Call NameLoad AttributeLoad AttributeLoad NameLoad attr attr NameLoad NameLoad NameLoad keyword NameLoad decorator_list FunctionDef arguments args NameParam NameParam NameParam NameParam NameParam NameParam NameParam defaults body Expr Str Assign NameStore Call NameLoad NameLoad Expr Call AttributeLoad NameLoad attr Str Str NameLoad NameLoad NameLoad NameLoad Assign NameStore Dict Str Str NameLoad NameLoad Assign NameStore NameLoad TryExcept body Expr Call AttributeLoad AttributeLoad NameLoad attr attr NameLoad NameLoad NameLoad keyword TupleLoad Num Num keyword NameLoad handlers ExceptHandler type NameLoad name NameStore body Expr Call AttributeLoad NameLoad attr Str Str NameLoad NameLoad NameLoad NameLoad orelse Assign NameStore NameLoad Expr Call AttributeLoad NameLoad attr Str Str NameLoad NameLoad NameLoad Return NameLoad decorator_list FunctionDef arguments args NameParam NameParam NameParam NameParam NameParam NameParam NameParam NameParam defaults kwarg body Expr Str Assign NameStore Call NameLoad AttributeLoad AttributeLoad NameLoad attr attr NameLoad NameLoad If CompareIs NameLoad NameLoad body Expr Call AttributeLoad NameLoad attr Str Str NameLoad NameLoad Return NameLoad If CompareEq NameLoad NameLoad body Expr Call AttributeLoad NameLoad attr Str Str NameLoad NameLoad NameLoad NameLoad Return NameLoad Expr Call AttributeLoad AttributeLoad NameLoad attr attr Str NameLoad NameLoad NameLoad Assign NameStore Dict Str NameLoad Assign NameStore Call AttributeLoad AttributeLoad NameLoad attr attr NameLoad NameLoad NameLoad keyword NameLoad keyword TupleLoad Num Num Assign NameStore Call NameLoad Call AttributeLoad NameLoad attr Str Num If CompareGtE NameLoad NameLoad body Expr Call AttributeLoad NameLoad attr Str Str NameLoad NameLoad NameLoad NameLoad Return Call AttributeLoad NameLoad attr NameLoad NameLoad NameLoad NameLoad NameLoad NameLoad Expr Call AttributeLoad NameLoad attr Str Str NameLoad NameLoad NameLoad NameLoad Expr Call AttributeLoad AttributeLoad NameLoad attr attr Str NameLoad NameLoad NameLoad Assign NameStore Dict Str NameLoad TryExcept body Assign TupleStore NameStore NameStore NameStore Call AttributeLoad AttributeLoad NameLoad attr attr NameLoad NameLoad NameLoad keyword NameLoad keyword TupleLoad Num Num handlers ExceptHandler type NameLoad name NameStore body Assign NameStore AttributeLoad AttributeLoad NameLoad attr attr Assign NameStore Dict Assign NameStore NameLoad Assign NameStore Call NameLoad Call AttributeLoad NameLoad attr Str Num If BoolOpAnd CompareEq NameLoad Num CompareEq NameLoad Str body Return Call AttributeLoad NameLoad attr NameLoad NameLoad NameLoad NameLoad NameLoad NameLoad NameLoad NameLoad orelse Return Call AttributeLoad NameLoad attr NameLoad NameLoad NameLoad NameLoad NameLoad NameLoad NameLoad NameLoad NameLoad NameLoad NameLoad decorator_list FunctionDef arguments args NameParam NameParam NameParam NameParam NameParam NameParam NameParam NameParam NameParam NameParam NameParam NameParam defaults kwarg body Expr Str If BoolOpOr CompareNotEq BinOpFloorDiv NameLoad Num Num CompareLt NameLoad NameLoad body If CompareLt NameLoad BinOpSub Call AttributeLoad NameLoad attr AttributeLoad NameLoad attr body Expr Call AttributeLoad NameLoad attr Str Str NameLoad AttributeLoad NameLoad attr NameLoad keyword AttributeLoad NameLoad attr Return NameLoad Expr Call AttributeLoad NameLoad attr Str Str NameLoad AttributeLoad NameLoad attr NameLoad NameLoad AttributeLoad NameLoad attr keyword AttributeLoad NameLoad attr Return NameLoad Assign NameStore Call NameLoad Call NameLoad NameLoad NameLoad Assign NameStore Call NameLoad NameLoad keyword Num Expr Call AttributeLoad NameLoad attr Str Str NameLoad NameLoad NameLoad NameLoad NameLoad Assign NameStore Call AttributeLoad NameLoad attr Assign SubscriptStore NameLoad Index Str NameLoad Assign SubscriptStore NameLoad Index Str NameLoad TryExcept body Expr Call AttributeLoad AttributeLoad NameLoad attr attr Call NameLoad NameLoad NameLoad NameLoad NameLoad keyword NameLoad handlers ExceptHandler type NameLoad name NameStore body Expr Call AttributeLoad NameLoad attr Str Str NameLoad NameLoad NameLoad NameLoad NameLoad keyword AttributeLoad NameLoad attr Return NameLoad ExceptHandler body Expr Call AttributeLoad NameLoad attr Str Str NameLoad NameLoad NameLoad NameLoad keyword AttributeLoad NameLoad attr keyword NameLoad Return NameLoad Expr Call AttributeLoad NameLoad attr Str Str NameLoad NameLoad NameLoad NameLoad NameLoad Return Call AttributeLoad NameLoad attr NameLoad NameLoad NameLoad NameLoad NameLoad NameLoad decorator_list FunctionDef arguments args NameParam NameParam NameParam NameParam NameParam NameParam NameParam NameParam NameParam defaults kwarg body Expr Str Assign NameStore Call NameLoad NameLoad keyword Num Expr Call AttributeLoad NameLoad attr Str Str NameLoad NameLoad NameLoad NameLoad NameLoad Assign NameStore Dict Str Str NameLoad NameLoad TryExcept body Expr Call AttributeLoad AttributeLoad NameLoad attr attr NameLoad NameLoad NameLoad keyword NameLoad handlers ExceptHandler type NameLoad name NameStore body Expr Call AttributeLoad NameLoad attr Str Str NameLoad NameLoad NameLoad NameLoad NameLoad keyword AttributeLoad NameLoad attr Return NameLoad ExceptHandler body Expr Call AttributeLoad NameLoad attr Str Str NameLoad NameLoad NameLoad NameLoad keyword AttributeLoad NameLoad attr keyword NameLoad Return NameLoad Expr Call AttributeLoad NameLoad attr Str Str NameLoad NameLoad NameLoad NameLoad keyword AttributeLoad NameLoad attr Return Call AttributeLoad NameLoad attr NameLoad NameLoad NameLoad NameLoad NameLoad NameLoad decorator_list FunctionDef arguments args NameParam NameParam defaults body Expr Str Expr Call AttributeLoad AttributeLoad NameLoad attr attr Str SubscriptLoad NameLoad Index Str SubscriptLoad NameLoad Index Str SubscriptLoad NameLoad Index Str Assign NameStore NameLoad TryExcept body Assign NameStore Call AttributeLoad NameLoad attr NameLoad handlers ExceptHandler body Expr Call AttributeLoad AttributeLoad NameLoad attr attr Str SubscriptLoad NameLoad Index Str SubscriptLoad NameLoad Index Str SubscriptLoad NameLoad Index Str If NameLoad body Assign NameStore Str Assign NameStore Str orelse Assign NameStore Str Assign NameStore Str Assign NameStore BinOpAdd Str NameLoad Expr Call AttributeLoad NameLoad attr NameLoad NameLoad NameLoad keyword AttributeLoad NameLoad attr Expr Call AttributeLoad NameLoad attr Return NameLoad decorator_list FunctionDef arguments args NameParam defaults body Expr Str Assign NameStore Call NameLoad Call AttributeLoad NameLoad attr Expr Yield NameLoad Assign NameStore Call AttributeLoad AttributeLoad NameLoad attr attr NameLoad Expr Call AttributeLoad AttributeLoad NameLoad attr attr Str NameLoad While NameLoad body Assign NameStore NameLoad TryExcept body Assign NameStore Call NameLoad Call AttributeLoad NameLoad attr NameLoad AttributeLoad NameLoad attr handlers ExceptHandler type NameLoad name NameStore body Expr Call AttributeLoad AttributeLoad NameLoad attr attr Str NameLoad NameLoad If UnaryOpNot NameLoad body Break For NameStore Call NameLoad NameLoad body Assign NameStore Call AttributeLoad SubscriptLoad NameLoad Index Str attr Str If CompareEq NameLoad NameLoad body Continue Expr Yield NameLoad decorator_list FunctionDef arguments args NameParam NameParam defaults body Expr Str Expr Call AttributeLoad AttributeLoad NameLoad attr attr Str NameLoad Assign NameStore NameLoad TryExcept body For NameStore Call AttributeLoad AttributeLoad NameLoad attr attr NameLoad NameLoad body Assign NameStore NameLoad Expr Yield NameLoad handlers ExceptHandler type NameLoad name NameStore body Expr Call AttributeLoad AttributeLoad NameLoad attr attr Str NameLoad NameLoad If BoolOpAnd CompareLt Call NameLoad NameLoad BinOpSub Call AttributeLoad NameLoad attr AttributeLoad NameLoad attr UnaryOpNot NameLoad body Expr Call AttributeLoad AttributeLoad NameLoad attr attr NameLoad NameLoad keyword TupleLoad Num Num Num Num decorator_list FunctionDef arguments args NameParam defaults body Expr Str Expr Call AttributeLoad AttributeLoad NameLoad attr attr Str For NameStore Call AttributeLoad NameLoad attr body For NameStore Call AttributeLoad NameLoad attr NameLoad body TryExcept body Assign NameStore Call NameLoad NameLoad handlers ExceptHandler type NameLoad body Expr Call AttributeLoad NameLoad attr Str Str NameLoad keyword AttributeLoad NameLoad attr keyword NameLoad Continue Assign NameStore Call AttributeLoad NameLoad attr NameLoad If NameLoad body Expr Call AttributeLoad NameLoad attr NameLoad SubscriptLoad NameLoad Index Str SubscriptLoad NameLoad Index Str SubscriptLoad NameLoad Index Str Expr Call AttributeLoad NameLoad attr Expr Call AttributeLoad AttributeLoad NameLoad attr attr Str NameLoad decorator_list FunctionDef arguments args NameParam defaults vararg kwarg body Expr Str TryExcept body Expr Call AttributeLoad NameLoad attr handlers ExceptHandler body Expr Call AttributeLoad AttributeLoad NameLoad attr attr Str Expr Call AttributeLoad NameLoad attr keyword NameLoad decorator_list FunctionDef arguments args NameParam defaults vararg kwarg body While NameLoad body Expr Call AttributeLoad NameLoad attr NameLoad NameLoad Assign AttributeStore NameLoad attr Call NameLoad NameLoad Expr Call AttributeLoad AttributeLoad NameLoad attr attr Str AttributeLoad NameLoad attr Expr Call AttributeLoad NameLoad attr AttributeLoad NameLoad attr decorator_list decorator_list
N/A N/A time collections defaultdict N/A socket N/A itertools N/A logging eventlet GreenPile GreenPool Timeout swift.common constraints swift.common.daemon Daemon swift.common.direct_client direct_head_container direct_delete_container_object direct_put_container_object ClientException swift.common.internal_client InternalClient UnexpectedResponse swift.common.utils get_logger split_path quorum_size FileLikeIter Timestamp last_modified_date_to_timestamp LRUCache decode_timestamps N/A MISPLACED_OBJECTS_ACCOUNT .misplaced_objects N/A MISPLACED_OBJECTS_CONTAINER_DIVISOR 3600 N/A CONTAINER_POLICY_TTL 30 cmp_policy_info N/A N/A info remote_info N/A N/A N/A 
    You have to squint to see it, but the general strategy is just:

    if either has been recreated:
        return the newest (of the recreated)
    else
        return the oldest

    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
     is_deleted N/A N/A info N/A N/A N/A N/A N/A N/A info N/A delete_timestamp N/A info N/A put_timestamp N/A N/A N/A info get count N/A N/A info get object_count 0 0 N/A N/A deleted N/A is_deleted info N/A remote_deleted N/A is_deleted remote_info N/A N/A any N/A deleted remote_deleted N/A N/A N/A deleted N/A N/A -1 N/A N/A N/A remote_deleted N/A N/A 1 N/A N/A cmp N/A remote_info N/A status_changed_at N/A info N/A status_changed_at has_been_recreated N/A N/A info N/A N/A N/A N/A N/A info N/A put_timestamp N/A info N/A delete_timestamp N/A Timestamp 0 N/A N/A remote_recreated N/A has_been_recreated remote_info N/A recreated N/A has_been_recreated info N/A N/A any N/A remote_recreated recreated N/A N/A N/A recreated N/A N/A 1 N/A N/A N/A remote_recreated N/A N/A -1 N/A N/A cmp N/A remote_info N/A status_changed_at N/A info N/A status_changed_at N/A N/A cmp N/A info N/A status_changed_at N/A remote_info N/A status_changed_at N/A incorrect_policy_index N/A N/A info remote_info N/A N/A N/A 
    Compare remote_info to info and decide if the remote storage policy index
    should be used instead of ours.
     N/A N/A storage_policy_index remote_info N/A N/A False N/A N/A N/A remote_info N/A storage_policy_index N/A info N/A storage_policy_index N/A N/A False N/A N/A N/A info N/A storage_policy_index N/A N/A N/A sorted N/A info remote_info cmp cmp_policy_info N/A 0 N/A storage_policy_index N/A translate_container_headers_to_info N/A N/A headers N/A N/A N/A default_timestamp N/A N/A Timestamp 0 internal N/A N/A storage_policy_index put_timestamp delete_timestamp status_changed_at N/A int N/A headers N/A X-Backend-Storage-Policy-Index N/A N/A headers get x-backend-put-timestamp default_timestamp N/A N/A headers get x-backend-delete-timestamp default_timestamp N/A N/A headers get x-backend-status-changed-at default_timestamp N/A best_policy_index N/A N/A headers N/A N/A N/A container_info N/A map translate_container_headers_to_info headers N/A N/A N/A container_info sort cmp cmp_policy_info N/A N/A N/A container_info N/A 0 N/A storage_policy_index N/A get_reconciler_container_name N/A N/A obj_timestamp N/A N/A N/A 
    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.

    :param obj_timestamp: a string representation of the object's 'created_at'
                          time from it's container db row.
    :return: a container name
     N/A N/A _junk _junk ts_meta N/A decode_timestamps obj_timestamp N/A N/A str N/A N/A N/A int ts_meta MISPLACED_OBJECTS_CONTAINER_DIVISOR MISPLACED_OBJECTS_CONTAINER_DIVISOR N/A get_reconciler_obj_name N/A N/A policy_index account container obj N/A N/A N/A N/A %(policy_index)d:/%(acc)s/%(con)s/%(obj)s N/A policy_index acc con obj policy_index account container obj N/A get_reconciler_content_type N/A N/A op N/A N/A N/A N/A N/A N/A N/A put delete application/x-put application/x-delete N/A N/A N/A op lower N/A N/A N/A KeyError N/A N/A N/A ValueError N/A invalid operation type %r op N/A get_row_to_q_entry_translator N/A N/A broker N/A N/A N/A account N/A broker account N/A container N/A broker container N/A op_type N/A 0 1 N/A get_reconciler_content_type put N/A get_reconciler_content_type delete translator N/A N/A obj_info N/A N/A N/A name N/A get_reconciler_obj_name N/A obj_info N/A storage_policy_index account container N/A obj_info N/A name N/A N/A name deleted created_at etag content_type size name 0 N/A obj_info N/A created_at N/A obj_info N/A created_at N/A op_type N/A N/A obj_info N/A deleted 0 N/A N/A translator N/A add_to_reconciler_queue N/A N/A container_ring account container obj obj_policy_index obj_timestamp op force conn_timeout response_timeout N/A False 5 15 N/A N/A 
    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.

    :param container_ring: container ring
    :param account: the misplaced object's account
    :param container: the misplaced object's container
    :param obj: the misplaced object
    :param obj_policy_index: the policy index where the misplaced object
                             currently is
    :param obj_timestamp: the misplaced object's X-Timestamp. We need this to
                          ensure that the reconciler doesn't overwrite a newer
                          object with an older one.
    :param op: the method of the operation (DELETE or PUT)
    :param force: over-write queue entries newer than obj_timestamp
    :param conn_timeout: max time to wait for connection to container server
    :param response_timeout: max time to wait for response from container
                             server

    :returns: .misplaced_object container name, False on failure. "Success"
              means a quorum of containers got the update.
     N/A container_name N/A get_reconciler_container_name obj_timestamp N/A object_name N/A get_reconciler_obj_name obj_policy_index account container obj N/A force N/A N/A x_timestamp N/A N/A Timestamp N/A N/A time time internal N/A N/A x_timestamp obj_timestamp N/A q_op_type N/A get_reconciler_content_type op N/A headers N/A X-Size X-Etag X-Timestamp X-Content-Type 0 obj_timestamp x_timestamp q_op_type _check_success N/A N/A N/A args kwargs N/A N/A N/A N/A N/A direct_put_container_object args kwargs N/A 1 N/A N/A N/A N/A ClientException Timeout N/A socket error N/A N/A 0 N/A N/A pile N/A GreenPile N/A N/A part nodes N/A N/A container_ring get_nodes MISPLACED_OBJECTS_ACCOUNT container_name N/A node nodes N/A N/A N/A N/A pile spawn _check_success node part MISPLACED_OBJECTS_ACCOUNT container_name object_name headers headers conn_timeout conn_timeout response_timeout response_timeout N/A successes N/A sum pile N/A N/A successes N/A quorum_size N/A len nodes N/A N/A container_name N/A N/A False N/A slightly_later_timestamp N/A N/A ts offset N/A 1 N/A N/A N/A N/A Timestamp ts offset offset internal N/A parse_raw_obj N/A N/A obj_info N/A N/A N/A 
    Translate a reconciler container listing entry to a dictionary
    containing the parts of the misplaced object queue entry.

    :param 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
     N/A raw_obj_name N/A N/A N/A obj_info N/A name encode utf-8 N/A N/A policy_index obj_name N/A N/A raw_obj_name split : 1 N/A q_policy_index N/A int policy_index N/A N/A account container obj N/A split_path obj_name 3 3 rest_with_last True N/A N/A N/A q_op N/A N/A application/x-put application/x-delete PUT DELETE N/A N/A obj_info N/A content_type N/A N/A N/A KeyError N/A N/A N/A ValueError N/A invalid operation type %r N/A N/A obj_info get content_type None N/A N/A q_policy_index account container obj q_op q_ts q_record path q_policy_index account container obj q_op N/A N/A decode_timestamps N/A obj_info N/A hash N/A 0 N/A last_modified_date_to_timestamp N/A obj_info N/A last_modified N/A /%s/%s/%s N/A account container obj N/A direct_get_container_policy_index N/A N/A container_ring account_name container_name N/A N/A N/A 
    Talk directly to the primary container servers to figure out the storage
    policy index for a given container.

    :param container_ring: ring in which to look up the container locations
    :param account_name: name of the container's account
    :param container_name: name of the container
    :returns: storage policy index, or None if it couldn't get a quorum
     _eat_client_exception N/A N/A N/A args N/A N/A N/A N/A N/A direct_head_container args N/A N/A N/A ClientException N/A err N/A N/A N/A N/A err http_status 404 N/A N/A N/A err http_headers N/A N/A N/A Timeout N/A socket error N/A N/A N/A N/A pile N/A GreenPile N/A N/A part nodes N/A N/A container_ring get_nodes account_name container_name N/A node nodes N/A N/A N/A N/A pile spawn _eat_client_exception node part account_name container_name N/A headers N/A x N/A x pile N/A x None N/A N/A N/A len headers N/A quorum_size N/A len nodes N/A N/A N/A N/A best_policy_index headers N/A N/A LRUCache maxtime CONTAINER_POLICY_TTL direct_delete_container_entry N/A N/A container_ring account_name container_name object_name headers N/A None N/A N/A 
    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.
     N/A pool N/A GreenPool N/A N/A part nodes N/A N/A container_ring get_nodes account_name container_name N/A node nodes N/A N/A N/A N/A pool spawn_n direct_delete_container_object node part account_name container_name object_name headers headers N/A N/A N/A pool waitall N/A ContainerReconciler N/A Daemon N/A N/A 
    Move objects that are in the wrong storage policy.
     __init__ N/A N/A self conf N/A N/A N/A N/A self conf conf N/A N/A self reclaim_age N/A int N/A N/A conf get reclaim_age N/A 86400 7 N/A N/A self interval N/A int N/A N/A conf get interval 30 N/A conf_path N/A N/A N/A conf get __file__ /etc/swift/container-reconciler.conf N/A N/A self logger N/A get_logger conf log_route container-reconciler N/A request_tries N/A int N/A N/A N/A conf get request_tries 3 N/A N/A self swift N/A InternalClient conf_path Swift Container Reconciler request_tries N/A N/A self stats N/A defaultdict int N/A N/A self last_stat_time N/A N/A time time N/A stats_log N/A N/A self metric msg N/A args kwargs N/A N/A 
        Update stats tracking for metric and emit log message.
         N/A level N/A N/A kwargs pop level N/A logging DEBUG N/A log_message N/A N/A %s:  metric msg N/A N/A N/A N/A self logger log level log_message args kwargs N/A N/A N/A self stats N/A metric 1 N/A log_stats N/A N/A self force N/A False N/A N/A 
        Dump stats to logger, noop when stats have been already been
        logged in the last minute.
         N/A now N/A N/A time time N/A should_log N/A force N/A N/A now N/A self last_stat_time 60 N/A should_log N/A N/A N/A self last_stat_time now N/A N/A N/A N/A self logger info Reconciler Stats: %r N/A dict N/A self stats N/A pop_queue N/A N/A self container obj q_ts q_record N/A N/A N/A 
        Issue a delete object request to the container for the misplaced
        object queue entry.

        :param container: the misplaced objects container
        :param obj: the name of the misplaced object
        :param q_ts: the timestamp of the misplaced object
        :param q_record: the timestamp of the queue entry

        N.B. q_ts will normally be the same time as q_record except when
        an object was manually re-enqued.
         N/A q_path N/A /%s/%s/%s N/A MISPLACED_OBJECTS_ACCOUNT container obj N/A x_timestamp N/A slightly_later_timestamp N/A max q_record q_ts N/A N/A N/A self stats_log pop_queue remove %r (%f) from the queue (%s) q_path q_ts x_timestamp N/A headers N/A X-Timestamp x_timestamp N/A N/A direct_delete_container_entry N/A N/A self swift container_ring MISPLACED_OBJECTS_ACCOUNT container obj headers headers N/A throw_tombstones N/A N/A self account container obj timestamp policy_index path N/A N/A N/A 
        Issue a delete object request to the given storage_policy.

        :param account: the account name
        :param container: the container name
        :param obj: the object name
        :param timestamp: the timestamp of the object to delete
        :param policy_index: the policy index to direct the request
        :param path: the path to be used for logging
         N/A x_timestamp N/A slightly_later_timestamp timestamp N/A N/A N/A self stats_log cleanup_attempt %r (%f) from policy_index %s (%s) will be deleted path timestamp policy_index x_timestamp N/A headers N/A X-Timestamp X-Backend-Storage-Policy-Index x_timestamp policy_index N/A success False N/A N/A N/A N/A N/A N/A self swift delete_object account container obj acceptable_statuses N/A 2 404 headers headers N/A N/A N/A UnexpectedResponse N/A err N/A N/A N/A N/A self stats_log cleanup_failed %r (%f) was not cleaned up in storage_policy %s (%s) path timestamp policy_index err N/A N/A success True N/A N/A N/A self stats_log cleanup_success %r (%f) was successfully removed from policy_index %s path timestamp policy_index N/A success N/A _reconcile_object N/A N/A self account container obj q_policy_index q_ts q_op path N/A kwargs N/A N/A 
        Perform object reconciliation.

        :param account: the account name of the misplaced object
        :param container: the container name of the misplaced object
        :param obj: the object name
        :param q_policy_index: the policy index of the source indicated by the
                               queue entry.
        :param q_ts: the timestamp of the misplaced object
        :param q_op: the operation of the misplaced request
        :param path: the full path of the misplaced object for logging

        :returns: True to indicate the request is fully processed
                  successfully, otherwise False.
         N/A container_policy_index N/A direct_get_container_policy_index N/A N/A self swift container_ring account container N/A N/A container_policy_index None N/A N/A N/A N/A self stats_log unavailable_container %r (%f) unable to determine the destination policy_index path q_ts N/A False N/A N/A container_policy_index q_policy_index N/A N/A N/A N/A self stats_log noop_object %r (%f) container policy_index %s matches queue policy index %s path q_ts container_policy_index q_policy_index N/A True N/A N/A N/A N/A self logger debug checking for %r (%f) in destination policy_index %s path q_ts container_policy_index N/A headers N/A X-Backend-Storage-Policy-Index container_policy_index N/A dest_obj N/A N/A N/A self swift get_object_metadata account container obj headers headers acceptable_statuses N/A 2 4 N/A dest_ts N/A Timestamp N/A N/A dest_obj get x-backend-timestamp 0 N/A N/A dest_ts q_ts N/A N/A N/A N/A self stats_log found_object %r (%f) in policy_index %s is newer than queue (%f) path dest_ts container_policy_index q_ts N/A N/A N/A self throw_tombstones account container obj q_ts q_policy_index path N/A N/A N/A self stats_log misplaced_object %r (%f) in policy_index %s should be in policy_index %s path q_ts q_policy_index container_policy_index N/A N/A N/A N/A self logger debug fetching %r (%f) from storage policy %s path q_ts q_policy_index N/A headers N/A X-Backend-Storage-Policy-Index q_policy_index N/A N/A N/A N/A source_obj_status source_obj_info source_obj_iter N/A N/A N/A self swift get_object account container obj headers headers acceptable_statuses N/A 2 4 N/A N/A N/A UnexpectedResponse N/A err N/A N/A source_obj_status N/A N/A err resp status_int N/A source_obj_info N/A N/A source_obj_iter None N/A source_ts N/A Timestamp N/A N/A source_obj_info get x-backend-timestamp 0 N/A N/A N/A source_obj_status 404 N/A q_op DELETE N/A N/A N/A N/A self ensure_tombstone_in_right_location q_policy_index account container obj q_ts path container_policy_index source_ts N/A N/A N/A N/A self 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 N/A ensure_object_in_right_location N/A N/A self q_policy_index account container obj q_ts path container_policy_index source_ts source_obj_status source_obj_info source_obj_iter N/A kwargs N/A N/A 
        Validate source object will satisfy the misplaced object queue entry
        and move to destination.

        :param q_policy_index: the policy_index for the source object
        :param account: the account name of the misplaced object
        :param container: the container name of the misplaced object
        :param obj: the name of the misplaced object
        :param q_ts: the timestamp of the misplaced object
        :param path: the full path of the misplaced object for logging
        :param container_policy_index: the policy_index of the destination
        :param source_ts: the timestamp of the source object
        :param source_obj_status: the HTTP status source object request
        :param source_obj_info: the HTTP headers of the source object request
        :param source_obj_iter: the body iter of the source object request
         N/A N/A N/A N/A source_obj_status 100 2 N/A source_ts q_ts N/A N/A N/A q_ts N/A N/A N/A time time N/A self reclaim_age N/A N/A N/A N/A self stats_log lost_source %r (%s) was not available in policy_index %s and has expired path N/A q_ts internal q_policy_index level N/A logging CRITICAL N/A True N/A N/A N/A self stats_log unavailable_source %r (%s) in policy_index %s responded %s (%s) path N/A q_ts internal q_policy_index source_obj_status N/A source_ts internal level N/A logging WARNING N/A False N/A ts N/A max N/A Timestamp source_ts q_ts N/A put_timestamp N/A slightly_later_timestamp ts offset 2 N/A N/A N/A self stats_log copy_attempt %r (%f) in policy_index %s will be moved to policy_index %s (%s) path source_ts q_policy_index container_policy_index put_timestamp N/A headers N/A N/A source_obj_info copy N/A N/A headers N/A X-Backend-Storage-Policy-Index container_policy_index N/A N/A headers N/A X-Timestamp put_timestamp N/A N/A N/A N/A N/A N/A self swift upload_object N/A FileLikeIter source_obj_iter account container obj headers headers N/A N/A N/A UnexpectedResponse N/A err N/A N/A N/A N/A self stats_log copy_failed upload %r (%f) from policy_index %s to policy_index %s returned %s path source_ts q_policy_index container_policy_index err level N/A logging WARNING N/A False N/A N/A N/A N/A N/A self stats_log unhandled_error unable to upload %r (%f) from policy_index %s to policy_index %s  path source_ts q_policy_index container_policy_index level N/A logging ERROR exc_info True N/A False N/A N/A N/A self stats_log copy_success %r (%f) moved from policy_index %s to policy_index %s (%s) path source_ts q_policy_index container_policy_index put_timestamp N/A N/A N/A self throw_tombstones account container obj q_ts q_policy_index path N/A ensure_tombstone_in_right_location N/A N/A self q_policy_index account container obj q_ts path container_policy_index source_ts N/A kwargs N/A N/A 
        Issue a DELETE request against the destination to match the
        misplaced DELETE against the source.
         N/A delete_timestamp N/A slightly_later_timestamp q_ts offset 2 N/A N/A N/A self stats_log delete_attempt %r (%f) in policy_index %s will be deleted from policy_index %s (%s) path source_ts q_policy_index container_policy_index delete_timestamp N/A headers N/A X-Backend-Storage-Policy-Index X-Timestamp container_policy_index delete_timestamp N/A N/A N/A N/A N/A N/A self swift delete_object account container obj headers headers N/A N/A N/A UnexpectedResponse N/A err N/A N/A N/A N/A self stats_log delete_failed delete %r (%f) from policy_index %s (%s) returned %s path source_ts container_policy_index delete_timestamp err level N/A logging WARNING N/A False N/A N/A N/A N/A N/A self stats_log unhandled_error unable to delete %r (%f) from policy_index %s (%s) path source_ts container_policy_index delete_timestamp level N/A logging ERROR exc_info True N/A False N/A N/A N/A self stats_log delete_success %r (%f) deleted from policy_index %s (%s) path source_ts container_policy_index delete_timestamp level N/A logging INFO N/A N/A N/A self throw_tombstones account container obj q_ts q_policy_index path N/A reconcile_object N/A N/A self info N/A N/A N/A 
        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.

        :param info: a queue entry dict

        :returns: True to indicate the request is fully processed
                  successfully, otherwise False.
         N/A N/A N/A N/A self logger debug checking placement for %r (%f) in policy_index %s N/A info N/A path N/A info N/A q_ts N/A info N/A q_policy_index N/A success False N/A N/A N/A success N/A N/A self _reconcile_object info N/A N/A N/A N/A N/A N/A N/A self logger exception Unhandled Exception trying to reconcile %r (%f) in policy_index %s N/A info N/A path N/A info N/A q_ts N/A info N/A q_policy_index N/A success N/A N/A metric success N/A msg was handled successfully N/A N/A metric retry N/A msg must be retried N/A msg N/A %(path)r (%(q_ts)f) in policy_index %(q_policy_index)s  msg N/A N/A N/A self stats_log metric msg info level N/A logging INFO N/A N/A N/A self log_stats N/A success N/A _iter_containers N/A N/A self N/A N/A N/A 
        Generate a list of containers to process.
         N/A current_container N/A get_reconciler_container_name N/A N/A time time N/A N/A current_container N/A container_gen N/A N/A N/A self swift iter_containers MISPLACED_OBJECTS_ACCOUNT N/A N/A N/A N/A self logger debug looking for containers in %s MISPLACED_OBJECTS_ACCOUNT N/A True N/A N/A one_page None N/A N/A N/A one_page N/A list N/A N/A itertools islice container_gen N/A constraints CONTAINER_LISTING_LIMIT N/A N/A N/A UnexpectedResponse N/A err N/A N/A N/A N/A N/A self logger error Error listing containers in account %s (%s) MISPLACED_OBJECTS_ACCOUNT err N/A N/A one_page N/A N/A N/A c N/A reversed one_page N/A N/A container N/A N/A N/A c N/A name encode utf8 N/A N/A container current_container N/A N/A N/A N/A container N/A _iter_objects N/A N/A self container N/A N/A N/A 
        Generate a list of objects to process.

        :param container: the name of the container to process

        If the given container is empty and older than reclaim_age this
        processor will attempt to reap it.
         N/A N/A N/A N/A self logger debug looking for objects in %s container N/A found_obj False N/A N/A N/A raw_obj N/A N/A N/A self swift iter_objects MISPLACED_OBJECTS_ACCOUNT container N/A N/A found_obj True N/A N/A raw_obj N/A N/A N/A UnexpectedResponse N/A err N/A N/A N/A N/A N/A self logger error Error listing objects in container %s (%s) container err N/A N/A N/A N/A float container N/A N/A N/A time time N/A self reclaim_age N/A found_obj N/A N/A N/A N/A N/A self swift delete_container MISPLACED_OBJECTS_ACCOUNT container acceptable_statuses N/A 2 404 409 412 N/A reconcile N/A N/A self N/A N/A N/A 
        Main entry point for processing misplaced objects.

        Iterate over all queue entries and delegate to reconcile_object.
         N/A N/A N/A N/A self logger debug pulling items from the queue N/A container N/A N/A self _iter_containers N/A N/A raw_obj N/A N/A self _iter_objects container N/A N/A N/A N/A obj_info N/A parse_raw_obj raw_obj N/A N/A N/A Exception N/A N/A N/A N/A self stats_log invalid_record invalid queue record: %r raw_obj level N/A logging ERROR exc_info True N/A N/A finished N/A N/A self reconcile_object obj_info N/A finished N/A N/A N/A N/A self pop_queue container N/A raw_obj N/A name N/A obj_info N/A q_ts N/A obj_info N/A q_record N/A N/A N/A self log_stats N/A N/A N/A N/A self logger debug finished container %s container N/A run_once N/A N/A self N/A args kwargs N/A N/A 
        Process every entry in the queue.
         N/A N/A N/A N/A N/A self reconcile N/A N/A N/A N/A N/A N/A N/A self logger exception Unhandled Exception trying to reconcile N/A N/A N/A self log_stats force True N/A run_forever N/A N/A self N/A args kwargs N/A N/A True N/A N/A N/A N/A self run_once args kwargs N/A N/A self stats N/A defaultdict int N/A N/A N/A N/A self logger info sleeping between intervals (%ss) N/A self interval N/A N/A N/A time sleep N/A self interval N/A N/A