)]}'
{"dragonflow/tests/fullstack/test_objects.py":[{"author":{"_account_id":13070,"name":"Eran Gampel","email":"eran@gampel.net","username":"Gampel"},"change_message_id":"fde34b694568b0990389215712803e28338327f3","unresolved":false,"context_lines":[{"line_number":129,"context_line":"        self.nova.servers.delete(self.server)"},{"line_number":130,"context_line":"        self.deleted \u003d True"},{"line_number":131,"context_line":""},{"line_number":132,"context_line":"   def exists(self):"},{"line_number":133,"context_line":"        if self.server_id is None:"},{"line_number":134,"context_line":"            return False"},{"line_number":135,"context_line":"        self.server \u003d self.nova.servers.find(id\u003dself.server_id)"}],"source_content_type":"text/x-python","patch_set":1,"id":"7a5de9d1_dd977a8e","line":132,"range":{"start_line":132,"start_character":3,"end_line":132,"end_character":6},"updated":"2016-01-29 08:53:51.000000000","message":"Please fix indent","commit_id":"a41f4270cda28a040d2bdf0e866e9ad413221fc0"},{"author":{"_account_id":2023,"name":"Saggi Mizrahi","email":"ficoos+osreview@gmail.com","username":"ficoos"},"change_message_id":"d621e0d25d2f801c8d383faf9f19e546d850ea85","unresolved":false,"context_lines":[{"line_number":101,"context_line":"        self.parent.assertIsNotNone(network)"},{"line_number":102,"context_line":"        nics \u003d [{\u0027net-id\u0027: network.id}]"},{"line_number":103,"context_line":"        if script:"},{"line_number":104,"context_line":"            self.server \u003d self.nova.servers.create(name\u003d\u0027test\u0027, image\u003dimage.id,"},{"line_number":105,"context_line":"                              flavor\u003dflavor.id, nics\u003dnics, user_data\u003dscript)"},{"line_number":106,"context_line":"        else:"},{"line_number":107,"context_line":"            self.server \u003d self.nova.servers.create(name\u003d\u0027test\u0027, image\u003dimage.id,"},{"line_number":108,"context_line":"                              flavor\u003dflavor.id, nics\u003dnics)"}],"source_content_type":"text/x-python","patch_set":2,"id":"7a5de9d1_ae71ed45","line":105,"range":{"start_line":104,"start_character":12,"end_line":105,"end_character":76},"updated":"2016-01-31 08:40:07.000000000","message":"This is valid for both branches since `user_data\u003dNone` is the default.","commit_id":"82d9863c0a1053e7e73dc3decbf94c48e9ad320a"},{"author":{"_account_id":18903,"name":"Yuli","email":"stremovsky@gmail.com","username":"yuli"},"change_message_id":"2fd1649b5d6ac0f355fddcc4551bbe9114c42b0c","unresolved":false,"context_lines":[{"line_number":101,"context_line":"        self.parent.assertIsNotNone(network)"},{"line_number":102,"context_line":"        nics \u003d [{\u0027net-id\u0027: network.id}]"},{"line_number":103,"context_line":"        if script:"},{"line_number":104,"context_line":"            self.server \u003d self.nova.servers.create(name\u003d\u0027test\u0027, image\u003dimage.id,"},{"line_number":105,"context_line":"                              flavor\u003dflavor.id, nics\u003dnics, user_data\u003dscript)"},{"line_number":106,"context_line":"        else:"},{"line_number":107,"context_line":"            self.server \u003d self.nova.servers.create(name\u003d\u0027test\u0027, image\u003dimage.id,"},{"line_number":108,"context_line":"                              flavor\u003dflavor.id, nics\u003dnics)"}],"source_content_type":"text/x-python","patch_set":2,"id":"7a5de9d1_ae724d0f","line":105,"range":{"start_line":104,"start_character":12,"end_line":105,"end_character":76},"in_reply_to":"7a5de9d1_ae71ed45","updated":"2016-01-31 11:21:51.000000000","message":"Done","commit_id":"82d9863c0a1053e7e73dc3decbf94c48e9ad320a"},{"author":{"_account_id":2023,"name":"Saggi Mizrahi","email":"ficoos+osreview@gmail.com","username":"ficoos"},"change_message_id":"d621e0d25d2f801c8d383faf9f19e546d850ea85","unresolved":false,"context_lines":[{"line_number":107,"context_line":"            self.server \u003d self.nova.servers.create(name\u003d\u0027test\u0027, image\u003dimage.id,"},{"line_number":108,"context_line":"                              flavor\u003dflavor.id, nics\u003dnics)"},{"line_number":109,"context_line":"        self.parent.assertIsNotNone(self.server)"},{"line_number":110,"context_line":"        self.server_id \u003d self.server.id"},{"line_number":111,"context_line":"        mmax \u003d 30"},{"line_number":112,"context_line":"        while mmax \u003e 0:"},{"line_number":113,"context_line":"            time.sleep(1)"}],"source_content_type":"text/x-python","patch_set":2,"id":"7a5de9d1_2e9c1d5c","line":110,"range":{"start_line":110,"start_character":8,"end_line":110,"end_character":39},"updated":"2016-01-31 08:40:07.000000000","message":"Why is self.server_id better than self.server.id.\n\nIt\u0027s the exact amount of chars but the latter is always correct.","commit_id":"82d9863c0a1053e7e73dc3decbf94c48e9ad320a"},{"author":{"_account_id":18903,"name":"Yuli","email":"stremovsky@gmail.com","username":"yuli"},"change_message_id":"2fd1649b5d6ac0f355fddcc4551bbe9114c42b0c","unresolved":false,"context_lines":[{"line_number":107,"context_line":"            self.server \u003d self.nova.servers.create(name\u003d\u0027test\u0027, image\u003dimage.id,"},{"line_number":108,"context_line":"                              flavor\u003dflavor.id, nics\u003dnics)"},{"line_number":109,"context_line":"        self.parent.assertIsNotNone(self.server)"},{"line_number":110,"context_line":"        self.server_id \u003d self.server.id"},{"line_number":111,"context_line":"        mmax \u003d 30"},{"line_number":112,"context_line":"        while mmax \u003e 0:"},{"line_number":113,"context_line":"            time.sleep(1)"}],"source_content_type":"text/x-python","patch_set":2,"id":"7a5de9d1_ee6cc536","line":110,"range":{"start_line":110,"start_character":8,"end_line":110,"end_character":39},"in_reply_to":"7a5de9d1_2e9c1d5c","updated":"2016-01-31 11:21:51.000000000","message":"Done","commit_id":"82d9863c0a1053e7e73dc3decbf94c48e9ad320a"},{"author":{"_account_id":20229,"name":"Omer Anson","email":"omer.anson@toganetworks.com","username":"oanson"},"change_message_id":"c72e88cbe344470b34cd36ea9e0ac3efe804d336","unresolved":false,"context_lines":[{"line_number":116,"context_line":"                break"},{"line_number":117,"context_line":"            else:"},{"line_number":118,"context_line":"                mmax \u003d mmax - 1"},{"line_number":119,"context_line":"        if max \u003d\u003d 0:"},{"line_number":120,"context_line":"            self.parent.assertNotEqual(\u0027vm_status\u0027, server2.status)"},{"line_number":121,"context_line":"        return self.server_id"},{"line_number":122,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"7a5de9d1_8eef51e8","line":119,"updated":"2016-01-31 08:24:22.000000000","message":"I don\u0027t think I understand this condition. Should max be mmax? What value should server2.status is expected to have?","commit_id":"82d9863c0a1053e7e73dc3decbf94c48e9ad320a"},{"author":{"_account_id":18903,"name":"Yuli","email":"stremovsky@gmail.com","username":"yuli"},"change_message_id":"2fd1649b5d6ac0f355fddcc4551bbe9114c42b0c","unresolved":false,"context_lines":[{"line_number":116,"context_line":"                break"},{"line_number":117,"context_line":"            else:"},{"line_number":118,"context_line":"                mmax \u003d mmax - 1"},{"line_number":119,"context_line":"        if max \u003d\u003d 0:"},{"line_number":120,"context_line":"            self.parent.assertNotEqual(\u0027vm_status\u0027, server2.status)"},{"line_number":121,"context_line":"        return self.server_id"},{"line_number":122,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"7a5de9d1_4e62b93f","line":119,"in_reply_to":"7a5de9d1_8eef51e8","updated":"2016-01-31 11:21:51.000000000","message":"Done","commit_id":"82d9863c0a1053e7e73dc3decbf94c48e9ad320a"},{"author":{"_account_id":2023,"name":"Saggi Mizrahi","email":"ficoos+osreview@gmail.com","username":"ficoos"},"change_message_id":"d621e0d25d2f801c8d383faf9f19e546d850ea85","unresolved":false,"context_lines":[{"line_number":108,"context_line":"                              flavor\u003dflavor.id, nics\u003dnics)"},{"line_number":109,"context_line":"        self.parent.assertIsNotNone(self.server)"},{"line_number":110,"context_line":"        self.server_id \u003d self.server.id"},{"line_number":111,"context_line":"        mmax \u003d 30"},{"line_number":112,"context_line":"        while mmax \u003e 0:"},{"line_number":113,"context_line":"            time.sleep(1)"},{"line_number":114,"context_line":"            server2 \u003d self.nova.servers.find(id\u003dself.server_id)"},{"line_number":115,"context_line":"            if server2.status \u003d\u003d \u0027ACTIVE\u0027:"},{"line_number":116,"context_line":"                break"},{"line_number":117,"context_line":"            else:"},{"line_number":118,"context_line":"                mmax \u003d mmax - 1"},{"line_number":119,"context_line":"        if max \u003d\u003d 0:"},{"line_number":120,"context_line":"            self.parent.assertNotEqual(\u0027vm_status\u0027, server2.status)"},{"line_number":121,"context_line":"        return self.server_id"},{"line_number":122,"context_line":""},{"line_number":123,"context_line":"    def __del__(self):"}],"source_content_type":"text/x-python","patch_set":2,"id":"7a5de9d1_8e9d1168","line":120,"range":{"start_line":111,"start_character":8,"end_line":120,"end_character":67},"updated":"2016-01-31 08:40:07.000000000","message":"This looks like it should be extracted to a method.\n wait_for_server(timeout)\n\nOr something like that","commit_id":"82d9863c0a1053e7e73dc3decbf94c48e9ad320a"},{"author":{"_account_id":18903,"name":"Yuli","email":"stremovsky@gmail.com","username":"yuli"},"change_message_id":"2fd1649b5d6ac0f355fddcc4551bbe9114c42b0c","unresolved":false,"context_lines":[{"line_number":108,"context_line":"                              flavor\u003dflavor.id, nics\u003dnics)"},{"line_number":109,"context_line":"        self.parent.assertIsNotNone(self.server)"},{"line_number":110,"context_line":"        self.server_id \u003d self.server.id"},{"line_number":111,"context_line":"        mmax \u003d 30"},{"line_number":112,"context_line":"        while mmax \u003e 0:"},{"line_number":113,"context_line":"            time.sleep(1)"},{"line_number":114,"context_line":"            server2 \u003d self.nova.servers.find(id\u003dself.server_id)"},{"line_number":115,"context_line":"            if server2.status \u003d\u003d \u0027ACTIVE\u0027:"},{"line_number":116,"context_line":"                break"},{"line_number":117,"context_line":"            else:"},{"line_number":118,"context_line":"                mmax \u003d mmax - 1"},{"line_number":119,"context_line":"        if max \u003d\u003d 0:"},{"line_number":120,"context_line":"            self.parent.assertNotEqual(\u0027vm_status\u0027, server2.status)"},{"line_number":121,"context_line":"        return self.server_id"},{"line_number":122,"context_line":""},{"line_number":123,"context_line":"    def __del__(self):"}],"source_content_type":"text/x-python","patch_set":2,"id":"7a5de9d1_4ef07967","line":120,"range":{"start_line":111,"start_character":8,"end_line":120,"end_character":67},"in_reply_to":"7a5de9d1_8e9d1168","updated":"2016-01-31 11:21:51.000000000","message":"Done","commit_id":"82d9863c0a1053e7e73dc3decbf94c48e9ad320a"},{"author":{"_account_id":2023,"name":"Saggi Mizrahi","email":"ficoos+osreview@gmail.com","username":"ficoos"},"change_message_id":"d621e0d25d2f801c8d383faf9f19e546d850ea85","unresolved":false,"context_lines":[{"line_number":123,"context_line":"    def __del__(self):"},{"line_number":124,"context_line":"        if self.deleted or self.server_id is None:"},{"line_number":125,"context_line":"            return"},{"line_number":126,"context_line":"        self.delete()"},{"line_number":127,"context_line":""},{"line_number":128,"context_line":"    def delete(self):"},{"line_number":129,"context_line":"        self.nova.servers.delete(self.server)"}],"source_content_type":"text/x-python","patch_set":2,"id":"7a5de9d1_ced30903","line":126,"range":{"start_line":126,"start_character":0,"end_line":126,"end_character":21},"updated":"2016-01-31 08:40:07.000000000","message":"Are you sure self.delete() never takes any locks?\nWhenever doing something non trivial in the destructor you should resurrect the object, clean it, then let it destruct trivially.\n\nTo resurrect you need to create a new reference to the object. This simplest solution is to do use threading.Timer[1] to scheduler the worker to when the GC exists. (interval\u003d0).\n\nThat being said, make sure the nova server object doesn\u0027t take care about it\u0027s own deletion, if it does you can just remove the call in the destructor.\n\n[1] https://docs.python.org/2.7/library/threading.html?highlight\u003dthreading#threading.Timer","commit_id":"82d9863c0a1053e7e73dc3decbf94c48e9ad320a"},{"author":{"_account_id":18903,"name":"Yuli","email":"stremovsky@gmail.com","username":"yuli"},"change_message_id":"2fd1649b5d6ac0f355fddcc4551bbe9114c42b0c","unresolved":false,"context_lines":[{"line_number":123,"context_line":"    def __del__(self):"},{"line_number":124,"context_line":"        if self.deleted or self.server_id is None:"},{"line_number":125,"context_line":"            return"},{"line_number":126,"context_line":"        self.delete()"},{"line_number":127,"context_line":""},{"line_number":128,"context_line":"    def delete(self):"},{"line_number":129,"context_line":"        self.nova.servers.delete(self.server)"}],"source_content_type":"text/x-python","patch_set":2,"id":"7a5de9d1_31b9e079","line":126,"range":{"start_line":126,"start_character":0,"end_line":126,"end_character":21},"in_reply_to":"7a5de9d1_ced30903","updated":"2016-01-31 11:21:51.000000000","message":"This is a good point.\nI need to research this and submit a solution in other patch.","commit_id":"82d9863c0a1053e7e73dc3decbf94c48e9ad320a"},{"author":{"_account_id":2023,"name":"Saggi Mizrahi","email":"ficoos+osreview@gmail.com","username":"ficoos"},"change_message_id":"d621e0d25d2f801c8d383faf9f19e546d850ea85","unresolved":false,"context_lines":[{"line_number":130,"context_line":"        self.deleted \u003d True"},{"line_number":131,"context_line":""},{"line_number":132,"context_line":"    def exists(self):"},{"line_number":133,"context_line":"        if self.server_id is None:"},{"line_number":134,"context_line":"            return False"},{"line_number":135,"context_line":"        self.server \u003d self.nova.servers.find(id\u003dself.server_id)"},{"line_number":136,"context_line":"        if self.server is None:"},{"line_number":137,"context_line":"            return False"},{"line_number":138,"context_line":"        return True"},{"line_number":139,"context_line":""},{"line_number":140,"context_line":"    def dump(self):"},{"line_number":141,"context_line":"        return self.nova.servers.get_console_output(self.server)"}],"source_content_type":"text/x-python","patch_set":2,"id":"7a5de9d1_0efcc170","line":138,"range":{"start_line":133,"start_character":0,"end_line":138,"end_character":19},"updated":"2016-01-31 08:40:07.000000000","message":"When would self.server_id be set and self.server wouldn\u0027t?","commit_id":"82d9863c0a1053e7e73dc3decbf94c48e9ad320a"},{"author":{"_account_id":20229,"name":"Omer Anson","email":"omer.anson@toganetworks.com","username":"oanson"},"change_message_id":"c72e88cbe344470b34cd36ea9e0ac3efe804d336","unresolved":false,"context_lines":[{"line_number":138,"context_line":"        return True"},{"line_number":139,"context_line":""},{"line_number":140,"context_line":"    def dump(self):"},{"line_number":141,"context_line":"        return self.nova.servers.get_console_output(self.server)"},{"line_number":142,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"7a5de9d1_4ea399b2","line":141,"updated":"2016-01-31 08:24:22.000000000","message":"Consider also adding server information to the dump.","commit_id":"82d9863c0a1053e7e73dc3decbf94c48e9ad320a"},{"author":{"_account_id":20229,"name":"Omer Anson","email":"omer.anson@toganetworks.com","username":"oanson"},"change_message_id":"a3a09311fa9f937d36f018ba76dbc5565ba502fa","unresolved":false,"context_lines":[{"line_number":102,"context_line":"        self.server \u003d self.nova.servers.create(name\u003d\u0027test\u0027, image\u003dimage.id,"},{"line_number":103,"context_line":"                           flavor\u003dflavor.id, nics\u003dnics, user_data\u003dscript)"},{"line_number":104,"context_line":"        self.parent.assertIsNotNone(self.server)"},{"line_number":105,"context_line":"        self.server_id \u003d self.server.id"},{"line_number":106,"context_line":"        server_is_ready \u003d self._waite_for_server_ready(30)"},{"line_number":107,"context_line":"        self.parent.assertTrue(server_is_ready)"},{"line_number":108,"context_line":"        return self.server.id"}],"source_content_type":"text/x-python","patch_set":3,"id":"7a5de9d1_31156048","line":105,"updated":"2016-01-31 11:39:08.000000000","message":"server_id is instantiated here and never used.","commit_id":"b29d0787f9cfb2d9a9d96836dfbfdf43cc18c410"},{"author":{"_account_id":18903,"name":"Yuli","email":"stremovsky@gmail.com","username":"yuli"},"change_message_id":"b2e5f7a9023a65b0aa493422bf570c2c3a609ee8","unresolved":false,"context_lines":[{"line_number":102,"context_line":"        self.server \u003d self.nova.servers.create(name\u003d\u0027test\u0027, image\u003dimage.id,"},{"line_number":103,"context_line":"                           flavor\u003dflavor.id, nics\u003dnics, user_data\u003dscript)"},{"line_number":104,"context_line":"        self.parent.assertIsNotNone(self.server)"},{"line_number":105,"context_line":"        self.server_id \u003d self.server.id"},{"line_number":106,"context_line":"        server_is_ready \u003d self._waite_for_server_ready(30)"},{"line_number":107,"context_line":"        self.parent.assertTrue(server_is_ready)"},{"line_number":108,"context_line":"        return self.server.id"}],"source_content_type":"text/x-python","patch_set":3,"id":"7a5de9d1_bc3cc7c8","line":105,"in_reply_to":"7a5de9d1_31156048","updated":"2016-01-31 11:44:50.000000000","message":"Done","commit_id":"b29d0787f9cfb2d9a9d96836dfbfdf43cc18c410"},{"author":{"_account_id":20229,"name":"Omer Anson","email":"omer.anson@toganetworks.com","username":"oanson"},"change_message_id":"a3a09311fa9f937d36f018ba76dbc5565ba502fa","unresolved":false,"context_lines":[{"line_number":107,"context_line":"        self.parent.assertTrue(server_is_ready)"},{"line_number":108,"context_line":"        return self.server.id"},{"line_number":109,"context_line":""},{"line_number":110,"context_line":"    def _waite_for_server_ready(self, timeout):"},{"line_number":111,"context_line":"        if self.server is None:"},{"line_number":112,"context_line":"            return False"},{"line_number":113,"context_line":"        while timeout \u003e 0:"}],"source_content_type":"text/x-python","patch_set":3,"id":"7a5de9d1_d10e4c3a","line":110,"range":{"start_line":110,"start_character":13,"end_line":110,"end_character":14},"updated":"2016-01-31 11:39:08.000000000","message":"Typo (but cosmetic only)","commit_id":"b29d0787f9cfb2d9a9d96836dfbfdf43cc18c410"},{"author":{"_account_id":18903,"name":"Yuli","email":"stremovsky@gmail.com","username":"yuli"},"change_message_id":"b2e5f7a9023a65b0aa493422bf570c2c3a609ee8","unresolved":false,"context_lines":[{"line_number":107,"context_line":"        self.parent.assertTrue(server_is_ready)"},{"line_number":108,"context_line":"        return self.server.id"},{"line_number":109,"context_line":""},{"line_number":110,"context_line":"    def _waite_for_server_ready(self, timeout):"},{"line_number":111,"context_line":"        if self.server is None:"},{"line_number":112,"context_line":"            return False"},{"line_number":113,"context_line":"        while timeout \u003e 0:"}],"source_content_type":"text/x-python","patch_set":3,"id":"7a5de9d1_1c239ba8","line":110,"range":{"start_line":110,"start_character":13,"end_line":110,"end_character":14},"in_reply_to":"7a5de9d1_d10e4c3a","updated":"2016-01-31 11:44:50.000000000","message":"Done","commit_id":"b29d0787f9cfb2d9a9d96836dfbfdf43cc18c410"}]}
