)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":12444,"name":"John Schwarz","email":"jschwarz@redhat.com","username":"jschwarz"},"change_message_id":"abcbd8299dc7f6d459081f8eb1744bd7b835e411","unresolved":false,"context_lines":[{"line_number":14,"context_line":"ObjectNotFound in ovs_lib.get_datapath() if no"},{"line_number":15,"context_line":"datapath was found for a bridge."},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"Closes-Bug:#1615690"},{"line_number":18,"context_line":"Change-Id: Ie97540793e5d2b14120d3f1bafbf659427c44117"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":1,"id":"1ac06dbe_301698a7","line":17,"updated":"2016-08-22 15:24:14.000000000","message":"Please, for the love of my OCD, add a space between the \"Closes-Bug:\" tag and the actual bug number.\n\n(This also happens on your other patches as well :) )","commit_id":"75be33bd8d8506d6a4642fc91ba7a0d3a6f8d1d9"},{"author":{"_account_id":13717,"name":"Inessa Vasilevskaya","email":"ivasilevskaya@mirantis.com","username":"ivasilevskaya"},"change_message_id":"c62e478b3c104867761428036141447a68e1cfee","unresolved":false,"context_lines":[{"line_number":14,"context_line":"ObjectNotFound in ovs_lib.get_datapath() if no"},{"line_number":15,"context_line":"datapath was found for a bridge."},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"Closes-Bug:#1615690"},{"line_number":18,"context_line":"Change-Id: Ie97540793e5d2b14120d3f1bafbf659427c44117"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":1,"id":"1ac06dbe_9b6fadc4","line":17,"in_reply_to":"1ac06dbe_301698a7","updated":"2016-08-22 15:30:37.000000000","message":"will be done! :)","commit_id":"75be33bd8d8506d6a4642fc91ba7a0d3a6f8d1d9"},{"author":{"_account_id":4694,"name":"Miguel Lavalle","email":"miguel@mlavalle.com","username":"minsel"},"change_message_id":"1581d19d4ff789eb227549ab20ea180663e06821","unresolved":false,"context_lines":[{"line_number":16,"context_line":""},{"line_number":17,"context_line":"Closes-Bug: #1615690"},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"Conflicts:"},{"line_number":20,"context_line":"\tneutron/agent/common/ovs_lib.py"},{"line_number":21,"context_line":""},{"line_number":22,"context_line":"Change-Id: Ie97540793e5d2b14120d3f1bafbf659427c44117"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":8,"id":"da6895a0_ceba4ce1","line":19,"updated":"2016-10-24 20:24:20.000000000","message":"Maybe you know something I don\u0027t, but it is my understanding we keep Conflicts lines when we are cherry-picking commits on stable branches: http://docs.openstack.org/project-team-guide/stable-branches.html#proposing-fixes. But in this case you just had to solve rebase conflicts. If that the case, I suggest removing this Conflicts section. Unless of course, you know something I don\u0027t.","commit_id":"0702670fea77640cf70b0f6a73861f7bb438fdb9"},{"author":{"_account_id":4694,"name":"Miguel Lavalle","email":"miguel@mlavalle.com","username":"minsel"},"change_message_id":"ac553add921924d62afebbffc355b3ac8cccfc0c","unresolved":false,"context_lines":[{"line_number":11,"context_line":"would process further and raise TypeError while"},{"line_number":12,"context_line":"trying to use int conversion on an empty list."},{"line_number":13,"context_line":"This patch addresses the problem by raising an"},{"line_number":14,"context_line":"ObjectNotFound if no datapath was found for a"},{"line_number":15,"context_line":"bridge."},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"Closes-Bug: #1615690"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":12,"id":"ffe62b97_727c5971","line":14,"range":{"start_line":14,"start_character":0,"end_line":14,"end_character":15},"updated":"2017-03-29 20:23:51.000000000","message":"We need to update the exception in the commit message","commit_id":"77ba560024a43bb5e2f7ee785a082e8f4013d550"}],"neutron/agent/common/ovs_lib.py":[{"author":{"_account_id":4694,"name":"Miguel Lavalle","email":"miguel@mlavalle.com","username":"minsel"},"change_message_id":"abd377d6d42969d7fa8b0402e4f1909d8fad71c5","unresolved":false,"context_lines":[{"line_number":19,"context_line":"import time"},{"line_number":20,"context_line":"import uuid"},{"line_number":21,"context_line":""},{"line_number":22,"context_line":"from neutron.common import exceptions as nc_exc"},{"line_number":23,"context_line":"from neutron_lib import exceptions"},{"line_number":24,"context_line":"from oslo_config import cfg"},{"line_number":25,"context_line":"from oslo_log import log as logging"}],"source_content_type":"text/x-python","patch_set":1,"id":"1ac06dbe_facc888a","line":22,"updated":"2016-08-23 16:42:45.000000000","message":"I don\u0027t think you need this line","commit_id":"75be33bd8d8506d6a4642fc91ba7a0d3a6f8d1d9"},{"author":{"_account_id":13717,"name":"Inessa Vasilevskaya","email":"ivasilevskaya@mirantis.com","username":"ivasilevskaya"},"change_message_id":"c62e478b3c104867761428036141447a68e1cfee","unresolved":false,"context_lines":[{"line_number":286,"context_line":"        if not dpid:"},{"line_number":287,"context_line":"            # ovs fails to find the bridge datapath, then something is likely"},{"line_number":288,"context_line":"            # to be broken here"},{"line_number":289,"context_line":"            # XXX not sure what is the best exception to raise here"},{"line_number":290,"context_line":"            raise nc_exc.ObjectNotFound(id\u003d\u0027datapath_id\u0027)"},{"line_number":291,"context_line":""},{"line_number":292,"context_line":"    def do_action_flows(self, action, kwargs_list):"},{"line_number":293,"context_line":"        if action !\u003d \u0027del\u0027:"}],"source_content_type":"text/x-python","patch_set":1,"id":"1ac06dbe_1b929d9e","line":290,"range":{"start_line":289,"start_character":12,"end_line":290,"end_character":57},"updated":"2016-08-22 15:30:37.000000000","message":"Any suggestions on exception class are welcome.","commit_id":"75be33bd8d8506d6a4642fc91ba7a0d3a6f8d1d9"},{"author":{"_account_id":4694,"name":"Miguel Lavalle","email":"miguel@mlavalle.com","username":"minsel"},"change_message_id":"abd377d6d42969d7fa8b0402e4f1909d8fad71c5","unresolved":false,"context_lines":[{"line_number":287,"context_line":"            # ovs fails to find the bridge datapath, then something is likely"},{"line_number":288,"context_line":"            # to be broken here"},{"line_number":289,"context_line":"            # XXX not sure what is the best exception to raise here"},{"line_number":290,"context_line":"            raise nc_exc.ObjectNotFound(id\u003d\u0027datapath_id\u0027)"},{"line_number":291,"context_line":""},{"line_number":292,"context_line":"    def do_action_flows(self, action, kwargs_list):"},{"line_number":293,"context_line":"        if action !\u003d \u0027del\u0027:"}],"source_content_type":"text/x-python","patch_set":1,"id":"1ac06dbe_7ac09850","line":290,"range":{"start_line":290,"start_character":18,"end_line":290,"end_character":39},"updated":"2016-08-23 16:42:45.000000000","message":"ObjectNotFound seems appropriate to me. Please notice, though, that ObjectNotFound is defined in neutron_lib, so this should be exceptions.ObjectNotFound","commit_id":"75be33bd8d8506d6a4642fc91ba7a0d3a6f8d1d9"},{"author":{"_account_id":5756,"name":"Terry Wilson","email":"twilson@redhat.com","username":"otherwiseguy"},"change_message_id":"ef76343d2c2a821f8d458f2f92b6064c39c44a9a","unresolved":false,"context_lines":[{"line_number":281,"context_line":"        return ofport"},{"line_number":282,"context_line":""},{"line_number":283,"context_line":"    def get_datapath_id(self):"},{"line_number":284,"context_line":"        dpid \u003d self.db_get_val(\u0027Bridge\u0027, self.br_name, \u0027datapath_id\u0027)"},{"line_number":285,"context_line":"        if not dpid:"},{"line_number":286,"context_line":"            # ovs fails to find the bridge datapath, then something is likely"},{"line_number":287,"context_line":"            # to be broken here"}],"source_content_type":"text/x-python","patch_set":2,"id":"1ac06dbe_dcb37f4b","line":284,"updated":"2016-08-23 19:29:28.000000000","message":"From the ovs schema, this looks like a similar issue to the ofport column. It is an \"optional\" column which means it is either set, or []. From a quick test, it looks like if ovs-vswitchd is not running when the bridge is created. Should we be consistent and do a retry like we do with ofport?","commit_id":"7322fdba60813dcb413a396e343aeaa16ec8f30e"},{"author":{"_account_id":13717,"name":"Inessa Vasilevskaya","email":"ivasilevskaya@mirantis.com","username":"ivasilevskaya"},"change_message_id":"a84d6f89438e67fae87247aba4ecce916fcbf385","unresolved":false,"context_lines":[{"line_number":281,"context_line":"        return ofport"},{"line_number":282,"context_line":""},{"line_number":283,"context_line":"    def get_datapath_id(self):"},{"line_number":284,"context_line":"        dpid \u003d self.db_get_val(\u0027Bridge\u0027, self.br_name, \u0027datapath_id\u0027)"},{"line_number":285,"context_line":"        if not dpid:"},{"line_number":286,"context_line":"            # ovs fails to find the bridge datapath, then something is likely"},{"line_number":287,"context_line":"            # to be broken here"}],"source_content_type":"text/x-python","patch_set":2,"id":"1ac06dbe_b28dde2c","line":284,"in_reply_to":"1ac06dbe_dcb37f4b","updated":"2016-08-24 13:47:32.000000000","message":"Good point, thanks. I\u0027ll process datapath_id the same then.","commit_id":"7322fdba60813dcb413a396e343aeaa16ec8f30e"},{"author":{"_account_id":9200,"name":"IWAMOTO Toshihiro","email":"iwamoto@valinux.co.jp","username":"toshii"},"change_message_id":"20d06f22a934aa4b44f7a7645aef18357b2221df","unresolved":false,"context_lines":[{"line_number":59,"context_line":"    \"\"\"Return True if ovs-vsctl indicates the result is still pending.\"\"\""},{"line_number":60,"context_line":"    # ovs-vsctl can return \u0027[]\u0027 for an ofport that has not yet been assigned"},{"line_number":61,"context_line":"    try:"},{"line_number":62,"context_line":"        int(result)"},{"line_number":63,"context_line":"        return False"},{"line_number":64,"context_line":"    except (ValueError, TypeError):"},{"line_number":65,"context_line":"        return True"}],"source_content_type":"text/x-python","patch_set":3,"id":"1ac06dbe_60f350a0","line":62,"range":{"start_line":62,"start_character":2,"end_line":62,"end_character":19},"updated":"2016-08-25 09:24:30.000000000","message":"datapath id is hexadecimal.\n\nSo this doesn\u0027t work with _get_datapath_id.","commit_id":"06ca42dbdcefa087e058e09ebf7ff7dde17ba455"},{"author":{"_account_id":13717,"name":"Inessa Vasilevskaya","email":"ivasilevskaya@mirantis.com","username":"ivasilevskaya"},"change_message_id":"077b4923e464c33360269fb6d0f951e23d325b8b","unresolved":false,"context_lines":[{"line_number":59,"context_line":"    \"\"\"Return True if ovs-vsctl indicates the result is still pending.\"\"\""},{"line_number":60,"context_line":"    # ovs-vsctl can return \u0027[]\u0027 for an ofport that has not yet been assigned"},{"line_number":61,"context_line":"    try:"},{"line_number":62,"context_line":"        int(result)"},{"line_number":63,"context_line":"        return False"},{"line_number":64,"context_line":"    except (ValueError, TypeError):"},{"line_number":65,"context_line":"        return True"}],"source_content_type":"text/x-python","patch_set":3,"id":"1ac06dbe_d7580759","line":62,"range":{"start_line":62,"start_character":2,"end_line":62,"end_character":19},"in_reply_to":"1ac06dbe_60f350a0","updated":"2016-08-25 09:59:14.000000000","message":"I think that was causing test failures. thanks!","commit_id":"06ca42dbdcefa087e058e09ebf7ff7dde17ba455"},{"author":{"_account_id":5756,"name":"Terry Wilson","email":"twilson@redhat.com","username":"otherwiseguy"},"change_message_id":"0c34c0f54d7d41b3b1e89d9df5f8fcb1eac8c058","unresolved":false,"context_lines":[{"line_number":59,"context_line":"    \"\"\"Return True if ovs-vsctl indicates the result is still pending.\"\"\""},{"line_number":60,"context_line":"    # ovs-vsctl can return \u0027[]\u0027 for an ofport that has not yet been assigned"},{"line_number":61,"context_line":"    try:"},{"line_number":62,"context_line":"        int(result)"},{"line_number":63,"context_line":"        return False"},{"line_number":64,"context_line":"    except (ValueError, TypeError):"},{"line_number":65,"context_line":"        return True"}],"source_content_type":"text/x-python","patch_set":3,"id":"1ac06dbe_5f5edc45","line":62,"range":{"start_line":62,"start_character":2,"end_line":62,"end_character":19},"in_reply_to":"1ac06dbe_d7580759","updated":"2016-08-25 14:07:57.000000000","message":"I suppose we could just make this:\n\n return result \u003d\u003d []\n\nIt doesn\u0027t verify the type of what we got, but it does ensure *something* is set. And ovsdb-server isn\u0027t going to set the value to something other than a correct type.","commit_id":"06ca42dbdcefa087e058e09ebf7ff7dde17ba455"},{"author":{"_account_id":13717,"name":"Inessa Vasilevskaya","email":"ivasilevskaya@mirantis.com","username":"ivasilevskaya"},"change_message_id":"09bdb53da4f1b3c395a30412d8355ced07a46665","unresolved":false,"context_lines":[{"line_number":57,"context_line":""},{"line_number":58,"context_line":"def _ovsdb_result_pending(result):"},{"line_number":59,"context_line":"    \"\"\"Return True if ovs-vsctl indicates the result is still pending.\"\"\""},{"line_number":60,"context_line":"    # ovs-vsctl can return \u0027[]\u0027 for an ofport that has not yet been assigned"},{"line_number":61,"context_line":"    return result \u003d\u003d []"},{"line_number":62,"context_line":""},{"line_number":63,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"fa7ab95a_b1622a15","line":60,"range":{"start_line":60,"start_character":36,"end_line":60,"end_character":45},"updated":"2016-08-25 21:39:31.000000000","message":"will alter the comment after test results are ready","commit_id":"a9069430483774bb217912ef1e4890703bfaec46"},{"author":{"_account_id":13717,"name":"Inessa Vasilevskaya","email":"ivasilevskaya@mirantis.com","username":"ivasilevskaya"},"change_message_id":"09bdb53da4f1b3c395a30412d8355ced07a46665","unresolved":false,"context_lines":[{"line_number":62,"context_line":""},{"line_number":63,"context_line":""},{"line_number":64,"context_line":"def _ovsdb_retry(fn):"},{"line_number":65,"context_line":"    \"\"\"Decorator for retrying when OVS has yet to assign an ofport."},{"line_number":66,"context_line":""},{"line_number":67,"context_line":"    The instance\u0027s vsctl_timeout is used as the max waiting time. This relies"},{"line_number":68,"context_line":"    on the fact that instance methods receive self as the first argument."}],"source_content_type":"text/x-python","patch_set":4,"id":"fa7ab95a_917e06ad","line":65,"range":{"start_line":65,"start_character":50,"end_line":65,"end_character":67},"updated":"2016-08-25 21:39:31.000000000","message":"ditto","commit_id":"a9069430483774bb217912ef1e4890703bfaec46"},{"author":{"_account_id":9200,"name":"IWAMOTO Toshihiro","email":"iwamoto@valinux.co.jp","username":"toshii"},"change_message_id":"725b5e58b85867c1ec8740fbbebaac30fe5bc6cc","unresolved":false,"context_lines":[{"line_number":339,"context_line":"            LOG.exception("},{"line_number":340,"context_line":"                _LE(\"Timed out retrieving datapath_id on bridge %s.\"),"},{"line_number":341,"context_line":"                self.br_name)"},{"line_number":342,"context_line":"            raise exceptions.ObjectNotFound(id\u003d\u0027datapath_id\u0027)"},{"line_number":343,"context_line":""},{"line_number":344,"context_line":"    def do_action_flows(self, action, kwargs_list):"},{"line_number":345,"context_line":"        if action \u003d\u003d \u0027del\u0027 and {} in kwargs_list:"}],"source_content_type":"text/x-python","patch_set":11,"id":"ffe62b97_b3888471","line":342,"updated":"2017-03-24 06:25:14.000000000","message":"datapath_id isn\u0027t really a ID for object.\nI think at least RuntimeError is more suitable.","commit_id":"01f49ae7aeeafa5874a88024b59aa72001991e5f"},{"author":{"_account_id":4694,"name":"Miguel Lavalle","email":"miguel@mlavalle.com","username":"minsel"},"change_message_id":"ca7d6005e5c11713e28d8296ad921d0c5af6aa3b","unresolved":false,"context_lines":[{"line_number":337,"context_line":"            # if ovs fails to find datapath_id then something is likely to be"},{"line_number":338,"context_line":"            # broken here"},{"line_number":339,"context_line":"            LOG.exception("},{"line_number":340,"context_line":"                _LE(\"Timed out retrieving datapath_id on bridge %s.\"),"},{"line_number":341,"context_line":"                self.br_name)"},{"line_number":342,"context_line":"            raise RuntimeError(\u0027No datapath_id on bridge %s\u0027 % self.br_name)"},{"line_number":343,"context_line":""}],"source_content_type":"text/x-python","patch_set":13,"id":"dfeb2761_abc90b79","line":340,"range":{"start_line":340,"start_character":16,"end_line":340,"end_character":19},"updated":"2017-03-31 20:57:31.000000000","message":"I\u0027m sorry I didn\u0027t see this before. We are not translating LOG messages anymore. Please see first note here: https://docs.openstack.org/developer/oslo.i18n/guidelines.html#log-translation","commit_id":"1a89de3c2ddf38b460ebf2726574a882c85800d7"},{"author":{"_account_id":13717,"name":"Inessa Vasilevskaya","email":"ivasilevskaya@mirantis.com","username":"ivasilevskaya"},"change_message_id":"f21a0e45708d78afcf06df65634fb443d6f195bb","unresolved":false,"context_lines":[{"line_number":337,"context_line":"            # if ovs fails to find datapath_id then something is likely to be"},{"line_number":338,"context_line":"            # broken here"},{"line_number":339,"context_line":"            LOG.exception("},{"line_number":340,"context_line":"                _LE(\"Timed out retrieving datapath_id on bridge %s.\"),"},{"line_number":341,"context_line":"                self.br_name)"},{"line_number":342,"context_line":"            raise RuntimeError(\u0027No datapath_id on bridge %s\u0027 % self.br_name)"},{"line_number":343,"context_line":""}],"source_content_type":"text/x-python","patch_set":13,"id":"dfeb2761_11433cb1","line":340,"range":{"start_line":340,"start_character":16,"end_line":340,"end_character":19},"in_reply_to":"dfeb2761_abc90b79","updated":"2017-04-04 12:16:57.000000000","message":"Thanks, that escaped my attention. There are plenty of occurrencies in the code besides that, I wonder if they should be fixed (in a separate patchset of course).","commit_id":"1a89de3c2ddf38b460ebf2726574a882c85800d7"}],"neutron/tests/unit/plugins/ml2/drivers/openvswitch/agent/openflow/native/test_ovs_bridge.py":[{"author":{"_account_id":5756,"name":"Terry Wilson","email":"twilson@redhat.com","username":"otherwiseguy"},"change_message_id":"3c7ec15864f90d14b6031b987ce963c169ed766a","unresolved":false,"context_lines":[{"line_number":37,"context_line":""},{"line_number":38,"context_line":"    def test_get_datapath_no_data_returned(self):"},{"line_number":39,"context_line":""},{"line_number":40,"context_line":"        def _mock_db_get_val(self, tb, val):"},{"line_number":41,"context_line":"            if tb \u003d\u003d \u0027Bridge\u0027:"},{"line_number":42,"context_line":"                return []"},{"line_number":43,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"fa7ab95a_70e7b212","line":40,"updated":"2016-08-26 04:02:15.000000000","message":"I think the args should match what is passed to db_get_val w/o self. You are getting a None return here, which is not triggering the Retry because the first arg should be \u0027Bridge\u0027.","commit_id":"a9069430483774bb217912ef1e4890703bfaec46"},{"author":{"_account_id":13717,"name":"Inessa Vasilevskaya","email":"ivasilevskaya@mirantis.com","username":"ivasilevskaya"},"change_message_id":"257c47f3c63d4a0d5745470711056263223e57ae","unresolved":false,"context_lines":[{"line_number":37,"context_line":""},{"line_number":38,"context_line":"    def test_get_datapath_no_data_returned(self):"},{"line_number":39,"context_line":""},{"line_number":40,"context_line":"        def _mock_db_get_val(self, tb, val):"},{"line_number":41,"context_line":"            if tb \u003d\u003d \u0027Bridge\u0027:"},{"line_number":42,"context_line":"                return []"},{"line_number":43,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"fa7ab95a_9eaa79d3","line":40,"in_reply_to":"fa7ab95a_70e7b212","updated":"2016-08-26 11:45:38.000000000","message":"right, it should be _mock_db_get_val(tb, rec, col)","commit_id":"a9069430483774bb217912ef1e4890703bfaec46"}]}
