)]}'
{"nova/conductor/manager.py":[{"author":{"_account_id":1030,"name":"Chris Behrens","email":"cbehrens@codestud.com","username":"cbehrens"},"change_message_id":"8a714dae5bfa9c9eb600d4d4d02f451a5d1fbf4a","unresolved":false,"context_lines":[{"line_number":305,"context_line":"    def compute_node_create(self, context, values):"},{"line_number":306,"context_line":"        # NOTE(danms): don\u0027t try to update the linked service object,"},{"line_number":307,"context_line":"        # since the callers manage this with service_id"},{"line_number":308,"context_line":"        if \u0027service\u0027 in values:"},{"line_number":309,"context_line":"            del values[\u0027service\u0027]"},{"line_number":310,"context_line":"        result \u003d self.db.compute_node_create(context, values)"},{"line_number":311,"context_line":"        return jsonutils.to_primitive(result)"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAM3%2F%2Fiws%3D","line":308,"updated":"2013-01-16 17:31:19.000000000","message":"I wonder if this should be stripped from either:  resource tracker\u0027s _create() and _update()s... or ignored within the DB API call itself.  I tend to think the resource tracker should not try to update it and should not pass it.","commit_id":"b7f30b8db9faab11da8f702c5d12028e81deec96"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"18491c0d9cb3602a2a49c5b0c5c589e1d8682001","unresolved":false,"context_lines":[{"line_number":305,"context_line":"    def compute_node_create(self, context, values):"},{"line_number":306,"context_line":"        # NOTE(danms): don\u0027t try to update the linked service object,"},{"line_number":307,"context_line":"        # since the callers manage this with service_id"},{"line_number":308,"context_line":"        if \u0027service\u0027 in values:"},{"line_number":309,"context_line":"            del values[\u0027service\u0027]"},{"line_number":310,"context_line":"        result \u003d self.db.compute_node_create(context, values)"},{"line_number":311,"context_line":"        return jsonutils.to_primitive(result)"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAM3%2F%2FigQ%3D","line":308,"in_reply_to":"AAAAM3%2F%2Fiws%3D","updated":"2013-01-16 19:45:38.000000000","message":"Okay, fair enough, yeah. I think I\u0027ll go for in resource_tracker, since it is the one with the odd behavior.","commit_id":"b7f30b8db9faab11da8f702c5d12028e81deec96"}],"nova/db/sqlalchemy/api.py":[{"author":{"_account_id":6172,"name":"Boris Pavlovic","email":"boris@pavlovic.me","username":"boris-42"},"change_message_id":"187f85b3a955428bab9e26e7fccdb52a0f15eeee","unresolved":false,"context_lines":[{"line_number":254,"context_line":""},{"line_number":255,"context_line":""},{"line_number":256,"context_line":"def convert_datetimes(values, *datetime_keys):"},{"line_number":257,"context_line":"    datetime_keys \u003d [\u0027created_at\u0027, \u0027deleted_at\u0027, \u0027updated_at\u0027]"},{"line_number":258,"context_line":"    for key in values:"},{"line_number":259,"context_line":"        if key in datetime_keys and isinstance(values[key], basestring):"},{"line_number":260,"context_line":"            values[key] \u003d timeutils.parse_strtime(values[key])"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAM3%2F%2FkTU%3D","line":257,"updated":"2013-01-15 19:20:56.000000000","message":"Why do you create 2 times datetime_keys array?","commit_id":"e98f4ca02f41ce3d1721837ae4e07b8f58a79c8a"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"7948e974d91ecdd534d5f109b6ddd167c54d2e09","unresolved":false,"context_lines":[{"line_number":254,"context_line":""},{"line_number":255,"context_line":""},{"line_number":256,"context_line":"def convert_datetimes(values, *datetime_keys):"},{"line_number":257,"context_line":"    datetime_keys \u003d [\u0027created_at\u0027, \u0027deleted_at\u0027, \u0027updated_at\u0027]"},{"line_number":258,"context_line":"    for key in values:"},{"line_number":259,"context_line":"        if key in datetime_keys and isinstance(values[key], basestring):"},{"line_number":260,"context_line":"            values[key] \u003d timeutils.parse_strtime(values[key])"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAM3%2F%2FkS4%3D","line":257,"in_reply_to":"AAAAM3%2F%2FkTU%3D","updated":"2013-01-15 19:25:22.000000000","message":"Doh, this is left-over from test code. Thanks!","commit_id":"e98f4ca02f41ce3d1721837ae4e07b8f58a79c8a"},{"author":{"_account_id":6172,"name":"Boris Pavlovic","email":"boris@pavlovic.me","username":"boris-42"},"change_message_id":"187f85b3a955428bab9e26e7fccdb52a0f15eeee","unresolved":false,"context_lines":[{"line_number":562,"context_line":"    stats \u003d values.pop(\u0027stats\u0027, {})"},{"line_number":563,"context_line":""},{"line_number":564,"context_line":"    session \u003d get_session()"},{"line_number":565,"context_line":"    with session.begin(subtransactions\u003dTrue):"},{"line_number":566,"context_line":"        _update_stats(context, stats, compute_id, session, prune_stats)"},{"line_number":567,"context_line":"        compute_ref \u003d _compute_node_get(context, compute_id, session\u003dsession)"},{"line_number":568,"context_line":"        convert_datetimes(values, \u0027created_at\u0027, \u0027deleted_at\u0027, \u0027updated_at\u0027)"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAM3%2F%2FkTk%3D","line":565,"updated":"2013-01-15 19:20:56.000000000","message":"Could you please remove subtransactions\u003dTrue.","commit_id":"e98f4ca02f41ce3d1721837ae4e07b8f58a79c8a"},{"author":{"_account_id":6172,"name":"Boris Pavlovic","email":"boris@pavlovic.me","username":"boris-42"},"change_message_id":"6da25cb493e75e6eb70ac2e18f6b6126028be1da","unresolved":false,"context_lines":[{"line_number":562,"context_line":"    stats \u003d values.pop(\u0027stats\u0027, {})"},{"line_number":563,"context_line":""},{"line_number":564,"context_line":"    session \u003d get_session()"},{"line_number":565,"context_line":"    with session.begin(subtransactions\u003dTrue):"},{"line_number":566,"context_line":"        _update_stats(context, stats, compute_id, session, prune_stats)"},{"line_number":567,"context_line":"        compute_ref \u003d _compute_node_get(context, compute_id, session\u003dsession)"},{"line_number":568,"context_line":"        convert_datetimes(values, \u0027created_at\u0027, \u0027deleted_at\u0027, \u0027updated_at\u0027)"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAM3%2F%2FkR0%3D","line":565,"in_reply_to":"AAAAM3%2F%2FkS0%3D","updated":"2013-01-15 19:42:55.000000000","message":"Sure. \n\nwith session.begin() \u003c- creates transaction for this session instance. \n\nsubtransactions\u003dTrue just allows us creating sub transaction (save point) for this session.\n\nfor example such situation:\n\n  with session.begin():\n     #do something\n     with session.begin(subtransactions\u003dTrue):\n         #do something\n\nIf there is no parameter subtransactions\u003dTrue sqlalchemy will raise Exception. So we should use it. \n\nSuch approach is useful when we are using helpers. For example model_query() that can accept session parameter. As we don\u0027t know has session instance transaction or not we should always use subtransactions\u003dTrue. \n\nIn this case we have session instance and we are creating only one transaction so we don\u0027t need subtransactions\u003dTrue at all.","commit_id":"e98f4ca02f41ce3d1721837ae4e07b8f58a79c8a"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"7948e974d91ecdd534d5f109b6ddd167c54d2e09","unresolved":false,"context_lines":[{"line_number":562,"context_line":"    stats \u003d values.pop(\u0027stats\u0027, {})"},{"line_number":563,"context_line":""},{"line_number":564,"context_line":"    session \u003d get_session()"},{"line_number":565,"context_line":"    with session.begin(subtransactions\u003dTrue):"},{"line_number":566,"context_line":"        _update_stats(context, stats, compute_id, session, prune_stats)"},{"line_number":567,"context_line":"        compute_ref \u003d _compute_node_get(context, compute_id, session\u003dsession)"},{"line_number":568,"context_line":"        convert_datetimes(values, \u0027created_at\u0027, \u0027deleted_at\u0027, \u0027updated_at\u0027)"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAM3%2F%2FkS0%3D","line":565,"in_reply_to":"AAAAM3%2F%2FkTk%3D","updated":"2013-01-15 19:25:22.000000000","message":"Can you explain?","commit_id":"e98f4ca02f41ce3d1721837ae4e07b8f58a79c8a"}]}
