)]}'
{"etc/container-server.conf-sample":[{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"d7db6b76e61fbd3941ef736e4ef1f19d5200f221","unresolved":true,"context_lines":[{"line_number":9,"context_line":"# devices \u003d /srv/node"},{"line_number":10,"context_line":"# mount_check \u003d true"},{"line_number":11,"context_line":"# disable_fallocate \u003d false"},{"line_number":12,"context_line":"# ring_check_interval \u003d 15.0"},{"line_number":13,"context_line":"#"},{"line_number":14,"context_line":"# Use an integer to override the number of pre-forked processes that will"},{"line_number":15,"context_line":"# accept connections."}],"source_content_type":"application/octet-stream","patch_set":4,"id":"7ee16819_2700d4c9","line":12,"updated":"2021-07-12 15:00:42.000000000","message":"Wait, here? Not etc/container-reconciler.conf-sample?","commit_id":"7f4e1d9e6d64dacccc06351a604e186b73eaf885"},{"author":{"_account_id":7233,"name":"Matthew Oliver","email":"matt@oliver.net.au","username":"mattoliverau"},"change_message_id":"4826ab5954f9bc88898aa4a935a04e7a6293129b","unresolved":true,"context_lines":[{"line_number":9,"context_line":"# devices \u003d /srv/node"},{"line_number":10,"context_line":"# mount_check \u003d true"},{"line_number":11,"context_line":"# disable_fallocate \u003d false"},{"line_number":12,"context_line":"# ring_check_interval \u003d 15.0"},{"line_number":13,"context_line":"#"},{"line_number":14,"context_line":"# Use an integer to override the number of pre-forked processes that will"},{"line_number":15,"context_line":"# accept connections."}],"source_content_type":"application/octet-stream","patch_set":4,"id":"718a7962_cbf0423b","line":12,"in_reply_to":"7ee16819_2700d4c9","updated":"2021-07-13 03:08:11.000000000","message":"LOL, opps. wrong one 😊","commit_id":"7f4e1d9e6d64dacccc06351a604e186b73eaf885"}],"swift/common/ring/ring.py":[{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"d7db6b76e61fbd3941ef736e4ef1f19d5200f221","unresolved":true,"context_lines":[{"line_number":272,"context_line":"    :raises RingLoadError: if the loaded ring data violates its constraint"},{"line_number":273,"context_line":"    \"\"\""},{"line_number":274,"context_line":""},{"line_number":275,"context_line":"    def __init__(self, serialized_path, reload_time\u003d15, ring_name\u003dNone,"},{"line_number":276,"context_line":"                 validation_hook\u003dlambda ring_data: None):"},{"line_number":277,"context_line":"        # can\u0027t use the ring unless HASH_PATH_SUFFIX is set"},{"line_number":278,"context_line":"        validate_configuration()"}],"source_content_type":"text/x-python","patch_set":4,"id":"8739d013_52d1fd01","line":275,"range":{"start_line":275,"start_character":52,"end_line":275,"end_character":54},"updated":"2021-07-12 15:00:42.000000000","message":"We should probably pull this out to a constant so storage_policy.py can reference it. Or make the default None and check for that in here...","commit_id":"7f4e1d9e6d64dacccc06351a604e186b73eaf885"}],"swift/container/reconciler.py":[{"author":{"_account_id":7233,"name":"Matthew Oliver","email":"matt@oliver.net.au","username":"mattoliverau"},"change_message_id":"c3616177fb9240e45a461a4ba846014011fad634","unresolved":true,"context_lines":[{"line_number":356,"context_line":"    pol \u003d POLICIES.get_by_index(policy_index)"},{"line_number":357,"context_line":"    if pol:"},{"line_number":358,"context_line":"        pol.load_ring(swift_dir)"},{"line_number":359,"context_line":"        return not pol.object_ring.next_part_power"},{"line_number":360,"context_line":"    return False"},{"line_number":361,"context_line":""},{"line_number":362,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"446ff648_dbd76ce9","line":359,"updated":"2021-07-06 06:53:54.000000000","message":"What happens if the ring doesn\u0027t get loaded. maybe it should be more like:\n\n  return not (pol.object_ring.next_part_power if pol.object_ring else True)","commit_id":"5a3350c4c76ad813947b60d0f43a4a4a663a5d5c"},{"author":{"_account_id":7233,"name":"Matthew Oliver","email":"matt@oliver.net.au","username":"mattoliverau"},"change_message_id":"c3616177fb9240e45a461a4ba846014011fad634","unresolved":true,"context_lines":[{"line_number":357,"context_line":"    if pol:"},{"line_number":358,"context_line":"        pol.load_ring(swift_dir)"},{"line_number":359,"context_line":"        return not pol.object_ring.next_part_power"},{"line_number":360,"context_line":"    return False"},{"line_number":361,"context_line":""},{"line_number":362,"context_line":""},{"line_number":363,"context_line":"class ContainerReconciler(Daemon):"}],"source_content_type":"text/x-python","patch_set":1,"id":"c2a60b59_37e2528b","line":360,"updated":"2021-07-06 06:53:54.000000000","message":"Question might be, should we track a time or force a ring reload each time? Is there a chance once loaded into the policy singleton we could start dealing with stale rings and still push changes during a PPI.\n\nQuick and dirty could be:\n\n  if pol:\n      # force a ring reload\n      pol.object_ring \u003d None\n      pol.load_ring(swift_dir)\n      return not pol.object_ring.next_part_power","commit_id":"5a3350c4c76ad813947b60d0f43a4a4a663a5d5c"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"273c2f0f365cdd13baeba0e916413a01f3988973","unresolved":true,"context_lines":[{"line_number":376,"context_line":"        self.swift_dir \u003d conf.get(\u0027swift_dir\u0027, \u0027/etc/swift\u0027)"},{"line_number":377,"context_line":"        self.stats \u003d defaultdict(int)"},{"line_number":378,"context_line":"        self.last_stat_time \u003d time.time()"},{"line_number":379,"context_line":"        self.ring_check_interval \u003d float(conf.get(\u0027ring_check_interval\u0027, 15))"},{"line_number":380,"context_line":"        self.next_check \u003d time.time() + self.ring_check_interval"},{"line_number":381,"context_line":""},{"line_number":382,"context_line":"    def stats_log(self, metric, msg, *args, **kwargs):"}],"source_content_type":"text/x-python","patch_set":2,"id":"beb48d3e_5eb60282","line":379,"updated":"2021-07-07 01:45:43.000000000","message":":-/ Why don\u0027t we ever actually *override* with Ring.reload_time?","commit_id":"2ee4d1c774066d09bb11527b864d86b5f9a33adb"},{"author":{"_account_id":7233,"name":"Matthew Oliver","email":"matt@oliver.net.au","username":"mattoliverau"},"change_message_id":"f813b91c5c088d270e3fdd457a1bd377b0d1893f","unresolved":true,"context_lines":[{"line_number":376,"context_line":"        self.swift_dir \u003d conf.get(\u0027swift_dir\u0027, \u0027/etc/swift\u0027)"},{"line_number":377,"context_line":"        self.stats \u003d defaultdict(int)"},{"line_number":378,"context_line":"        self.last_stat_time \u003d time.time()"},{"line_number":379,"context_line":"        self.ring_check_interval \u003d float(conf.get(\u0027ring_check_interval\u0027, 15))"},{"line_number":380,"context_line":"        self.next_check \u003d time.time() + self.ring_check_interval"},{"line_number":381,"context_line":""},{"line_number":382,"context_line":"    def stats_log(self, metric, msg, *args, **kwargs):"}],"source_content_type":"text/x-python","patch_set":2,"id":"0bfca51b_9839f387","line":379,"in_reply_to":"8baf1959_73783f68","updated":"2021-07-07 04:04:53.000000000","message":"so in Ring it already is a reload.. I must\u0027ve been thinking about RingData, so not as much as a change as I originally thought 😊","commit_id":"2ee4d1c774066d09bb11527b864d86b5f9a33adb"},{"author":{"_account_id":7233,"name":"Matthew Oliver","email":"matt@oliver.net.au","username":"mattoliverau"},"change_message_id":"e776f488bdfc9e8ed79389382c9c1501c3e2f5a5","unresolved":true,"context_lines":[{"line_number":376,"context_line":"        self.swift_dir \u003d conf.get(\u0027swift_dir\u0027, \u0027/etc/swift\u0027)"},{"line_number":377,"context_line":"        self.stats \u003d defaultdict(int)"},{"line_number":378,"context_line":"        self.last_stat_time \u003d time.time()"},{"line_number":379,"context_line":"        self.ring_check_interval \u003d float(conf.get(\u0027ring_check_interval\u0027, 15))"},{"line_number":380,"context_line":"        self.next_check \u003d time.time() + self.ring_check_interval"},{"line_number":381,"context_line":""},{"line_number":382,"context_line":"    def stats_log(self, metric, msg, *args, **kwargs):"}],"source_content_type":"text/x-python","patch_set":2,"id":"8baf1959_73783f68","line":379,"in_reply_to":"beb48d3e_5eb60282","updated":"2021-07-07 04:02:50.000000000","message":"huh, well will you look at that, there is a bunch of reloading stuff in the ring. Nice, I\u0027ve never noticed!\n\nBecause checking for next_part_power is something we\u0027re starting to do in a few places. I wonder if I should make next_part_power a property (move the variable to _next_part_power) and include a reload check.","commit_id":"2ee4d1c774066d09bb11527b864d86b5f9a33adb"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"273c2f0f365cdd13baeba0e916413a01f3988973","unresolved":true,"context_lines":[{"line_number":518,"context_line":"                           \u0027a part power increase (PPI)\u0027, q_policy_index)"},{"line_number":519,"context_line":"            return False"},{"line_number":520,"context_line":"        if not self.can_reconcile_policy(container_policy_index):"},{"line_number":521,"context_line":"            self.stats_log(\u0027ppi_skip\u0027, \u0027Container policy (%r) in the middle \u0027"},{"line_number":522,"context_line":"                           \u0027of a part power increase (PPI)\u0027,"},{"line_number":523,"context_line":"                           container_policy_index)"},{"line_number":524,"context_line":"            return False"}],"source_content_type":"text/x-python","patch_set":2,"id":"efdf39d9_cfe0628b","line":521,"range":{"start_line":521,"start_character":28,"end_line":521,"end_character":36},"updated":"2021-07-07 01:45:43.000000000","message":"Debating about whether we ought to separate these out as ppi_skip_src/ppi_skip_dest","commit_id":"2ee4d1c774066d09bb11527b864d86b5f9a33adb"},{"author":{"_account_id":7233,"name":"Matthew Oliver","email":"matt@oliver.net.au","username":"mattoliverau"},"change_message_id":"e776f488bdfc9e8ed79389382c9c1501c3e2f5a5","unresolved":true,"context_lines":[{"line_number":518,"context_line":"                           \u0027a part power increase (PPI)\u0027, q_policy_index)"},{"line_number":519,"context_line":"            return False"},{"line_number":520,"context_line":"        if not self.can_reconcile_policy(container_policy_index):"},{"line_number":521,"context_line":"            self.stats_log(\u0027ppi_skip\u0027, \u0027Container policy (%r) in the middle \u0027"},{"line_number":522,"context_line":"                           \u0027of a part power increase (PPI)\u0027,"},{"line_number":523,"context_line":"                           container_policy_index)"},{"line_number":524,"context_line":"            return False"}],"source_content_type":"text/x-python","patch_set":2,"id":"d5fc890c_9c78dd55","line":521,"range":{"start_line":521,"start_character":28,"end_line":521,"end_character":36},"in_reply_to":"efdf39d9_cfe0628b","updated":"2021-07-07 04:02:50.000000000","message":"yeah, not a bad idea. I\u0027ve been debating over the whole stat itself.. but it would be good to know.","commit_id":"2ee4d1c774066d09bb11527b864d86b5f9a33adb"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"d267a19da4cdf0961104e087d9a98b05359a86ed","unresolved":true,"context_lines":[{"line_number":373,"context_line":"            \u0027Swift Container Reconciler\u0027,"},{"line_number":374,"context_line":"            request_tries,"},{"line_number":375,"context_line":"            use_replication_network\u003dTrue)"},{"line_number":376,"context_line":"        self.swift_dir \u003d conf.get(\u0027swift_dir\u0027, \u0027/etc/swift\u0027)"},{"line_number":377,"context_line":"        self.stats \u003d defaultdict(int)"},{"line_number":378,"context_line":"        self.last_stat_time \u003d time.time()"},{"line_number":379,"context_line":"        self.ring_check_interval \u003d float(conf.get(\u0027ring_check_interval\u0027, 15))"}],"source_content_type":"text/x-python","patch_set":3,"id":"2d141836_a9925754","line":376,"updated":"2021-07-07 17:15:37.000000000","message":"Cool; already in the sample conf (which makes sense).","commit_id":"a2f842ab11e3804bf2963105b1ca8704dc0714f1"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"d267a19da4cdf0961104e087d9a98b05359a86ed","unresolved":true,"context_lines":[{"line_number":376,"context_line":"        self.swift_dir \u003d conf.get(\u0027swift_dir\u0027, \u0027/etc/swift\u0027)"},{"line_number":377,"context_line":"        self.stats \u003d defaultdict(int)"},{"line_number":378,"context_line":"        self.last_stat_time \u003d time.time()"},{"line_number":379,"context_line":"        self.ring_check_interval \u003d float(conf.get(\u0027ring_check_interval\u0027, 15))"},{"line_number":380,"context_line":""},{"line_number":381,"context_line":"    def stats_log(self, metric, msg, *args, **kwargs):"},{"line_number":382,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":3,"id":"d33b9871_7a349cb2","line":379,"updated":"2021-07-07 17:15:37.000000000","message":"This should be added to the sample conf, though -- probably in the [DEFAULT] section?","commit_id":"a2f842ab11e3804bf2963105b1ca8704dc0714f1"},{"author":{"_account_id":7233,"name":"Matthew Oliver","email":"matt@oliver.net.au","username":"mattoliverau"},"change_message_id":"a15a9c493f0165cfdd6f56cb673ebc315f1341a4","unresolved":false,"context_lines":[{"line_number":376,"context_line":"        self.swift_dir \u003d conf.get(\u0027swift_dir\u0027, \u0027/etc/swift\u0027)"},{"line_number":377,"context_line":"        self.stats \u003d defaultdict(int)"},{"line_number":378,"context_line":"        self.last_stat_time \u003d time.time()"},{"line_number":379,"context_line":"        self.ring_check_interval \u003d float(conf.get(\u0027ring_check_interval\u0027, 15))"},{"line_number":380,"context_line":""},{"line_number":381,"context_line":"    def stats_log(self, metric, msg, *args, **kwargs):"},{"line_number":382,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":3,"id":"d765b38d_a89eb08e","line":379,"in_reply_to":"d33b9871_7a349cb2","updated":"2021-07-08 23:05:18.000000000","message":"Done","commit_id":"a2f842ab11e3804bf2963105b1ca8704dc0714f1"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"d267a19da4cdf0961104e087d9a98b05359a86ed","unresolved":true,"context_lines":[{"line_number":423,"context_line":"    def can_reconcile_policy(self, policy_index):"},{"line_number":424,"context_line":"        pol \u003d POLICIES.get_by_index(policy_index)"},{"line_number":425,"context_line":"        if pol:"},{"line_number":426,"context_line":"            pol.load_ring(self.swift_dir, reload_time\u003dself.ring_check_interval)"},{"line_number":427,"context_line":"            return pol.object_ring.next_part_power is None"},{"line_number":428,"context_line":"        return False"},{"line_number":429,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"813b4730_363f2d33","line":426,"updated":"2021-07-07 17:15:37.000000000","message":"Am I right in thinking there\u0027s a chance the internal-client may have already loaded up the ring, without passing the configured reload time?","commit_id":"a2f842ab11e3804bf2963105b1ca8704dc0714f1"},{"author":{"_account_id":7233,"name":"Matthew Oliver","email":"matt@oliver.net.au","username":"mattoliverau"},"change_message_id":"a15a9c493f0165cfdd6f56cb673ebc315f1341a4","unresolved":true,"context_lines":[{"line_number":423,"context_line":"    def can_reconcile_policy(self, policy_index):"},{"line_number":424,"context_line":"        pol \u003d POLICIES.get_by_index(policy_index)"},{"line_number":425,"context_line":"        if pol:"},{"line_number":426,"context_line":"            pol.load_ring(self.swift_dir, reload_time\u003dself.ring_check_interval)"},{"line_number":427,"context_line":"            return pol.object_ring.next_part_power is None"},{"line_number":428,"context_line":"        return False"},{"line_number":429,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"e40fcb94_76def5f9","line":426,"in_reply_to":"813b4730_363f2d33","updated":"2021-07-08 23:05:18.000000000","message":"hmm, yeah I was worried about something like that.. it being a singlton and all makes it hard to know. Currently so long and this is the first load of the ring we chould be adding the ring_check_interval.\n\nI guess we could update ring_check_interval on the pol.load_ring if it exists. it\u0027ll it\u0027ll then be used on next timer iteration.\n\nNot 100% sure I like it. It\u0027s either that or we could pull and cache all the rings in the recondiler.. but in my mind thats almost exactly like that we get with the singleton.","commit_id":"a2f842ab11e3804bf2963105b1ca8704dc0714f1"}]}
