)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"change_message_id":"e819901eaeda55670e09580d381acd8e783f110b","unresolved":false,"context_lines":[{"line_number":13,"context_line":"this change addresses these operations."},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"Change-Id: Ied4cd250f9d063878830c951ce474f2d07b55a95"},{"line_number":16,"context_line":"Fixes: bug 1227336"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":1,"id":"AAAAUH%2F%2BMBQ%3D","line":16,"updated":"2014-01-29 10:23:47.000000000","message":"this should be Closes-Bug: #...","commit_id":"5086ba6561e7ccaa7fe45b88374482bc841d74a7"},{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"unresolved":false,"context_lines":[{"line_number":13,"context_line":"this change addresses these operations."},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"Change-Id: Ied4cd250f9d063878830c951ce474f2d07b55a95"},{"line_number":16,"context_line":"Fixes: bug 1227336"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":1,"id":"AAAAUH%2F%2BFwI%3D","line":16,"in_reply_to":"AAAAUH%2F%2BGyU%3D","updated":"2014-01-30 08:29:01.000000000","message":"Here is the guide which I\u0027m using :)\n https://wiki.openstack.org/wiki/GitCommitMessages","commit_id":"5086ba6561e7ccaa7fe45b88374482bc841d74a7"},{"author":{"_account_id":1923,"name":"Mohammad Banikazemi","email":"mbanikazemi@gmail.com","username":"mb-s"},"change_message_id":"2eeac90785dc4471ebf617e4275fcade5c48f26d","unresolved":false,"context_lines":[{"line_number":13,"context_line":"this change addresses these operations."},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"Change-Id: Ied4cd250f9d063878830c951ce474f2d07b55a95"},{"line_number":16,"context_line":"Fixes: bug 1227336"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":1,"id":"AAAAUH%2F%2BGyU%3D","line":16,"in_reply_to":"AAAAUH%2F%2BMBQ%3D","updated":"2014-01-30 03:09:15.000000000","message":"Ok. Will fix it. (OpenStack guideline I was looking at asks for using \"Fixes\".)","commit_id":"5086ba6561e7ccaa7fe45b88374482bc841d74a7"}],"neutron/plugins/ml2/plugin.py":[{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"change_message_id":"e819901eaeda55670e09580d381acd8e783f110b","unresolved":false,"context_lines":[{"line_number":343,"context_line":"                original_network\u003doriginal_network)"},{"line_number":344,"context_line":"            self.mechanism_manager.update_network_precommit(mech_context)"},{"line_number":345,"context_line":""},{"line_number":346,"context_line":"        # TODO(apech) - handle errors raised by update_network, potentially"},{"line_number":347,"context_line":"        # by re-calling update_network with the previous attributes. For"},{"line_number":348,"context_line":"        # now the error is propogated to the caller, which is expected to"},{"line_number":349,"context_line":"        # either undo/retry the operation or delete the resource."}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAUH%2F%2BMAc%3D","line":346,"updated":"2014-01-29 10:23:47.000000000","message":"seems TODO note can be removed","commit_id":"5086ba6561e7ccaa7fe45b88374482bc841d74a7"},{"author":{"_account_id":1923,"name":"Mohammad Banikazemi","email":"mbanikazemi@gmail.com","username":"mb-s"},"change_message_id":"2eeac90785dc4471ebf617e4275fcade5c48f26d","unresolved":false,"context_lines":[{"line_number":343,"context_line":"                original_network\u003doriginal_network)"},{"line_number":344,"context_line":"            self.mechanism_manager.update_network_precommit(mech_context)"},{"line_number":345,"context_line":""},{"line_number":346,"context_line":"        # TODO(apech) - handle errors raised by update_network, potentially"},{"line_number":347,"context_line":"        # by re-calling update_network with the previous attributes. For"},{"line_number":348,"context_line":"        # now the error is propogated to the caller, which is expected to"},{"line_number":349,"context_line":"        # either undo/retry the operation or delete the resource."}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAUH%2F%2BG2I%3D","line":346,"in_reply_to":"AAAAUH%2F%2BMAc%3D","updated":"2014-01-30 03:07:15.000000000","message":"Thanks for taking the time to review. Will do.","commit_id":"5086ba6561e7ccaa7fe45b88374482bc841d74a7"},{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"change_message_id":"e819901eaeda55670e09580d381acd8e783f110b","unresolved":false,"context_lines":[{"line_number":354,"context_line":"                LOG.error(_(\"mechanism_manager.update_network failed, \""},{"line_number":355,"context_line":"                            \"undoing the update for network \u0027%s\u0027\"), id)"},{"line_number":356,"context_line":"                new_request \u003d {k: original_network.get(k) for"},{"line_number":357,"context_line":"                               k, v in network[\u0027network\u0027].iteritems()}"},{"line_number":358,"context_line":"                undo_network \u003d {\u0027network\u0027: new_request}"},{"line_number":359,"context_line":"                updated_network \u003d super(Ml2Plugin, self).update_network("},{"line_number":360,"context_line":"                    context, id, undo_network)"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAUH%2F%2BMAE%3D","line":357,"updated":"2014-01-29 10:23:47.000000000","message":"v not needed","commit_id":"5086ba6561e7ccaa7fe45b88374482bc841d74a7"},{"author":{"_account_id":1923,"name":"Mohammad Banikazemi","email":"mbanikazemi@gmail.com","username":"mb-s"},"change_message_id":"2eeac90785dc4471ebf617e4275fcade5c48f26d","unresolved":false,"context_lines":[{"line_number":354,"context_line":"                LOG.error(_(\"mechanism_manager.update_network failed, \""},{"line_number":355,"context_line":"                            \"undoing the update for network \u0027%s\u0027\"), id)"},{"line_number":356,"context_line":"                new_request \u003d {k: original_network.get(k) for"},{"line_number":357,"context_line":"                               k, v in network[\u0027network\u0027].iteritems()}"},{"line_number":358,"context_line":"                undo_network \u003d {\u0027network\u0027: new_request}"},{"line_number":359,"context_line":"                updated_network \u003d super(Ml2Plugin, self).update_network("},{"line_number":360,"context_line":"                    context, id, undo_network)"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAUH%2F%2BG18%3D","line":357,"in_reply_to":"AAAAUH%2F%2BMAE%3D","updated":"2014-01-30 03:07:15.000000000","message":"Thanks for pointing out.","commit_id":"5086ba6561e7ccaa7fe45b88374482bc841d74a7"},{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"change_message_id":"e819901eaeda55670e09580d381acd8e783f110b","unresolved":false,"context_lines":[{"line_number":499,"context_line":"                self, context, updated_subnet, original_subnet\u003doriginal_subnet)"},{"line_number":500,"context_line":"            self.mechanism_manager.update_subnet_precommit(mech_context)"},{"line_number":501,"context_line":""},{"line_number":502,"context_line":"        # TODO(apech) - handle errors raised by update_subnet, potentially"},{"line_number":503,"context_line":"        # by re-calling update_subnet with the previous attributes. For"},{"line_number":504,"context_line":"        # now the error is propogated to the caller, which is expected to"},{"line_number":505,"context_line":"        # either undo/retry the operation or delete the resource."}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAUH%2F%2BL%2F4%3D","line":502,"updated":"2014-01-29 10:23:47.000000000","message":"ditto","commit_id":"5086ba6561e7ccaa7fe45b88374482bc841d74a7"},{"author":{"_account_id":1923,"name":"Mohammad Banikazemi","email":"mbanikazemi@gmail.com","username":"mb-s"},"change_message_id":"2eeac90785dc4471ebf617e4275fcade5c48f26d","unresolved":false,"context_lines":[{"line_number":499,"context_line":"                self, context, updated_subnet, original_subnet\u003doriginal_subnet)"},{"line_number":500,"context_line":"            self.mechanism_manager.update_subnet_precommit(mech_context)"},{"line_number":501,"context_line":""},{"line_number":502,"context_line":"        # TODO(apech) - handle errors raised by update_subnet, potentially"},{"line_number":503,"context_line":"        # by re-calling update_subnet with the previous attributes. For"},{"line_number":504,"context_line":"        # now the error is propogated to the caller, which is expected to"},{"line_number":505,"context_line":"        # either undo/retry the operation or delete the resource."}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAUH%2F%2BG10%3D","line":502,"in_reply_to":"AAAAUH%2F%2BL%2F4%3D","updated":"2014-01-30 03:07:15.000000000","message":"Thanks for pointing this out.","commit_id":"5086ba6561e7ccaa7fe45b88374482bc841d74a7"},{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"change_message_id":"e819901eaeda55670e09580d381acd8e783f110b","unresolved":false,"context_lines":[{"line_number":510,"context_line":"                LOG.error(_(\"mechanism_manager.update_subnet failed, \""},{"line_number":511,"context_line":"                            \"undoing the update for subnet \u0027%s\u0027\"), id)"},{"line_number":512,"context_line":"                new_request \u003d {k: original_subnet.get(k) for"},{"line_number":513,"context_line":"                               k, v in subnet[\u0027subnet\u0027].iteritems()}"},{"line_number":514,"context_line":"                undo_subnet \u003d {\u0027subnet\u0027: new_request}"},{"line_number":515,"context_line":"                updated_subnet \u003d super(Ml2Plugin, self).update_subnet("},{"line_number":516,"context_line":"                    context, id, undo_subnet)"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAUH%2F%2BL%2Fo%3D","line":513,"updated":"2014-01-29 10:23:47.000000000","message":"ditto on v","commit_id":"5086ba6561e7ccaa7fe45b88374482bc841d74a7"},{"author":{"_account_id":1923,"name":"Mohammad Banikazemi","email":"mbanikazemi@gmail.com","username":"mb-s"},"change_message_id":"2eeac90785dc4471ebf617e4275fcade5c48f26d","unresolved":false,"context_lines":[{"line_number":510,"context_line":"                LOG.error(_(\"mechanism_manager.update_subnet failed, \""},{"line_number":511,"context_line":"                            \"undoing the update for subnet \u0027%s\u0027\"), id)"},{"line_number":512,"context_line":"                new_request \u003d {k: original_subnet.get(k) for"},{"line_number":513,"context_line":"                               k, v in subnet[\u0027subnet\u0027].iteritems()}"},{"line_number":514,"context_line":"                undo_subnet \u003d {\u0027subnet\u0027: new_request}"},{"line_number":515,"context_line":"                updated_subnet \u003d super(Ml2Plugin, self).update_subnet("},{"line_number":516,"context_line":"                    context, id, undo_subnet)"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAUH%2F%2BG1w%3D","line":513,"in_reply_to":"AAAAUH%2F%2BL%2Fo%3D","updated":"2014-01-30 03:07:15.000000000","message":"Thanks for pointing this out.","commit_id":"5086ba6561e7ccaa7fe45b88374482bc841d74a7"},{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"change_message_id":"e819901eaeda55670e09580d381acd8e783f110b","unresolved":false,"context_lines":[{"line_number":640,"context_line":"                mech_context, attrs)"},{"line_number":641,"context_line":"            self.mechanism_manager.update_port_precommit(mech_context)"},{"line_number":642,"context_line":""},{"line_number":643,"context_line":"        # TODO(apech) - handle errors raised by update_port, potentially"},{"line_number":644,"context_line":"        # by re-calling update_port with the previous attributes. For"},{"line_number":645,"context_line":"        # now the error is propogated to the caller, which is expected to"},{"line_number":646,"context_line":"        # either undo/retry the operation or delete the resource."}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAUH%2F%2BL%2Fg%3D","line":643,"updated":"2014-01-29 10:23:47.000000000","message":"ditto","commit_id":"5086ba6561e7ccaa7fe45b88374482bc841d74a7"},{"author":{"_account_id":1923,"name":"Mohammad Banikazemi","email":"mbanikazemi@gmail.com","username":"mb-s"},"change_message_id":"2eeac90785dc4471ebf617e4275fcade5c48f26d","unresolved":false,"context_lines":[{"line_number":640,"context_line":"                mech_context, attrs)"},{"line_number":641,"context_line":"            self.mechanism_manager.update_port_precommit(mech_context)"},{"line_number":642,"context_line":""},{"line_number":643,"context_line":"        # TODO(apech) - handle errors raised by update_port, potentially"},{"line_number":644,"context_line":"        # by re-calling update_port with the previous attributes. For"},{"line_number":645,"context_line":"        # now the error is propogated to the caller, which is expected to"},{"line_number":646,"context_line":"        # either undo/retry the operation or delete the resource."}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAUH%2F%2BG1k%3D","line":643,"in_reply_to":"AAAAUH%2F%2BL%2Fg%3D","updated":"2014-01-30 03:07:15.000000000","message":"Thanks for pointing this out.","commit_id":"5086ba6561e7ccaa7fe45b88374482bc841d74a7"},{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"change_message_id":"e819901eaeda55670e09580d381acd8e783f110b","unresolved":false,"context_lines":[{"line_number":651,"context_line":"                LOG.error(_(\"mechanism_manager.update_port failed, \""},{"line_number":652,"context_line":"                            \"undoing the update for port \u0027%s\u0027\"), id)"},{"line_number":653,"context_line":"                new_request \u003d {k: original_port.get(k) for"},{"line_number":654,"context_line":"                               k, v in port[\u0027port\u0027].iteritems()}"},{"line_number":655,"context_line":"                undo_port \u003d {\u0027port\u0027: new_request}"},{"line_number":656,"context_line":"                updated_port \u003d super(Ml2Plugin, self).update_port("},{"line_number":657,"context_line":"                    context, id, undo_port)"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAUH%2F%2BL%2Fc%3D","line":654,"updated":"2014-01-29 10:23:47.000000000","message":"ditto","commit_id":"5086ba6561e7ccaa7fe45b88374482bc841d74a7"},{"author":{"_account_id":1923,"name":"Mohammad Banikazemi","email":"mbanikazemi@gmail.com","username":"mb-s"},"change_message_id":"2eeac90785dc4471ebf617e4275fcade5c48f26d","unresolved":false,"context_lines":[{"line_number":651,"context_line":"                LOG.error(_(\"mechanism_manager.update_port failed, \""},{"line_number":652,"context_line":"                            \"undoing the update for port \u0027%s\u0027\"), id)"},{"line_number":653,"context_line":"                new_request \u003d {k: original_port.get(k) for"},{"line_number":654,"context_line":"                               k, v in port[\u0027port\u0027].iteritems()}"},{"line_number":655,"context_line":"                undo_port \u003d {\u0027port\u0027: new_request}"},{"line_number":656,"context_line":"                updated_port \u003d super(Ml2Plugin, self).update_port("},{"line_number":657,"context_line":"                    context, id, undo_port)"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAUH%2F%2BG1c%3D","line":654,"in_reply_to":"AAAAUH%2F%2BL%2Fc%3D","updated":"2014-01-30 03:07:15.000000000","message":"Thanks for pointing this out.","commit_id":"5086ba6561e7ccaa7fe45b88374482bc841d74a7"},{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"unresolved":false,"context_lines":[{"line_number":350,"context_line":"                LOG.error(_(\"mechanism_manager.update_network failed, \""},{"line_number":351,"context_line":"                            \"undoing the update for network \u0027%s\u0027\"), id)"},{"line_number":352,"context_line":"                new_request \u003d {}"},{"line_number":353,"context_line":"                for (k, unused_v) in network[\u0027network\u0027].iteritems():"},{"line_number":354,"context_line":"                    new_request[k] \u003d original_network.get(k)"},{"line_number":355,"context_line":"                undo_network \u003d {\u0027network\u0027: new_request}"},{"line_number":356,"context_line":"                updated_network \u003d super(Ml2Plugin, self).update_network("}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAUH%2F9%2FwE%3D","line":353,"updated":"2014-01-31 07:31:43.000000000","message":"for k in network[\u0027network\u0027]:?","commit_id":"873a1d77a8e5d1012fedb790711f7d4fb2d2c1b5"},{"author":{"_account_id":1923,"name":"Mohammad Banikazemi","email":"mbanikazemi@gmail.com","username":"mb-s"},"change_message_id":"2eeac90785dc4471ebf617e4275fcade5c48f26d","unresolved":false,"context_lines":[{"line_number":350,"context_line":"                LOG.error(_(\"mechanism_manager.update_network failed, \""},{"line_number":351,"context_line":"                            \"undoing the update for network \u0027%s\u0027\"), id)"},{"line_number":352,"context_line":"                new_request \u003d {}"},{"line_number":353,"context_line":"                for (k, unused_v) in network[\u0027network\u0027].iteritems():"},{"line_number":354,"context_line":"                    new_request[k] \u003d original_network.get(k)"},{"line_number":355,"context_line":"                undo_network \u003d {\u0027network\u0027: new_request}"},{"line_number":356,"context_line":"                updated_network \u003d super(Ml2Plugin, self).update_network("}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAUH%2F9960%3D","line":353,"in_reply_to":"AAAAUH%2F9%2FaI%3D","updated":"2014-01-31 15:40:22.000000000","message":"Thanks for reviewing the patch. Will fix.","commit_id":"873a1d77a8e5d1012fedb790711f7d4fb2d2c1b5"},{"author":{"_account_id":6072,"name":"Eugene Nikanorov","email":"enikanorov@mirantis.com","username":"enikanorov"},"unresolved":false,"context_lines":[{"line_number":350,"context_line":"                LOG.error(_(\"mechanism_manager.update_network failed, \""},{"line_number":351,"context_line":"                            \"undoing the update for network \u0027%s\u0027\"), id)"},{"line_number":352,"context_line":"                new_request \u003d {}"},{"line_number":353,"context_line":"                for (k, unused_v) in network[\u0027network\u0027].iteritems():"},{"line_number":354,"context_line":"                    new_request[k] \u003d original_network.get(k)"},{"line_number":355,"context_line":"                undo_network \u003d {\u0027network\u0027: new_request}"},{"line_number":356,"context_line":"                updated_network \u003d super(Ml2Plugin, self).update_network("}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAUH%2F9%2FaI%3D","line":353,"in_reply_to":"AAAAUH%2F9%2FwE%3D","updated":"2014-01-31 09:27:57.000000000","message":"+1","commit_id":"873a1d77a8e5d1012fedb790711f7d4fb2d2c1b5"},{"author":{"_account_id":1923,"name":"Mohammad Banikazemi","email":"mbanikazemi@gmail.com","username":"mb-s"},"change_message_id":"2eeac90785dc4471ebf617e4275fcade5c48f26d","unresolved":false,"context_lines":[{"line_number":350,"context_line":"                LOG.error(_(\"mechanism_manager.update_network failed, \""},{"line_number":351,"context_line":"                            \"undoing the update for network \u0027%s\u0027\"), id)"},{"line_number":352,"context_line":"                new_request \u003d {}"},{"line_number":353,"context_line":"                for (k, unused_v) in network[\u0027network\u0027].iteritems():"},{"line_number":354,"context_line":"                    new_request[k] \u003d original_network.get(k)"},{"line_number":355,"context_line":"                undo_network \u003d {\u0027network\u0027: new_request}"},{"line_number":356,"context_line":"                updated_network \u003d super(Ml2Plugin, self).update_network("}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAUH%2F9964%3D","line":353,"in_reply_to":"AAAAUH%2F9%2FwE%3D","updated":"2014-01-31 15:40:22.000000000","message":"Thanks for reviewing the patch. Will fix.","commit_id":"873a1d77a8e5d1012fedb790711f7d4fb2d2c1b5"},{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"unresolved":false,"context_lines":[{"line_number":353,"context_line":"                for (k, unused_v) in network[\u0027network\u0027].iteritems():"},{"line_number":354,"context_line":"                    new_request[k] \u003d original_network.get(k)"},{"line_number":355,"context_line":"                undo_network \u003d {\u0027network\u0027: new_request}"},{"line_number":356,"context_line":"                updated_network \u003d super(Ml2Plugin, self).update_network("},{"line_number":357,"context_line":"                    context, id, undo_network)"},{"line_number":358,"context_line":"                self._process_l3_update(context,"},{"line_number":359,"context_line":"                                        updated_network, original_network)"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAUH%2F9%2FvI%3D","line":356,"updated":"2014-01-31 07:31:43.000000000","message":"Not sure it should be done manually. I think this try/except block can be placed under the transaction started at #333 and hence db update will be rolled back automatically. Am I missing something?","commit_id":"873a1d77a8e5d1012fedb790711f7d4fb2d2c1b5"},{"author":{"_account_id":1923,"name":"Mohammad Banikazemi","email":"mbanikazemi@gmail.com","username":"mb-s"},"change_message_id":"2eeac90785dc4471ebf617e4275fcade5c48f26d","unresolved":false,"context_lines":[{"line_number":353,"context_line":"                for (k, unused_v) in network[\u0027network\u0027].iteritems():"},{"line_number":354,"context_line":"                    new_request[k] \u003d original_network.get(k)"},{"line_number":355,"context_line":"                undo_network \u003d {\u0027network\u0027: new_request}"},{"line_number":356,"context_line":"                updated_network \u003d super(Ml2Plugin, self).update_network("},{"line_number":357,"context_line":"                    context, id, undo_network)"},{"line_number":358,"context_line":"                self._process_l3_update(context,"},{"line_number":359,"context_line":"                                        updated_network, original_network)"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAUH%2F993E%3D","line":356,"in_reply_to":"AAAAUH%2F9%2FMA%3D","updated":"2014-01-31 15:40:22.000000000","message":"Oleg, that is the whole point. Having this done in a transaction requires calling the controller (mechansim driver) within the transaction. The code will look much nicer and more compact as the roll backs happen automatically but then you have a call to an external entity with possibly long latencies within your transaction. That is the whole reason for breaking op the ops to pre commit and post commit operations. There have been a couple of email threads about this in the dev-list where people have pointed out that calls to a controller from a transaction a bad practice.","commit_id":"873a1d77a8e5d1012fedb790711f7d4fb2d2c1b5"},{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"unresolved":false,"context_lines":[{"line_number":353,"context_line":"                for (k, unused_v) in network[\u0027network\u0027].iteritems():"},{"line_number":354,"context_line":"                    new_request[k] \u003d original_network.get(k)"},{"line_number":355,"context_line":"                undo_network \u003d {\u0027network\u0027: new_request}"},{"line_number":356,"context_line":"                updated_network \u003d super(Ml2Plugin, self).update_network("},{"line_number":357,"context_line":"                    context, id, undo_network)"},{"line_number":358,"context_line":"                self._process_l3_update(context,"},{"line_number":359,"context_line":"                                        updated_network, original_network)"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAUH%2F9%2FMA%3D","line":356,"in_reply_to":"AAAAUH%2F9%2FZs%3D","updated":"2014-01-31 10:06:48.000000000","message":"Yeah, but now, looking at the code I can\u0027t see the difference between doing db rollback manually or letting the transaction do it automatically and in a more reliable way.","commit_id":"873a1d77a8e5d1012fedb790711f7d4fb2d2c1b5"},{"author":{"_account_id":6072,"name":"Eugene Nikanorov","email":"enikanorov@mirantis.com","username":"enikanorov"},"unresolved":false,"context_lines":[{"line_number":353,"context_line":"                for (k, unused_v) in network[\u0027network\u0027].iteritems():"},{"line_number":354,"context_line":"                    new_request[k] \u003d original_network.get(k)"},{"line_number":355,"context_line":"                undo_network \u003d {\u0027network\u0027: new_request}"},{"line_number":356,"context_line":"                updated_network \u003d super(Ml2Plugin, self).update_network("},{"line_number":357,"context_line":"                    context, id, undo_network)"},{"line_number":358,"context_line":"                self._process_l3_update(context,"},{"line_number":359,"context_line":"                                        updated_network, original_network)"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAUH%2F9%2FZs%3D","line":356,"in_reply_to":"AAAAUH%2F9%2FvI%3D","updated":"2014-01-31 09:27:57.000000000","message":"I think the whole concept of pre/post commits is to split those operations and not execute them within a transaction.","commit_id":"873a1d77a8e5d1012fedb790711f7d4fb2d2c1b5"},{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"unresolved":false,"context_lines":[{"line_number":353,"context_line":"                for (k, unused_v) in network[\u0027network\u0027].iteritems():"},{"line_number":354,"context_line":"                    new_request[k] \u003d original_network.get(k)"},{"line_number":355,"context_line":"                undo_network \u003d {\u0027network\u0027: new_request}"},{"line_number":356,"context_line":"                updated_network \u003d super(Ml2Plugin, self).update_network("},{"line_number":357,"context_line":"                    context, id, undo_network)"},{"line_number":358,"context_line":"                self._process_l3_update(context,"},{"line_number":359,"context_line":"                                        updated_network, original_network)"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAUH%2F93YI%3D","line":356,"in_reply_to":"AAAAUH%2F993E%3D","updated":"2014-02-03 05:16:10.000000000","message":"Got it, thanks for clarification!","commit_id":"873a1d77a8e5d1012fedb790711f7d4fb2d2c1b5"},{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"unresolved":false,"context_lines":[{"line_number":357,"context_line":"                    context, id, undo_network)"},{"line_number":358,"context_line":"                self._process_l3_update(context,"},{"line_number":359,"context_line":"                                        updated_network, original_network)"},{"line_number":360,"context_line":"                LOG.error(_(\"mechanism_manager.update_network failed, \""},{"line_number":361,"context_line":"                            \"unrolled the update for network \u0027%s\u0027\"), id)"},{"line_number":362,"context_line":"        return updated_network"},{"line_number":363,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAUH%2F9%2Fvw%3D","line":360,"updated":"2014-01-31 07:31:43.000000000","message":"nit: is it good to have two error messages for the same failure? Probably the one at #350 is enough.","commit_id":"873a1d77a8e5d1012fedb790711f7d4fb2d2c1b5"},{"author":{"_account_id":1923,"name":"Mohammad Banikazemi","email":"mbanikazemi@gmail.com","username":"mb-s"},"change_message_id":"2eeac90785dc4471ebf617e4275fcade5c48f26d","unresolved":false,"context_lines":[{"line_number":357,"context_line":"                    context, id, undo_network)"},{"line_number":358,"context_line":"                self._process_l3_update(context,"},{"line_number":359,"context_line":"                                        updated_network, original_network)"},{"line_number":360,"context_line":"                LOG.error(_(\"mechanism_manager.update_network failed, \""},{"line_number":361,"context_line":"                            \"unrolled the update for network \u0027%s\u0027\"), id)"},{"line_number":362,"context_line":"        return updated_network"},{"line_number":363,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAUH%2F9924%3D","line":360,"in_reply_to":"AAAAUH%2F9%2Fvw%3D","updated":"2014-01-31 15:40:22.000000000","message":"Will fix. Thanks.","commit_id":"873a1d77a8e5d1012fedb790711f7d4fb2d2c1b5"},{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"unresolved":false,"context_lines":[{"line_number":503,"context_line":"                LOG.error(_(\"mechanism_manager.update_subnet failed, \""},{"line_number":504,"context_line":"                            \"undoing the update for subnet \u0027%s\u0027\"), id)"},{"line_number":505,"context_line":"                new_request \u003d {}"},{"line_number":506,"context_line":"                for (k, unused_v) in subnet[\u0027subnet\u0027].iteritems():"},{"line_number":507,"context_line":"                    new_request[k] \u003d original_subnet.get(k)"},{"line_number":508,"context_line":"                undo_subnet \u003d {\u0027subnet\u0027: new_request}"},{"line_number":509,"context_line":"                updated_subnet \u003d super(Ml2Plugin, self).update_subnet("}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAUH%2F9%2FvA%3D","line":506,"updated":"2014-01-31 07:31:43.000000000","message":"for k in subnet[\u0027subnet\u0027]","commit_id":"873a1d77a8e5d1012fedb790711f7d4fb2d2c1b5"},{"author":{"_account_id":1923,"name":"Mohammad Banikazemi","email":"mbanikazemi@gmail.com","username":"mb-s"},"change_message_id":"2eeac90785dc4471ebf617e4275fcade5c48f26d","unresolved":false,"context_lines":[{"line_number":503,"context_line":"                LOG.error(_(\"mechanism_manager.update_subnet failed, \""},{"line_number":504,"context_line":"                            \"undoing the update for subnet \u0027%s\u0027\"), id)"},{"line_number":505,"context_line":"                new_request \u003d {}"},{"line_number":506,"context_line":"                for (k, unused_v) in subnet[\u0027subnet\u0027].iteritems():"},{"line_number":507,"context_line":"                    new_request[k] \u003d original_subnet.get(k)"},{"line_number":508,"context_line":"                undo_subnet \u003d {\u0027subnet\u0027: new_request}"},{"line_number":509,"context_line":"                updated_subnet \u003d super(Ml2Plugin, self).update_subnet("}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAUH%2F992w%3D","line":506,"in_reply_to":"AAAAUH%2F9%2FvA%3D","updated":"2014-01-31 15:40:22.000000000","message":"Will fix.","commit_id":"873a1d77a8e5d1012fedb790711f7d4fb2d2c1b5"},{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"unresolved":false,"context_lines":[{"line_number":506,"context_line":"                for (k, unused_v) in subnet[\u0027subnet\u0027].iteritems():"},{"line_number":507,"context_line":"                    new_request[k] \u003d original_subnet.get(k)"},{"line_number":508,"context_line":"                undo_subnet \u003d {\u0027subnet\u0027: new_request}"},{"line_number":509,"context_line":"                updated_subnet \u003d super(Ml2Plugin, self).update_subnet("},{"line_number":510,"context_line":"                    context, id, undo_subnet)"},{"line_number":511,"context_line":"        return updated_subnet"},{"line_number":512,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAUH%2F9%2Fug%3D","line":509,"updated":"2014-01-31 07:31:43.000000000","message":"same concern here - I think we can place \n self.mechanism_manager.update_subnet_postcommit(mech_context)\nunder the transaction (#491) and let db rollback happen automatically. Still I may be missing smth.","commit_id":"873a1d77a8e5d1012fedb790711f7d4fb2d2c1b5"},{"author":{"_account_id":1923,"name":"Mohammad Banikazemi","email":"mbanikazemi@gmail.com","username":"mb-s"},"change_message_id":"2eeac90785dc4471ebf617e4275fcade5c48f26d","unresolved":false,"context_lines":[{"line_number":506,"context_line":"                for (k, unused_v) in subnet[\u0027subnet\u0027].iteritems():"},{"line_number":507,"context_line":"                    new_request[k] \u003d original_subnet.get(k)"},{"line_number":508,"context_line":"                undo_subnet \u003d {\u0027subnet\u0027: new_request}"},{"line_number":509,"context_line":"                updated_subnet \u003d super(Ml2Plugin, self).update_subnet("},{"line_number":510,"context_line":"                    context, id, undo_subnet)"},{"line_number":511,"context_line":"        return updated_subnet"},{"line_number":512,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAUH%2F992Q%3D","line":509,"in_reply_to":"AAAAUH%2F9%2Fug%3D","updated":"2014-01-31 15:40:22.000000000","message":"Please see response to earlier comment about having calls to mech drivers from a transaction.","commit_id":"873a1d77a8e5d1012fedb790711f7d4fb2d2c1b5"},{"author":{"_account_id":6072,"name":"Eugene Nikanorov","email":"enikanorov@mirantis.com","username":"enikanorov"},"unresolved":false,"context_lines":[{"line_number":644,"context_line":"                for (k, unused_v) in port[\u0027port\u0027].iteritems():"},{"line_number":645,"context_line":"                    new_request[k] \u003d original_port.get(k)"},{"line_number":646,"context_line":"                undo_port \u003d {\u0027port\u0027: new_request}"},{"line_number":647,"context_line":"                updated_port \u003d super(Ml2Plugin, self).update_port("},{"line_number":648,"context_line":"                    context, id, undo_port)"},{"line_number":649,"context_line":""},{"line_number":650,"context_line":"                self._process_port_binding(mech_context, original_port)"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAUH%2F9%2FY4%3D","line":647,"updated":"2014-01-31 09:27:57.000000000","message":"can we feractor update_port somehow to reuse some of its parts here? Looks like many lines are copied from update_port","commit_id":"873a1d77a8e5d1012fedb790711f7d4fb2d2c1b5"},{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"unresolved":false,"context_lines":[{"line_number":644,"context_line":"                for (k, unused_v) in port[\u0027port\u0027].iteritems():"},{"line_number":645,"context_line":"                    new_request[k] \u003d original_port.get(k)"},{"line_number":646,"context_line":"                undo_port \u003d {\u0027port\u0027: new_request}"},{"line_number":647,"context_line":"                updated_port \u003d super(Ml2Plugin, self).update_port("},{"line_number":648,"context_line":"                    context, id, undo_port)"},{"line_number":649,"context_line":""},{"line_number":650,"context_line":"                self._process_port_binding(mech_context, original_port)"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAUH%2F9%2FuY%3D","line":647,"updated":"2014-01-31 07:31:43.000000000","message":"same concern","commit_id":"873a1d77a8e5d1012fedb790711f7d4fb2d2c1b5"},{"author":{"_account_id":1923,"name":"Mohammad Banikazemi","email":"mbanikazemi@gmail.com","username":"mb-s"},"change_message_id":"2eeac90785dc4471ebf617e4275fcade5c48f26d","unresolved":false,"context_lines":[{"line_number":644,"context_line":"                for (k, unused_v) in port[\u0027port\u0027].iteritems():"},{"line_number":645,"context_line":"                    new_request[k] \u003d original_port.get(k)"},{"line_number":646,"context_line":"                undo_port \u003d {\u0027port\u0027: new_request}"},{"line_number":647,"context_line":"                updated_port \u003d super(Ml2Plugin, self).update_port("},{"line_number":648,"context_line":"                    context, id, undo_port)"},{"line_number":649,"context_line":""},{"line_number":650,"context_line":"                self._process_port_binding(mech_context, original_port)"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAUH%2F991w%3D","line":647,"in_reply_to":"AAAAUH%2F9%2FY4%3D","updated":"2014-01-31 15:40:22.000000000","message":"Will look into it. Cannot use the update_port directly but some refactoring may be possible.","commit_id":"873a1d77a8e5d1012fedb790711f7d4fb2d2c1b5"},{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"unresolved":false,"context_lines":[{"line_number":350,"context_line":"                LOG.error(_(\"mechanism_manager.update_network failed, \""},{"line_number":351,"context_line":"                            \"undoing the update for network \u0027%s\u0027\"), id)"},{"line_number":352,"context_line":"                new_request \u003d {}"},{"line_number":353,"context_line":"                for (k, unused_v) in network[\u0027network\u0027].iteritems():"},{"line_number":354,"context_line":"                    new_request[k] \u003d original_network.get(k)"},{"line_number":355,"context_line":"                undo_network \u003d {\u0027network\u0027: new_request}"},{"line_number":356,"context_line":"                updated_network \u003d super(Ml2Plugin, self).update_network("}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAAUH%2F9w4Y%3D","line":353,"updated":"2014-02-04 08:02:44.000000000","message":"for k in network[\u0027network\u0027]: here and in below methods","commit_id":"b383f8fa5acf3bdfae6f3514180eae4f50ebfd04"},{"author":{"_account_id":1923,"name":"Mohammad Banikazemi","email":"mbanikazemi@gmail.com","username":"mb-s"},"change_message_id":"2eeac90785dc4471ebf617e4275fcade5c48f26d","unresolved":false,"context_lines":[{"line_number":350,"context_line":"                LOG.error(_(\"mechanism_manager.update_network failed, \""},{"line_number":351,"context_line":"                            \"undoing the update for network \u0027%s\u0027\"), id)"},{"line_number":352,"context_line":"                new_request \u003d {}"},{"line_number":353,"context_line":"                for (k, unused_v) in network[\u0027network\u0027].iteritems():"},{"line_number":354,"context_line":"                    new_request[k] \u003d original_network.get(k)"},{"line_number":355,"context_line":"                undo_network \u003d {\u0027network\u0027: new_request}"},{"line_number":356,"context_line":"                updated_network \u003d super(Ml2Plugin, self).update_network("}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAAUH%2F9t8s%3D","line":353,"in_reply_to":"AAAAUH%2F9t%2FY%3D","updated":"2014-02-04 18:05:12.000000000","message":"I meant unit test (not tempest) failing ....","commit_id":"b383f8fa5acf3bdfae6f3514180eae4f50ebfd04"},{"author":{"_account_id":1923,"name":"Mohammad Banikazemi","email":"mbanikazemi@gmail.com","username":"mb-s"},"change_message_id":"2eeac90785dc4471ebf617e4275fcade5c48f26d","unresolved":false,"context_lines":[{"line_number":350,"context_line":"                LOG.error(_(\"mechanism_manager.update_network failed, \""},{"line_number":351,"context_line":"                            \"undoing the update for network \u0027%s\u0027\"), id)"},{"line_number":352,"context_line":"                new_request \u003d {}"},{"line_number":353,"context_line":"                for (k, unused_v) in network[\u0027network\u0027].iteritems():"},{"line_number":354,"context_line":"                    new_request[k] \u003d original_network.get(k)"},{"line_number":355,"context_line":"                undo_network \u003d {\u0027network\u0027: new_request}"},{"line_number":356,"context_line":"                updated_network \u003d super(Ml2Plugin, self).update_network("}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAAUH%2F9t%2FY%3D","line":353,"in_reply_to":"AAAAUH%2F9w4Y%3D","updated":"2014-02-04 17:55:09.000000000","message":"Thanks Oleg. You are right, I have not addressed the comments you had raised in previous patch; Will do so. \nI am trying to figure out why the tempest test (test_ml2_plugin.py) fails while on my local machine it works just fine. In particular, the undoing of extra dhcp options happens correctly on my local setup but when this is run by Jenkins I see the assert failing. Wondering if anything is different wrt access to the extra dhcp tables. Will update the comment section as soon as I figure out why Jenkins is failing.","commit_id":"b383f8fa5acf3bdfae6f3514180eae4f50ebfd04"},{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"unresolved":false,"context_lines":[{"line_number":357,"context_line":"                    context, id, undo_network)"},{"line_number":358,"context_line":"                self._process_l3_update(context,"},{"line_number":359,"context_line":"                                        updated_network, original_network)"},{"line_number":360,"context_line":"                LOG.error(_(\"mechanism_manager.update_network failed, \""},{"line_number":361,"context_line":"                            \"unrolled the update for network \u0027%s\u0027\"), id)"},{"line_number":362,"context_line":"        return updated_network"},{"line_number":363,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAAUH%2F9w4U%3D","line":360,"updated":"2014-02-04 08:02:44.000000000","message":"still not sure it is good to have two error messages for the same failure.","commit_id":"b383f8fa5acf3bdfae6f3514180eae4f50ebfd04"},{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"unresolved":false,"context_lines":[{"line_number":350,"context_line":"                LOG.error(_(\"mechanism_manager.update_network failed, \""},{"line_number":351,"context_line":"                            \"undoing the update for network \u0027%s\u0027\"), id)"},{"line_number":352,"context_line":"                new_request \u003d {}"},{"line_number":353,"context_line":"                for k in network[\u0027network\u0027].iteritems():"},{"line_number":354,"context_line":"                    new_request[k[0]] \u003d original_network.get(k[0])"},{"line_number":355,"context_line":"                undo_network \u003d {\u0027network\u0027: new_request}"},{"line_number":356,"context_line":"                updated_network \u003d super(Ml2Plugin, self).update_network("}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAAUH%2F9qRw%3D","line":353,"updated":"2014-02-05 09:14:03.000000000","message":"please consider:\n  for k in network[\u0027network\u0027]:\n    new_request[k] \u003d original_network.get(k)","commit_id":"1c159a13feaa636911603109bc1c46cdcb1f2319"},{"author":{"_account_id":6072,"name":"Eugene Nikanorov","email":"enikanorov@mirantis.com","username":"enikanorov"},"unresolved":false,"context_lines":[{"line_number":350,"context_line":"                LOG.error(_(\"mechanism_manager.update_network failed, \""},{"line_number":351,"context_line":"                            \"undoing the update for network \u0027%s\u0027\"), id)"},{"line_number":352,"context_line":"                new_request \u003d {}"},{"line_number":353,"context_line":"                for k in network[\u0027network\u0027].iteritems():"},{"line_number":354,"context_line":"                    new_request[k[0]] \u003d original_network.get(k[0])"},{"line_number":355,"context_line":"                undo_network \u003d {\u0027network\u0027: new_request}"},{"line_number":356,"context_line":"                updated_network \u003d super(Ml2Plugin, self).update_network("}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAAUH%2F9mGs%3D","line":353,"updated":"2014-02-05 19:26:06.000000000","message":"this seems to be a common operation: you copy one dict to another, based on key pattern. The same you do for subnet and a port. Please extract the method and use it","commit_id":"1c159a13feaa636911603109bc1c46cdcb1f2319"},{"author":{"_account_id":1923,"name":"Mohammad Banikazemi","email":"mbanikazemi@gmail.com","username":"mb-s"},"change_message_id":"2eeac90785dc4471ebf617e4275fcade5c48f26d","unresolved":false,"context_lines":[{"line_number":350,"context_line":"                LOG.error(_(\"mechanism_manager.update_network failed, \""},{"line_number":351,"context_line":"                            \"undoing the update for network \u0027%s\u0027\"), id)"},{"line_number":352,"context_line":"                new_request \u003d {}"},{"line_number":353,"context_line":"                for k in network[\u0027network\u0027].iteritems():"},{"line_number":354,"context_line":"                    new_request[k[0]] \u003d original_network.get(k[0])"},{"line_number":355,"context_line":"                undo_network \u003d {\u0027network\u0027: new_request}"},{"line_number":356,"context_line":"                updated_network \u003d super(Ml2Plugin, self).update_network("}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAAUH%2F9lZI%3D","line":353,"in_reply_to":"AAAAUH%2F9mGs%3D","updated":"2014-02-05 21:29:36.000000000","message":"Thanks. Done.","commit_id":"1c159a13feaa636911603109bc1c46cdcb1f2319"},{"author":{"_account_id":1923,"name":"Mohammad Banikazemi","email":"mbanikazemi@gmail.com","username":"mb-s"},"change_message_id":"2eeac90785dc4471ebf617e4275fcade5c48f26d","unresolved":false,"context_lines":[{"line_number":350,"context_line":"                LOG.error(_(\"mechanism_manager.update_network failed, \""},{"line_number":351,"context_line":"                            \"undoing the update for network \u0027%s\u0027\"), id)"},{"line_number":352,"context_line":"                new_request \u003d {}"},{"line_number":353,"context_line":"                for k in network[\u0027network\u0027].iteritems():"},{"line_number":354,"context_line":"                    new_request[k[0]] \u003d original_network.get(k[0])"},{"line_number":355,"context_line":"                undo_network \u003d {\u0027network\u0027: new_request}"},{"line_number":356,"context_line":"                updated_network \u003d super(Ml2Plugin, self).update_network("}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAAUH%2F9lZM%3D","line":353,"in_reply_to":"AAAAUH%2F9qRw%3D","updated":"2014-02-05 21:29:36.000000000","message":"Finally got it; thanks for being patient .","commit_id":"1c159a13feaa636911603109bc1c46cdcb1f2319"},{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"unresolved":false,"context_lines":[{"line_number":501,"context_line":"                LOG.error(_(\"mechanism_manager.update_subnet failed, \""},{"line_number":502,"context_line":"                            \"undoing the update for subnet \u0027%s\u0027\"), id)"},{"line_number":503,"context_line":"                new_request \u003d {}"},{"line_number":504,"context_line":"                for k in subnet[\u0027subnet\u0027].iteritems():"},{"line_number":505,"context_line":"                    new_request[k[0]] \u003d original_subnet.get(k[0])"},{"line_number":506,"context_line":"                undo_subnet \u003d {\u0027subnet\u0027: new_request}"},{"line_number":507,"context_line":"                updated_subnet \u003d super(Ml2Plugin, self).update_subnet("}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAAUH%2F9qRo%3D","line":504,"updated":"2014-02-05 09:14:03.000000000","message":"ditto","commit_id":"1c159a13feaa636911603109bc1c46cdcb1f2319"},{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"unresolved":false,"context_lines":[{"line_number":639,"context_line":"                LOG.error(_(\"mechanism_manager.update_port failed, \""},{"line_number":640,"context_line":"                            \"undoing the update for port \u0027%s\u0027\"), id)"},{"line_number":641,"context_line":"                new_request \u003d {}"},{"line_number":642,"context_line":"                for k in port[\u0027port\u0027].iteritems():"},{"line_number":643,"context_line":"                    new_request[k[0]] \u003d original_port.get(k[0])"},{"line_number":644,"context_line":"                undo_port \u003d {\u0027port\u0027: new_request}"},{"line_number":645,"context_line":"                updated_port \u003d super(Ml2Plugin, self).update_port("}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAAUH%2F9qRc%3D","line":642,"updated":"2014-02-05 09:14:03.000000000","message":"ditto","commit_id":"1c159a13feaa636911603109bc1c46cdcb1f2319"},{"author":{"_account_id":6072,"name":"Eugene Nikanorov","email":"enikanorov@mirantis.com","username":"enikanorov"},"unresolved":false,"context_lines":[{"line_number":674,"context_line":"                    new_list.append(new_opt)"},{"line_number":675,"context_line":"                updated_port[edo_ext.EXTRADHCPOPTS] \u003d new_list"},{"line_number":676,"context_line":""},{"line_number":677,"context_line":"                LOG.error(_(\"mechanism_manager.update_port debugging only, \""},{"line_number":678,"context_line":"                            \"Will remove (1) \u0027%s\u0027\"), updated_port)"},{"line_number":679,"context_line":"                self._update_extra_dhcp_opts_on_port("},{"line_number":680,"context_line":"                    context, id, {\u0027port\u0027: updated_port}, updated_port)"}],"source_content_type":"text/x-python","patch_set":10,"id":"AAAAUH%2F9lV0%3D","line":677,"updated":"2014-02-05 21:39:00.000000000","message":"is that necessary? error-level log message?","commit_id":"b4449759ea6aa3932996a6d6ed6d753a5a465cf1"},{"author":{"_account_id":6072,"name":"Eugene Nikanorov","email":"enikanorov@mirantis.com","username":"enikanorov"},"unresolved":false,"context_lines":[{"line_number":678,"context_line":"                            \"Will remove (1) \u0027%s\u0027\"), updated_port)"},{"line_number":679,"context_line":"                self._update_extra_dhcp_opts_on_port("},{"line_number":680,"context_line":"                    context, id, {\u0027port\u0027: updated_port}, updated_port)"},{"line_number":681,"context_line":"                LOG.error(_(\"mechanism_manager.update_port debugging only, \""},{"line_number":682,"context_line":"                            \"Will remove (2) \u0027%s\u0027\"), updated_port)"},{"line_number":683,"context_line":""},{"line_number":684,"context_line":"        need_port_update_notify |\u003d self.is_security_group_member_updated("}],"source_content_type":"text/x-python","patch_set":10,"id":"AAAAUH%2F9lVs%3D","line":681,"updated":"2014-02-05 21:39:00.000000000","message":"same","commit_id":"b4449759ea6aa3932996a6d6ed6d753a5a465cf1"},{"author":{"_account_id":2592,"name":"Mark McClain","email":"mark@mcclain.xyz","username":"markmcclain"},"unresolved":false,"context_lines":[{"line_number":668,"context_line":"                edopts \u003d port[\u0027port\u0027].get(edo_ext.EXTRADHCPOPTS, [])"},{"line_number":669,"context_line":"                edopts_original \u003d original_port.get(edo_ext.EXTRADHCPOPTS, [])"},{"line_number":670,"context_line":"                new_list \u003d []"},{"line_number":671,"context_line":"                for opt in edopts:"},{"line_number":672,"context_line":"                    new_opt \u003d {\u0027opt_name\u0027: opt[\u0027opt_name\u0027],"},{"line_number":673,"context_line":"                               \u0027opt_value\u0027: None}"},{"line_number":674,"context_line":"                    for opt_original in edopts_original:"}],"source_content_type":"text/x-python","patch_set":12,"id":"AAAAVX%2F%2Fp0U%3D","line":671,"updated":"2014-03-01 22:21:52.000000000","message":"The loops are is inefficient (N^2).\n\nundo \u003d dict((name, None) for name in edopts)\nundo.update(\n    (name, val) for name, value in adopt_original\n) \n\nupdated_port[edo_ext.EXTRADHCPOPTS] \u003d [\n    {\u0027opt_name\u0027: name, \u0027opt_value\u0027: value}\n    for name, value in undo\n]","commit_id":"0cf3bc8c76c84f5f89c7fe968da3e3c036398f71"},{"author":{"_account_id":6694,"name":"rcurran","email":"rcurran@cisco.com","username":"rcurran"},"unresolved":false,"context_lines":[{"line_number":407,"context_line":"            self.mechanism_manager.update_network_postcommit(mech_context)"},{"line_number":408,"context_line":"        except ml2_exc.MechanismDriverError:"},{"line_number":409,"context_line":"            with excutils.save_and_reraise_exception():"},{"line_number":410,"context_line":"                LOG.error(_(\"mechanism_manager.update_network failed, \""},{"line_number":411,"context_line":"                            \"undoing the update for network \u0027%s\u0027\"), id)"},{"line_number":412,"context_line":"                new_request \u003d self._form_request(network[\u0027network\u0027],"},{"line_number":413,"context_line":"                                                 original_network)"}],"source_content_type":"text/x-python","patch_set":17,"id":"AAAAWH%2F%2FxiQ%3D","line":410,"updated":"2014-03-13 21:59:58.000000000","message":"Just one thing of note as more folks get a chance to review this:\n- Did you purposefully not want to call the ***_precommit() method again w/ original dict info?","commit_id":"5b638d481fbdbd752f8259b7ed8e9ae0336406a8"},{"author":{"_account_id":1923,"name":"Mohammad Banikazemi","email":"mbanikazemi@gmail.com","username":"mb-s"},"change_message_id":"2eeac90785dc4471ebf617e4275fcade5c48f26d","unresolved":false,"context_lines":[{"line_number":407,"context_line":"            self.mechanism_manager.update_network_postcommit(mech_context)"},{"line_number":408,"context_line":"        except ml2_exc.MechanismDriverError:"},{"line_number":409,"context_line":"            with excutils.save_and_reraise_exception():"},{"line_number":410,"context_line":"                LOG.error(_(\"mechanism_manager.update_network failed, \""},{"line_number":411,"context_line":"                            \"undoing the update for network \u0027%s\u0027\"), id)"},{"line_number":412,"context_line":"                new_request \u003d self._form_request(network[\u0027network\u0027],"},{"line_number":413,"context_line":"                                                 original_network)"}],"source_content_type":"text/x-python","patch_set":17,"id":"AAAAWH%2F%2Fce0%3D","line":410,"in_reply_to":"AAAAWH%2F%2FxiQ%3D","updated":"2014-03-17 21:06:42.000000000","message":"I understand your point; I am not sure if that is the correct thing to do. I will look into it more carefully and write back soon.","commit_id":"5b638d481fbdbd752f8259b7ed8e9ae0336406a8"}],"neutron/tests/unit/ml2/drivers/mechanism_faulty.py":[{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"change_message_id":"e819901eaeda55670e09580d381acd8e783f110b","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# Copyright (c) 2013 OpenStack Foundation"},{"line_number":2,"context_line":"# All Rights Reserved."},{"line_number":3,"context_line":"#"},{"line_number":4,"context_line":"#    Licensed under the Apache License, Version 2.0 (the \"License\"); you may"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAUH%2F%2BL%2FY%3D","line":1,"updated":"2014-01-29 10:23:47.000000000","message":"nit: 2014","commit_id":"5086ba6561e7ccaa7fe45b88374482bc841d74a7"},{"author":{"_account_id":1923,"name":"Mohammad Banikazemi","email":"mbanikazemi@gmail.com","username":"mb-s"},"change_message_id":"2eeac90785dc4471ebf617e4275fcade5c48f26d","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# Copyright (c) 2013 OpenStack Foundation"},{"line_number":2,"context_line":"# All Rights Reserved."},{"line_number":3,"context_line":"#"},{"line_number":4,"context_line":"#    Licensed under the Apache License, Version 2.0 (the \"License\"); you may"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAUH%2F%2BG1U%3D","line":1,"in_reply_to":"AAAAUH%2F%2BL%2FY%3D","updated":"2014-01-30 03:07:15.000000000","message":"Thanks for pointing this out. Will correct.","commit_id":"5086ba6561e7ccaa7fe45b88374482bc841d74a7"},{"author":{"_account_id":2592,"name":"Mark McClain","email":"mark@mcclain.xyz","username":"markmcclain"},"unresolved":false,"context_lines":[{"line_number":1,"context_line":"# Copyright (c) 2014 OpenStack Foundation"},{"line_number":2,"context_line":"# All Rights Reserved."},{"line_number":3,"context_line":"#"},{"line_number":4,"context_line":"#    Licensed under the Apache License, Version 2.0 (the \"License\"); you may"}],"source_content_type":"text/x-python","patch_set":12,"id":"AAAAVX%2F%2Fpz4%3D","line":1,"updated":"2014-03-01 22:21:52.000000000","message":"This should not be in the drivers directory as it is a testing artifact.  You should use the mock library to induce the exact error you need for testing instead.","commit_id":"0cf3bc8c76c84f5f89c7fe968da3e3c036398f71"}],"neutron/tests/unit/ml2/test_ml2_plugin.py":[{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"change_message_id":"e819901eaeda55670e09580d381acd8e783f110b","unresolved":false,"context_lines":[{"line_number":204,"context_line":"            plugin\u003dPLUGIN_NAME)"},{"line_number":205,"context_line":""},{"line_number":206,"context_line":""},{"line_number":207,"context_line":"class Ml2PluginV2TestCase2(test_plugin.NeutronDbPluginV2TestCase):"},{"line_number":208,"context_line":""},{"line_number":209,"context_line":"    _plugin_name \u003d PLUGIN_NAME"},{"line_number":210,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAUH%2F%2BL2g%3D","line":207,"updated":"2014-01-29 10:23:47.000000000","message":"probably it\u0027s better to reflect the difference from Ml2PluginV2TestCase in the name","commit_id":"5086ba6561e7ccaa7fe45b88374482bc841d74a7"},{"author":{"_account_id":1923,"name":"Mohammad Banikazemi","email":"mbanikazemi@gmail.com","username":"mb-s"},"change_message_id":"2eeac90785dc4471ebf617e4275fcade5c48f26d","unresolved":false,"context_lines":[{"line_number":204,"context_line":"            plugin\u003dPLUGIN_NAME)"},{"line_number":205,"context_line":""},{"line_number":206,"context_line":""},{"line_number":207,"context_line":"class Ml2PluginV2TestCase2(test_plugin.NeutronDbPluginV2TestCase):"},{"line_number":208,"context_line":""},{"line_number":209,"context_line":"    _plugin_name \u003d PLUGIN_NAME"},{"line_number":210,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAUH%2F%2BG1Q%3D","line":207,"in_reply_to":"AAAAUH%2F%2BL2g%3D","updated":"2014-01-30 03:07:15.000000000","message":"I agree. Will change.","commit_id":"5086ba6561e7ccaa7fe45b88374482bc841d74a7"},{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"change_message_id":"e819901eaeda55670e09580d381acd8e783f110b","unresolved":false,"context_lines":[{"line_number":227,"context_line":""},{"line_number":228,"context_line":"class TestFaultyMechansimDriver(Ml2PluginV2TestCase2):"},{"line_number":229,"context_line":""},{"line_number":230,"context_line":"    def setUp(self, plugin\u003dNone):"},{"line_number":231,"context_line":"        super(TestFaultyMechansimDriver, self).setUp()"},{"line_number":232,"context_line":""},{"line_number":233,"context_line":"    def test_create_network_faulty(self):"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAUH%2F%2BL2Q%3D","line":230,"updated":"2014-01-29 10:23:47.000000000","message":"no need to override","commit_id":"5086ba6561e7ccaa7fe45b88374482bc841d74a7"},{"author":{"_account_id":1923,"name":"Mohammad Banikazemi","email":"mbanikazemi@gmail.com","username":"mb-s"},"change_message_id":"2eeac90785dc4471ebf617e4275fcade5c48f26d","unresolved":false,"context_lines":[{"line_number":227,"context_line":""},{"line_number":228,"context_line":"class TestFaultyMechansimDriver(Ml2PluginV2TestCase2):"},{"line_number":229,"context_line":""},{"line_number":230,"context_line":"    def setUp(self, plugin\u003dNone):"},{"line_number":231,"context_line":"        super(TestFaultyMechansimDriver, self).setUp()"},{"line_number":232,"context_line":""},{"line_number":233,"context_line":"    def test_create_network_faulty(self):"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAUH%2F%2BG1M%3D","line":230,"in_reply_to":"AAAAUH%2F%2BL2Q%3D","updated":"2014-01-30 03:07:15.000000000","message":"Thanks for pointing this out.","commit_id":"5086ba6561e7ccaa7fe45b88374482bc841d74a7"},{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"change_message_id":"e819901eaeda55670e09580d381acd8e783f110b","unresolved":false,"context_lines":[{"line_number":279,"context_line":""},{"line_number":280,"context_line":"    def test_create_port_faulty(self):"},{"line_number":281,"context_line":"        with self.network() as network:"},{"line_number":282,"context_line":"            #with self.subnet(network\u003dnetwork, cidr\u003d\u002710.0.30.0/24\u0027) as subnet:"},{"line_number":283,"context_line":"            data \u003d {\u0027port\u0027: {\u0027network_id\u0027: network[\u0027network\u0027][\u0027id\u0027],"},{"line_number":284,"context_line":"                             \u0027tenant_id\u0027: network[\u0027network\u0027][\u0027tenant_id\u0027],"},{"line_number":285,"context_line":"                             \u0027name\u0027: \u0027port1\u0027,"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAUH%2F%2BLz0%3D","line":282,"updated":"2014-01-29 10:23:47.000000000","message":"please remove if unused","commit_id":"5086ba6561e7ccaa7fe45b88374482bc841d74a7"},{"author":{"_account_id":1923,"name":"Mohammad Banikazemi","email":"mbanikazemi@gmail.com","username":"mb-s"},"change_message_id":"2eeac90785dc4471ebf617e4275fcade5c48f26d","unresolved":false,"context_lines":[{"line_number":279,"context_line":""},{"line_number":280,"context_line":"    def test_create_port_faulty(self):"},{"line_number":281,"context_line":"        with self.network() as network:"},{"line_number":282,"context_line":"            #with self.subnet(network\u003dnetwork, cidr\u003d\u002710.0.30.0/24\u0027) as subnet:"},{"line_number":283,"context_line":"            data \u003d {\u0027port\u0027: {\u0027network_id\u0027: network[\u0027network\u0027][\u0027id\u0027],"},{"line_number":284,"context_line":"                             \u0027tenant_id\u0027: network[\u0027network\u0027][\u0027tenant_id\u0027],"},{"line_number":285,"context_line":"                             \u0027name\u0027: \u0027port1\u0027,"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAUH%2F%2BG1I%3D","line":282,"in_reply_to":"AAAAUH%2F%2BLz0%3D","updated":"2014-01-30 03:07:15.000000000","message":"Will do.","commit_id":"5086ba6561e7ccaa7fe45b88374482bc841d74a7"},{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"unresolved":false,"context_lines":[{"line_number":206,"context_line":""},{"line_number":207,"context_line":"class Ml2PluginV2FaultyDriverTestCase(test_plugin.NeutronDbPluginV2TestCase):"},{"line_number":208,"context_line":""},{"line_number":209,"context_line":"    _plugin_name \u003d PLUGIN_NAME"},{"line_number":210,"context_line":""},{"line_number":211,"context_line":"    def setUp(self):"},{"line_number":212,"context_line":"        # Enable the test mechanism driver to ensure that"}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAAUH%2F9qQo%3D","line":209,"updated":"2014-02-05 09:14:03.000000000","message":"is it needed? Seems #224 is enough","commit_id":"1c159a13feaa636911603109bc1c46cdcb1f2319"},{"author":{"_account_id":1923,"name":"Mohammad Banikazemi","email":"mbanikazemi@gmail.com","username":"mb-s"},"change_message_id":"2eeac90785dc4471ebf617e4275fcade5c48f26d","unresolved":false,"context_lines":[{"line_number":206,"context_line":""},{"line_number":207,"context_line":"class Ml2PluginV2FaultyDriverTestCase(test_plugin.NeutronDbPluginV2TestCase):"},{"line_number":208,"context_line":""},{"line_number":209,"context_line":"    _plugin_name \u003d PLUGIN_NAME"},{"line_number":210,"context_line":""},{"line_number":211,"context_line":"    def setUp(self):"},{"line_number":212,"context_line":"        # Enable the test mechanism driver to ensure that"}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAAUH%2F9lYk%3D","line":209,"in_reply_to":"AAAAUH%2F9qQo%3D","updated":"2014-02-05 21:29:36.000000000","message":"Done.","commit_id":"1c159a13feaa636911603109bc1c46cdcb1f2319"},{"author":{"_account_id":2592,"name":"Mark McClain","email":"mark@mcclain.xyz","username":"markmcclain"},"unresolved":false,"context_lines":[{"line_number":234,"context_line":"        self.phys_vrange \u003d \u0027:\u0027.join([self.physnet, self.vlan_range])"},{"line_number":235,"context_line":"        config.cfg.CONF.set_override(\u0027network_vlan_ranges\u0027, [self.phys_vrange],"},{"line_number":236,"context_line":"                                     group\u003d\u0027ml2_type_vlan\u0027)"},{"line_number":237,"context_line":"        self.addCleanup(config.cfg.CONF.reset)"},{"line_number":238,"context_line":"        super(Ml2PluginV2FaultyDriverTestCase, self).setUp(PLUGIN_NAME)"},{"line_number":239,"context_line":"        self.port_create_status \u003d \u0027DOWN\u0027"},{"line_number":240,"context_line":""}],"source_content_type":"text/x-python","patch_set":12,"id":"AAAAVX%2F%2Fpzk%3D","line":237,"updated":"2014-03-01 22:21:52.000000000","message":"configs are automatically reset on tearDown in the base class.","commit_id":"0cf3bc8c76c84f5f89c7fe968da3e3c036398f71"},{"author":{"_account_id":2592,"name":"Mark McClain","email":"mark@mcclain.xyz","username":"markmcclain"},"unresolved":false,"context_lines":[{"line_number":290,"context_line":""},{"line_number":291,"context_line":"    def test_create_port_faulty(self):"},{"line_number":292,"context_line":""},{"line_number":293,"context_line":"        data \u003d {\u0027network\u0027: {\u0027name\u0027: \u0027net1\u0027,"},{"line_number":294,"context_line":"                            pnet.NETWORK_TYPE: \u0027vlan\u0027,"},{"line_number":295,"context_line":"                            pnet.PHYSICAL_NETWORK: \u0027physnet1\u0027,"},{"line_number":296,"context_line":"                            pnet.SEGMENTATION_ID: 1,"}],"source_content_type":"text/x-python","patch_set":12,"id":"AAAAVX%2F%2FpzY%3D","line":293,"updated":"2014-03-01 22:21:52.000000000","message":"Why are you not using the network resource context here?","commit_id":"0cf3bc8c76c84f5f89c7fe968da3e3c036398f71"},{"author":{"_account_id":7183,"name":"Xu Han Peng","email":"xuhanp@linux.vnet.ibm.com","username":"xuhanp"},"unresolved":false,"context_lines":[{"line_number":343,"context_line":""},{"line_number":344,"context_line":"class TestFaultyMechansimDriver(Ml2PluginV2FaultyDriverTestCase):"},{"line_number":345,"context_line":""},{"line_number":346,"context_line":"    def test_create_network_faulty(self):"},{"line_number":347,"context_line":""},{"line_number":348,"context_line":"        def mock_update_network_postcommit(self, context):"},{"line_number":349,"context_line":"            raise ml2_exc.MechanismDriverError("}],"source_content_type":"text/x-python","patch_set":16,"id":"AAAAVn%2F%2FzSU%3D","line":346,"updated":"2014-03-04 02:59:18.000000000","message":"Suggest to change the test case name to test_update_network_faulty since the error is from mocked update_network_postcommit method of mechanism driver.\n\nSame comments to the other two test cases.","commit_id":"d839b6256b4ed27c9c5ccc0f4281ca90ff50fdaf"},{"author":{"_account_id":1923,"name":"Mohammad Banikazemi","email":"mbanikazemi@gmail.com","username":"mb-s"},"change_message_id":"2eeac90785dc4471ebf617e4275fcade5c48f26d","unresolved":false,"context_lines":[{"line_number":343,"context_line":""},{"line_number":344,"context_line":"class TestFaultyMechansimDriver(Ml2PluginV2FaultyDriverTestCase):"},{"line_number":345,"context_line":""},{"line_number":346,"context_line":"    def test_create_network_faulty(self):"},{"line_number":347,"context_line":""},{"line_number":348,"context_line":"        def mock_update_network_postcommit(self, context):"},{"line_number":349,"context_line":"            raise ml2_exc.MechanismDriverError("}],"source_content_type":"text/x-python","patch_set":16,"id":"AAAAVn%2F%2FtJU%3D","line":346,"in_reply_to":"AAAAVn%2F%2FzSU%3D","updated":"2014-03-04 15:29:46.000000000","message":"Good point. Done.","commit_id":"d839b6256b4ed27c9c5ccc0f4281ca90ff50fdaf"},{"author":{"_account_id":7183,"name":"Xu Han Peng","email":"xuhanp@linux.vnet.ibm.com","username":"xuhanp"},"unresolved":false,"context_lines":[{"line_number":373,"context_line":"                                       new_req.get_response(self.api))"},{"line_number":374,"context_line":""},{"line_number":375,"context_line":"            self.assertEqual(new_res[\u0027network\u0027][\u0027name\u0027],"},{"line_number":376,"context_line":"                             network[\u0027network\u0027][\u0027name\u0027])"},{"line_number":377,"context_line":""},{"line_number":378,"context_line":"    def test_create_subnet_faulty(self):"},{"line_number":379,"context_line":""}],"source_content_type":"text/x-python","patch_set":16,"id":"AAAAVn%2F%2FzQU%3D","line":376,"updated":"2014-03-04 02:59:18.000000000","message":"may need to clean up the created network. Same to subnet.","commit_id":"d839b6256b4ed27c9c5ccc0f4281ca90ff50fdaf"},{"author":{"_account_id":1923,"name":"Mohammad Banikazemi","email":"mbanikazemi@gmail.com","username":"mb-s"},"change_message_id":"2eeac90785dc4471ebf617e4275fcade5c48f26d","unresolved":false,"context_lines":[{"line_number":373,"context_line":"                                       new_req.get_response(self.api))"},{"line_number":374,"context_line":""},{"line_number":375,"context_line":"            self.assertEqual(new_res[\u0027network\u0027][\u0027name\u0027],"},{"line_number":376,"context_line":"                             network[\u0027network\u0027][\u0027name\u0027])"},{"line_number":377,"context_line":""},{"line_number":378,"context_line":"    def test_create_subnet_faulty(self):"},{"line_number":379,"context_line":""}],"source_content_type":"text/x-python","patch_set":16,"id":"AAAAVn%2F%2FtJI%3D","line":376,"in_reply_to":"AAAAVn%2F%2FzQU%3D","updated":"2014-03-04 15:29:46.000000000","message":"Good point. Done.","commit_id":"d839b6256b4ed27c9c5ccc0f4281ca90ff50fdaf"}]}
