)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"7d09b095a4e14e1d57c117c88e9d849b8a1d48ba","unresolved":false,"context_lines":[{"line_number":28,"context_line":""},{"line_number":29,"context_line":"Change-Id: I9c98f4369c54a7cdf9e20ea87348e61f7af10303"},{"line_number":30,"context_line":"Blueprint: get-required-driver-info"},{"line_number":31,"context_line":"Partial-Bug: #1261915"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":2,"id":"baada198_c64387ad","line":31,"updated":"2014-07-17 17:52:10.000000000","message":"Why is it partial fix btw? Won\u0027t it fix the bug completely?","commit_id":"5088fa53527002419abd264879c91504012c4835"},{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"f3ca7db4b80a06a71c362882f6fcf41941a49e8e","unresolved":false,"context_lines":[{"line_number":28,"context_line":""},{"line_number":29,"context_line":"Change-Id: I9c98f4369c54a7cdf9e20ea87348e61f7af10303"},{"line_number":30,"context_line":"Blueprint: get-required-driver-info"},{"line_number":31,"context_line":"Partial-Bug: #1261915"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":2,"id":"baada198_8dbe0aff","line":31,"in_reply_to":"baada198_c64387ad","updated":"2014-07-17 19:49:29.000000000","message":"I originally had it as closing the bug. But then there is also a CLI change in python-ironicclient. I wasn\u0027t sure if that was considered a different bug or not. Not even sure if there should be a bug if there is a blueprint, but whatever. Let me know if you think it should be \u0027Closes-Bug\u0027.","commit_id":"5088fa53527002419abd264879c91504012c4835"}],"ironic/api/controllers/v1/driver.py":[{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"7d09b095a4e14e1d57c117c88e9d849b8a1d48ba","unresolved":false,"context_lines":[{"line_number":162,"context_line":"        :raises: DriverNotFound (HTTP 404) if the driver name is invalid or"},{"line_number":163,"context_line":"                 the driver cannot be loaded."},{"line_number":164,"context_line":"        \"\"\""},{"line_number":165,"context_line":"        global _DRIVER_PROPERTIES"},{"line_number":166,"context_line":""},{"line_number":167,"context_line":"        if driver_name not in _DRIVER_PROPERTIES:"},{"line_number":168,"context_line":"            topic \u003d pecan.request.rpcapi.get_topic_for_driver(driver_name)"}],"source_content_type":"text/x-python","patch_set":2,"id":"baada198_e6788bfa","line":165,"updated":"2014-07-17 17:52:10.000000000","message":"redundant, you don\u0027t assign to _DRIVER_PROPERTIES variable here","commit_id":"5088fa53527002419abd264879c91504012c4835"},{"author":{"_account_id":7711,"name":"Yuriy Zveryanskyy","email":"yzveryanskyy@mirantis.com","username":"yuriyz"},"change_message_id":"a5741284f4eaa76af8c6cf8308fec16273ac52ad","unresolved":false,"context_lines":[{"line_number":162,"context_line":"        :raises: DriverNotFound (HTTP 404) if the driver name is invalid or"},{"line_number":163,"context_line":"                 the driver cannot be loaded."},{"line_number":164,"context_line":"        \"\"\""},{"line_number":165,"context_line":"        if driver_name not in _DRIVER_PROPERTIES:"},{"line_number":166,"context_line":"            topic \u003d pecan.request.rpcapi.get_topic_for_driver(driver_name)"},{"line_number":167,"context_line":"            properties \u003d pecan.request.rpcapi.get_driver_properties("},{"line_number":168,"context_line":"                             pecan.request.context, driver_name, topic\u003dtopic)"}],"source_content_type":"text/x-python","patch_set":3,"id":"baada198_b2ba2ddf","line":165,"updated":"2014-07-18 11:53:48.000000000","message":"Ruby, I dont like idea of caching DRIVER_PROPERTIES on API side. Lets consider the following: conductor(s) process restarted with new version of driver, API will return old  properties in this case.","commit_id":"63f41b23873926015bdb2fddcb5228de9396c63f"},{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"512184f89b23fce5da4675a7fa61699aee869837","unresolved":false,"context_lines":[{"line_number":162,"context_line":"        :raises: DriverNotFound (HTTP 404) if the driver name is invalid or"},{"line_number":163,"context_line":"                 the driver cannot be loaded."},{"line_number":164,"context_line":"        \"\"\""},{"line_number":165,"context_line":"        if driver_name not in _DRIVER_PROPERTIES:"},{"line_number":166,"context_line":"            topic \u003d pecan.request.rpcapi.get_topic_for_driver(driver_name)"},{"line_number":167,"context_line":"            properties \u003d pecan.request.rpcapi.get_driver_properties("},{"line_number":168,"context_line":"                             pecan.request.context, driver_name, topic\u003dtopic)"}],"source_content_type":"text/x-python","patch_set":3,"id":"baada198_cbd43ceb","line":165,"in_reply_to":"baada198_b2ba2ddf","updated":"2014-07-18 22:07:54.000000000","message":"Yuriy, yes, thanks for bringing this up. That is one of the problems with caching. If it isn\u0027t cached on the API side, though, then either an RPC call needs to be made for each call (which some people don\u0027t want), or we cache the info in the DB and I am not convinced that makes sense. We took this approach with the caveat that after conductors are restarted (eg after an upgrade), that the API services need to be restarted. Take a look at the blueprint spec [1] and let me know what you think.\n\n[1] https://github.com/openstack/ironic-specs/blob/master/specs/juno/get-required-driver-info.rst#how-the-api-service-gets-the-information","commit_id":"63f41b23873926015bdb2fddcb5228de9396c63f"},{"author":{"_account_id":2889,"name":"Aeva Black","email":"aeva.online@gmail.com","username":"tenbrae"},"change_message_id":"4da35ebc132fcb62f975940298faf5f499ff60e8","unresolved":false,"context_lines":[{"line_number":162,"context_line":"        :raises: DriverNotFound (HTTP 404) if the driver name is invalid or"},{"line_number":163,"context_line":"                 the driver cannot be loaded."},{"line_number":164,"context_line":"        \"\"\""},{"line_number":165,"context_line":"        if driver_name not in _DRIVER_PROPERTIES:"},{"line_number":166,"context_line":"            topic \u003d pecan.request.rpcapi.get_topic_for_driver(driver_name)"},{"line_number":167,"context_line":"            properties \u003d pecan.request.rpcapi.get_driver_properties("},{"line_number":168,"context_line":"                             pecan.request.context, driver_name, topic\u003dtopic)"}],"source_content_type":"text/x-python","patch_set":3,"id":"baada198_aaf8dfc4","line":165,"in_reply_to":"baada198_cbd43ceb","updated":"2014-07-19 20:34:53.000000000","message":"@yuriy, this was discussed at length on the spec. All solutions had pros and cons, this approach was chosen because it is the simplest, and reasonable to expect service restarts as part of any upgrade.","commit_id":"63f41b23873926015bdb2fddcb5228de9396c63f"}],"ironic/tests/api/v1/test_drivers.py":[{"author":{"_account_id":3099,"name":"David Shrewsbury","email":"dshrewsb@redhat.com","username":"dshrews"},"change_message_id":"2cf9b810fcdd6cf6f7ab89aa9a49c2cbe2fb7dfb","unresolved":false,"context_lines":[{"line_number":123,"context_line":"        mock_properties.assert_called_once_with(mock.ANY, driver_name,"},{"line_number":124,"context_line":"                                                topic\u003dmock_topic.return_value)"},{"line_number":125,"context_line":"        self.assertEqual(mock_properties.return_value,"},{"line_number":126,"context_line":"                         driver._DRIVER_PROPERTIES[\u0027fake\u0027])"},{"line_number":127,"context_line":""},{"line_number":128,"context_line":"    def test_driver_properties_cached(self, mock_topic, mock_properties):"},{"line_number":129,"context_line":"        # only one RPC-conductor call will be made and the info cached"}],"source_content_type":"text/x-python","patch_set":6,"id":"baada198_c0eba710","line":126,"updated":"2014-07-22 21:56:38.000000000","message":"Better to use driver_name here again instead of \u0027fake\u0027.","commit_id":"d4f0c4512192a8fc1badadf0f01b951cb81f79dc"},{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"3b82873f979c3956b81ceadf8e88e1257b7237d1","unresolved":false,"context_lines":[{"line_number":123,"context_line":"        mock_properties.assert_called_once_with(mock.ANY, driver_name,"},{"line_number":124,"context_line":"                                                topic\u003dmock_topic.return_value)"},{"line_number":125,"context_line":"        self.assertEqual(mock_properties.return_value,"},{"line_number":126,"context_line":"                         driver._DRIVER_PROPERTIES[\u0027fake\u0027])"},{"line_number":127,"context_line":""},{"line_number":128,"context_line":"    def test_driver_properties_cached(self, mock_topic, mock_properties):"},{"line_number":129,"context_line":"        # only one RPC-conductor call will be made and the info cached"}],"source_content_type":"text/x-python","patch_set":6,"id":"baada198_00d4bfbb","line":126,"in_reply_to":"baada198_c0eba710","updated":"2014-07-22 22:04:09.000000000","message":"Good idea ;)","commit_id":"d4f0c4512192a8fc1badadf0f01b951cb81f79dc"},{"author":{"_account_id":3099,"name":"David Shrewsbury","email":"dshrewsb@redhat.com","username":"dshrews"},"change_message_id":"2cf9b810fcdd6cf6f7ab89aa9a49c2cbe2fb7dfb","unresolved":false,"context_lines":[{"line_number":140,"context_line":"        mock_properties.assert_called_once_with(mock.ANY, driver_name,"},{"line_number":141,"context_line":"                                                topic\u003dmock_topic.return_value)"},{"line_number":142,"context_line":"        self.assertEqual(mock_properties.return_value,"},{"line_number":143,"context_line":"                         driver._DRIVER_PROPERTIES[\u0027fake\u0027])"},{"line_number":144,"context_line":""},{"line_number":145,"context_line":"    def test_driver_properties_invalid_driver_name(self, mock_topic,"},{"line_number":146,"context_line":"                                                   mock_properties):"}],"source_content_type":"text/x-python","patch_set":6,"id":"baada198_20daa379","line":143,"updated":"2014-07-22 21:56:38.000000000","message":"Ditto from above.","commit_id":"d4f0c4512192a8fc1badadf0f01b951cb81f79dc"}]}
