)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":14760,"name":"John L. Villalovos","email":"openstack.org@sodarock.com","username":"jlvillal"},"change_message_id":"0274346a853ab215e0920ca4946bdb1a81696703","unresolved":false,"context_lines":[{"line_number":4,"context_line":"Commit:     Lin Tan \u003clin.tan@intel.com\u003e"},{"line_number":5,"context_line":"CommitDate: 2015-11-13 15:49:13 +0800"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Isolate ir-api from DB"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Remove DBHook and create a new RPC method get_active_driver_dict()"},{"line_number":10,"context_line":"This will isolate ir-api from DB and bump RPC version to 1.32"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":2,"id":"ba8a016a_25deb63f","line":7,"updated":"2015-11-18 04:28:32.000000000","message":"nit: s/ir-api/ironic-api/\n\nUnless I\u0027m mistaken, the service is called \u0027ironic-api\u0027","commit_id":"f94b92e085f64be40030e0d2ad50532a04278c07"},{"author":{"_account_id":11076,"name":"Shivanand Tendulker","email":"stendulker@gmail.com","username":"stendulker"},"change_message_id":"e8dd4edbed636a65ae75eadc81be950f6f7af737","unresolved":false,"context_lines":[{"line_number":10,"context_line":"So remove DBHook and create a new RPC method get_active_driver_dict()"},{"line_number":11,"context_line":"This will isloate Ironic API from DB and bump RPC version to 1.32."},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"Driver-list API will return an emtyp list if there is no live conductor."},{"line_number":14,"context_line":"But this will block for a while, because this is depends on"},{"line_number":15,"context_line":"rpc_response_timeout which is 60s by default."},{"line_number":16,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":6,"id":"7a740942_f3ba7be0","line":13,"updated":"2015-12-12 07:03:49.000000000","message":"s/emtyp/ empty","commit_id":"d68e8b51cb659e22dfef3d9f62581b78b4ea88d5"}],"ironic/api/controllers/v1/driver.py":[{"author":{"_account_id":10343,"name":"Jim Rollenhagen","email":"jim@jimrollenhagen.com","username":"jimrollenhagen"},"change_message_id":"a0b50511450f032fe6560c55f34d25510ff337b8","unresolved":false,"context_lines":[{"line_number":230,"context_line":"        #              This is a result of a bug in sphinxcontrib-pecanwsme"},{"line_number":231,"context_line":"        # https://github.com/dreamhost/sphinxcontrib-pecanwsme/issues/8"},{"line_number":232,"context_line":"        driver_list \u003d pecan.request.rpcapi.get_active_driver_dict("},{"line_number":233,"context_line":"            pecan.request.context)"},{"line_number":234,"context_line":"        return DriverList.convert_with_links(driver_list)"},{"line_number":235,"context_line":""},{"line_number":236,"context_line":"    @expose.expose(Driver, wtypes.text)"}],"source_content_type":"text/x-python","patch_set":2,"id":"ba8a016a_6c795ffc","line":233,"updated":"2015-11-16 19:19:05.000000000","message":"This won\u0027t work if no conductors are running, and I feel like it should.","commit_id":"f94b92e085f64be40030e0d2ad50532a04278c07"}],"ironic/conductor/manager.py":[{"author":{"_account_id":10343,"name":"Jim Rollenhagen","email":"jim@jimrollenhagen.com","username":"jimrollenhagen"},"change_message_id":"a0b50511450f032fe6560c55f34d25510ff337b8","unresolved":false,"context_lines":[{"line_number":1742,"context_line":"            return port_obj"},{"line_number":1743,"context_line":""},{"line_number":1744,"context_line":"    def get_active_driver_dict(self, context):"},{"line_number":1745,"context_line":"        \"\"\"Get a dictionary of active drivers with correspond conductors."},{"line_number":1746,"context_line":""},{"line_number":1747,"context_line":"        :param context: request context."},{"line_number":1748,"context_line":"        :returns: a dictionary with \u003cdriver name\u003e:[hosts]"}],"source_content_type":"text/x-python","patch_set":2,"id":"ba8a016a_0c7a1325","line":1745,"updated":"2015-11-16 19:19:05.000000000","message":"corresponding","commit_id":"f94b92e085f64be40030e0d2ad50532a04278c07"},{"author":{"_account_id":10343,"name":"Jim Rollenhagen","email":"jim@jimrollenhagen.com","username":"jimrollenhagen"},"change_message_id":"a0b50511450f032fe6560c55f34d25510ff337b8","unresolved":false,"context_lines":[{"line_number":1747,"context_line":"        :param context: request context."},{"line_number":1748,"context_line":"        :returns: a dictionary with \u003cdriver name\u003e:[hosts]"},{"line_number":1749,"context_line":"        \"\"\""},{"line_number":1750,"context_line":"        LOG.debug(\"RPC get active driver dict called\")"},{"line_number":1751,"context_line":"        driver_list \u003d self.dbapi.get_active_driver_dict()"},{"line_number":1752,"context_line":"        # Conver defaultdict to dict to become serializable"},{"line_number":1753,"context_line":"        return dict(driver_list)"}],"source_content_type":"text/x-python","patch_set":2,"id":"ba8a016a_2c827701","line":1750,"updated":"2015-11-16 19:19:05.000000000","message":"Can we make this consistent with the other methods?\n\n\"RPC get_active_driver_dict called\"","commit_id":"f94b92e085f64be40030e0d2ad50532a04278c07"},{"author":{"_account_id":6773,"name":"Lucas Alvares Gomes","email":"lucasagomes@gmail.com","username":"lucasagomes"},"change_message_id":"1cf0e82f496a7397110627434464afe4bb0e036e","unresolved":false,"context_lines":[{"line_number":1749,"context_line":"        \"\"\""},{"line_number":1750,"context_line":"        LOG.debug(\"RPC get active driver dict called\")"},{"line_number":1751,"context_line":"        driver_list \u003d self.dbapi.get_active_driver_dict()"},{"line_number":1752,"context_line":"        # Conver defaultdict to dict to become serializable"},{"line_number":1753,"context_line":"        return dict(driver_list)"},{"line_number":1754,"context_line":""},{"line_number":1755,"context_line":"    @messaging.expected_exceptions(exception.DriverNotFound)"}],"source_content_type":"text/x-python","patch_set":2,"id":"ba8a016a_939e3e06","line":1752,"updated":"2015-11-16 09:38:13.000000000","message":"# Convert to","commit_id":"f94b92e085f64be40030e0d2ad50532a04278c07"},{"author":{"_account_id":11076,"name":"Shivanand Tendulker","email":"stendulker@gmail.com","username":"stendulker"},"change_message_id":"e8dd4edbed636a65ae75eadc81be950f6f7af737","unresolved":false,"context_lines":[{"line_number":1742,"context_line":"            return port_obj"},{"line_number":1743,"context_line":""},{"line_number":1744,"context_line":"    def get_active_driver_dict(self, context):"},{"line_number":1745,"context_line":"        \"\"\"Get a dictionary of active drivers with correspond conductors."},{"line_number":1746,"context_line":""},{"line_number":1747,"context_line":"        :param context: request context."},{"line_number":1748,"context_line":"        :returns: a dictionary with \u003cdriver name\u003e:[hosts]"}],"source_content_type":"text/x-python","patch_set":6,"id":"7a740942_f32cbb4b","line":1745,"updated":"2015-12-12 07:03:49.000000000","message":"s/correspond/ corresponding","commit_id":"d68e8b51cb659e22dfef3d9f62581b78b4ea88d5"},{"author":{"_account_id":11076,"name":"Shivanand Tendulker","email":"stendulker@gmail.com","username":"stendulker"},"change_message_id":"e8dd4edbed636a65ae75eadc81be950f6f7af737","unresolved":false,"context_lines":[{"line_number":1747,"context_line":"        :param context: request context."},{"line_number":1748,"context_line":"        :returns: a dictionary with \u003cdriver name\u003e:[hosts]"},{"line_number":1749,"context_line":"        \"\"\""},{"line_number":1750,"context_line":"        LOG.debug(\"RPC get active driver dict called\")"},{"line_number":1751,"context_line":"        driver_list \u003d self.dbapi.get_active_driver_dict()"},{"line_number":1752,"context_line":"        # Conver defaultdict to dict to become serializable"},{"line_number":1753,"context_line":"        return dict(driver_list)"}],"source_content_type":"text/x-python","patch_set":6,"id":"7a740942_931e970a","line":1750,"updated":"2015-12-12 07:03:49.000000000","message":"Should be function name...\ns/\"get active driver dict\" / get_active_driver_dict/","commit_id":"d68e8b51cb659e22dfef3d9f62581b78b4ea88d5"},{"author":{"_account_id":11076,"name":"Shivanand Tendulker","email":"stendulker@gmail.com","username":"stendulker"},"change_message_id":"e8dd4edbed636a65ae75eadc81be950f6f7af737","unresolved":false,"context_lines":[{"line_number":1749,"context_line":"        \"\"\""},{"line_number":1750,"context_line":"        LOG.debug(\"RPC get active driver dict called\")"},{"line_number":1751,"context_line":"        driver_list \u003d self.dbapi.get_active_driver_dict()"},{"line_number":1752,"context_line":"        # Conver defaultdict to dict to become serializable"},{"line_number":1753,"context_line":"        return dict(driver_list)"},{"line_number":1754,"context_line":""},{"line_number":1755,"context_line":"    @messaging.expected_exceptions(exception.DriverNotFound)"}],"source_content_type":"text/x-python","patch_set":6,"id":"7a740942_93f777d2","line":1752,"updated":"2015-12-12 07:03:49.000000000","message":"s/Conver/ Convert","commit_id":"d68e8b51cb659e22dfef3d9f62581b78b4ea88d5"},{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"3e9973443a036586b7b8dc7365750b1e81137603","unresolved":false,"context_lines":[{"line_number":1537,"context_line":""},{"line_number":1538,"context_line":"            return port_obj"},{"line_number":1539,"context_line":""},{"line_number":1540,"context_line":"    def get_active_driver_dict(self, context):"},{"line_number":1541,"context_line":"        \"\"\"Get a dictionary of active drivers with corresponding conductors."},{"line_number":1542,"context_line":""},{"line_number":1543,"context_line":"        :param context: request context."}],"source_content_type":"text/x-python","patch_set":7,"id":"fa69d971_ff073216","line":1540,"updated":"2016-01-07 18:52:04.000000000","message":"ditto about the name","commit_id":"4f7eac3b23bf05e6c117cf407d7f993fe1836d19"},{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"3e9973443a036586b7b8dc7365750b1e81137603","unresolved":false,"context_lines":[{"line_number":1541,"context_line":"        \"\"\"Get a dictionary of active drivers with corresponding conductors."},{"line_number":1542,"context_line":""},{"line_number":1543,"context_line":"        :param context: request context."},{"line_number":1544,"context_line":"        :returns: a dictionary with \u003cdriver name\u003e:[hosts]"},{"line_number":1545,"context_line":"        \"\"\""},{"line_number":1546,"context_line":"        LOG.debug(\"RPC get_active_driver_dict called\")"},{"line_number":1547,"context_line":"        driver_list \u003d self.dbapi.get_active_driver_dict()"}],"source_content_type":"text/x-python","patch_set":7,"id":"fa69d971_ff6c12d2","line":1544,"updated":"2016-01-07 18:52:04.000000000","message":"it is a set of hosts, not a list?","commit_id":"4f7eac3b23bf05e6c117cf407d7f993fe1836d19"},{"author":{"_account_id":13362,"name":"Tan Lin","email":"lin.tan@intel.com","username":"zero"},"change_message_id":"828c06a82d975207078966d3fb75e08a27e66fad","unresolved":false,"context_lines":[{"line_number":1541,"context_line":"        \"\"\"Get a dictionary of active drivers with corresponding conductors."},{"line_number":1542,"context_line":""},{"line_number":1543,"context_line":"        :param context: request context."},{"line_number":1544,"context_line":"        :returns: a dictionary with \u003cdriver name\u003e:[hosts]"},{"line_number":1545,"context_line":"        \"\"\""},{"line_number":1546,"context_line":"        LOG.debug(\"RPC get_active_driver_dict called\")"},{"line_number":1547,"context_line":"        driver_list \u003d self.dbapi.get_active_driver_dict()"}],"source_content_type":"text/x-python","patch_set":7,"id":"9a68dd71_8836d8b2","line":1544,"in_reply_to":"fa69d971_ff6c12d2","updated":"2016-01-27 07:05:16.000000000","message":"better to return a list","commit_id":"4f7eac3b23bf05e6c117cf407d7f993fe1836d19"},{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"3e9973443a036586b7b8dc7365750b1e81137603","unresolved":false,"context_lines":[{"line_number":1544,"context_line":"        :returns: a dictionary with \u003cdriver name\u003e:[hosts]"},{"line_number":1545,"context_line":"        \"\"\""},{"line_number":1546,"context_line":"        LOG.debug(\"RPC get_active_driver_dict called\")"},{"line_number":1547,"context_line":"        driver_list \u003d self.dbapi.get_active_driver_dict()"},{"line_number":1548,"context_line":"        # Convert defaultdict to dict to become serializable"},{"line_number":1549,"context_line":"        return dict(driver_list)"},{"line_number":1550,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"fa69d971_3f25caad","line":1547,"updated":"2016-01-07 18:52:04.000000000","message":"s/driver_list/drivers/ or something like that","commit_id":"4f7eac3b23bf05e6c117cf407d7f993fe1836d19"},{"author":{"_account_id":13362,"name":"Tan Lin","email":"lin.tan@intel.com","username":"zero"},"change_message_id":"828c06a82d975207078966d3fb75e08a27e66fad","unresolved":false,"context_lines":[{"line_number":1544,"context_line":"        :returns: a dictionary with \u003cdriver name\u003e:[hosts]"},{"line_number":1545,"context_line":"        \"\"\""},{"line_number":1546,"context_line":"        LOG.debug(\"RPC get_active_driver_dict called\")"},{"line_number":1547,"context_line":"        driver_list \u003d self.dbapi.get_active_driver_dict()"},{"line_number":1548,"context_line":"        # Convert defaultdict to dict to become serializable"},{"line_number":1549,"context_line":"        return dict(driver_list)"},{"line_number":1550,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"9a68dd71_88dc9819","line":1547,"in_reply_to":"fa69d971_3f25caad","updated":"2016-01-27 07:05:16.000000000","message":"Done","commit_id":"4f7eac3b23bf05e6c117cf407d7f993fe1836d19"},{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"3e9973443a036586b7b8dc7365750b1e81137603","unresolved":false,"context_lines":[{"line_number":1545,"context_line":"        \"\"\""},{"line_number":1546,"context_line":"        LOG.debug(\"RPC get_active_driver_dict called\")"},{"line_number":1547,"context_line":"        driver_list \u003d self.dbapi.get_active_driver_dict()"},{"line_number":1548,"context_line":"        # Convert defaultdict to dict to become serializable"},{"line_number":1549,"context_line":"        return dict(driver_list)"},{"line_number":1550,"context_line":""},{"line_number":1551,"context_line":"    @messaging.expected_exceptions(exception.DriverNotFound)"}],"source_content_type":"text/x-python","patch_set":7,"id":"fa69d971_5fd43e46","line":1548,"updated":"2016-01-07 18:52:04.000000000","message":"OH. defaultdicts aren\u0027t serializable?","commit_id":"4f7eac3b23bf05e6c117cf407d7f993fe1836d19"},{"author":{"_account_id":13362,"name":"Tan Lin","email":"lin.tan@intel.com","username":"zero"},"change_message_id":"828c06a82d975207078966d3fb75e08a27e66fad","unresolved":false,"context_lines":[{"line_number":1545,"context_line":"        \"\"\""},{"line_number":1546,"context_line":"        LOG.debug(\"RPC get_active_driver_dict called\")"},{"line_number":1547,"context_line":"        driver_list \u003d self.dbapi.get_active_driver_dict()"},{"line_number":1548,"context_line":"        # Convert defaultdict to dict to become serializable"},{"line_number":1549,"context_line":"        return dict(driver_list)"},{"line_number":1550,"context_line":""},{"line_number":1551,"context_line":"    @messaging.expected_exceptions(exception.DriverNotFound)"}],"source_content_type":"text/x-python","patch_set":7,"id":"9a68dd71_e8e3d431","line":1548,"in_reply_to":"fa69d971_5fd43e46","updated":"2016-01-27 07:05:16.000000000","message":"In general, defaultdicts is serializable. But the defaultdict is a defaultdict(\u003ctype \u0027set\u0027\u003e, and set is not serializable. oslo_serialization will convert set to list if it\u0027s in a dict. So we have to convert it to dict here or we should convert set to list.","commit_id":"4f7eac3b23bf05e6c117cf407d7f993fe1836d19"},{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"6fb44225978280e5e6af17ab138fc556a09f36fb","unresolved":false,"context_lines":[{"line_number":1653,"context_line":""},{"line_number":1654,"context_line":"            return port_obj"},{"line_number":1655,"context_line":""},{"line_number":1656,"context_line":"    def get_active_driver(self, context):"},{"line_number":1657,"context_line":"        \"\"\"Get a dictionary of active drivers with corresponding conductors."},{"line_number":1658,"context_line":""},{"line_number":1659,"context_line":"        :param context: request context."}],"source_content_type":"text/x-python","patch_set":8,"id":"7a5de9d1_9be40e3c","line":1656,"updated":"2016-01-27 17:08:24.000000000","message":"it should be get_active_drivers() if it is getting all active drivers, not just one.","commit_id":"85974d09f34e9b0fbdbc1ddbb451f780215b09ee"},{"author":{"_account_id":13362,"name":"Tan Lin","email":"lin.tan@intel.com","username":"zero"},"change_message_id":"a793663395e0f331474bd0512cc7d33b55e336a9","unresolved":false,"context_lines":[{"line_number":1653,"context_line":""},{"line_number":1654,"context_line":"            return port_obj"},{"line_number":1655,"context_line":""},{"line_number":1656,"context_line":"    def get_active_driver(self, context):"},{"line_number":1657,"context_line":"        \"\"\"Get a dictionary of active drivers with corresponding conductors."},{"line_number":1658,"context_line":""},{"line_number":1659,"context_line":"        :param context: request context."}],"source_content_type":"text/x-python","patch_set":8,"id":"7a5de9d1_e0b0d78d","line":1656,"in_reply_to":"7a5de9d1_9be40e3c","updated":"2016-01-28 02:35:12.000000000","message":"Done","commit_id":"85974d09f34e9b0fbdbc1ddbb451f780215b09ee"},{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"6fb44225978280e5e6af17ab138fc556a09f36fb","unresolved":false,"context_lines":[{"line_number":1659,"context_line":"        :param context: request context."},{"line_number":1660,"context_line":"        :returns: a dictionary with \u003cdriver name\u003e:[hosts]"},{"line_number":1661,"context_line":"        \"\"\""},{"line_number":1662,"context_line":"        LOG.debug(\"RPC get_active_driver_dict called\")"},{"line_number":1663,"context_line":"        drivers \u003d self.dbapi.get_active_driver_dict()"},{"line_number":1664,"context_line":"        # Convert a set of hosts to a list to become serializable"},{"line_number":1665,"context_line":"        for name, hosts in drivers.items():"}],"source_content_type":"text/x-python","patch_set":8,"id":"7a5de9d1_db484630","line":1662,"updated":"2016-01-27 17:08:24.000000000","message":"the method name is incorrect in this string","commit_id":"85974d09f34e9b0fbdbc1ddbb451f780215b09ee"},{"author":{"_account_id":13362,"name":"Tan Lin","email":"lin.tan@intel.com","username":"zero"},"change_message_id":"a793663395e0f331474bd0512cc7d33b55e336a9","unresolved":false,"context_lines":[{"line_number":1659,"context_line":"        :param context: request context."},{"line_number":1660,"context_line":"        :returns: a dictionary with \u003cdriver name\u003e:[hosts]"},{"line_number":1661,"context_line":"        \"\"\""},{"line_number":1662,"context_line":"        LOG.debug(\"RPC get_active_driver_dict called\")"},{"line_number":1663,"context_line":"        drivers \u003d self.dbapi.get_active_driver_dict()"},{"line_number":1664,"context_line":"        # Convert a set of hosts to a list to become serializable"},{"line_number":1665,"context_line":"        for name, hosts in drivers.items():"}],"source_content_type":"text/x-python","patch_set":8,"id":"7a5de9d1_c0a7db4d","line":1662,"in_reply_to":"7a5de9d1_db484630","updated":"2016-01-28 02:35:12.000000000","message":"Done","commit_id":"85974d09f34e9b0fbdbc1ddbb451f780215b09ee"},{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"6fb44225978280e5e6af17ab138fc556a09f36fb","unresolved":false,"context_lines":[{"line_number":1664,"context_line":"        # Convert a set of hosts to a list to become serializable"},{"line_number":1665,"context_line":"        for name, hosts in drivers.items():"},{"line_number":1666,"context_line":"            drivers[name] \u003d list(hosts)"},{"line_number":1667,"context_line":"        return dict(drivers)"},{"line_number":1668,"context_line":""},{"line_number":1669,"context_line":"    @messaging.expected_exceptions(exception.DriverNotFound)"},{"line_number":1670,"context_line":"    def get_driver_properties(self, context, driver_name):"}],"source_content_type":"text/x-python","patch_set":8,"id":"7a5de9d1_de6594e1","line":1667,"updated":"2016-01-27 17:08:24.000000000","message":"I looked at your comment in revision 7, where you said (I think) we only need to change the sets to lists, OR convert the defaultdict to dict. I see you\u0027ve done both.\n\nIt might be less confusing if you do something like:\n    d \u003d {}\n    for names, hosts in drivers.items():\n        d[name] \u003d list(hosts)\n    return d","commit_id":"85974d09f34e9b0fbdbc1ddbb451f780215b09ee"},{"author":{"_account_id":13362,"name":"Tan Lin","email":"lin.tan@intel.com","username":"zero"},"change_message_id":"a793663395e0f331474bd0512cc7d33b55e336a9","unresolved":false,"context_lines":[{"line_number":1664,"context_line":"        # Convert a set of hosts to a list to become serializable"},{"line_number":1665,"context_line":"        for name, hosts in drivers.items():"},{"line_number":1666,"context_line":"            drivers[name] \u003d list(hosts)"},{"line_number":1667,"context_line":"        return dict(drivers)"},{"line_number":1668,"context_line":""},{"line_number":1669,"context_line":"    @messaging.expected_exceptions(exception.DriverNotFound)"},{"line_number":1670,"context_line":"    def get_driver_properties(self, context, driver_name):"}],"source_content_type":"text/x-python","patch_set":8,"id":"7a5de9d1_806803f7","line":1667,"in_reply_to":"7a5de9d1_de6594e1","updated":"2016-01-28 02:35:12.000000000","message":"Thanks","commit_id":"85974d09f34e9b0fbdbc1ddbb451f780215b09ee"}],"ironic/conductor/rpcapi.py":[{"author":{"_account_id":10343,"name":"Jim Rollenhagen","email":"jim@jimrollenhagen.com","username":"jimrollenhagen"},"change_message_id":"a0b50511450f032fe6560c55f34d25510ff337b8","unresolved":false,"context_lines":[{"line_number":434,"context_line":"        cctxt \u003d self.client.prepare(topic\u003dtopic or self.topic, version\u003d\u00271.13\u0027)"},{"line_number":435,"context_line":"        return cctxt.call(context, \u0027update_port\u0027, port_obj\u003dport_obj)"},{"line_number":436,"context_line":""},{"line_number":437,"context_line":"    def get_active_driver_dict(self, context, topic\u003dNone):"},{"line_number":438,"context_line":"        \"\"\"Get a dictionary of active drivers with correspond conductors."},{"line_number":439,"context_line":""},{"line_number":440,"context_line":"        :param context: request context."}],"source_content_type":"text/x-python","patch_set":2,"id":"ba8a016a_4c9edb57","line":437,"updated":"2015-11-16 19:19:05.000000000","message":"Shouldn\u0027t need a topic argument here as this isn\u0027t node-specific.","commit_id":"f94b92e085f64be40030e0d2ad50532a04278c07"},{"author":{"_account_id":10343,"name":"Jim Rollenhagen","email":"jim@jimrollenhagen.com","username":"jimrollenhagen"},"change_message_id":"a0b50511450f032fe6560c55f34d25510ff337b8","unresolved":false,"context_lines":[{"line_number":435,"context_line":"        return cctxt.call(context, \u0027update_port\u0027, port_obj\u003dport_obj)"},{"line_number":436,"context_line":""},{"line_number":437,"context_line":"    def get_active_driver_dict(self, context, topic\u003dNone):"},{"line_number":438,"context_line":"        \"\"\"Get a dictionary of active drivers with correspond conductors."},{"line_number":439,"context_line":""},{"line_number":440,"context_line":"        :param context: request context."},{"line_number":441,"context_line":"        :param topic: RPC topic. Defaults to self.topic."}],"source_content_type":"text/x-python","patch_set":2,"id":"ba8a016a_acad078a","line":438,"updated":"2015-11-16 19:19:05.000000000","message":"ditto for corresponding.","commit_id":"f94b92e085f64be40030e0d2ad50532a04278c07"},{"author":{"_account_id":11076,"name":"Shivanand Tendulker","email":"stendulker@gmail.com","username":"stendulker"},"change_message_id":"e8dd4edbed636a65ae75eadc81be950f6f7af737","unresolved":false,"context_lines":[{"line_number":439,"context_line":"        return cctxt.call(context, \u0027update_port\u0027, port_obj\u003dport_obj)"},{"line_number":440,"context_line":""},{"line_number":441,"context_line":"    def get_active_driver_dict(self, context):"},{"line_number":442,"context_line":"        \"\"\"Get a dictionary of active drivers with correspond conductors."},{"line_number":443,"context_line":""},{"line_number":444,"context_line":"        :param context: request context."},{"line_number":445,"context_line":"        :returns: a dictionary with \u003cdriver name\u003e:set([host1, host2])"}],"source_content_type":"text/x-python","patch_set":6,"id":"7a740942_13d94757","line":442,"updated":"2015-12-12 07:03:49.000000000","message":"s/correspond /corresponding","commit_id":"d68e8b51cb659e22dfef3d9f62581b78b4ea88d5"},{"author":{"_account_id":11076,"name":"Shivanand Tendulker","email":"stendulker@gmail.com","username":"stendulker"},"change_message_id":"e8dd4edbed636a65ae75eadc81be950f6f7af737","unresolved":false,"context_lines":[{"line_number":450,"context_line":"        try:"},{"line_number":451,"context_line":"            driver_list \u003d cctxt.call(context, \u0027get_active_driver_dict\u0027)"},{"line_number":452,"context_line":"        except messaging.MessagingTimeout as e:"},{"line_number":453,"context_line":"            LOG.error(_LE(\u0027RPC get_active_driver_dict failed to find a \u0027"},{"line_number":454,"context_line":"                          \u0027live conductor. Error: %(msg)s\u0027), {\u0027msg\u0027: e})"},{"line_number":455,"context_line":"            driver_list \u003d []"},{"line_number":456,"context_line":"        return driver_list"}],"source_content_type":"text/x-python","patch_set":6,"id":"7a740942_d3de5f3d","line":453,"updated":"2015-12-12 07:03:49.000000000","message":"Would it be better to use \u0027retrieve\u0027 as it is a DB operation?\n\ns/ find/ retrieve","commit_id":"d68e8b51cb659e22dfef3d9f62581b78b4ea88d5"},{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"3e9973443a036586b7b8dc7365750b1e81137603","unresolved":false,"context_lines":[{"line_number":438,"context_line":"        cctxt \u003d self.client.prepare(topic\u003dtopic or self.topic, version\u003d\u00271.13\u0027)"},{"line_number":439,"context_line":"        return cctxt.call(context, \u0027update_port\u0027, port_obj\u003dport_obj)"},{"line_number":440,"context_line":""},{"line_number":441,"context_line":"    def get_active_driver_dict(self, context):"},{"line_number":442,"context_line":"        \"\"\"Get a dictionary of active drivers with corresponding conductors."},{"line_number":443,"context_line":""},{"line_number":444,"context_line":"        :param context: request context."}],"source_content_type":"text/x-python","patch_set":7,"id":"fa69d971_2d4e0397","line":441,"updated":"2016-01-07 18:52:04.000000000","message":"I don\u0027t really see the need to mention \u0027dict\u0027 in the method name (I know, it was like this via the dbapi). We have other methods here that don\u0027t have \u0027dict\u0027 (eg get_node_vendor_passthru_methods()), so to be consistent, how about \u0027get_active_drivers\u0027.","commit_id":"4f7eac3b23bf05e6c117cf407d7f993fe1836d19"},{"author":{"_account_id":13362,"name":"Tan Lin","email":"lin.tan@intel.com","username":"zero"},"change_message_id":"828c06a82d975207078966d3fb75e08a27e66fad","unresolved":false,"context_lines":[{"line_number":438,"context_line":"        cctxt \u003d self.client.prepare(topic\u003dtopic or self.topic, version\u003d\u00271.13\u0027)"},{"line_number":439,"context_line":"        return cctxt.call(context, \u0027update_port\u0027, port_obj\u003dport_obj)"},{"line_number":440,"context_line":""},{"line_number":441,"context_line":"    def get_active_driver_dict(self, context):"},{"line_number":442,"context_line":"        \"\"\"Get a dictionary of active drivers with corresponding conductors."},{"line_number":443,"context_line":""},{"line_number":444,"context_line":"        :param context: request context."}],"source_content_type":"text/x-python","patch_set":7,"id":"9a68dd71_01008ba9","line":441,"in_reply_to":"fa69d971_2d4e0397","updated":"2016-01-27 07:05:16.000000000","message":"Done","commit_id":"4f7eac3b23bf05e6c117cf407d7f993fe1836d19"},{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"3e9973443a036586b7b8dc7365750b1e81137603","unresolved":false,"context_lines":[{"line_number":443,"context_line":""},{"line_number":444,"context_line":"        :param context: request context."},{"line_number":445,"context_line":"        :returns: a dictionary with \u003cdriver name\u003e:set([host1, host2])"},{"line_number":446,"context_line":"        :raises: MessagingTimeout"},{"line_number":447,"context_line":""},{"line_number":448,"context_line":"        \"\"\""},{"line_number":449,"context_line":"        cctxt \u003d self.client.prepare(topic\u003dself.topic, version\u003d\u00271.32\u0027, retry\u003d0)"}],"source_content_type":"text/x-python","patch_set":7,"id":"fa69d971_cddba74e","line":446,"updated":"2016-01-07 18:52:04.000000000","message":"It isn\u0027t raising this. Did you want it to?","commit_id":"4f7eac3b23bf05e6c117cf407d7f993fe1836d19"},{"author":{"_account_id":13362,"name":"Tan Lin","email":"lin.tan@intel.com","username":"zero"},"change_message_id":"828c06a82d975207078966d3fb75e08a27e66fad","unresolved":false,"context_lines":[{"line_number":443,"context_line":""},{"line_number":444,"context_line":"        :param context: request context."},{"line_number":445,"context_line":"        :returns: a dictionary with \u003cdriver name\u003e:set([host1, host2])"},{"line_number":446,"context_line":"        :raises: MessagingTimeout"},{"line_number":447,"context_line":""},{"line_number":448,"context_line":"        \"\"\""},{"line_number":449,"context_line":"        cctxt \u003d self.client.prepare(topic\u003dself.topic, version\u003d\u00271.32\u0027, retry\u003d0)"}],"source_content_type":"text/x-python","patch_set":7,"id":"9a68dd71_411d230e","line":446,"in_reply_to":"fa69d971_cddba74e","updated":"2016-01-27 07:05:16.000000000","message":"Thanks, no it won\u0027t raise this.","commit_id":"4f7eac3b23bf05e6c117cf407d7f993fe1836d19"},{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"3e9973443a036586b7b8dc7365750b1e81137603","unresolved":false,"context_lines":[{"line_number":448,"context_line":"        \"\"\""},{"line_number":449,"context_line":"        cctxt \u003d self.client.prepare(topic\u003dself.topic, version\u003d\u00271.32\u0027, retry\u003d0)"},{"line_number":450,"context_line":"        try:"},{"line_number":451,"context_line":"            driver_list \u003d cctxt.call(context, \u0027get_active_driver_dict\u0027)"},{"line_number":452,"context_line":"        except messaging.MessagingTimeout as e:"},{"line_number":453,"context_line":"            LOG.error(_LE(\u0027RPC get_active_driver_dict failed to retrieve a \u0027"},{"line_number":454,"context_line":"                          \u0027live conductor. Error: %(msg)s\u0027), {\u0027msg\u0027: e})"}],"source_content_type":"text/x-python","patch_set":7,"id":"fa69d971_6d2b9b95","line":451,"updated":"2016-01-07 18:52:04.000000000","message":"please. it isn\u0027t a list, maybe s/driver_list/drivers/","commit_id":"4f7eac3b23bf05e6c117cf407d7f993fe1836d19"},{"author":{"_account_id":13362,"name":"Tan Lin","email":"lin.tan@intel.com","username":"zero"},"change_message_id":"828c06a82d975207078966d3fb75e08a27e66fad","unresolved":false,"context_lines":[{"line_number":448,"context_line":"        \"\"\""},{"line_number":449,"context_line":"        cctxt \u003d self.client.prepare(topic\u003dself.topic, version\u003d\u00271.32\u0027, retry\u003d0)"},{"line_number":450,"context_line":"        try:"},{"line_number":451,"context_line":"            driver_list \u003d cctxt.call(context, \u0027get_active_driver_dict\u0027)"},{"line_number":452,"context_line":"        except messaging.MessagingTimeout as e:"},{"line_number":453,"context_line":"            LOG.error(_LE(\u0027RPC get_active_driver_dict failed to retrieve a \u0027"},{"line_number":454,"context_line":"                          \u0027live conductor. Error: %(msg)s\u0027), {\u0027msg\u0027: e})"}],"source_content_type":"text/x-python","patch_set":7,"id":"9a68dd71_08d188fb","line":451,"in_reply_to":"fa69d971_6d2b9b95","updated":"2016-01-27 07:05:16.000000000","message":"Done","commit_id":"4f7eac3b23bf05e6c117cf407d7f993fe1836d19"},{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"3e9973443a036586b7b8dc7365750b1e81137603","unresolved":false,"context_lines":[{"line_number":452,"context_line":"        except messaging.MessagingTimeout as e:"},{"line_number":453,"context_line":"            LOG.error(_LE(\u0027RPC get_active_driver_dict failed to retrieve a \u0027"},{"line_number":454,"context_line":"                          \u0027live conductor. Error: %(msg)s\u0027), {\u0027msg\u0027: e})"},{"line_number":455,"context_line":"            driver_list \u003d []"},{"line_number":456,"context_line":"        return driver_list"},{"line_number":457,"context_line":""},{"line_number":458,"context_line":"    def get_driver_properties(self, context, driver_name, topic\u003dNone):"}],"source_content_type":"text/x-python","patch_set":7,"id":"fa69d971_ad78b32c","line":455,"updated":"2016-01-07 18:52:04.000000000","message":"I thought this is a dictionary (based on your docstring above).","commit_id":"4f7eac3b23bf05e6c117cf407d7f993fe1836d19"},{"author":{"_account_id":13362,"name":"Tan Lin","email":"lin.tan@intel.com","username":"zero"},"change_message_id":"828c06a82d975207078966d3fb75e08a27e66fad","unresolved":false,"context_lines":[{"line_number":452,"context_line":"        except messaging.MessagingTimeout as e:"},{"line_number":453,"context_line":"            LOG.error(_LE(\u0027RPC get_active_driver_dict failed to retrieve a \u0027"},{"line_number":454,"context_line":"                          \u0027live conductor. Error: %(msg)s\u0027), {\u0027msg\u0027: e})"},{"line_number":455,"context_line":"            driver_list \u003d []"},{"line_number":456,"context_line":"        return driver_list"},{"line_number":457,"context_line":""},{"line_number":458,"context_line":"    def get_driver_properties(self, context, driver_name, topic\u003dNone):"}],"source_content_type":"text/x-python","patch_set":7,"id":"9a68dd71_68eb64b1","line":455,"in_reply_to":"fa69d971_ad78b32c","updated":"2016-01-27 07:05:16.000000000","message":"Thanks","commit_id":"4f7eac3b23bf05e6c117cf407d7f993fe1836d19"},{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"6fb44225978280e5e6af17ab138fc556a09f36fb","unresolved":false,"context_lines":[{"line_number":83,"context_line":"    |           object_class_action_versions, object_action and"},{"line_number":84,"context_line":"    |           object_backport_versions"},{"line_number":85,"context_line":"    |    1.32 - Added do_node_clean"},{"line_number":86,"context_line":"    |    1.33 - Added get_active_driver_dict"},{"line_number":87,"context_line":"    \"\"\""},{"line_number":88,"context_line":""},{"line_number":89,"context_line":"    # NOTE(rloo): This must be in sync with manager.ConductorManager\u0027s."}],"source_content_type":"text/x-python","patch_set":8,"id":"7a5de9d1_9e007cac","line":86,"updated":"2016-01-27 17:08:24.000000000","message":"the method name is incorrect","commit_id":"85974d09f34e9b0fbdbc1ddbb451f780215b09ee"},{"author":{"_account_id":13362,"name":"Tan Lin","email":"lin.tan@intel.com","username":"zero"},"change_message_id":"a793663395e0f331474bd0512cc7d33b55e336a9","unresolved":false,"context_lines":[{"line_number":83,"context_line":"    |           object_class_action_versions, object_action and"},{"line_number":84,"context_line":"    |           object_backport_versions"},{"line_number":85,"context_line":"    |    1.32 - Added do_node_clean"},{"line_number":86,"context_line":"    |    1.33 - Added get_active_driver_dict"},{"line_number":87,"context_line":"    \"\"\""},{"line_number":88,"context_line":""},{"line_number":89,"context_line":"    # NOTE(rloo): This must be in sync with manager.ConductorManager\u0027s."}],"source_content_type":"text/x-python","patch_set":8,"id":"7a5de9d1_9b62b8d7","line":86,"in_reply_to":"7a5de9d1_9e007cac","updated":"2016-01-28 02:35:12.000000000","message":"I miss this thanks.","commit_id":"85974d09f34e9b0fbdbc1ddbb451f780215b09ee"},{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"6fb44225978280e5e6af17ab138fc556a09f36fb","unresolved":false,"context_lines":[{"line_number":439,"context_line":"        cctxt \u003d self.client.prepare(topic\u003dtopic or self.topic, version\u003d\u00271.13\u0027)"},{"line_number":440,"context_line":"        return cctxt.call(context, \u0027update_port\u0027, port_obj\u003dport_obj)"},{"line_number":441,"context_line":""},{"line_number":442,"context_line":"    def get_active_driver(self, context):"},{"line_number":443,"context_line":"        \"\"\"Get a dictionary of active drivers with corresponding conductors."},{"line_number":444,"context_line":""},{"line_number":445,"context_line":"        :param context: request context."}],"source_content_type":"text/x-python","patch_set":8,"id":"7a5de9d1_be969892","line":442,"updated":"2016-01-27 17:08:24.000000000","message":"get_active_drivers() -- otherwise it looks like it is returning at most one driver.","commit_id":"85974d09f34e9b0fbdbc1ddbb451f780215b09ee"},{"author":{"_account_id":13362,"name":"Tan Lin","email":"lin.tan@intel.com","username":"zero"},"change_message_id":"a793663395e0f331474bd0512cc7d33b55e336a9","unresolved":false,"context_lines":[{"line_number":439,"context_line":"        cctxt \u003d self.client.prepare(topic\u003dtopic or self.topic, version\u003d\u00271.13\u0027)"},{"line_number":440,"context_line":"        return cctxt.call(context, \u0027update_port\u0027, port_obj\u003dport_obj)"},{"line_number":441,"context_line":""},{"line_number":442,"context_line":"    def get_active_driver(self, context):"},{"line_number":443,"context_line":"        \"\"\"Get a dictionary of active drivers with corresponding conductors."},{"line_number":444,"context_line":""},{"line_number":445,"context_line":"        :param context: request context."}],"source_content_type":"text/x-python","patch_set":8,"id":"7a5de9d1_a0589f57","line":442,"in_reply_to":"7a5de9d1_be969892","updated":"2016-01-28 02:35:12.000000000","message":"Done","commit_id":"85974d09f34e9b0fbdbc1ddbb451f780215b09ee"},{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"6fb44225978280e5e6af17ab138fc556a09f36fb","unresolved":false,"context_lines":[{"line_number":446,"context_line":"        :returns: a dictionary with \u003cdriver name\u003e:[host1, host2]"},{"line_number":447,"context_line":""},{"line_number":448,"context_line":"        \"\"\""},{"line_number":449,"context_line":"        cctxt \u003d self.client.prepare(topic\u003dself.topic, version\u003d\u00271.33\u0027, retry\u003d0)"},{"line_number":450,"context_line":"        try:"},{"line_number":451,"context_line":"            drivers \u003d cctxt.call(context, \u0027get_active_driver\u0027)"},{"line_number":452,"context_line":"        except messaging.MessagingTimeout as e:"}],"source_content_type":"text/x-python","patch_set":8,"id":"7a5de9d1_d11d8510","line":449,"updated":"2016-01-27 17:08:24.000000000","message":"I think it is worth putting a NOTE here about why we\u0027re doing retry\u003d0.","commit_id":"85974d09f34e9b0fbdbc1ddbb451f780215b09ee"},{"author":{"_account_id":13362,"name":"Tan Lin","email":"lin.tan@intel.com","username":"zero"},"change_message_id":"a793663395e0f331474bd0512cc7d33b55e336a9","unresolved":false,"context_lines":[{"line_number":446,"context_line":"        :returns: a dictionary with \u003cdriver name\u003e:[host1, host2]"},{"line_number":447,"context_line":""},{"line_number":448,"context_line":"        \"\"\""},{"line_number":449,"context_line":"        cctxt \u003d self.client.prepare(topic\u003dself.topic, version\u003d\u00271.33\u0027, retry\u003d0)"},{"line_number":450,"context_line":"        try:"},{"line_number":451,"context_line":"            drivers \u003d cctxt.call(context, \u0027get_active_driver\u0027)"},{"line_number":452,"context_line":"        except messaging.MessagingTimeout as e:"}],"source_content_type":"text/x-python","patch_set":8,"id":"7a5de9d1_9bb95831","line":449,"in_reply_to":"7a5de9d1_d11d8510","updated":"2016-01-28 02:35:12.000000000","message":"Done","commit_id":"85974d09f34e9b0fbdbc1ddbb451f780215b09ee"},{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"6fb44225978280e5e6af17ab138fc556a09f36fb","unresolved":false,"context_lines":[{"line_number":450,"context_line":"        try:"},{"line_number":451,"context_line":"            drivers \u003d cctxt.call(context, \u0027get_active_driver\u0027)"},{"line_number":452,"context_line":"        except messaging.MessagingTimeout as e:"},{"line_number":453,"context_line":"            LOG.error(_LE(\u0027RPC get_active_driver_dict failed to retrieve a \u0027"},{"line_number":454,"context_line":"                          \u0027live conductor. Error: %(msg)s\u0027), {\u0027msg\u0027: e})"},{"line_number":455,"context_line":"            drivers \u003d {}"},{"line_number":456,"context_line":"        return drivers"}],"source_content_type":"text/x-python","patch_set":8,"id":"7a5de9d1_11255daa","line":453,"updated":"2016-01-27 17:08:24.000000000","message":"method name incorrect in the string\n\nIn the conductor/manager, we log strings like \u0027RPC \u003cmethod name\u003e\u0027. I suppose we can assume the reader can distinguish whether the logging is from this file or the conductor.","commit_id":"85974d09f34e9b0fbdbc1ddbb451f780215b09ee"},{"author":{"_account_id":13362,"name":"Tan Lin","email":"lin.tan@intel.com","username":"zero"},"change_message_id":"a793663395e0f331474bd0512cc7d33b55e336a9","unresolved":false,"context_lines":[{"line_number":450,"context_line":"        try:"},{"line_number":451,"context_line":"            drivers \u003d cctxt.call(context, \u0027get_active_driver\u0027)"},{"line_number":452,"context_line":"        except messaging.MessagingTimeout as e:"},{"line_number":453,"context_line":"            LOG.error(_LE(\u0027RPC get_active_driver_dict failed to retrieve a \u0027"},{"line_number":454,"context_line":"                          \u0027live conductor. Error: %(msg)s\u0027), {\u0027msg\u0027: e})"},{"line_number":455,"context_line":"            drivers \u003d {}"},{"line_number":456,"context_line":"        return drivers"}],"source_content_type":"text/x-python","patch_set":8,"id":"7a5de9d1_000ad326","line":453,"in_reply_to":"7a5de9d1_11255daa","updated":"2016-01-28 02:35:12.000000000","message":"Yes, because this will be logged into ironic-api logging. Although rpcapi.py is under conductor folder but it is running within ironic-api.","commit_id":"85974d09f34e9b0fbdbc1ddbb451f780215b09ee"}],"ironic/tests/unit/conductor/test_rpcapi.py":[{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"47641e79863f47cca16faaba32bea30bce5fa3ff","unresolved":false,"context_lines":[{"line_number":268,"context_line":"    def test_get_active_drivers_failed(self, mock_call, mock_prepare,"},{"line_number":269,"context_line":"                                       mock_send):"},{"line_number":270,"context_line":"        rpcapi \u003d conductor_rpcapi.ConductorAPI(topic\u003d\u0027fake-topic\u0027)"},{"line_number":271,"context_line":"        mock_send.retrun_value \u003d True"},{"line_number":272,"context_line":"        mock_prepare.return_value \u003d rpcapi.client"},{"line_number":273,"context_line":"        mock_call.side_effect \u003d messaging.MessagingTimeout(\u0027x\u0027)"},{"line_number":274,"context_line":"        drivers \u003d rpcapi.get_active_drivers(self.context)"}],"source_content_type":"text/x-python","patch_set":10,"id":"7a5de9d1_438655ba","line":271,"updated":"2016-01-29 02:22:39.000000000","message":"s/retrun/return/","commit_id":"479fb3abb675860bcb872c7d0dd4ea8e78e5f79f"},{"author":{"_account_id":13362,"name":"Tan Lin","email":"lin.tan@intel.com","username":"zero"},"change_message_id":"18d54e6f3b682bc9ddfad587f347077185f85e37","unresolved":false,"context_lines":[{"line_number":268,"context_line":"    def test_get_active_drivers_failed(self, mock_call, mock_prepare,"},{"line_number":269,"context_line":"                                       mock_send):"},{"line_number":270,"context_line":"        rpcapi \u003d conductor_rpcapi.ConductorAPI(topic\u003d\u0027fake-topic\u0027)"},{"line_number":271,"context_line":"        mock_send.retrun_value \u003d True"},{"line_number":272,"context_line":"        mock_prepare.return_value \u003d rpcapi.client"},{"line_number":273,"context_line":"        mock_call.side_effect \u003d messaging.MessagingTimeout(\u0027x\u0027)"},{"line_number":274,"context_line":"        drivers \u003d rpcapi.get_active_drivers(self.context)"}],"source_content_type":"text/x-python","patch_set":10,"id":"7a5de9d1_5e42ae11","line":271,"in_reply_to":"7a5de9d1_438655ba","updated":"2016-01-29 02:34:11.000000000","message":"Nice catch, :)","commit_id":"479fb3abb675860bcb872c7d0dd4ea8e78e5f79f"},{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"78803e63a6c2c38137d1fcee326ba3cb6bee25d7","unresolved":false,"context_lines":[{"line_number":271,"context_line":"        drivers \u003d rpcapi.get_active_drivers(self.context)"},{"line_number":272,"context_line":"        self.assertEqual({}, drivers)"},{"line_number":273,"context_line":"        self.assertTrue(mock_prepare.called)"},{"line_number":274,"context_line":"        self.assertTrue(mock_call.called)"},{"line_number":275,"context_line":""},{"line_number":276,"context_line":"    def test_get_driver_properties(self):"},{"line_number":277,"context_line":"        self._test_rpcapi(\u0027get_driver_properties\u0027,"}],"source_content_type":"text/x-python","patch_set":11,"id":"7a5de9d1_bb482db4","line":274,"updated":"2016-02-01 14:49:52.000000000","message":"For these two asserts, we typically do something like mock_call.assert_called_once_with(parameters here).","commit_id":"9e5757bdf7650ed46071bd905ab3d4b72ee02fbb"}],"releasenotes/notes/remove-db-hook-from-api-6be7245f3eeb9999.yaml":[{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"6fb44225978280e5e6af17ab138fc556a09f36fb","unresolved":false,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"fixes:"},{"line_number":3,"context_line":"  - Remove DB Hook from ironic-api and adds a new RPC call `get_active_driver`."},{"line_number":4,"context_line":"    This is a partial work to disable ironic-api directly access to DB."}],"source_content_type":"text/x-yaml","patch_set":8,"id":"7a5de9d1_fba42209","line":4,"updated":"2016-01-27 17:08:24.000000000","message":"Instead of the last sentence, how about \u0027This is part of ongoing work to prevent ironic-api from directly accessing the database.\u0027\n\nWhich makes me wonder if we should have a reno for this. I guess better safe than sorry.","commit_id":"85974d09f34e9b0fbdbc1ddbb451f780215b09ee"},{"author":{"_account_id":13362,"name":"Tan Lin","email":"lin.tan@intel.com","username":"zero"},"change_message_id":"a793663395e0f331474bd0512cc7d33b55e336a9","unresolved":false,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"fixes:"},{"line_number":3,"context_line":"  - Remove DB Hook from ironic-api and adds a new RPC call `get_active_driver`."},{"line_number":4,"context_line":"    This is a partial work to disable ironic-api directly access to DB."}],"source_content_type":"text/x-yaml","patch_set":8,"id":"7a5de9d1_3b7384b3","line":4,"in_reply_to":"7a5de9d1_fba42209","updated":"2016-01-28 02:35:12.000000000","message":"Agree, I prefer to have a note here :)","commit_id":"85974d09f34e9b0fbdbc1ddbb451f780215b09ee"},{"author":{"_account_id":10343,"name":"Jim Rollenhagen","email":"jim@jimrollenhagen.com","username":"jimrollenhagen"},"change_message_id":"4717e83ff5da3a7a38dc835249fcfe8f58dfc2ba","unresolved":false,"context_lines":[{"line_number":2,"context_line":"fixes:"},{"line_number":3,"context_line":"  - Remove DB Hook from ironic-api and adds a new RPC call `get_active_driver`."},{"line_number":4,"context_line":"    This is part of ongoing work to prevent ironic-api from directly accessing"},{"line_number":5,"context_line":"    the database."}],"source_content_type":"text/x-yaml","patch_set":11,"id":"7a5de9d1_a1579a24","line":5,"updated":"2016-02-01 15:22:56.000000000","message":"So, this feels like a feature, rather than a fix. I\u0027d also like a big warning in an upgrade session about the fact that API requests to /v1/drivers will take \u003crpc_timeout\u003e seconds to return if there are no conductors up, and deployers might want to consider tuning that.","commit_id":"9e5757bdf7650ed46071bd905ab3d4b72ee02fbb"}]}
