)]}'
{"octavia/api/v2/controllers/amphora.py":[{"author":{"_account_id":12024,"name":"Tong Liu","email":"tongl@vmware.com","username":"tong101"},"change_message_id":"8f3adde2c9552055a1cf364d14d809cc08571a24","unresolved":false,"context_lines":[{"line_number":93,"context_line":"        \"\"\""},{"line_number":94,"context_line":"        if amphora_id and len(remainder):"},{"line_number":95,"context_line":"            controller \u003d remainder[0]"},{"line_number":96,"context_line":"            remainder \u003d remainder[1:]"},{"line_number":97,"context_line":"            if controller \u003d\u003d \u0027failover\u0027:"},{"line_number":98,"context_line":"                return FailoverController(amp_id\u003damphora_id), remainder"},{"line_number":99,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"df87a7cf_324e4397","line":96,"updated":"2017-12-07 23:36:31.000000000","message":"If there is only one arg in remainder, this will raise exception.","commit_id":"8b0a738ecd9ba01797c6536df0e55da3ee0baa58"},{"author":{"_account_id":10273,"name":"Adam Harwell","email":"flux.adam@gmail.com","username":"rm_you"},"change_message_id":"5ab4fc447496ae20b50db667182cef1c1a00ca7c","unresolved":false,"context_lines":[{"line_number":93,"context_line":"        \"\"\""},{"line_number":94,"context_line":"        if amphora_id and len(remainder):"},{"line_number":95,"context_line":"            controller \u003d remainder[0]"},{"line_number":96,"context_line":"            remainder \u003d remainder[1:]"},{"line_number":97,"context_line":"            if controller \u003d\u003d \u0027failover\u0027:"},{"line_number":98,"context_line":"                return FailoverController(amp_id\u003damphora_id), remainder"},{"line_number":99,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"df87a7cf_6d52aae0","line":96,"in_reply_to":"df87a7cf_324e4397","updated":"2017-12-07 23:50:06.000000000","message":"That\u0027s incorrect.\n\n\u003e\u003e a \u003d [1]\n\u003e\u003e print(a[1:])\n[]","commit_id":"8b0a738ecd9ba01797c6536df0e55da3ee0baa58"},{"author":{"_account_id":12024,"name":"Tong Liu","email":"tongl@vmware.com","username":"tong101"},"change_message_id":"346b4e780d8f35e9c2f9438cc9919a95fe4fba8f","unresolved":false,"context_lines":[{"line_number":93,"context_line":"        \"\"\""},{"line_number":94,"context_line":"        if amphora_id and len(remainder):"},{"line_number":95,"context_line":"            controller \u003d remainder[0]"},{"line_number":96,"context_line":"            remainder \u003d remainder[1:]"},{"line_number":97,"context_line":"            if controller \u003d\u003d \u0027failover\u0027:"},{"line_number":98,"context_line":"                return FailoverController(amp_id\u003damphora_id), remainder"},{"line_number":99,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"df87a7cf_edaf9a7a","line":96,"in_reply_to":"df87a7cf_6d52aae0","updated":"2017-12-07 23:57:45.000000000","message":"You are right. I tested with print \"%s\" % remainder. It raises exception due to remainder is None. I think consumer with method can handle that.","commit_id":"8b0a738ecd9ba01797c6536df0e55da3ee0baa58"},{"author":{"_account_id":25239,"name":"Bar Elharar","email":"bar@redhat.com","username":"belharar"},"change_message_id":"09c18b599455e8fcd571d2345cf9f929b01ad245","unresolved":false,"context_lines":[{"line_number":108,"context_line":"                     self.amp_id)"},{"line_number":109,"context_line":"            self.handler.failover(db_amp)"},{"line_number":110,"context_line":"        except Exception:"},{"line_number":111,"context_line":"            with excutils.save_and_reraise_exception(reraise\u003dFalse):"},{"line_number":112,"context_line":"                self.repositories.load_balancer.update("},{"line_number":113,"context_line":"                    context.session, db_amp.load_balancer.id,"},{"line_number":114,"context_line":"                    provisioning_status\u003dconstants.ERROR)"}],"source_content_type":"text/x-python","patch_set":8,"id":"df87a7cf_32e1dad1","line":114,"range":{"start_line":111,"start_character":0,"end_line":114,"end_character":56},"updated":"2017-12-14 01:57:59.000000000","message":"IMO, this doesn\u0027t belong here. I would put it in the same code segment as where I\u0027d change the loadbalancer\u0027s state into PENDING_UPDATE/ACTIVE.","commit_id":"b3f94fdfd2218c69d10779418416bc2ed8250cbc"},{"author":{"_account_id":11628,"name":"Michael Johnson","email":"johnsomor@gmail.com","username":"johnsom"},"change_message_id":"bb6bc5626bfff31c75b2fa889e420916b907a2c3","unresolved":false,"context_lines":[{"line_number":35,"context_line":""},{"line_number":36,"context_line":"    def __init__(self):"},{"line_number":37,"context_line":"        super(AmphoraController, self).__init__()"},{"line_number":38,"context_line":"        self.handler \u003d self.handler.amphora"},{"line_number":39,"context_line":""},{"line_number":40,"context_line":"    @wsme_pecan.wsexpose(amp_types.AmphoraRootResponse, wtypes.text,"},{"line_number":41,"context_line":"                         wtypes.text)"}],"source_content_type":"text/x-python","patch_set":10,"id":"9f91af0f_27c4a2f4","line":38,"updated":"2018-01-09 19:31:23.000000000","message":"I don\u0027t think this is even used.","commit_id":"23bf43a66ff8225e7d68f087681b38ceceda9663"},{"author":{"_account_id":25058,"name":"huangshan","email":"huangshan@fiberhome.com","username":"huangshan"},"change_message_id":"d1e39092ca233f234130848c54b82c8437895927","unresolved":false,"context_lines":[{"line_number":104,"context_line":"            context, db_amp.load_balancer.project_id,"},{"line_number":105,"context_line":"            constants.RBAC_PUT_FAILOVER)"},{"line_number":106,"context_line":""},{"line_number":107,"context_line":"        self.repositories.load_balancer.test_and_set_provisioning_status("},{"line_number":108,"context_line":"            context.session, db_amp.load_balancer_id,"},{"line_number":109,"context_line":"            status\u003dconstants.PENDING_UPDATE, raise_exception\u003dTrue)"},{"line_number":110,"context_line":"        try:"}],"source_content_type":"text/x-python","patch_set":10,"id":"bf8cb3f7_804cd99e","line":107,"range":{"start_line":107,"start_character":40,"end_line":107,"end_character":72},"updated":"2017-12-27 06:58:45.000000000","message":"In other words, failover is active only if the provisioning_status of loadbalancer is ACTIVE.\nHowever, in most scenarios,  it is more useful to perform a failover of a amphora when the provisioning_status is ERROR","commit_id":"23bf43a66ff8225e7d68f087681b38ceceda9663"},{"author":{"_account_id":11628,"name":"Michael Johnson","email":"johnsomor@gmail.com","username":"johnsom"},"change_message_id":"5e4e603aed1031006db63590ffd827cd8d2fab01","unresolved":false,"context_lines":[{"line_number":104,"context_line":"            context, db_amp.load_balancer.project_id,"},{"line_number":105,"context_line":"            constants.RBAC_PUT_FAILOVER)"},{"line_number":106,"context_line":""},{"line_number":107,"context_line":"        self.repositories.load_balancer.test_and_set_provisioning_status("},{"line_number":108,"context_line":"            context.session, db_amp.load_balancer_id,"},{"line_number":109,"context_line":"            status\u003dconstants.PENDING_UPDATE, raise_exception\u003dTrue)"},{"line_number":110,"context_line":"        try:"}],"source_content_type":"text/x-python","patch_set":10,"id":"9f91af0f_c02bd7e8","line":107,"range":{"start_line":107,"start_character":40,"end_line":107,"end_character":72},"in_reply_to":"9f91af0f_ac1a4f7a","updated":"2018-01-03 21:02:47.000000000","message":"Yeah, to me failing over an LB in ERROR is a really bad idea. If it got to an ERROR state it likely needs operator intervention and executing a failover may end up destroying state required to actually repair the LB.\nSledgehammer to re-tack a poster only leads to a hole in the wall....","commit_id":"23bf43a66ff8225e7d68f087681b38ceceda9663"},{"author":{"_account_id":10273,"name":"Adam Harwell","email":"flux.adam@gmail.com","username":"rm_you"},"change_message_id":"b60964c6bbcd26c743acc7e786c10909ba1324f3","unresolved":false,"context_lines":[{"line_number":104,"context_line":"            context, db_amp.load_balancer.project_id,"},{"line_number":105,"context_line":"            constants.RBAC_PUT_FAILOVER)"},{"line_number":106,"context_line":""},{"line_number":107,"context_line":"        self.repositories.load_balancer.test_and_set_provisioning_status("},{"line_number":108,"context_line":"            context.session, db_amp.load_balancer_id,"},{"line_number":109,"context_line":"            status\u003dconstants.PENDING_UPDATE, raise_exception\u003dTrue)"},{"line_number":110,"context_line":"        try:"}],"source_content_type":"text/x-python","patch_set":10,"id":"9f91af0f_ac1a4f7a","line":107,"range":{"start_line":107,"start_character":40,"end_line":107,"end_character":72},"in_reply_to":"bf8cb3f7_804cd99e","updated":"2018-01-03 20:23:46.000000000","message":"Yeah, that\u0027s a tough one. Open to opinions, this is easy to change to allow ERROR as well, but we do need to be careful with that, because doing failovers on ERROR LBs can have nondeterministic results.","commit_id":"23bf43a66ff8225e7d68f087681b38ceceda9663"}],"octavia/policies/amphora.py":[{"author":{"_account_id":11628,"name":"Michael Johnson","email":"johnsomor@gmail.com","username":"johnsom"},"change_message_id":"76449d3572d84f12cd51eff6d88f985ca80d49d6","unresolved":false,"context_lines":[{"line_number":33,"context_line":"        \u0027{rbac_obj}{action}\u0027.format(rbac_obj\u003dconstants.RBAC_AMPHORA,"},{"line_number":34,"context_line":"                                    action\u003dconstants.RBAC_PUT_FAILOVER),"},{"line_number":35,"context_line":"        constants.RULE_API_ADMIN,"},{"line_number":36,"context_line":"        \"Show Amphora details\","},{"line_number":37,"context_line":"        [{\u0027method\u0027: \u0027PUT\u0027,"},{"line_number":38,"context_line":"          \u0027path\u0027: \u0027/v2.0/octavia/amphorae/{amphora_id}/failover\u0027}]"},{"line_number":39,"context_line":"    ),"}],"source_content_type":"text/x-python","patch_set":4,"id":"df87a7cf_44544953","line":36,"range":{"start_line":36,"start_character":8,"end_line":36,"end_character":30},"updated":"2017-12-08 22:10:16.000000000","message":"Wrong comment here","commit_id":"e41b67844cff9c28cf6f34376bfeb77063f0900c"}]}
