)]}'
{"swift/proxy/controllers/obj.py":[{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"5b2597dc4166bf91d8546bffd79d84f036aef002","unresolved":false,"context_lines":[{"line_number":3006,"context_line":"                        bodies.append(getter.body)"},{"line_number":3007,"context_line":"                        headers.append(getter.source_headers)"},{"line_number":3008,"context_line":""},{"line_number":3009,"context_line":"            if not (statuses or best_bucket.durable):"},{"line_number":3010,"context_line":"                # pretend that non-durable bucket was 404s"},{"line_number":3011,"context_line":"                statuses.append(404)"},{"line_number":3012,"context_line":"                reasons.append(\u0027404 Not Found\u0027)"}],"source_content_type":"text/x-python","patch_set":1,"id":"9f560f44_cdada09c","line":3009,"updated":"2020-08-17 21:15:04.000000000","message":"if one of the primaries gives us a 404; I\u0027d expect statuses not to be empty... OOOOhhhh except we threw it out hrmm...","commit_id":"99a14dfdc919e89b23c1ea70492ef376d3ced8d5"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"5a46da32bdfba36886759441670c5c403232e136","unresolved":false,"context_lines":[{"line_number":3000,"context_line":"                            # We have reason to believe there\u0027s still good data"},{"line_number":3001,"context_line":"                            # out there, it\u0027s just currently unavailable"},{"line_number":3002,"context_line":"                            continue"},{"line_number":3003,"context_line":"                    if getter.status:"},{"line_number":3004,"context_line":"                        statuses.append(getter.status)"},{"line_number":3005,"context_line":"                        reasons.append(getter.reason)"},{"line_number":3006,"context_line":"                        bodies.append(getter.body)"}],"source_content_type":"text/x-python","patch_set":2,"id":"9f560f44_51c64a18","line":3003,"updated":"2020-08-17 22:59:50.000000000","message":"so this is annoying, in test_GET_no_response_error we just iterated over 2 * replica count getters that all failed to connect and returned False\n\nshouldn\u0027t that signal make it through to best_response?","commit_id":"1718c0551e164c177d54a40bb1db7626c57ba067"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"7fd45eb69a56650a7d0c2b6976fb80cb2b87fa33","unresolved":false,"context_lines":[{"line_number":3000,"context_line":"                            # We have reason to believe there\u0027s still good data"},{"line_number":3001,"context_line":"                            # out there, it\u0027s just currently unavailable"},{"line_number":3002,"context_line":"                            continue"},{"line_number":3003,"context_line":"                    if getter.status:"},{"line_number":3004,"context_line":"                        statuses.append(getter.status)"},{"line_number":3005,"context_line":"                        reasons.append(getter.reason)"},{"line_number":3006,"context_line":"                        bodies.append(getter.body)"}],"source_content_type":"text/x-python","patch_set":2,"id":"9f560f44_91b74287","line":3003,"in_reply_to":"9f560f44_51c64a18","updated":"2020-08-17 23:21:24.000000000","message":"There is *so much* that best_response isn\u0027t privy to at the moment w.r.t. EC :-(","commit_id":"1718c0551e164c177d54a40bb1db7626c57ba067"}],"test/unit/proxy/controllers/test_obj.py":[{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"5a46da32bdfba36886759441670c5c403232e136","unresolved":false,"context_lines":[{"line_number":2441,"context_line":"        req \u003d swift.common.swob.Request.blank(\u0027/v1/a/c/o\u0027)"},{"line_number":2442,"context_line":"        with set_http_connect():"},{"line_number":2443,"context_line":"            resp \u003d req.get_response(self.app)"},{"line_number":2444,"context_line":"        self.assertEqual(resp.status_int, 503)"},{"line_number":2445,"context_line":""},{"line_number":2446,"context_line":"    def test_feed_remaining_primaries(self):"},{"line_number":2447,"context_line":"        controller \u003d self.controller_cls("}],"source_content_type":"text/x-python","patch_set":2,"id":"9f560f44_915bc285","line":2444,"updated":"2020-08-17 22:59:50.000000000","message":"be nice to make sure we have one of these for replicated as well","commit_id":"1718c0551e164c177d54a40bb1db7626c57ba067"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"7fd45eb69a56650a7d0c2b6976fb80cb2b87fa33","unresolved":false,"context_lines":[{"line_number":2441,"context_line":"        req \u003d swift.common.swob.Request.blank(\u0027/v1/a/c/o\u0027)"},{"line_number":2442,"context_line":"        with set_http_connect():"},{"line_number":2443,"context_line":"            resp \u003d req.get_response(self.app)"},{"line_number":2444,"context_line":"        self.assertEqual(resp.status_int, 503)"},{"line_number":2445,"context_line":""},{"line_number":2446,"context_line":"    def test_feed_remaining_primaries(self):"},{"line_number":2447,"context_line":"        controller \u003d self.controller_cls("}],"source_content_type":"text/x-python","patch_set":2,"id":"9f560f44_f1283e98","line":2444,"in_reply_to":"9f560f44_915bc285","updated":"2020-08-17 23:21:24.000000000","message":"https://github.com/openstack/swift/blob/2.25.0/test/unit/proxy/controllers/test_obj.py#L1585-L1612 seem to cover it pretty well (though none of them is quite exactly the same).","commit_id":"1718c0551e164c177d54a40bb1db7626c57ba067"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"7fd45eb69a56650a7d0c2b6976fb80cb2b87fa33","unresolved":false,"context_lines":[{"line_number":3199,"context_line":""},{"line_number":3200,"context_line":"    def test_GET_with_mixed_durable_frags_and_no_quorum_will_503(self):"},{"line_number":3201,"context_line":"        # all nodes have a frag but there is no one set that reaches quorum,"},{"line_number":3202,"context_line":"        # but since they\u0027re all marked durable (so we *should* be able to"},{"line_number":3203,"context_line":"        # reconstruct), proxy will 503"},{"line_number":3204,"context_line":"        obj1 \u003d self._make_ec_object_stub(pattern\u003d\u0027obj1\u0027)"},{"line_number":3205,"context_line":"        obj2 \u003d self._make_ec_object_stub(pattern\u003d\u0027obj2\u0027)"}],"source_content_type":"text/x-python","patch_set":2,"id":"9f560f44_3165961e","line":3202,"range":{"start_line":3202,"start_character":20,"end_line":3202,"end_character":46},"updated":"2020-08-17 23:21:24.000000000","message":"Only one\u0027s marked durable :-/","commit_id":"1718c0551e164c177d54a40bb1db7626c57ba067"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"7fd45eb69a56650a7d0c2b6976fb80cb2b87fa33","unresolved":false,"context_lines":[{"line_number":3234,"context_line":"            {\u0027obj\u0027: obj1, \u0027frag\u0027: 8, \u0027durable\u0027: False},"},{"line_number":3235,"context_line":"            {\u0027obj\u0027: obj2, \u0027frag\u0027: 8, \u0027durable\u0027: False},"},{"line_number":3236,"context_line":"            {\u0027obj\u0027: obj3, \u0027frag\u0027: 8, \u0027durable\u0027: False},"},{"line_number":3237,"context_line":"            {\u0027obj\u0027: obj4, \u0027frag\u0027: 8},  # only frag for obj4 *is* durable"},{"line_number":3238,"context_line":"        ]"},{"line_number":3239,"context_line":""},{"line_number":3240,"context_line":"        fake_response \u003d self._fake_ec_node_response(node_frags)"}],"source_content_type":"text/x-python","patch_set":2,"id":"9f560f44_713d4edc","line":3237,"updated":"2020-08-17 23:21:24.000000000","message":"Might be a more compelling story if we made one of the objs with 9 frags durable -- I feel like that\u0027s way more likely than finding a durable object but only one frag of it.","commit_id":"1718c0551e164c177d54a40bb1db7626c57ba067"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"7fd45eb69a56650a7d0c2b6976fb80cb2b87fa33","unresolved":false,"context_lines":[{"line_number":3259,"context_line":"            collected_etags)"},{"line_number":3260,"context_line":"        self.assertEqual({200}, collected_status)"},{"line_number":3261,"context_line":""},{"line_number":3262,"context_line":"    def test_GET_with_mixed_durable_and_nondurable_frags_will_503(self):"},{"line_number":3263,"context_line":"        # all nodes have a frag but there is no one set that reaches quorum,"},{"line_number":3264,"context_line":"        # and since at least one is marked durable we *should* be able to"},{"line_number":3265,"context_line":"        # reconstruct, so proxy will 503"}],"source_content_type":"text/x-python","patch_set":2,"id":"9f560f44_b17086dc","line":3262,"range":{"start_line":3262,"start_character":22,"end_line":3262,"end_character":50},"updated":"2020-08-17 23:21:24.000000000","message":"Oh, or maybe we swapped names accidentally?","commit_id":"1718c0551e164c177d54a40bb1db7626c57ba067"}]}
