)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":4257,"name":"Zane Bitter","email":"zbitter@redhat.com","username":"zaneb"},"change_message_id":"47b00594ef5f23404f70ad00c3a705124ae74315","unresolved":false,"context_lines":[{"line_number":16,"context_line":"in the codebase (for example by accessing a lazy loaded property)"},{"line_number":17,"context_line":""},{"line_number":18,"context_line":"Change-Id: If92788641d84b7314ed7ad1f8cb0e141fa1a8681"},{"line_number":19,"context_line":"Closes-Bug: #1479723"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":9,"id":"9ad45d7e_8d88b872","line":19,"updated":"2016-08-11 14:09:03.000000000","message":"I have hopes (possibly unjustified) of this fixing bug 1546431 as well.","commit_id":"847604de1ac4d8f404a7ebf79afcf67a2d2e0f33"},{"author":{"_account_id":4571,"name":"Steve Baker","email":"sbaker@redhat.com","username":"steve-stevebaker"},"change_message_id":"43e5fbe2b134f09302dcd46ee2758bd35328597b","unresolved":false,"context_lines":[{"line_number":16,"context_line":"in the codebase (for example by accessing a lazy loaded property)"},{"line_number":17,"context_line":""},{"line_number":18,"context_line":"Change-Id: If92788641d84b7314ed7ad1f8cb0e141fa1a8681"},{"line_number":19,"context_line":"Closes-Bug: #1479723"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":9,"id":"7ac969e8_6fb9c12e","line":19,"in_reply_to":"9ad45d7e_8d88b872","updated":"2016-08-12 22:37:00.000000000","message":"I could speculate it might, lets wait and see after it lands","commit_id":"847604de1ac4d8f404a7ebf79afcf67a2d2e0f33"}],"heat/db/api.py":[{"author":{"_account_id":4257,"name":"Zane Bitter","email":"zbitter@redhat.com","username":"zaneb"},"change_message_id":"47b00594ef5f23404f70ad00c3a705124ae74315","unresolved":false,"context_lines":[{"line_number":34,"context_line":"IMPL \u003d api.DBAPI.from_config(CONF, backend_mapping\u003d_BACKEND_MAPPING)"},{"line_number":35,"context_line":""},{"line_number":36,"context_line":""},{"line_number":37,"context_line":"context_manager \u003d IMPL.context_manager"},{"line_number":38,"context_line":""},{"line_number":39,"context_line":""},{"line_number":40,"context_line":"def get_engine():"}],"source_content_type":"text/x-python","patch_set":9,"id":"9ad45d7e_4db9a014","line":37,"updated":"2016-08-11 14:09:03.000000000","message":"What uses this?","commit_id":"847604de1ac4d8f404a7ebf79afcf67a2d2e0f33"},{"author":{"_account_id":4571,"name":"Steve Baker","email":"sbaker@redhat.com","username":"steve-stevebaker"},"change_message_id":"43e5fbe2b134f09302dcd46ee2758bd35328597b","unresolved":false,"context_lines":[{"line_number":34,"context_line":"IMPL \u003d api.DBAPI.from_config(CONF, backend_mapping\u003d_BACKEND_MAPPING)"},{"line_number":35,"context_line":""},{"line_number":36,"context_line":""},{"line_number":37,"context_line":"context_manager \u003d IMPL.context_manager"},{"line_number":38,"context_line":""},{"line_number":39,"context_line":""},{"line_number":40,"context_line":"def get_engine():"}],"source_content_type":"text/x-python","patch_set":9,"id":"7ac969e8_cff715f4","line":37,"in_reply_to":"9ad45d7e_4db9a014","updated":"2016-08-12 22:37:00.000000000","message":"Nothing yet, I\u0027ll remove it for now","commit_id":"847604de1ac4d8f404a7ebf79afcf67a2d2e0f33"}],"heat/db/sqlalchemy/api.py":[{"author":{"_account_id":4257,"name":"Zane Bitter","email":"zbitter@redhat.com","username":"zaneb"},"change_message_id":"47b00594ef5f23404f70ad00c3a705124ae74315","unresolved":false,"context_lines":[{"line_number":48,"context_line":"CONF.import_group(\u0027profiler\u0027, \u0027heat.common.config\u0027)"},{"line_number":49,"context_line":""},{"line_number":50,"context_line":"_facade \u003d None"},{"line_number":51,"context_line":"context_manager \u003d enginefacade.transaction_context()"},{"line_number":52,"context_line":""},{"line_number":53,"context_line":"LOG \u003d logging.getLogger(__name__)"},{"line_number":54,"context_line":""}],"source_content_type":"text/x-python","patch_set":9,"id":"9ad45d7e_a24cd4c8","line":51,"updated":"2016-08-11 14:09:03.000000000","message":"So... can I be a pain and ask you to do a sed of this file and rename this? \"Context manager\" has a specific meaning in Python, and this is confusing because (a) this isn\u0027t an example of one, and (b) if interpreted that way it tells you nothing about what it does.\n\ntransaction_manager would be better. Or transaction_context.","commit_id":"847604de1ac4d8f404a7ebf79afcf67a2d2e0f33"},{"author":{"_account_id":11816,"name":"mike bayer","display_name":"Mike Bayer","email":"mike_mp@zzzcomputing.com","username":"zzzeek","status":"Red Hat"},"change_message_id":"2f573e860387163bc68848cc5b33b34d0a0c9e0c","unresolved":false,"context_lines":[{"line_number":48,"context_line":"CONF.import_group(\u0027profiler\u0027, \u0027heat.common.config\u0027)"},{"line_number":49,"context_line":""},{"line_number":50,"context_line":"_facade \u003d None"},{"line_number":51,"context_line":"context_manager \u003d enginefacade.transaction_context()"},{"line_number":52,"context_line":""},{"line_number":53,"context_line":"LOG \u003d logging.getLogger(__name__)"},{"line_number":54,"context_line":""}],"source_content_type":"text/x-python","patch_set":9,"id":"9ad45d7e_b47504cc","line":51,"in_reply_to":"9ad45d7e_a24cd4c8","updated":"2016-08-11 14:42:31.000000000","message":"I tend to agree that \"context_manager\" is a little vague, though we are in the \"sqlalchemy api.py\" module which mitigates this somewhat. transaction_context or db_context, or even use \"@enginefacade\" and then have the actual enginefacade import be \"_enginefacade\".   (the original idea was people would use the global @enginefacade symbol directly).","commit_id":"847604de1ac4d8f404a7ebf79afcf67a2d2e0f33"},{"author":{"_account_id":4571,"name":"Steve Baker","email":"sbaker@redhat.com","username":"steve-stevebaker"},"change_message_id":"43e5fbe2b134f09302dcd46ee2758bd35328597b","unresolved":false,"context_lines":[{"line_number":48,"context_line":"CONF.import_group(\u0027profiler\u0027, \u0027heat.common.config\u0027)"},{"line_number":49,"context_line":""},{"line_number":50,"context_line":"_facade \u003d None"},{"line_number":51,"context_line":"context_manager \u003d enginefacade.transaction_context()"},{"line_number":52,"context_line":""},{"line_number":53,"context_line":"LOG \u003d logging.getLogger(__name__)"},{"line_number":54,"context_line":""}],"source_content_type":"text/x-python","patch_set":9,"id":"7ac969e8_8f099de0","line":51,"in_reply_to":"9ad45d7e_b47504cc","updated":"2016-08-12 22:37:00.000000000","message":"lazy fingers vote for db_context","commit_id":"847604de1ac4d8f404a7ebf79afcf67a2d2e0f33"},{"author":{"_account_id":8833,"name":"Rabi Mishra","email":"ramishra@redhat.com","username":"rabi"},"change_message_id":"cedcb1b5ed8af4256eee66b1b5aa9e2ef1c72175","unresolved":false,"context_lines":[{"line_number":137,"context_line":"def raw_template_update(context, template_id, values):"},{"line_number":138,"context_line":"    raw_template_ref \u003d raw_template_get(context, template_id)"},{"line_number":139,"context_line":"    # get only the changed values"},{"line_number":140,"context_line":"    context.session.refresh(raw_template_ref)"},{"line_number":141,"context_line":"    values \u003d dict((k, v) for k, v in values.items()"},{"line_number":142,"context_line":"                  if getattr(raw_template_ref, k) !\u003d v)"},{"line_number":143,"context_line":""}],"source_content_type":"text/x-python","patch_set":9,"id":"dada55a8_726e0001","line":140,"range":{"start_line":140,"start_character":3,"end_line":140,"end_character":45},"updated":"2016-07-27 11:17:00.000000000","message":"Not sure I understand why this is required just after a get. I can see it in some other places too?","commit_id":"847604de1ac4d8f404a7ebf79afcf67a2d2e0f33"},{"author":{"_account_id":4571,"name":"Steve Baker","email":"sbaker@redhat.com","username":"steve-stevebaker"},"change_message_id":"43e5fbe2b134f09302dcd46ee2758bd35328597b","unresolved":false,"context_lines":[{"line_number":137,"context_line":"def raw_template_update(context, template_id, values):"},{"line_number":138,"context_line":"    raw_template_ref \u003d raw_template_get(context, template_id)"},{"line_number":139,"context_line":"    # get only the changed values"},{"line_number":140,"context_line":"    context.session.refresh(raw_template_ref)"},{"line_number":141,"context_line":"    values \u003d dict((k, v) for k, v in values.items()"},{"line_number":142,"context_line":"                  if getattr(raw_template_ref, k) !\u003d v)"},{"line_number":143,"context_line":""}],"source_content_type":"text/x-python","patch_set":9,"id":"7ac969e8_cfb435d3","line":140,"range":{"start_line":140,"start_character":3,"end_line":140,"end_character":45},"in_reply_to":"9ad45d7e_121fc508","updated":"2016-08-12 22:37:00.000000000","message":"Its likely not needed, but I really wanted this change to replicate previous behaviour - we can revisit this later as a potential small optimisation","commit_id":"847604de1ac4d8f404a7ebf79afcf67a2d2e0f33"},{"author":{"_account_id":4257,"name":"Zane Bitter","email":"zbitter@redhat.com","username":"zaneb"},"change_message_id":"47b00594ef5f23404f70ad00c3a705124ae74315","unresolved":false,"context_lines":[{"line_number":137,"context_line":"def raw_template_update(context, template_id, values):"},{"line_number":138,"context_line":"    raw_template_ref \u003d raw_template_get(context, template_id)"},{"line_number":139,"context_line":"    # get only the changed values"},{"line_number":140,"context_line":"    context.session.refresh(raw_template_ref)"},{"line_number":141,"context_line":"    values \u003d dict((k, v) for k, v in values.items()"},{"line_number":142,"context_line":"                  if getattr(raw_template_ref, k) !\u003d v)"},{"line_number":143,"context_line":""}],"source_content_type":"text/x-python","patch_set":9,"id":"9ad45d7e_121fc508","line":140,"range":{"start_line":140,"start_character":3,"end_line":140,"end_character":45},"in_reply_to":"bacf61ea_2d04d913","updated":"2016-08-11 14:09:03.000000000","message":"Was this a bug before? Is there some way that multiple sessions could be updating the same raw_template anyway? (I can\u0027t think of one.) I guess it can\u0027t hurt though.","commit_id":"847604de1ac4d8f404a7ebf79afcf67a2d2e0f33"},{"author":{"_account_id":4571,"name":"Steve Baker","email":"sbaker@redhat.com","username":"steve-stevebaker"},"change_message_id":"021498241c348b73278ec749f2e23f92537ab1d4","unresolved":false,"context_lines":[{"line_number":137,"context_line":"def raw_template_update(context, template_id, values):"},{"line_number":138,"context_line":"    raw_template_ref \u003d raw_template_get(context, template_id)"},{"line_number":139,"context_line":"    # get only the changed values"},{"line_number":140,"context_line":"    context.session.refresh(raw_template_ref)"},{"line_number":141,"context_line":"    values \u003d dict((k, v) for k, v in values.items()"},{"line_number":142,"context_line":"                  if getattr(raw_template_ref, k) !\u003d v)"},{"line_number":143,"context_line":""}],"source_content_type":"text/x-python","patch_set":9,"id":"bacf61ea_2d04d913","line":140,"range":{"start_line":140,"start_character":3,"end_line":140,"end_character":45},"in_reply_to":"dada55a8_726e0001","updated":"2016-07-28 04:07:44.000000000","message":"These are for fetches which must come from the database, not from the identity cache.\n\nIt means a worst-case of a double query, but I think this can be eliminated in the future by manipulating the identity cache to invalidate the entry. I just wanted to do it the simplest and safest way for now.","commit_id":"847604de1ac4d8f404a7ebf79afcf67a2d2e0f33"},{"author":{"_account_id":4257,"name":"Zane Bitter","email":"zbitter@redhat.com","username":"zaneb"},"change_message_id":"47b00594ef5f23404f70ad00c3a705124ae74315","unresolved":false,"context_lines":[{"line_number":657,"context_line":"                           retry_interval\u003d0.5, inc_retry_interval\u003dTrue)"},{"line_number":658,"context_line":"@context_manager.writer"},{"line_number":659,"context_line":"def stack_update(context, stack_id, values, exp_trvsl\u003dNone):"},{"line_number":660,"context_line":"    stack \u003d stack_get(context, stack_id)"},{"line_number":661,"context_line":""},{"line_number":662,"context_line":"    if stack is None:"},{"line_number":663,"context_line":"        raise exception.NotFound(_(\u0027Attempt to update a stack with id: \u0027"}],"source_content_type":"text/x-python","patch_set":9,"id":"9ad45d7e_128865c4","line":660,"updated":"2016-08-11 14:09:03.000000000","message":"This is going to start a transaction inside a transaction. Is that legit?","commit_id":"847604de1ac4d8f404a7ebf79afcf67a2d2e0f33"},{"author":{"_account_id":4571,"name":"Steve Baker","email":"sbaker@redhat.com","username":"steve-stevebaker"},"change_message_id":"43e5fbe2b134f09302dcd46ee2758bd35328597b","unresolved":false,"context_lines":[{"line_number":657,"context_line":"                           retry_interval\u003d0.5, inc_retry_interval\u003dTrue)"},{"line_number":658,"context_line":"@context_manager.writer"},{"line_number":659,"context_line":"def stack_update(context, stack_id, values, exp_trvsl\u003dNone):"},{"line_number":660,"context_line":"    stack \u003d stack_get(context, stack_id)"},{"line_number":661,"context_line":""},{"line_number":662,"context_line":"    if stack is None:"},{"line_number":663,"context_line":"        raise exception.NotFound(_(\u0027Attempt to update a stack with id: \u0027"}],"source_content_type":"text/x-python","patch_set":9,"id":"7ac969e8_af5d79ee","line":660,"in_reply_to":"9ad45d7e_128865c4","updated":"2016-08-12 22:37:00.000000000","message":"I don\u0027t think so, my understanding is that the existing writer transaction gets reused for the reader","commit_id":"847604de1ac4d8f404a7ebf79afcf67a2d2e0f33"}]}
