)]}'
{"cinder/cmd/volume.py":[{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"4314ffe3c93bed70eeb181f5ba50ae4abc43d7fc","unresolved":false,"context_lines":[{"line_number":74,"context_line":"            # Dispose of the whole DB connection pool here before"},{"line_number":75,"context_line":"            # starting another process.  Otherwise we run into cases where"},{"line_number":76,"context_line":"            # child processes share DB connections which results in errors."},{"line_number":77,"context_line":"            session.dispose_engine()"},{"line_number":78,"context_line":"            launcher.launch_service(server)"},{"line_number":79,"context_line":"    else:"},{"line_number":80,"context_line":"        server \u003d service.Service.create(binary\u003d\u0027cinder-volume\u0027)"}],"source_content_type":"text/x-python","patch_set":1,"id":"3afb71cf_13d4c8ba","line":77,"updated":"2015-06-10 02:42:10.000000000","message":"If using sqlite in memory this could result in the database going away. See what was done here for reference:\n\nhttps://github.com/openstack/cinder/blob/daa751a62e46befed0982c6ce16b26f080040c38/cinder/db/api.py#L72","commit_id":"bb683d6ce4f8e8ad6f1ba657eac5c7f92c9ea82f"},{"author":{"_account_id":7198,"name":"Jay Bryant","email":"jungleboyj@electronicjungle.net","username":"jsbryant"},"change_message_id":"e096b6ae9b9d44dd9564e6322d91e815c030255b","unresolved":false,"context_lines":[{"line_number":74,"context_line":"            # Dispose of the whole DB connection pool here before"},{"line_number":75,"context_line":"            # starting another process.  Otherwise we run into cases where"},{"line_number":76,"context_line":"            # child processes share DB connections which results in errors."},{"line_number":77,"context_line":"            session.dispose_engine()"},{"line_number":78,"context_line":"            launcher.launch_service(server)"},{"line_number":79,"context_line":"    else:"},{"line_number":80,"context_line":"        server \u003d service.Service.create(binary\u003d\u0027cinder-volume\u0027)"}],"source_content_type":"text/x-python","patch_set":1,"id":"1af86dd1_7d7c9720","line":77,"in_reply_to":"1af86dd1_a6afa87c","updated":"2015-06-12 00:45:11.000000000","message":"Correct, Neutron\u0027s service code is different as we discussed.\n\nI had tried to put the code in a place that would cover both Cinder Volume and Cinder API, but they do not use the same portions of the Service code.  Cinder API does the following:\n\n    launcher \u003d service.process_launcher()\n    server \u003d service.WSGIService(\u0027osapi_volume\u0027)\n    launcher.launch_service(server, workers\u003dserver.workers)\n\nSo there wasn\u0027t a common location in \u0027service\u0027 to put the the dispose_engine.  Also, the way that the launcher is launching services is not encountering the same problem.  So, the problem is specific to the way we are looping through the backends and firing off the additional processes.  Also, I knew that this was something that needed to be backported so I felt this was the safest place to make the change with the least potential impact.  So putting the dispose here was a conscious decision to deal with the timing issues that can arise in the loop.","commit_id":"bb683d6ce4f8e8ad6f1ba657eac5c7f92c9ea82f"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"a6b6730feca366142d7f63886e8ae61d44b8f4f9","unresolved":false,"context_lines":[{"line_number":74,"context_line":"            # Dispose of the whole DB connection pool here before"},{"line_number":75,"context_line":"            # starting another process.  Otherwise we run into cases where"},{"line_number":76,"context_line":"            # child processes share DB connections which results in errors."},{"line_number":77,"context_line":"            session.dispose_engine()"},{"line_number":78,"context_line":"            launcher.launch_service(server)"},{"line_number":79,"context_line":"    else:"},{"line_number":80,"context_line":"        server \u003d service.Service.create(binary\u003d\u0027cinder-volume\u0027)"}],"source_content_type":"text/x-python","patch_set":1,"id":"1af86dd1_a6afa87c","line":77,"in_reply_to":"1af86dd1_c603c40c","updated":"2015-06-11 21:54:18.000000000","message":"I see that cinder doesn\u0027t have the same service code that neutron has, and the way the api service is launched with multiple workers using the osapi_volume_workers option is different from how the volume service is created (launch one service per backend), so it\u0027s not really the same.  Since Jay was the one actually investigating and testing this I\u0027ll defer to him.","commit_id":"bb683d6ce4f8e8ad6f1ba657eac5c7f92c9ea82f"},{"author":{"_account_id":7198,"name":"Jay Bryant","email":"jungleboyj@electronicjungle.net","username":"jsbryant"},"change_message_id":"6317a8a81b448d1bee47bedfa066a6f809837948","unresolved":false,"context_lines":[{"line_number":74,"context_line":"            # Dispose of the whole DB connection pool here before"},{"line_number":75,"context_line":"            # starting another process.  Otherwise we run into cases where"},{"line_number":76,"context_line":"            # child processes share DB connections which results in errors."},{"line_number":77,"context_line":"            session.dispose_engine()"},{"line_number":78,"context_line":"            launcher.launch_service(server)"},{"line_number":79,"context_line":"    else:"},{"line_number":80,"context_line":"        server \u003d service.Service.create(binary\u003d\u0027cinder-volume\u0027)"}],"source_content_type":"text/x-python","patch_set":1,"id":"3afb71cf_d8a4e84b","line":77,"in_reply_to":"3afb71cf_13d4c8ba","updated":"2015-06-10 18:32:18.000000000","message":"Sean, that is the code I am calling so it will check for sqlite and make sure to not run the dispose in that case.  So, I don\u0027t think that should be an issue.","commit_id":"bb683d6ce4f8e8ad6f1ba657eac5c7f92c9ea82f"},{"author":{"_account_id":2243,"name":"John Griffith","email":"john.griffith8@gmail.com","username":"john-griffith"},"change_message_id":"50239370a2c93afb7b1a65f47be86ec2e3dd634f","unresolved":false,"context_lines":[{"line_number":74,"context_line":"            # Dispose of the whole DB connection pool here before"},{"line_number":75,"context_line":"            # starting another process.  Otherwise we run into cases where"},{"line_number":76,"context_line":"            # child processes share DB connections which results in errors."},{"line_number":77,"context_line":"            session.dispose_engine()"},{"line_number":78,"context_line":"            launcher.launch_service(server)"},{"line_number":79,"context_line":"    else:"},{"line_number":80,"context_line":"        server \u003d service.Service.create(binary\u003d\u0027cinder-volume\u0027)"}],"source_content_type":"text/x-python","patch_set":1,"id":"3afb71cf_8076e703","line":77,"in_reply_to":"3afb71cf_180ba02b","updated":"2015-06-11 03:01:30.000000000","message":"Cool... I\u0027ll be curious to see how this works out.  Mostly because anything open isn\u0027t going to get cleared out of the pool; but based on what I\u0027ve read in your bug sounds like that\u0027s \"ok\"","commit_id":"bb683d6ce4f8e8ad6f1ba657eac5c7f92c9ea82f"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"06dacf0d51ef7ec2b1bbe8ec471e28b6e71bd4a8","unresolved":false,"context_lines":[{"line_number":74,"context_line":"            # Dispose of the whole DB connection pool here before"},{"line_number":75,"context_line":"            # starting another process.  Otherwise we run into cases where"},{"line_number":76,"context_line":"            # child processes share DB connections which results in errors."},{"line_number":77,"context_line":"            session.dispose_engine()"},{"line_number":78,"context_line":"            launcher.launch_service(server)"},{"line_number":79,"context_line":"    else:"},{"line_number":80,"context_line":"        server \u003d service.Service.create(binary\u003d\u0027cinder-volume\u0027)"}],"source_content_type":"text/x-python","patch_set":1,"id":"1af86dd1_c603c40c","line":77,"in_reply_to":"3afb71cf_8076e703","updated":"2015-06-11 21:37:49.000000000","message":"Why isn\u0027t this done in the service/wsgi code like in the neutron change:\n\nhttps://review.openstack.org/#/c/185898/\n\nThere are other cinder services that are hitting the database right?  Like cinder-api hits the db.api directly, doesn\u0027t this change need to also be for cinder-api?","commit_id":"bb683d6ce4f8e8ad6f1ba657eac5c7f92c9ea82f"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"77317e5e08d34f97ef11d723ddec622a8adabfc5","unresolved":false,"context_lines":[{"line_number":74,"context_line":"            # Dispose of the whole DB connection pool here before"},{"line_number":75,"context_line":"            # starting another process.  Otherwise we run into cases where"},{"line_number":76,"context_line":"            # child processes share DB connections which results in errors."},{"line_number":77,"context_line":"            session.dispose_engine()"},{"line_number":78,"context_line":"            launcher.launch_service(server)"},{"line_number":79,"context_line":"    else:"},{"line_number":80,"context_line":"        server \u003d service.Service.create(binary\u003d\u0027cinder-volume\u0027)"}],"source_content_type":"text/x-python","patch_set":1,"id":"3afb71cf_180ba02b","line":77,"in_reply_to":"3afb71cf_d8a4e84b","updated":"2015-06-10 18:35:16.000000000","message":"Ah, got it. Thanks Jay.","commit_id":"bb683d6ce4f8e8ad6f1ba657eac5c7f92c9ea82f"}]}
