)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":2889,"name":"Aeva Black","email":"aeva.online@gmail.com","username":"tenbrae"},"change_message_id":"92087a2bb7c3f2819a83681e722cbc1684b94b06","unresolved":false,"context_lines":[{"line_number":10,"context_line":"wraps it in a sane API with well defined semantics around which we can"},{"line_number":11,"context_line":"make a commitment to retain compatibility in future."},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"The patch is large and hard to be splitted into different patches,"},{"line_number":14,"context_line":"but the changes can be summarized as:"},{"line_number":15,"context_line":""},{"line_number":16,"context_line":"*Remove openstack/common/{rpc, notifier, log_handler} modules dependency"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":4,"id":"AAAAXH%2F%2FnTY%3D","line":13,"updated":"2014-04-18 20:04:08.000000000","message":"s/splitted/split/","commit_id":"856283d0cc516f5b978069f8828e94ada51c07fa"},{"author":{"_account_id":6773,"name":"Lucas Alvares Gomes","email":"lucasagomes@gmail.com","username":"lucasagomes"},"change_message_id":"116885aa4f61317500d6a58d6885560e8a3b54ca","unresolved":false,"context_lines":[{"line_number":10,"context_line":"wraps it in a sane API with well defined semantics around which we can"},{"line_number":11,"context_line":"make a commitment to retain compatibility in future."},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"The patch is large and hard to be splitted into different patches,"},{"line_number":14,"context_line":"but the changes can be summarized as:"},{"line_number":15,"context_line":""},{"line_number":16,"context_line":"*Remove openstack/common/{rpc, notifier, log_handler} modules dependency"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":4,"id":"AAAAXH%2F%2FWjE%3D","line":13,"in_reply_to":"AAAAXH%2F%2FnTY%3D","updated":"2014-04-22 14:41:35.000000000","message":"done. I always thought that past participle of split was splitted heh, thanks for that!","commit_id":"856283d0cc516f5b978069f8828e94ada51c07fa"},{"author":{"_account_id":2889,"name":"Aeva Black","email":"aeva.online@gmail.com","username":"tenbrae"},"change_message_id":"92087a2bb7c3f2819a83681e722cbc1684b94b06","unresolved":false,"context_lines":[{"line_number":13,"context_line":"The patch is large and hard to be splitted into different patches,"},{"line_number":14,"context_line":"but the changes can be summarized as:"},{"line_number":15,"context_line":""},{"line_number":16,"context_line":"*Remove openstack/common/{rpc, notifier, log_handler} modules dependency"},{"line_number":17,"context_line":"(superceded by oslo.messaging)"},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"* New config option `conductor.workers_pool_size` add to determine the"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":4,"id":"AAAAXH%2F%2FnTU%3D","line":16,"updated":"2014-04-18 20:04:08.000000000","message":"missing space after \"*\"","commit_id":"856283d0cc516f5b978069f8828e94ada51c07fa"},{"author":{"_account_id":6773,"name":"Lucas Alvares Gomes","email":"lucasagomes@gmail.com","username":"lucasagomes"},"change_message_id":"116885aa4f61317500d6a58d6885560e8a3b54ca","unresolved":false,"context_lines":[{"line_number":13,"context_line":"The patch is large and hard to be splitted into different patches,"},{"line_number":14,"context_line":"but the changes can be summarized as:"},{"line_number":15,"context_line":""},{"line_number":16,"context_line":"*Remove openstack/common/{rpc, notifier, log_handler} modules dependency"},{"line_number":17,"context_line":"(superceded by oslo.messaging)"},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"* New config option `conductor.workers_pool_size` add to determine the"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":4,"id":"AAAAXH%2F%2FWjA%3D","line":16,"in_reply_to":"AAAAXH%2F%2FnTU%3D","updated":"2014-04-22 14:41:35.000000000","message":"done","commit_id":"856283d0cc516f5b978069f8828e94ada51c07fa"},{"author":{"_account_id":2889,"name":"Aeva Black","email":"aeva.online@gmail.com","username":"tenbrae"},"change_message_id":"92087a2bb7c3f2819a83681e722cbc1684b94b06","unresolved":false,"context_lines":[{"line_number":19,"context_line":"* New config option `conductor.workers_pool_size` add to determine the"},{"line_number":20,"context_line":"size of the workers greenthread pool."},{"line_number":21,"context_line":""},{"line_number":22,"context_line":"* PeriodicService class splitted in two classes different classes: Manager"},{"line_number":23,"context_line":"and Service for clarity and help with the tests (where a RPCServer won\u0027t"},{"line_number":24,"context_line":"be started), Manager as a base class for Managers (e.g ConductorManager)"},{"line_number":25,"context_line":"and Service as a base class for services running on the host and also"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":4,"id":"AAAAXH%2F%2FnTE%3D","line":22,"updated":"2014-04-18 20:04:08.000000000","message":"s/splitted/split/\n\ns/two classes different classes/two different classes/","commit_id":"856283d0cc516f5b978069f8828e94ada51c07fa"},{"author":{"_account_id":6773,"name":"Lucas Alvares Gomes","email":"lucasagomes@gmail.com","username":"lucasagomes"},"change_message_id":"116885aa4f61317500d6a58d6885560e8a3b54ca","unresolved":false,"context_lines":[{"line_number":19,"context_line":"* New config option `conductor.workers_pool_size` add to determine the"},{"line_number":20,"context_line":"size of the workers greenthread pool."},{"line_number":21,"context_line":""},{"line_number":22,"context_line":"* PeriodicService class splitted in two classes different classes: Manager"},{"line_number":23,"context_line":"and Service for clarity and help with the tests (where a RPCServer won\u0027t"},{"line_number":24,"context_line":"be started), Manager as a base class for Managers (e.g ConductorManager)"},{"line_number":25,"context_line":"and Service as a base class for services running on the host and also"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":4,"id":"AAAAXH%2F%2FWi8%3D","line":22,"in_reply_to":"AAAAXH%2F%2FnTE%3D","updated":"2014-04-22 14:41:35.000000000","message":"done","commit_id":"856283d0cc516f5b978069f8828e94ada51c07fa"}],"ironic/cmd/conductor.py":[{"author":{"_account_id":2889,"name":"Aeva Black","email":"aeva.online@gmail.com","username":"tenbrae"},"change_message_id":"92087a2bb7c3f2819a83681e722cbc1684b94b06","unresolved":false,"context_lines":[{"line_number":34,"context_line":"    # Pase config file and command line options, then start logging"},{"line_number":35,"context_line":"    ironic_service.prepare_service(sys.argv)"},{"line_number":36,"context_line":""},{"line_number":37,"context_line":"    mgr \u003d ironic_service.Service(CONF.host,"},{"line_number":38,"context_line":"                                 \u0027ironic.conductor.manager\u0027,"},{"line_number":39,"context_line":"                                 \u0027ConductorManager\u0027)"},{"line_number":40,"context_line":"    launcher \u003d service.launch(mgr)"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAXH%2F%2FnP4%3D","line":37,"updated":"2014-04-18 20:04:08.000000000","message":"could this be reused for ironic/cmd/api.py?","commit_id":"856283d0cc516f5b978069f8828e94ada51c07fa"},{"author":{"_account_id":6773,"name":"Lucas Alvares Gomes","email":"lucasagomes@gmail.com","username":"lucasagomes"},"change_message_id":"116885aa4f61317500d6a58d6885560e8a3b54ca","unresolved":false,"context_lines":[{"line_number":34,"context_line":"    # Pase config file and command line options, then start logging"},{"line_number":35,"context_line":"    ironic_service.prepare_service(sys.argv)"},{"line_number":36,"context_line":""},{"line_number":37,"context_line":"    mgr \u003d ironic_service.Service(CONF.host,"},{"line_number":38,"context_line":"                                 \u0027ironic.conductor.manager\u0027,"},{"line_number":39,"context_line":"                                 \u0027ConductorManager\u0027)"},{"line_number":40,"context_line":"    launcher \u003d service.launch(mgr)"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAXH%2F%2FWfs%3D","line":37,"in_reply_to":"AAAAXH%2F%2FnP4%3D","updated":"2014-04-22 14:41:35.000000000","message":"Maybe a better name for that class would be RPCService, which it really was and is not (before it inherited from openstack.common.rpc.service).\n\nSo, we could make it more generic and use it on both, conductor and api but due that this patch is already overwhelmed I think it\u0027s better to be done in two steps... 1st this patch which removes the openstack.common.rpc.service dependency of it, and then we can have another patch making Service more generic to be used in both conductor and api. I have to investigate and map what would be common code on both services because one is suppose to start a RPC server and the other a WSGI server.","commit_id":"856283d0cc516f5b978069f8828e94ada51c07fa"}],"ironic/common/manager.py":[{"author":{"_account_id":2889,"name":"Aeva Black","email":"aeva.online@gmail.com","username":"tenbrae"},"change_message_id":"92087a2bb7c3f2819a83681e722cbc1684b94b06","unresolved":false,"context_lines":[{"line_number":21,"context_line":"CONF \u003d cfg.CONF"},{"line_number":22,"context_line":""},{"line_number":23,"context_line":""},{"line_number":24,"context_line":"class Manager(periodic_task.PeriodicTasks):"},{"line_number":25,"context_line":""},{"line_number":26,"context_line":"    RPC_API_VERSION \u003d \u00271.0\u0027"},{"line_number":27,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAXH%2F%2FnYk%3D","line":24,"updated":"2014-04-18 20:04:08.000000000","message":"adding a base class for Manager is premature optimization when there are no other implementations of it, besides ironic.conductor.manager, and none planned for Juno.","commit_id":"856283d0cc516f5b978069f8828e94ada51c07fa"},{"author":{"_account_id":6773,"name":"Lucas Alvares Gomes","email":"lucasagomes@gmail.com","username":"lucasagomes"},"change_message_id":"116885aa4f61317500d6a58d6885560e8a3b54ca","unresolved":false,"context_lines":[{"line_number":21,"context_line":"CONF \u003d cfg.CONF"},{"line_number":22,"context_line":""},{"line_number":23,"context_line":""},{"line_number":24,"context_line":"class Manager(periodic_task.PeriodicTasks):"},{"line_number":25,"context_line":""},{"line_number":26,"context_line":"    RPC_API_VERSION \u003d \u00271.0\u0027"},{"line_number":27,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAXH%2F%2FWfQ%3D","line":24,"in_reply_to":"AAAAXH%2F%2FnYk%3D","updated":"2014-04-22 14:41:35.000000000","message":"+1 I will remove it and just add this logic to the ConductorManager class directly","commit_id":"856283d0cc516f5b978069f8828e94ada51c07fa"}],"ironic/common/rpc.py":[{"author":{"_account_id":2889,"name":"Aeva Black","email":"aeva.online@gmail.com","username":"tenbrae"},"change_message_id":"92087a2bb7c3f2819a83681e722cbc1684b94b06","unresolved":false,"context_lines":[{"line_number":44,"context_line":""},{"line_number":45,"context_line":"# NOTE(lucasagomes): The ironic.openstack.common.rpc entries are for"},{"line_number":46,"context_line":"# backwards compat with Havana rpc_backend configuration values. The"},{"line_number":47,"context_line":"# ironic.common.rpc entries are for compat with Essex values."},{"line_number":48,"context_line":"TRANSPORT_ALIASES \u003d {"},{"line_number":49,"context_line":"    \u0027ironic.openstack.common.rpc.impl_kombu\u0027: \u0027rabbit\u0027,"},{"line_number":50,"context_line":"    \u0027ironic.openstack.common.rpc.impl_qpid\u0027: \u0027qpid\u0027,"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAXH%2F%2FnWo%3D","line":47,"updated":"2014-04-18 20:04:08.000000000","message":"doc string \"ironic.common.rpc entries\" does not match the strings on L52-55 \"ironic.rpc.*\"\n\nalso, ironic was not present in essex. is there a need for backwards compat there?","commit_id":"856283d0cc516f5b978069f8828e94ada51c07fa"},{"author":{"_account_id":6773,"name":"Lucas Alvares Gomes","email":"lucasagomes@gmail.com","username":"lucasagomes"},"change_message_id":"db96c36844084cee7b7f7643fbd8ad9e186fa810","unresolved":false,"context_lines":[{"line_number":44,"context_line":""},{"line_number":45,"context_line":"# NOTE(lucasagomes): The ironic.openstack.common.rpc entries are for"},{"line_number":46,"context_line":"# backwards compat with Havana rpc_backend configuration values. The"},{"line_number":47,"context_line":"# ironic.common.rpc entries are for compat with Essex values."},{"line_number":48,"context_line":"TRANSPORT_ALIASES \u003d {"},{"line_number":49,"context_line":"    \u0027ironic.openstack.common.rpc.impl_kombu\u0027: \u0027rabbit\u0027,"},{"line_number":50,"context_line":"    \u0027ironic.openstack.common.rpc.impl_qpid\u0027: \u0027qpid\u0027,"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAXH%2F%2FTls%3D","line":47,"in_reply_to":"AAAAXH%2F%2FTzQ%3D","updated":"2014-04-22 16:05:01.000000000","message":"I mean, IceHouse","commit_id":"856283d0cc516f5b978069f8828e94ada51c07fa"},{"author":{"_account_id":6773,"name":"Lucas Alvares Gomes","email":"lucasagomes@gmail.com","username":"lucasagomes"},"change_message_id":"23a72091910bac6d0d12c96649f849c09523e36b","unresolved":false,"context_lines":[{"line_number":44,"context_line":""},{"line_number":45,"context_line":"# NOTE(lucasagomes): The ironic.openstack.common.rpc entries are for"},{"line_number":46,"context_line":"# backwards compat with Havana rpc_backend configuration values. The"},{"line_number":47,"context_line":"# ironic.common.rpc entries are for compat with Essex values."},{"line_number":48,"context_line":"TRANSPORT_ALIASES \u003d {"},{"line_number":49,"context_line":"    \u0027ironic.openstack.common.rpc.impl_kombu\u0027: \u0027rabbit\u0027,"},{"line_number":50,"context_line":"    \u0027ironic.openstack.common.rpc.impl_qpid\u0027: \u0027qpid\u0027,"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAXH%2F%2FTzQ%3D","line":47,"in_reply_to":"AAAAXH%2F%2FUYQ%3D","updated":"2014-04-22 15:45:01.000000000","message":"Right we need this aliases for now: \n\n1 - For backwards compatibility with the rpc_backend option in Havana.\n2 - The default option for that configuration in devstack uses the old style[1] and removing the aliases would cause it to crash, we would need some work on devstack to change that map that DEFAULT value if we want to get rid of the aliases:\n\n++ /usr/bin/ironic-dbsync\nTraceback (most recent call last):\n  File \"/usr/bin/ironic-dbsync\", line 10, in \u003cmodule\u003e\n    sys.exit(main())\n  File \"/opt/stack/ironic/ironic/cmd/dbsync.py\", line 93, in main\n    service.prepare_service(sys.argv)\n  File \"/opt/stack/ironic/ironic/common/service.py\", line 94, in prepare_service\n    config.parse_args(argv)\n  File \"/opt/stack/ironic/ironic/common/config.py\", line 30, in parse_args\n    rpc.init(cfg.CONF)\n  File \"/opt/stack/ironic/ironic/common/rpc.py\", line 49, in init\n    allowed_remote_exmods\u003dexmods)\n  File \"/usr/lib/python2.7/site-packages/oslo/messaging/transport.py\", line 185, in get_transport\n    raise DriverLoadFailure(url.transport, ex)\noslo.messaging.transport.DriverLoadFailure: Failed to load transport driver \n\"ironic.openstack.common.rpc.impl_kombu\": No \u0027oslo.messaging.drivers\u0027 driver found, \nlooking for \u0027ironic.openstack.common.rpc.impl_kombu\u0027\n\n\n[1] https://github.com/openstack-dev/devstack/blob/master/lib/ironic#L162","commit_id":"856283d0cc516f5b978069f8828e94ada51c07fa"},{"author":{"_account_id":6773,"name":"Lucas Alvares Gomes","email":"lucasagomes@gmail.com","username":"lucasagomes"},"change_message_id":"116885aa4f61317500d6a58d6885560e8a3b54ca","unresolved":false,"context_lines":[{"line_number":44,"context_line":""},{"line_number":45,"context_line":"# NOTE(lucasagomes): The ironic.openstack.common.rpc entries are for"},{"line_number":46,"context_line":"# backwards compat with Havana rpc_backend configuration values. The"},{"line_number":47,"context_line":"# ironic.common.rpc entries are for compat with Essex values."},{"line_number":48,"context_line":"TRANSPORT_ALIASES \u003d {"},{"line_number":49,"context_line":"    \u0027ironic.openstack.common.rpc.impl_kombu\u0027: \u0027rabbit\u0027,"},{"line_number":50,"context_line":"    \u0027ironic.openstack.common.rpc.impl_qpid\u0027: \u0027qpid\u0027,"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAXH%2F%2FUYQ%3D","line":47,"in_reply_to":"AAAAXH%2F%2FnWo%3D","updated":"2014-04-22 14:41:35.000000000","message":"Ack, I will take a look at it, it might make no sense yeah. This class was basically copied from the nova/rpc.py and adapted to ironic","commit_id":"856283d0cc516f5b978069f8828e94ada51c07fa"}],"ironic/common/service.py":[{"author":{"_account_id":2889,"name":"Aeva Black","email":"aeva.online@gmail.com","username":"tenbrae"},"change_message_id":"92087a2bb7c3f2819a83681e722cbc1684b94b06","unresolved":false,"context_lines":[{"line_number":81,"context_line":"            self.manager.del_host()"},{"line_number":82,"context_line":"            self.rpcserver.stop()"},{"line_number":83,"context_line":"        except Exception:"},{"line_number":84,"context_line":"            pass"},{"line_number":85,"context_line":""},{"line_number":86,"context_line":""},{"line_number":87,"context_line":"def prepare_service(argv\u003d[]):"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAXH%2F%2FnQ0%3D","line":84,"updated":"2014-04-18 20:04:08.000000000","message":"i think this should be split into two try blocks, so that, if self.manager.del_host() raises an exception, self.rpcserver.stop() is still called.\n\nAlso, shouldn\u0027t this at least LOG the error?","commit_id":"856283d0cc516f5b978069f8828e94ada51c07fa"},{"author":{"_account_id":6773,"name":"Lucas Alvares Gomes","email":"lucasagomes@gmail.com","username":"lucasagomes"},"change_message_id":"116885aa4f61317500d6a58d6885560e8a3b54ca","unresolved":false,"context_lines":[{"line_number":81,"context_line":"            self.manager.del_host()"},{"line_number":82,"context_line":"            self.rpcserver.stop()"},{"line_number":83,"context_line":"        except Exception:"},{"line_number":84,"context_line":"            pass"},{"line_number":85,"context_line":""},{"line_number":86,"context_line":""},{"line_number":87,"context_line":"def prepare_service(argv\u003d[]):"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAXH%2F%2FWec%3D","line":84,"in_reply_to":"AAAAXH%2F%2FnQ0%3D","updated":"2014-04-22 14:41:35.000000000","message":"+1 will do","commit_id":"856283d0cc516f5b978069f8828e94ada51c07fa"}],"ironic/conductor/rpcapi.py":[{"author":{"_account_id":2889,"name":"Aeva Black","email":"aeva.online@gmail.com","username":"tenbrae"},"change_message_id":"92087a2bb7c3f2819a83681e722cbc1684b94b06","unresolved":false,"context_lines":[{"line_number":104,"context_line":""},{"line_number":105,"context_line":"        \"\"\""},{"line_number":106,"context_line":"        cctxt \u003d self.client.prepare(topic\u003dtopic or self.topic)"},{"line_number":107,"context_line":"        return cctxt.call(context, \u0027update_node\u0027, node_obj\u003dnode_obj)"},{"line_number":108,"context_line":""},{"line_number":109,"context_line":"    def change_node_power_state(self, context, node_id, new_state, topic\u003dNone):"},{"line_number":110,"context_line":"        \"\"\"Synchronously, acquire lock and start the conductor background task"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAXH%2F%2FnPE%3D","line":107,"updated":"2014-04-18 20:04:08.000000000","message":"I know that I don\u0027t know all the in\u0027s and out\u0027s of eventlet... so when I see this, I see a potential issue.\n\nIf an instance of ConductorAPI is shared across greenthreads, and eventlet were to switch greenthreads between these lines, it could lead to the client property being changed, and a message sent to the wrong conductor.\n\nI don\u0027t know if eventlet can change greenthreads here, and I don\u0027t believe that ConductorAPI instance are shared today -- I think the API service creates a new one for every HTTP request, but we\u0027re planning on changing that -- so I would at least like someone who knows eventlet well to look at this and confirm that it\u0027s safe.","commit_id":"856283d0cc516f5b978069f8828e94ada51c07fa"},{"author":{"_account_id":6773,"name":"Lucas Alvares Gomes","email":"lucasagomes@gmail.com","username":"lucasagomes"},"change_message_id":"116885aa4f61317500d6a58d6885560e8a3b54ca","unresolved":false,"context_lines":[{"line_number":104,"context_line":""},{"line_number":105,"context_line":"        \"\"\""},{"line_number":106,"context_line":"        cctxt \u003d self.client.prepare(topic\u003dtopic or self.topic)"},{"line_number":107,"context_line":"        return cctxt.call(context, \u0027update_node\u0027, node_obj\u003dnode_obj)"},{"line_number":108,"context_line":""},{"line_number":109,"context_line":"    def change_node_power_state(self, context, node_id, new_state, topic\u003dNone):"},{"line_number":110,"context_line":"        \"\"\"Synchronously, acquire lock and start the conductor background task"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAXH%2F%2FWjQ%3D","line":107,"in_reply_to":"AAAAXH%2F%2FnPE%3D","updated":"2014-04-22 14:41:35.000000000","message":"Talked to markmc about it, and as he pointed out that\u0027s the reason why prepare() returns a new context object, so it doesn\u0027t affect the client.","commit_id":"856283d0cc516f5b978069f8828e94ada51c07fa"}]}
