)]}'
{"etc/proxy-server.conf-sample":[{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"71eca33c6ba1446c7ad278d8e4707b2ba15294e9","unresolved":false,"context_lines":[{"line_number":306,"context_line":"# Per-policy configuration allows operators even more fine grained control of"},{"line_number":307,"context_line":"# per-replica timeouts.  Replicas w/o specific values set use the policy\u0027s"},{"line_number":308,"context_line":"# configured concurrency_timeout."},{"line_number":309,"context_line":"# concurrency_timeout\u003cN\u003e \u003d \u003cconcurrency_timeout\u003e"},{"line_number":310,"context_line":""},{"line_number":311,"context_line":"[filter:tempauth]"},{"line_number":312,"context_line":"use \u003d egg:swift#tempauth"}],"source_content_type":"application/octet-stream","patch_set":3,"id":"bf51134e_d88c8d81","line":309,"range":{"start_line":309,"start_character":21,"end_line":309,"end_character":24},"updated":"2020-07-01 21:28:10.000000000","message":"We\u0027ll want to give people more advice about what the \u003cN\u003e means.","commit_id":"f5c1c4266c03fcc27740239213548a47d2c4a590"}],"swift/proxy/controllers/account.py":[{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"71eca33c6ba1446c7ad278d8e4707b2ba15294e9","unresolved":false,"context_lines":[{"line_number":71,"context_line":"        req.params \u003d params"},{"line_number":72,"context_line":"        resp \u003d self.GETorHEAD_base("},{"line_number":73,"context_line":"            req, _(\u0027Account\u0027), node_iter, partition,"},{"line_number":74,"context_line":"            req.swift_entity_path.rstrip(\u0027/\u0027), concurrency, None)"},{"line_number":75,"context_line":"        if resp.status_int \u003d\u003d HTTP_NOT_FOUND:"},{"line_number":76,"context_line":"            if resp.headers.get(\u0027X-Account-Status\u0027, \u0027\u0027).lower() \u003d\u003d \u0027deleted\u0027:"},{"line_number":77,"context_line":"                resp.status \u003d HTTP_GONE"}],"source_content_type":"text/x-python","patch_set":3,"id":"bf51134e_78caa1a1","line":74,"range":{"start_line":74,"start_character":60,"end_line":74,"end_character":64},"updated":"2020-07-01 21:28:10.000000000","message":"This isn\u0027t strictly necessary, since it matches the default kwarg for policy.\n\nI think I\u0027d prefer that we either don\u0027t pass this at all, or pass it explicitly as\n\n policy\u003dNone","commit_id":"f5c1c4266c03fcc27740239213548a47d2c4a590"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"61f6d2698132077a36a02229bc7958422644a5c7","unresolved":false,"context_lines":[{"line_number":71,"context_line":"        req.params \u003d params"},{"line_number":72,"context_line":"        resp \u003d self.GETorHEAD_base("},{"line_number":73,"context_line":"            req, _(\u0027Account\u0027), node_iter, partition,"},{"line_number":74,"context_line":"            req.swift_entity_path.rstrip(\u0027/\u0027), concurrency, None)"},{"line_number":75,"context_line":"        if resp.status_int \u003d\u003d HTTP_NOT_FOUND:"},{"line_number":76,"context_line":"            if resp.headers.get(\u0027X-Account-Status\u0027, \u0027\u0027).lower() \u003d\u003d \u0027deleted\u0027:"},{"line_number":77,"context_line":"                resp.status \u003d HTTP_GONE"}],"source_content_type":"text/x-python","patch_set":3,"id":"9f560f44_92665b51","line":74,"range":{"start_line":74,"start_character":60,"end_line":74,"end_character":64},"in_reply_to":"bf51134e_78caa1a1","updated":"2020-08-17 21:47:02.000000000","message":"Done","commit_id":"f5c1c4266c03fcc27740239213548a47d2c4a590"}],"swift/proxy/controllers/base.py":[{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"6acee69e7efb7afb51a0ac8e3413b7452ee33910","unresolved":false,"context_lines":[{"line_number":1371,"context_line":"            _timeout \u003d self.app.get_policy_options("},{"line_number":1372,"context_line":"                self.policy).concurrency_timeout(i) \\"},{"line_number":1373,"context_line":"                if pile.inflight \u003c self.concurrency else None"},{"line_number":1374,"context_line":"            if pile.waitfirst(_timeout):"},{"line_number":1375,"context_line":"                break"},{"line_number":1376,"context_line":"        else:"},{"line_number":1377,"context_line":"            # ran out of nodes, see if any stragglers will finish"}],"source_content_type":"text/x-python","patch_set":3,"id":"bf51134e_9735ecf9","line":1374,"updated":"2020-07-14 23:55:43.000000000","message":"So this\u0027ll look at concurrency_timeout0 through concurrency_timeout\u003crequest_node_count-1\u003e...","commit_id":"f5c1c4266c03fcc27740239213548a47d2c4a590"}],"swift/proxy/controllers/container.py":[{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"71eca33c6ba1446c7ad278d8e4707b2ba15294e9","unresolved":false,"context_lines":[{"line_number":117,"context_line":"        req.params \u003d params"},{"line_number":118,"context_line":"        resp \u003d self.GETorHEAD_base("},{"line_number":119,"context_line":"            req, _(\u0027Container\u0027), node_iter, part,"},{"line_number":120,"context_line":"            req.swift_entity_path, concurrency, None)"},{"line_number":121,"context_line":"        resp_record_type \u003d resp.headers.get(\u0027X-Backend-Record-Type\u0027, \u0027\u0027)"},{"line_number":122,"context_line":"        if all((req.method \u003d\u003d \"GET\", record_type \u003d\u003d \u0027auto\u0027,"},{"line_number":123,"context_line":"               resp_record_type.lower() \u003d\u003d \u0027shard\u0027)):"}],"source_content_type":"text/x-python","patch_set":3,"id":"bf51134e_b8c3998a","line":120,"updated":"2020-07-01 21:28:10.000000000","message":"Same comment from account.py applies.","commit_id":"f5c1c4266c03fcc27740239213548a47d2c4a590"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"61f6d2698132077a36a02229bc7958422644a5c7","unresolved":false,"context_lines":[{"line_number":117,"context_line":"        req.params \u003d params"},{"line_number":118,"context_line":"        resp \u003d self.GETorHEAD_base("},{"line_number":119,"context_line":"            req, _(\u0027Container\u0027), node_iter, part,"},{"line_number":120,"context_line":"            req.swift_entity_path, concurrency, None)"},{"line_number":121,"context_line":"        resp_record_type \u003d resp.headers.get(\u0027X-Backend-Record-Type\u0027, \u0027\u0027)"},{"line_number":122,"context_line":"        if all((req.method \u003d\u003d \"GET\", record_type \u003d\u003d \u0027auto\u0027,"},{"line_number":123,"context_line":"               resp_record_type.lower() \u003d\u003d \u0027shard\u0027)):"}],"source_content_type":"text/x-python","patch_set":3,"id":"9f560f44_f2e99780","line":120,"in_reply_to":"bf51134e_b8c3998a","updated":"2020-08-17 21:47:02.000000000","message":"Done","commit_id":"f5c1c4266c03fcc27740239213548a47d2c4a590"}],"swift/proxy/controllers/obj.py":[{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"6acee69e7efb7afb51a0ac8e3413b7452ee33910","unresolved":false,"context_lines":[{"line_number":2906,"context_line":"            node_count +\u003d 1"},{"line_number":2907,"context_line":"            try:"},{"line_number":2908,"context_line":"                feeder_q.get(timeout\u003dself.app.get_policy_options("},{"line_number":2909,"context_line":"                    policy).concurrency_timeout(node_count))"},{"line_number":2910,"context_line":"            except Empty:"},{"line_number":2911,"context_line":"                if safe_iter.unsafe_iter.primaries_left:"},{"line_number":2912,"context_line":"                    # this will run async, if it ends up taking the last"}],"source_content_type":"text/x-python","patch_set":3,"id":"bf51134e_8915d43f","line":2909,"updated":"2020-07-14 23:55:43.000000000","message":"While this one ranges over concurrency_timeout\u003cec_ndata\u003e through concurrency_timeout\u003crequest_node_count-1\u003e -- yeah? Or is it through concurrency_timeout\u003crequest_node_count\u003e...","commit_id":"f5c1c4266c03fcc27740239213548a47d2c4a590"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"730282fd5483f744de1c47fba05cdfab0bc18ce1","unresolved":false,"context_lines":[{"line_number":867,"context_line":"            if self.app.get_policy_options(policy).concurrent_gets else 1"},{"line_number":868,"context_line":"        resp \u003d self.GETorHEAD_base("},{"line_number":869,"context_line":"            req, _(\u0027Object\u0027), node_iter, partition,"},{"line_number":870,"context_line":"            req.swift_entity_path, concurrency, policy)"},{"line_number":871,"context_line":"        return resp"},{"line_number":872,"context_line":""},{"line_number":873,"context_line":"    def _make_putter(self, node, part, req, headers):"}],"source_content_type":"text/x-python","patch_set":6,"id":"9f560f44_717bfc8a","line":870,"range":{"start_line":870,"start_character":35,"end_line":870,"end_character":54},"updated":"2020-08-07 17:35:49.000000000","message":"I wonder if this should just accept\n\n self.app.get_policy_options(policy)\n\nand then pick off concurrency, concurrent_gets, etc. in GETorHEAD_base...\n\n*shrug* Could be a future refactor.","commit_id":"9360b9bad23945ff6f1c5dac503bc5a77c110c8d"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"61f6d2698132077a36a02229bc7958422644a5c7","unresolved":false,"context_lines":[{"line_number":2841,"context_line":""},{"line_number":2842,"context_line":"    def feed_remaining_primaries(self, safe_iter, pile, req, partition, policy,"},{"line_number":2843,"context_line":"                                 buckets, feeder_q):"},{"line_number":2844,"context_line":"        timeout \u003d self.app.get_policy_options(policy).concurrency_timeout"},{"line_number":2845,"context_line":"        while True:"},{"line_number":2846,"context_line":"            try:"},{"line_number":2847,"context_line":"                feeder_q.get(timeout\u003dtimeout)"}],"source_content_type":"text/x-python","patch_set":6,"id":"9f560f44_8d1c4878","line":2844,"updated":"2020-08-17 21:47:02.000000000","message":"i mean if it\u0027s got the self.app and the policy it can at pretty much any options...","commit_id":"9360b9bad23945ff6f1c5dac503bc5a77c110c8d"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"61f6d2698132077a36a02229bc7958422644a5c7","unresolved":false,"context_lines":[{"line_number":2867,"context_line":"            # one object server because all fragments hold all metadata"},{"line_number":2868,"context_line":"            # information about the object."},{"line_number":2869,"context_line":"            concurrency \u003d policy.ec_ndata \\"},{"line_number":2870,"context_line":"                if self.app.get_policy_options(policy).concurrent_gets else 1"},{"line_number":2871,"context_line":"            resp \u003d self.GETorHEAD_base("},{"line_number":2872,"context_line":"                req, _(\u0027Object\u0027), node_iter, partition,"},{"line_number":2873,"context_line":"                req.swift_entity_path, concurrency, policy)"}],"source_content_type":"text/x-python","patch_set":6,"id":"9f560f44_4d02300d","line":2870,"updated":"2020-08-17 21:47:02.000000000","message":"idk, maybe knowing when to use ec_ndata vs object_ring.replicas is context that belongs outside of GETorHEAD_base","commit_id":"9360b9bad23945ff6f1c5dac503bc5a77c110c8d"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"3d1d17dfc474da6af9c35f16f172b9a252fb6f4d","unresolved":false,"context_lines":[{"line_number":2867,"context_line":"            # one object server because all fragments hold all metadata"},{"line_number":2868,"context_line":"            # information about the object."},{"line_number":2869,"context_line":"            concurrency \u003d policy.ec_ndata \\"},{"line_number":2870,"context_line":"                if self.app.get_policy_options(policy).concurrent_gets else 1"},{"line_number":2871,"context_line":"            resp \u003d self.GETorHEAD_base("},{"line_number":2872,"context_line":"                req, _(\u0027Object\u0027), node_iter, partition,"},{"line_number":2873,"context_line":"                req.swift_entity_path, concurrency, policy)"}],"source_content_type":"text/x-python","patch_set":6,"id":"9f560f44_f1679eb6","line":2870,"in_reply_to":"9f560f44_4d02300d","updated":"2020-08-17 22:08:59.000000000","message":"Good point, it definitely does.\n\nOoooh... should we include concurrent_ec_extra_requests here, too?","commit_id":"9360b9bad23945ff6f1c5dac503bc5a77c110c8d"}],"swift/proxy/server.py":[{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"6acee69e7efb7afb51a0ac8e3413b7452ee33910","unresolved":false,"context_lines":[{"line_number":155,"context_line":"        self._concurrency_timeouts \u003d []"},{"line_number":156,"context_line":"        if policy is not None:"},{"line_number":157,"context_line":"            replica_count \u003d policy.object_ring.replica_count"},{"line_number":158,"context_line":"            for i in range(int(math.ceil(replica_count))):"},{"line_number":159,"context_line":"                conf_key \u003d \u0027concurrency_timeout%d\u0027 % i"},{"line_number":160,"context_line":"                # don\u0027t let base conf opts fall through"},{"line_number":161,"context_line":"                base_conf.pop(conf_key, None)"}],"source_content_type":"text/x-python","patch_set":3,"id":"bf51134e_d76da403","line":158,"updated":"2020-07-14 23:55:43.000000000","message":"I was going to make some comment about how we\u0027re still spawning the first ndata all at once -- but then I realized we\u0027re getting this flexibility for replicated policies, too. Interesting...\n\nShould we log a warning if it\u0027s an EC policy and there are timeouts configured for 0 through ndata-1, though? They seem to be ignored if set.","commit_id":"f5c1c4266c03fcc27740239213548a47d2c4a590"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"8fceff7b7ace4b7793ec8791da6986415f1b4f16","unresolved":false,"context_lines":[{"line_number":101,"context_line":"    :param conf: the proxy-server config dict."},{"line_number":102,"context_line":"    :param override_conf: a dict of overriding configuration options."},{"line_number":103,"context_line":"    \"\"\""},{"line_number":104,"context_line":"    def __init__(self, base_conf, override_conf, app, policy):"},{"line_number":105,"context_line":""},{"line_number":106,"context_line":"        def get(key, default):"},{"line_number":107,"context_line":"            return override_conf.get(key, base_conf.get(key, default))"}],"source_content_type":"text/x-python","patch_set":4,"id":"9f560f44_466a4580","line":104,"range":{"start_line":104,"start_character":54,"end_line":104,"end_character":60},"updated":"2020-07-27 17:17:26.000000000","message":"Where is this getting used?","commit_id":"67695100b413a03eb14e2936d50e4f5f8c40a476"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"8fceff7b7ace4b7793ec8791da6986415f1b4f16","unresolved":false,"context_lines":[{"line_number":150,"context_line":""},{"line_number":151,"context_line":"        self.concurrent_gets \u003d config_true_value(get(\u0027concurrent_gets\u0027, False))"},{"line_number":152,"context_line":"        self.concurrency_timeout \u003d float(get("},{"line_number":153,"context_line":"            \u0027concurrency_timeout\u0027, app.conn_timeout))"},{"line_number":154,"context_line":"        self.concurrent_ec_extra_requests \u003d int(get("},{"line_number":155,"context_line":"            \u0027concurrent_ec_extra_requests\u0027, 0))"},{"line_number":156,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"9f560f44_c613f50c","line":153,"range":{"start_line":153,"start_character":35,"end_line":153,"end_character":51},"updated":"2020-07-27 17:17:26.000000000","message":"We can\u0027t just pull this out of base_conf?","commit_id":"67695100b413a03eb14e2936d50e4f5f8c40a476"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"f24133ec82be0cccb6c77bf7bf3a8a2c3379dc98","unresolved":false,"context_lines":[{"line_number":154,"context_line":"                \u0027read_affinity\u0027,"},{"line_number":155,"context_line":"                \u0027write_affinity\u0027,"},{"line_number":156,"context_line":"                \u0027write_affinity_node_count\u0027,"},{"line_number":157,"context_line":"                \u0027write_affinity_handoff_delete_count\u0027)))"},{"line_number":158,"context_line":""},{"line_number":159,"context_line":"    def __eq__(self, other):"},{"line_number":160,"context_line":"        if not isinstance(other, ProxyOverrideOptions):"}],"source_content_type":"text/x-python","patch_set":6,"id":"9f560f44_2e26ecb8","side":"PARENT","line":157,"updated":"2020-08-14 20:39:18.000000000","message":"This seems like a loss:\n\n Aug 14 20:37:54 saio proxy-server: Loaded override config for (default): \u003cswift.proxy.server.ProxyOverrideOptions object at 0x7f7147c3e390\u003e","commit_id":"dbf1afcfccd2cf0a83db2520691febf5728a3998"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"61f6d2698132077a36a02229bc7958422644a5c7","unresolved":false,"context_lines":[{"line_number":154,"context_line":"                \u0027read_affinity\u0027,"},{"line_number":155,"context_line":"                \u0027write_affinity\u0027,"},{"line_number":156,"context_line":"                \u0027write_affinity_node_count\u0027,"},{"line_number":157,"context_line":"                \u0027write_affinity_handoff_delete_count\u0027)))"},{"line_number":158,"context_line":""},{"line_number":159,"context_line":"    def __eq__(self, other):"},{"line_number":160,"context_line":"        if not isinstance(other, ProxyOverrideOptions):"}],"source_content_type":"text/x-python","patch_set":6,"id":"9f560f44_2d241cc6","side":"PARENT","line":157,"in_reply_to":"9f560f44_2e26ecb8","updated":"2020-08-17 21:47:02.000000000","message":"oic, i\u0027ll try to track down that logging so it doesn\u0027t depend on the __repr__ - but if we want to enumerate all the options we\u0027ll have to find some way to DRY it out","commit_id":"dbf1afcfccd2cf0a83db2520691febf5728a3998"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"ba85ecaed02be63e05e76b523edbdec4ba30b39d","unresolved":false,"context_lines":[{"line_number":309,"context_line":"        try:"},{"line_number":310,"context_line":"            override \u003d ProxyOverrideOptions(conf, override_conf, self, policy)"},{"line_number":311,"context_line":"            self.logger.debug(\"Loaded override config for %s: %r\" %"},{"line_number":312,"context_line":"                              (label_for_policy, override))"},{"line_number":313,"context_line":"            return override"},{"line_number":314,"context_line":"        except ValueError as err:"},{"line_number":315,"context_line":"            raise ValueError(\u0027%s for %s\u0027 % (err, label_for_policy))"}],"source_content_type":"text/x-python","patch_set":9,"id":"9f560f44_582d07fc","line":312,"updated":"2020-08-28 22:41:15.000000000","message":"Reminder that we still want this logging to be useful.","commit_id":"0283a124ecc4fcb96ba5bd54c0bb5ef100d27904"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"476a2cb148c4becfc923cb7dda84ce4332b7a0a0","unresolved":false,"context_lines":[{"line_number":309,"context_line":"        try:"},{"line_number":310,"context_line":"            override \u003d ProxyOverrideOptions(conf, override_conf, self, policy)"},{"line_number":311,"context_line":"            self.logger.debug(\"Loaded override config for %s: %r\" %"},{"line_number":312,"context_line":"                              (label_for_policy, override))"},{"line_number":313,"context_line":"            return override"},{"line_number":314,"context_line":"        except ValueError as err:"},{"line_number":315,"context_line":"            raise ValueError(\u0027%s for %s\u0027 % (err, label_for_policy))"}],"source_content_type":"text/x-python","patch_set":9,"id":"9f560f44_5ab65fde","line":312,"in_reply_to":"9f560f44_582d07fc","updated":"2020-09-02 17:16:48.000000000","message":"I guess this is \"useful\"\n\n\tSep  2 17:14:13 saio proxy-server: Loaded override config for (default): ProxyOverrideOptions({}, {\u0027sorting_method\u0027: \u0027shuffle\u0027, \u0027read_affinity\u0027: \u0027\u0027, \u0027write_affinity\u0027: \u0027\u0027, \u0027write_affinity_node_count\u0027: \u00272 * replicas\u0027, \u0027write_affinity_handoff_delete_count\u0027: None, \u0027concurrent_gets\u0027: False, \u0027concurrency_timeout\u0027: 0.5, \u0027concurrent_ec_extra_requests\u0027: 0}, app)","commit_id":"0283a124ecc4fcb96ba5bd54c0bb5ef100d27904"}],"test/unit/proxy/test_server.py":[{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"730282fd5483f744de1c47fba05cdfab0bc18ce1","unresolved":false,"context_lines":[{"line_number":1567,"context_line":"        app \u003d self._write_conf_and_load_app(conf_sections)"},{"line_number":1568,"context_line":"        self.assertIn(\u0027ProxyOverrideOptions\u0027,"},{"line_number":1569,"context_line":"                      repr(app.get_policy_options(None)))"},{"line_number":1570,"context_line":"        # this is instance equivilence, not value"},{"line_number":1571,"context_line":"        self.assertEqual(app.get_policy_options(None),"},{"line_number":1572,"context_line":"                         app.get_policy_options(POLICIES[0]))"},{"line_number":1573,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"9f560f44_31b98414","line":1570,"range":{"start_line":1570,"start_character":10,"end_line":1570,"end_character":49},"updated":"2020-08-07 17:35:49.000000000","message":"Maybe use assertIs(), then?","commit_id":"9360b9bad23945ff6f1c5dac503bc5a77c110c8d"}]}
