)]}'
{"test/probe/brain.py":[{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"a49d273052b0db4d55dceb5cb1a61f986c0e1fe3","unresolved":false,"context_lines":[{"line_number":94,"context_line":"            self.primary_numbers \u003d (3, 4)"},{"line_number":95,"context_line":"            self.handoff_numbers \u003d (1, 2)"},{"line_number":96,"context_line":"        self.actual_handoff_numbers \u003d \\"},{"line_number":97,"context_line":"            [n + 1 for n in set(range(len(self.ring.devs))) - set(node_ids)]"},{"line_number":98,"context_line":""},{"line_number":99,"context_line":"    @command"},{"line_number":100,"context_line":"    def start_primary_half(self):"}],"source_content_type":"text/x-python","patch_set":1,"id":"da86d52c_a490e4ed","line":97,"updated":"2015-02-19 01:37:59.000000000","message":"so this is just the non-primary nodes?","commit_id":"2f1e861f6f8704c8f6ef85ab19c900d91d16a28c"},{"author":{"_account_id":7008,"name":"Leah Klearman","email":"lklrmn@gmail.com","username":"klrmn"},"change_message_id":"cccd6cd7d852cdc4be26de034e07810d38ebde6c","unresolved":false,"context_lines":[{"line_number":94,"context_line":"            self.primary_numbers \u003d (3, 4)"},{"line_number":95,"context_line":"            self.handoff_numbers \u003d (1, 2)"},{"line_number":96,"context_line":"        self.actual_handoff_numbers \u003d \\"},{"line_number":97,"context_line":"            [n + 1 for n in set(range(len(self.ring.devs))) - set(node_ids)]"},{"line_number":98,"context_line":""},{"line_number":99,"context_line":"    @command"},{"line_number":100,"context_line":"    def start_primary_half(self):"}],"source_content_type":"text/x-python","patch_set":1,"id":"da86d52c_9da5d8a0","line":97,"in_reply_to":"da86d52c_200a17d2","updated":"2015-02-19 17:26:43.000000000","message":"ok","commit_id":"2f1e861f6f8704c8f6ef85ab19c900d91d16a28c"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"1b71453afc332663cc4d6a1c14a4846e079d0940","unresolved":false,"context_lines":[{"line_number":94,"context_line":"            self.primary_numbers \u003d (3, 4)"},{"line_number":95,"context_line":"            self.handoff_numbers \u003d (1, 2)"},{"line_number":96,"context_line":"        self.actual_handoff_numbers \u003d \\"},{"line_number":97,"context_line":"            [n + 1 for n in set(range(len(self.ring.devs))) - set(node_ids)]"},{"line_number":98,"context_line":""},{"line_number":99,"context_line":"    @command"},{"line_number":100,"context_line":"    def start_primary_half(self):"}],"source_content_type":"text/x-python","patch_set":1,"id":"da86d52c_200a17d2","line":97,"in_reply_to":"da86d52c_4aa64f10","updated":"2015-02-19 08:06:36.000000000","message":"so call them that?","commit_id":"2f1e861f6f8704c8f6ef85ab19c900d91d16a28c"},{"author":{"_account_id":7008,"name":"Leah Klearman","email":"lklrmn@gmail.com","username":"klrmn"},"change_message_id":"7d9b26c78f837b930dde8be28dc43a98992cfa22","unresolved":false,"context_lines":[{"line_number":94,"context_line":"            self.primary_numbers \u003d (3, 4)"},{"line_number":95,"context_line":"            self.handoff_numbers \u003d (1, 2)"},{"line_number":96,"context_line":"        self.actual_handoff_numbers \u003d \\"},{"line_number":97,"context_line":"            [n + 1 for n in set(range(len(self.ring.devs))) - set(node_ids)]"},{"line_number":98,"context_line":""},{"line_number":99,"context_line":"    @command"},{"line_number":100,"context_line":"    def start_primary_half(self):"}],"source_content_type":"text/x-python","patch_set":1,"id":"da86d52c_4aa64f10","line":97,"in_reply_to":"da86d52c_a490e4ed","updated":"2015-02-19 04:34:09.000000000","message":"yes.","commit_id":"2f1e861f6f8704c8f6ef85ab19c900d91d16a28c"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"a49d273052b0db4d55dceb5cb1a61f986c0e1fe3","unresolved":false,"context_lines":[{"line_number":131,"context_line":"            print(\"killing %s handoff server number %s\""},{"line_number":132,"context_line":"                  % (self.server_type, n))"},{"line_number":133,"context_line":"            self.servers.kill(number\u003dn)"},{"line_number":134,"context_line":"            self.wait_for_server_down(n)"},{"line_number":135,"context_line":""},{"line_number":136,"context_line":"    @command"},{"line_number":137,"context_line":"    def start_handoffs(self):"}],"source_content_type":"text/x-python","patch_set":1,"id":"da86d52c_446e4801","line":134,"updated":"2015-02-19 01:37:59.000000000","message":"It\u0027s gunna be confusing to keep the difference between kill_handoffs and stop_handoff_half in your head as your reading tests - I wonder if there\u0027s some way to make the difference more descriptive in the name?\n\nAlso, why kill followed by the wait with the health check - why not just call stop and which waits for the pid to get reaped?","commit_id":"2f1e861f6f8704c8f6ef85ab19c900d91d16a28c"},{"author":{"_account_id":7008,"name":"Leah Klearman","email":"lklrmn@gmail.com","username":"klrmn"},"change_message_id":"7d9b26c78f837b930dde8be28dc43a98992cfa22","unresolved":false,"context_lines":[{"line_number":131,"context_line":"            print(\"killing %s handoff server number %s\""},{"line_number":132,"context_line":"                  % (self.server_type, n))"},{"line_number":133,"context_line":"            self.servers.kill(number\u003dn)"},{"line_number":134,"context_line":"            self.wait_for_server_down(n)"},{"line_number":135,"context_line":""},{"line_number":136,"context_line":"    @command"},{"line_number":137,"context_line":"    def start_handoffs(self):"}],"source_content_type":"text/x-python","patch_set":1,"id":"da86d52c_8aabe7d4","line":134,"in_reply_to":"da86d52c_446e4801","updated":"2015-02-19 04:34:09.000000000","message":"i tried using stop and the tests didn\u0027t work. replacing it with kill worked. i decided the original writers must have had a good reason to kill and test rather than stop.","commit_id":"2f1e861f6f8704c8f6ef85ab19c900d91d16a28c"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"a49d273052b0db4d55dceb5cb1a61f986c0e1fe3","unresolved":false,"context_lines":[{"line_number":150,"context_line":"            raise IndexError("},{"line_number":151,"context_line":"                \u0027device id corresponding to number %s not found in %s\u0027"},{"line_number":152,"context_line":"                % (number, self.ring.devs))"},{"line_number":153,"context_line":"        return ip, port"},{"line_number":154,"context_line":""},{"line_number":155,"context_line":"    def wait_for_server_down(self, number, timeout\u003d30):"},{"line_number":156,"context_line":"        ip, port \u003d self.ip_and_port_for_number(number)"}],"source_content_type":"text/x-python","patch_set":1,"id":"da86d52c_645fcc41","line":153,"updated":"2015-02-19 01:37:59.000000000","message":"this looks like it\u0027d be function","commit_id":"2f1e861f6f8704c8f6ef85ab19c900d91d16a28c"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"1b71453afc332663cc4d6a1c14a4846e079d0940","unresolved":false,"context_lines":[{"line_number":150,"context_line":"            raise IndexError("},{"line_number":151,"context_line":"                \u0027device id corresponding to number %s not found in %s\u0027"},{"line_number":152,"context_line":"                % (number, self.ring.devs))"},{"line_number":153,"context_line":"        return ip, port"},{"line_number":154,"context_line":""},{"line_number":155,"context_line":"    def wait_for_server_down(self, number, timeout\u003d30):"},{"line_number":156,"context_line":"        ip, port \u003d self.ip_and_port_for_number(number)"}],"source_content_type":"text/x-python","patch_set":1,"id":"da86d52c_2d94d035","line":153,"in_reply_to":"da86d52c_0a87f761","updated":"2015-02-19 08:06:36.000000000","message":"as opposed to a method, it doesn\u0027t use self, no state, so it\u0027s a pure function (which is GREAT!) you could highlight that fact by pulling it out of the class, which I would do - but you don\u0027t have to or anything.\n\nshould have said \"nit: \" - sry","commit_id":"2f1e861f6f8704c8f6ef85ab19c900d91d16a28c"},{"author":{"_account_id":7008,"name":"Leah Klearman","email":"lklrmn@gmail.com","username":"klrmn"},"change_message_id":"cccd6cd7d852cdc4be26de034e07810d38ebde6c","unresolved":false,"context_lines":[{"line_number":150,"context_line":"            raise IndexError("},{"line_number":151,"context_line":"                \u0027device id corresponding to number %s not found in %s\u0027"},{"line_number":152,"context_line":"                % (number, self.ring.devs))"},{"line_number":153,"context_line":"        return ip, port"},{"line_number":154,"context_line":""},{"line_number":155,"context_line":"    def wait_for_server_down(self, number, timeout\u003d30):"},{"line_number":156,"context_line":"        ip, port \u003d self.ip_and_port_for_number(number)"}],"source_content_type":"text/x-python","patch_set":1,"id":"da86d52c_bdde1c0f","line":153,"in_reply_to":"da86d52c_2d94d035","updated":"2015-02-19 17:26:43.000000000","message":"it uses self.ring.devs, besides, so it can\u0027t be an independent function.","commit_id":"2f1e861f6f8704c8f6ef85ab19c900d91d16a28c"},{"author":{"_account_id":7008,"name":"Leah Klearman","email":"lklrmn@gmail.com","username":"klrmn"},"change_message_id":"7d9b26c78f837b930dde8be28dc43a98992cfa22","unresolved":false,"context_lines":[{"line_number":150,"context_line":"            raise IndexError("},{"line_number":151,"context_line":"                \u0027device id corresponding to number %s not found in %s\u0027"},{"line_number":152,"context_line":"                % (number, self.ring.devs))"},{"line_number":153,"context_line":"        return ip, port"},{"line_number":154,"context_line":""},{"line_number":155,"context_line":"    def wait_for_server_down(self, number, timeout\u003d30):"},{"line_number":156,"context_line":"        ip, port \u003d self.ip_and_port_for_number(number)"}],"source_content_type":"text/x-python","patch_set":1,"id":"da86d52c_0a87f761","line":153,"in_reply_to":"da86d52c_645fcc41","updated":"2015-02-19 04:34:09.000000000","message":"what do you mean by that?","commit_id":"2f1e861f6f8704c8f6ef85ab19c900d91d16a28c"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"3a33a0d3b695a6bc9beb29daa72861408119d46e","unresolved":false,"context_lines":[{"line_number":150,"context_line":"            raise IndexError("},{"line_number":151,"context_line":"                \u0027device id corresponding to number %s not found in %s\u0027"},{"line_number":152,"context_line":"                % (number, self.ring.devs))"},{"line_number":153,"context_line":"        return ip, port"},{"line_number":154,"context_line":""},{"line_number":155,"context_line":"    def wait_for_server_down(self, number, timeout\u003d30):"},{"line_number":156,"context_line":"        ip, port \u003d self.ip_and_port_for_number(number)"}],"source_content_type":"text/x-python","patch_set":1,"id":"da86d52c_e0446874","line":153,"in_reply_to":"da86d52c_bdde1c0f","updated":"2015-02-19 19:19:48.000000000","message":"mea culpa","commit_id":"2f1e861f6f8704c8f6ef85ab19c900d91d16a28c"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"1b71453afc332663cc4d6a1c14a4846e079d0940","unresolved":false,"context_lines":[{"line_number":168,"context_line":"                raise Exception("},{"line_number":169,"context_line":"                    \u0027%s server still answering on %s:%s after 30 seconds\u0027"},{"line_number":170,"context_line":"                    % (self.server_type, ip, port))"},{"line_number":171,"context_line":"            sleep(0.1)"},{"line_number":172,"context_line":""},{"line_number":173,"context_line":"    def wait_for_server_up(self, number, timeout\u003d30):"},{"line_number":174,"context_line":"        ip, port \u003d self.ip_and_port_for_number(number)"}],"source_content_type":"text/x-python","patch_set":1,"id":"da86d52c_edbc78b7","line":171,"updated":"2015-02-19 08:06:36.000000000","message":"same thing here, extract the code from kill_server into a function that does the check_not_responding bits and have it and here both call it.","commit_id":"2f1e861f6f8704c8f6ef85ab19c900d91d16a28c"},{"author":{"_account_id":7008,"name":"Leah Klearman","email":"lklrmn@gmail.com","username":"klrmn"},"change_message_id":"cccd6cd7d852cdc4be26de034e07810d38ebde6c","unresolved":false,"context_lines":[{"line_number":168,"context_line":"                raise Exception("},{"line_number":169,"context_line":"                    \u0027%s server still answering on %s:%s after 30 seconds\u0027"},{"line_number":170,"context_line":"                    % (self.server_type, ip, port))"},{"line_number":171,"context_line":"            sleep(0.1)"},{"line_number":172,"context_line":""},{"line_number":173,"context_line":"    def wait_for_server_up(self, number, timeout\u003d30):"},{"line_number":174,"context_line":"        ip, port \u003d self.ip_and_port_for_number(number)"}],"source_content_type":"text/x-python","patch_set":1,"id":"da86d52c_9d4158a8","line":171,"in_reply_to":"da86d52c_edbc78b7","updated":"2015-02-19 17:26:43.000000000","message":"the goal is to get rid of kill_server and everything else that uses port2server. i just haven\u0027t gotten rid of all the calls to kill_server yet.","commit_id":"2f1e861f6f8704c8f6ef85ab19c900d91d16a28c"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"a49d273052b0db4d55dceb5cb1a61f986c0e1fe3","unresolved":false,"context_lines":[{"line_number":176,"context_line":"        if self.server_type \u003d\u003d \u0027container\u0027:"},{"line_number":177,"context_line":"            path +\u003d \u0027/3\u0027"},{"line_number":178,"context_line":"        elif self.server_type \u003d\u003d \u0027object\u0027:"},{"line_number":179,"context_line":"            path +\u003d \u0027/3/4\u0027"},{"line_number":180,"context_line":"        try_until \u003d time() + timeout"},{"line_number":181,"context_line":"        while True:"},{"line_number":182,"context_line":"            try:"}],"source_content_type":"text/x-python","patch_set":1,"id":"da86d52c_07ee1222","line":179,"updated":"2015-02-19 01:37:59.000000000","message":"i guess there\u0027s gunna be a small window after start returns when the wsgi app isn\u0027t actually handling connections yet, but i\u0027m not sure I\u0027ve ever seen any of the existing tests deal with this?\n\nEitherway, I think the path\u0027s would look better with named path segments (i.e. /dev/part/account/container/obj vs. /1/2/3/4)","commit_id":"2f1e861f6f8704c8f6ef85ab19c900d91d16a28c"},{"author":{"_account_id":7008,"name":"Leah Klearman","email":"lklrmn@gmail.com","username":"klrmn"},"change_message_id":"7d9b26c78f837b930dde8be28dc43a98992cfa22","unresolved":false,"context_lines":[{"line_number":176,"context_line":"        if self.server_type \u003d\u003d \u0027container\u0027:"},{"line_number":177,"context_line":"            path +\u003d \u0027/3\u0027"},{"line_number":178,"context_line":"        elif self.server_type \u003d\u003d \u0027object\u0027:"},{"line_number":179,"context_line":"            path +\u003d \u0027/3/4\u0027"},{"line_number":180,"context_line":"        try_until \u003d time() + timeout"},{"line_number":181,"context_line":"        while True:"},{"line_number":182,"context_line":"            try:"}],"source_content_type":"text/x-python","patch_set":1,"id":"da86d52c_6a979390","line":179,"in_reply_to":"da86d52c_07ee1222","updated":"2015-02-19 04:34:09.000000000","message":"happy to use names rather than numbers.\ni just copied and modified the existing code from test.probe.common.check_server, called by start_server which is what i was replacing.","commit_id":"2f1e861f6f8704c8f6ef85ab19c900d91d16a28c"},{"author":{"_account_id":7008,"name":"Leah Klearman","email":"lklrmn@gmail.com","username":"klrmn"},"change_message_id":"cccd6cd7d852cdc4be26de034e07810d38ebde6c","unresolved":false,"context_lines":[{"line_number":176,"context_line":"        if self.server_type \u003d\u003d \u0027container\u0027:"},{"line_number":177,"context_line":"            path +\u003d \u0027/3\u0027"},{"line_number":178,"context_line":"        elif self.server_type \u003d\u003d \u0027object\u0027:"},{"line_number":179,"context_line":"            path +\u003d \u0027/3/4\u0027"},{"line_number":180,"context_line":"        try_until \u003d time() + timeout"},{"line_number":181,"context_line":"        while True:"},{"line_number":182,"context_line":"            try:"}],"source_content_type":"text/x-python","patch_set":1,"id":"da86d52c_3d278c13","line":179,"in_reply_to":"da86d52c_2dbbf0c4","updated":"2015-02-19 17:26:43.000000000","message":"again, trying to get rid of things that use port2server","commit_id":"2f1e861f6f8704c8f6ef85ab19c900d91d16a28c"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"1b71453afc332663cc4d6a1c14a4846e079d0940","unresolved":false,"context_lines":[{"line_number":176,"context_line":"        if self.server_type \u003d\u003d \u0027container\u0027:"},{"line_number":177,"context_line":"            path +\u003d \u0027/3\u0027"},{"line_number":178,"context_line":"        elif self.server_type \u003d\u003d \u0027object\u0027:"},{"line_number":179,"context_line":"            path +\u003d \u0027/3/4\u0027"},{"line_number":180,"context_line":"        try_until \u003d time() + timeout"},{"line_number":181,"context_line":"        while True:"},{"line_number":182,"context_line":"            try:"}],"source_content_type":"text/x-python","patch_set":1,"id":"da86d52c_2dbbf0c4","line":179,"in_reply_to":"da86d52c_6a979390","updated":"2015-02-19 08:06:36.000000000","message":"YES!  I finally found that.  Why didn\u0027t you just call that method from here?  Or refactor it so you could?","commit_id":"2f1e861f6f8704c8f6ef85ab19c900d91d16a28c"}],"test/probe/common.py":[{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"a49d273052b0db4d55dceb5cb1a61f986c0e1fe3","unresolved":false,"context_lines":[{"line_number":247,"context_line":"                [\u0027account-replicator\u0027, \u0027container-replicator\u0027,"},{"line_number":248,"context_line":"                 \u0027object-replicator\u0027])"},{"line_number":249,"context_line":"            self.updaters \u003d Manager([\u0027container-updater\u0027, \u0027object-updater\u0027])"},{"line_number":250,"context_line":"            from test.probe.brain import BrainSplitter"},{"line_number":251,"context_line":"            self.account_brain \u003d BrainSplitter(self.url, self.token,"},{"line_number":252,"context_line":"                                               server_type\u003d\u0027account\u0027)"},{"line_number":253,"context_line":"            self.container_brain \u003d BrainSplitter(self.url, self.token,"}],"source_content_type":"text/x-python","patch_set":1,"id":"da86d52c_a7e4663c","line":250,"updated":"2015-02-19 01:37:59.000000000","message":"if this late import is to avoid a circular import or something you better call that out in a comment, or fix it somehow?","commit_id":"2f1e861f6f8704c8f6ef85ab19c900d91d16a28c"},{"author":{"_account_id":7008,"name":"Leah Klearman","email":"lklrmn@gmail.com","username":"klrmn"},"change_message_id":"7d9b26c78f837b930dde8be28dc43a98992cfa22","unresolved":false,"context_lines":[{"line_number":247,"context_line":"                [\u0027account-replicator\u0027, \u0027container-replicator\u0027,"},{"line_number":248,"context_line":"                 \u0027object-replicator\u0027])"},{"line_number":249,"context_line":"            self.updaters \u003d Manager([\u0027container-updater\u0027, \u0027object-updater\u0027])"},{"line_number":250,"context_line":"            from test.probe.brain import BrainSplitter"},{"line_number":251,"context_line":"            self.account_brain \u003d BrainSplitter(self.url, self.token,"},{"line_number":252,"context_line":"                                               server_type\u003d\u0027account\u0027)"},{"line_number":253,"context_line":"            self.container_brain \u003d BrainSplitter(self.url, self.token,"}],"source_content_type":"text/x-python","patch_set":1,"id":"da86d52c_ea9c63c2","line":250,"in_reply_to":"da86d52c_a7e4663c","updated":"2015-02-19 04:34:09.000000000","message":"will do.","commit_id":"2f1e861f6f8704c8f6ef85ab19c900d91d16a28c"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"a49d273052b0db4d55dceb5cb1a61f986c0e1fe3","unresolved":false,"context_lines":[{"line_number":251,"context_line":"            self.account_brain \u003d BrainSplitter(self.url, self.token,"},{"line_number":252,"context_line":"                                               server_type\u003d\u0027account\u0027)"},{"line_number":253,"context_line":"            self.container_brain \u003d BrainSplitter(self.url, self.token,"},{"line_number":254,"context_line":"                                                 server_type\u003d\u0027container\u0027)"},{"line_number":255,"context_line":"        except BaseException:"},{"line_number":256,"context_line":"            try:"},{"line_number":257,"context_line":"                raise"}],"source_content_type":"text/x-python","patch_set":1,"id":"da86d52c_c7df9a64","line":254,"updated":"2015-02-19 01:37:59.000000000","message":"no object_brain needed yet huh?","commit_id":"2f1e861f6f8704c8f6ef85ab19c900d91d16a28c"},{"author":{"_account_id":7008,"name":"Leah Klearman","email":"lklrmn@gmail.com","username":"klrmn"},"change_message_id":"7d9b26c78f837b930dde8be28dc43a98992cfa22","unresolved":false,"context_lines":[{"line_number":251,"context_line":"            self.account_brain \u003d BrainSplitter(self.url, self.token,"},{"line_number":252,"context_line":"                                               server_type\u003d\u0027account\u0027)"},{"line_number":253,"context_line":"            self.container_brain \u003d BrainSplitter(self.url, self.token,"},{"line_number":254,"context_line":"                                                 server_type\u003d\u0027container\u0027)"},{"line_number":255,"context_line":"        except BaseException:"},{"line_number":256,"context_line":"            try:"},{"line_number":257,"context_line":"                raise"}],"source_content_type":"text/x-python","patch_set":1,"id":"da86d52c_0aa0d7f2","line":254,"in_reply_to":"da86d52c_c7df9a64","updated":"2015-02-19 04:34:09.000000000","message":"haven\u0027t gotten there yet \u003d)","commit_id":"2f1e861f6f8704c8f6ef85ab19c900d91d16a28c"}],"test/probe/test_container_failures.py":[{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"a49d273052b0db4d55dceb5cb1a61f986c0e1fe3","unresolved":false,"context_lines":[{"line_number":50,"context_line":""},{"line_number":51,"context_line":"        # Kill container1 servers excepting two of the primaries"},{"line_number":52,"context_line":"        kill_nonprimary_server(cnodes, self.port2server, self.pids)"},{"line_number":53,"context_line":"        kill_server(cnodes[0][\u0027port\u0027], self.port2server, self.pids)"},{"line_number":54,"context_line":""},{"line_number":55,"context_line":"        # Delete container1"},{"line_number":56,"context_line":"        client.delete_container(self.url, self.token, container1)"}],"source_content_type":"text/x-python","patch_set":1,"id":"da86d52c_e7381ea2","side":"PARENT","line":53,"updated":"2015-02-19 01:37:59.000000000","message":"again, isn\u0027t \"kill container1 servers excepting two of the primaries\" just \"kill_handoff_half\"?","commit_id":"7572b00abd4734b9da580e74d639c51f8fb2b27f"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"a49d273052b0db4d55dceb5cb1a61f986c0e1fe3","unresolved":false,"context_lines":[{"line_number":86,"context_line":"        client.put_container(self.url, self.token, container1)"},{"line_number":87,"context_line":""},{"line_number":88,"context_line":"        # Kill container1 servers excepting one of the primaries"},{"line_number":89,"context_line":"        self.container_brain.kill_handoffs()"},{"line_number":90,"context_line":"        kill_server(cnodes[0][\u0027port\u0027], self.port2server, self.pids)"},{"line_number":91,"context_line":"        kill_server(cnodes[1][\u0027port\u0027], self.port2server, self.pids)"},{"line_number":92,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"da86d52c_47100a00","line":89,"updated":"2015-02-19 01:37:59.000000000","message":"how does the brain now to kill the handoffs for container1 instead of self.container_brain.container_name?  They\u0027re gunna be different like a lot of the time...","commit_id":"2f1e861f6f8704c8f6ef85ab19c900d91d16a28c"},{"author":{"_account_id":7008,"name":"Leah Klearman","email":"lklrmn@gmail.com","username":"klrmn"},"change_message_id":"7d9b26c78f837b930dde8be28dc43a98992cfa22","unresolved":false,"context_lines":[{"line_number":86,"context_line":"        client.put_container(self.url, self.token, container1)"},{"line_number":87,"context_line":""},{"line_number":88,"context_line":"        # Kill container1 servers excepting one of the primaries"},{"line_number":89,"context_line":"        self.container_brain.kill_handoffs()"},{"line_number":90,"context_line":"        kill_server(cnodes[0][\u0027port\u0027], self.port2server, self.pids)"},{"line_number":91,"context_line":"        kill_server(cnodes[1][\u0027port\u0027], self.port2server, self.pids)"},{"line_number":92,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"da86d52c_ca431f3d","line":89,"in_reply_to":"da86d52c_47100a00","updated":"2015-02-19 04:34:09.000000000","message":"you are right! i knew there was a reason we do code reviews \u003d)","commit_id":"2f1e861f6f8704c8f6ef85ab19c900d91d16a28c"}],"test/probe/test_object_async_update.py":[{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"a49d273052b0db4d55dceb5cb1a61f986c0e1fe3","unresolved":false,"context_lines":[{"line_number":36,"context_line":"        cpart, cnodes \u003d self.container_ring.get_nodes(self.account, container)"},{"line_number":37,"context_line":"        cnode \u003d cnodes[0]"},{"line_number":38,"context_line":"        kill_nonprimary_server(cnodes, self.port2server, self.pids)"},{"line_number":39,"context_line":"        kill_server(cnode[\u0027port\u0027], self.port2server, self.pids)"},{"line_number":40,"context_line":""},{"line_number":41,"context_line":"        # Create container/obj"},{"line_number":42,"context_line":"        obj \u003d \u0027object-%s\u0027 % uuid4()"}],"source_content_type":"text/x-python","patch_set":1,"id":"da86d52c_87c0427d","side":"PARENT","line":39,"updated":"2015-02-19 01:37:59.000000000","message":"I\u0027m not sure I follow, the kill_nonprimary_server and kill_server lines combined look exactly like what stop_handoff_half would do?","commit_id":"7572b00abd4734b9da580e74d639c51f8fb2b27f"},{"author":{"_account_id":7008,"name":"Leah Klearman","email":"lklrmn@gmail.com","username":"klrmn"},"change_message_id":"7d9b26c78f837b930dde8be28dc43a98992cfa22","unresolved":false,"context_lines":[{"line_number":36,"context_line":"        cpart, cnodes \u003d self.container_ring.get_nodes(self.account, container)"},{"line_number":37,"context_line":"        cnode \u003d cnodes[0]"},{"line_number":38,"context_line":"        kill_nonprimary_server(cnodes, self.port2server, self.pids)"},{"line_number":39,"context_line":"        kill_server(cnode[\u0027port\u0027], self.port2server, self.pids)"},{"line_number":40,"context_line":""},{"line_number":41,"context_line":"        # Create container/obj"},{"line_number":42,"context_line":"        obj \u003d \u0027object-%s\u0027 % uuid4()"}],"source_content_type":"text/x-python","patch_set":1,"id":"da86d52c_ea4e236e","side":"PARENT","line":39,"in_reply_to":"da86d52c_87c0427d","updated":"2015-02-19 04:34:09.000000000","message":"various things playing into it include:\na) the brain.X_X_half methods won\u0027t work with more than 4 devices (altho i seem to be the only one who thinks that the existing tests should work with more than 4 devices)\nb) a bunch of tests do DirectClient things with the specific primary that got turned off, so the brain would have to remember which primary it put in the handoff half\nc) refactoring All The Things in one patch would result in it never getting thru review.","commit_id":"7572b00abd4734b9da580e74d639c51f8fb2b27f"}]}
