)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":6524,"name":"Henry Gessau","email":"HenryG@gessau.net","username":"gessau"},"change_message_id":"f87bcee072566d669fa53ede914b4fd464fa4341","unresolved":false,"context_lines":[{"line_number":4,"context_line":"Commit:     Kevin Benton \u003cblak111@gmail.com\u003e"},{"line_number":5,"context_line":"CommitDate: 2015-03-01 03:47:37 -0800"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Close FLIP delete transaction before port del"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"The previous floating IP code was starting a transaction to"},{"line_number":10,"context_line":"delete the floating IP object from the database and then"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":7,"id":"ba7be1f8_b64ec6c0","line":7,"updated":"2015-03-01 15:15:55.000000000","message":"FLIP -\u003e FIP","commit_id":"7dbb4a3c91d45a95ded867edf03fe761b949797d"},{"author":{"_account_id":7787,"name":"Kevin Benton","email":"kevin@benton.pub","username":"blak111"},"change_message_id":"5630d9571fd392ff0cb23cedf2d8b535a7accb02","unresolved":false,"context_lines":[{"line_number":4,"context_line":"Commit:     Kevin Benton \u003cblak111@gmail.com\u003e"},{"line_number":5,"context_line":"CommitDate: 2015-03-01 03:47:37 -0800"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Close FLIP delete transaction before port del"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"The previous floating IP code was starting a transaction to"},{"line_number":10,"context_line":"delete the floating IP object from the database and then"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":7,"id":"ba7be1f8_d3fc2142","line":7,"in_reply_to":"ba7be1f8_b64ec6c0","updated":"2015-03-02 08:18:26.000000000","message":"Done","commit_id":"7dbb4a3c91d45a95ded867edf03fe761b949797d"},{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"change_message_id":"94d630d47860aa4cb92c12c0759eaf752614da6f","unresolved":false,"context_lines":[{"line_number":4,"context_line":"Commit:     Kevin Benton \u003cblak111@gmail.com\u003e"},{"line_number":5,"context_line":"CommitDate: 2015-03-01 03:47:37 -0800"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Close FLIP delete transaction before port del"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"The previous floating IP code was starting a transaction to"},{"line_number":10,"context_line":"delete the floating IP object from the database and then"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":7,"id":"ba7be1f8_73b455f2","line":7,"in_reply_to":"ba7be1f8_b64ec6c0","updated":"2015-03-02 08:17:07.000000000","message":"I like FLIP actually, as FIP may stand for fixed ip as well","commit_id":"7dbb4a3c91d45a95ded867edf03fe761b949797d"}],"neutron/db/l3_db.py":[{"author":{"_account_id":6524,"name":"Henry Gessau","email":"HenryG@gessau.net","username":"gessau"},"change_message_id":"f87bcee072566d669fa53ede914b4fd464fa4341","unresolved":false,"context_lines":[{"line_number":908,"context_line":"                try:"},{"line_number":909,"context_line":"                    self._core_plugin.get_port(context,"},{"line_number":910,"context_line":"                                               floatingip[\u0027floating_port_id\u0027])"},{"line_number":911,"context_line":"                    with context.session.begin(subtransactions\u003dTrue):"},{"line_number":912,"context_line":"                        orm.session.make_transient(floatingip)"},{"line_number":913,"context_line":"                        context.session.add(floatingip)"},{"line_number":914,"context_line":"                except n_exc.PortNotFound:"}],"source_content_type":"text/x-python","patch_set":7,"id":"ba7be1f8_f61afec4","line":911,"updated":"2015-03-01 15:15:55.000000000","message":"I think it would be better to do the re-add in the else block for this try.","commit_id":"7dbb4a3c91d45a95ded867edf03fe761b949797d"},{"author":{"_account_id":748,"name":"Armando Migliaccio","email":"armamig@gmail.com","username":"armando-migliaccio"},"change_message_id":"218dfec0577efc26172e882e9572039e66242a03","unresolved":false,"context_lines":[{"line_number":908,"context_line":"                try:"},{"line_number":909,"context_line":"                    self._core_plugin.get_port(context,"},{"line_number":910,"context_line":"                                               floatingip[\u0027floating_port_id\u0027])"},{"line_number":911,"context_line":"                    with context.session.begin(subtransactions\u003dTrue):"},{"line_number":912,"context_line":"                        orm.session.make_transient(floatingip)"},{"line_number":913,"context_line":"                        context.session.add(floatingip)"},{"line_number":914,"context_line":"                except n_exc.PortNotFound:"}],"source_content_type":"text/x-python","patch_set":7,"id":"ba7be1f8_0e46924f","line":911,"in_reply_to":"ba7be1f8_33bc9d6c","updated":"2015-03-02 08:19:41.000000000","message":"makes sense.","commit_id":"7dbb4a3c91d45a95ded867edf03fe761b949797d"},{"author":{"_account_id":7787,"name":"Kevin Benton","email":"kevin@benton.pub","username":"blak111"},"change_message_id":"5630d9571fd392ff0cb23cedf2d8b535a7accb02","unresolved":false,"context_lines":[{"line_number":908,"context_line":"                try:"},{"line_number":909,"context_line":"                    self._core_plugin.get_port(context,"},{"line_number":910,"context_line":"                                               floatingip[\u0027floating_port_id\u0027])"},{"line_number":911,"context_line":"                    with context.session.begin(subtransactions\u003dTrue):"},{"line_number":912,"context_line":"                        orm.session.make_transient(floatingip)"},{"line_number":913,"context_line":"                        context.session.add(floatingip)"},{"line_number":914,"context_line":"                except n_exc.PortNotFound:"}],"source_content_type":"text/x-python","patch_set":7,"id":"ba7be1f8_33bc9d6c","line":911,"in_reply_to":"ba7be1f8_9d855a09","updated":"2015-03-02 08:18:26.000000000","message":"I want to keep it here so the responsibilities of this function are kept the same. i.e. This function is responsible for attempting to delete the floating IP from the DB and its port from the core plugin and rollback in a failure.","commit_id":"7dbb4a3c91d45a95ded867edf03fe761b949797d"},{"author":{"_account_id":748,"name":"Armando Migliaccio","email":"armamig@gmail.com","username":"armando-migliaccio"},"change_message_id":"75cd56c3ecb966b5101ca875e842462bfd42e90d","unresolved":false,"context_lines":[{"line_number":908,"context_line":"                try:"},{"line_number":909,"context_line":"                    self._core_plugin.get_port(context,"},{"line_number":910,"context_line":"                                               floatingip[\u0027floating_port_id\u0027])"},{"line_number":911,"context_line":"                    with context.session.begin(subtransactions\u003dTrue):"},{"line_number":912,"context_line":"                        orm.session.make_transient(floatingip)"},{"line_number":913,"context_line":"                        context.session.add(floatingip)"},{"line_number":914,"context_line":"                except n_exc.PortNotFound:"}],"source_content_type":"text/x-python","patch_set":7,"id":"ba7be1f8_9d855a09","line":911,"in_reply_to":"ba7be1f8_f61afec4","updated":"2015-03-02 06:31:30.000000000","message":"I wonder where it\u0027s best to do the fault recovery: in the caller or here. I am wondering what the level of indirection at like 912 buys us.","commit_id":"7dbb4a3c91d45a95ded867edf03fe761b949797d"},{"author":{"_account_id":7448,"name":"Carl Baldwin","email":"carl@ecbaldwin.net","username":"carl-baldwin"},"change_message_id":"ad98476a5287075b81c355e7faf3f3877f5323b4","unresolved":false,"context_lines":[{"line_number":902,"context_line":"            context.session.delete(floatingip)"},{"line_number":903,"context_line":"        try:"},{"line_number":904,"context_line":"            self._core_plugin.delete_port(context.elevated(), fport_id,"},{"line_number":905,"context_line":"                                          l3_port_check\u003dFalse)"},{"line_number":906,"context_line":"        except Exception:"},{"line_number":907,"context_line":"            with excutils.save_and_reraise_exception():"},{"line_number":908,"context_line":"                # Since the deletion threw an exception, we need to see if the"}],"source_content_type":"text/x-python","patch_set":8,"id":"ba7be1f8_3370efdb","line":905,"updated":"2015-03-03 01:21:34.000000000","message":"I wonder if there is a way to keep the \"cascade restrict\" behavior while still keeping these two operations in the same transaction.\n\nJust thinking out loud here:  What if delete_port accepted a callback to run before port deletion (but in context of the delete_port transaction)?","commit_id":"a580f3ecda04855463ce7d9479ab7e8d20e8fc07"},{"author":{"_account_id":748,"name":"Armando Migliaccio","email":"armamig@gmail.com","username":"armando-migliaccio"},"change_message_id":"a3136a268b27d688f15bce1cacb6fcd482ac1834","unresolved":false,"context_lines":[{"line_number":902,"context_line":"            context.session.delete(floatingip)"},{"line_number":903,"context_line":"        try:"},{"line_number":904,"context_line":"            self._core_plugin.delete_port(context.elevated(), fport_id,"},{"line_number":905,"context_line":"                                          l3_port_check\u003dFalse)"},{"line_number":906,"context_line":"        except Exception:"},{"line_number":907,"context_line":"            with excutils.save_and_reraise_exception():"},{"line_number":908,"context_line":"                # Since the deletion threw an exception, we need to see if the"}],"source_content_type":"text/x-python","patch_set":8,"id":"ba7be1f8_ff50d133","line":905,"in_reply_to":"ba7be1f8_3370efdb","updated":"2015-03-03 08:11:51.000000000","message":"We could in theory use the callback framework to come up with a solution that would let l3 and ml2 \u0027cooperate\u0027 in relation to floating ip removal, so that this can be cleaned up a little; however, I am not sure how much we can really alter this so that we don\u0027t end up calling rpc within the transaction.\n\nI\u0027ll ponder on this some more.","commit_id":"a580f3ecda04855463ce7d9479ab7e8d20e8fc07"},{"author":{"_account_id":7787,"name":"Kevin Benton","email":"kevin@benton.pub","username":"blak111"},"change_message_id":"7a5f3e11d6510aec4609c3003823c1490287a030","unresolved":false,"context_lines":[{"line_number":902,"context_line":"            context.session.delete(floatingip)"},{"line_number":903,"context_line":"        try:"},{"line_number":904,"context_line":"            self._core_plugin.delete_port(context.elevated(), fport_id,"},{"line_number":905,"context_line":"                                          l3_port_check\u003dFalse)"},{"line_number":906,"context_line":"        except Exception:"},{"line_number":907,"context_line":"            with excutils.save_and_reraise_exception():"},{"line_number":908,"context_line":"                # Since the deletion threw an exception, we need to see if the"}],"source_content_type":"text/x-python","patch_set":8,"id":"9a80dd14_585ddb20","line":905,"in_reply_to":"ba7be1f8_ff50d133","updated":"2015-03-05 01:39:37.000000000","message":"Unfortunately both of those would be specific to ML2. Is that the only plugin we are interested in fixing this for?","commit_id":"a580f3ecda04855463ce7d9479ab7e8d20e8fc07"}],"neutron/tests/unit/opencontrail/test_contrail_plugin.py":[{"author":{"_account_id":8124,"name":"cbrandily","email":"zzelle@gmail.com","username":"cbrandily"},"change_message_id":"168b14ae2962f9dcd9aaf6cb44763730b7b214ac","unresolved":false,"context_lines":[{"line_number":307,"context_line":"    def setUp(self):"},{"line_number":308,"context_line":"        super(TestContrailL3NatTestCase, self).setUp()"},{"line_number":309,"context_line":""},{"line_number":310,"context_line":"    def test_floatingip_core_port_delete_failure_after_port_record_gone(self):"},{"line_number":311,"context_line":"        # contrail does not use neutron db"},{"line_number":312,"context_line":"        pass"},{"line_number":313,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"ba7be1f8_66e1eefd","line":310,"updated":"2015-03-02 11:11:37.000000000","message":"Why not skipping the test?","commit_id":"a580f3ecda04855463ce7d9479ab7e8d20e8fc07"},{"author":{"_account_id":7787,"name":"Kevin Benton","email":"kevin@benton.pub","username":"blak111"},"change_message_id":"0d578a646771f33e68b14287aad4f6d57f297d88","unresolved":false,"context_lines":[{"line_number":307,"context_line":"    def setUp(self):"},{"line_number":308,"context_line":"        super(TestContrailL3NatTestCase, self).setUp()"},{"line_number":309,"context_line":""},{"line_number":310,"context_line":"    def test_floatingip_core_port_delete_failure_after_port_record_gone(self):"},{"line_number":311,"context_line":"        # contrail does not use neutron db"},{"line_number":312,"context_line":"        pass"},{"line_number":313,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"ba7be1f8_47cea1b5","line":310,"in_reply_to":"ba7be1f8_66e1eefd","updated":"2015-03-02 13:29:33.000000000","message":"I usually skip tests to indicate that there is a lacking feature or some other actionable item since they show up differently in the logs. There isn\u0027t really anything to do here in the future because it simply doesn\u0027t apply so I chose to pass.","commit_id":"a580f3ecda04855463ce7d9479ab7e8d20e8fc07"}],"neutron/tests/unit/test_l3_plugin.py":[{"author":{"_account_id":8124,"name":"cbrandily","email":"zzelle@gmail.com","username":"cbrandily"},"change_message_id":"168b14ae2962f9dcd9aaf6cb44763730b7b214ac","unresolved":false,"context_lines":[{"line_number":1511,"context_line":"                             expected_code\u003dexc.HTTPBadRequest.code)"},{"line_number":1512,"context_line":"                # make sure the floating IP record was re-added"},{"line_number":1513,"context_line":"                res \u003d self._show(\u0027floatingips\u0027, fip[\u0027floatingip\u0027][\u0027id\u0027])"},{"line_number":1514,"context_line":"                self.assertEqual(res, fip)"},{"line_number":1515,"context_line":""},{"line_number":1516,"context_line":"    def test_floatingip_core_port_delete_failure_after_port_record_gone(self):"},{"line_number":1517,"context_line":"        with self.floatingip_with_assoc() as fip:"}],"source_content_type":"text/x-python","patch_set":8,"id":"ba7be1f8_06891226","line":1514,"updated":"2015-03-02 11:11:37.000000000","message":"it should be:\n\n  self.assertEqual(fip, res)","commit_id":"a580f3ecda04855463ce7d9479ab7e8d20e8fc07"},{"author":{"_account_id":7787,"name":"Kevin Benton","email":"kevin@benton.pub","username":"blak111"},"change_message_id":"0d578a646771f33e68b14287aad4f6d57f297d88","unresolved":false,"context_lines":[{"line_number":1511,"context_line":"                             expected_code\u003dexc.HTTPBadRequest.code)"},{"line_number":1512,"context_line":"                # make sure the floating IP record was re-added"},{"line_number":1513,"context_line":"                res \u003d self._show(\u0027floatingips\u0027, fip[\u0027floatingip\u0027][\u0027id\u0027])"},{"line_number":1514,"context_line":"                self.assertEqual(res, fip)"},{"line_number":1515,"context_line":""},{"line_number":1516,"context_line":"    def test_floatingip_core_port_delete_failure_after_port_record_gone(self):"},{"line_number":1517,"context_line":"        with self.floatingip_with_assoc() as fip:"}],"source_content_type":"text/x-python","patch_set":8,"id":"ba7be1f8_c7b9b116","line":1514,"in_reply_to":"ba7be1f8_06891226","updated":"2015-03-02 13:29:33.000000000","message":"ack. will get it on next re-spin","commit_id":"a580f3ecda04855463ce7d9479ab7e8d20e8fc07"}]}
