)]}'
{"nova/db/sqlalchemy/api.py":[{"author":{"_account_id":7730,"name":"Sahid Orentino Ferdjaoui","email":"sahid.ferdjaoui@industrialdiscipline.com","username":"sahid"},"change_message_id":"3031ed18f1768d3320d896f4f09c68519f4b980b","unresolved":false,"context_lines":[{"line_number":5682,"context_line":"    if not instance_uuids:"},{"line_number":5683,"context_line":"        return {}"},{"line_number":5684,"context_line":""},{"line_number":5685,"context_line":"    rows \u003d model_query(context, models.InstanceFault, read_deleted\u003d\u0027no\u0027).\\"},{"line_number":5686,"context_line":"                       filter(models.InstanceFault.instance_uuid.in_("},{"line_number":5687,"context_line":"                           instance_uuids)).\\"},{"line_number":5688,"context_line":"                       order_by(desc(\"created_at\"), desc(\"id\")).\\"}],"source_content_type":"text/x-python","patch_set":6,"id":"fa80f949_909e0255","side":"PARENT","line":5685,"updated":"2015-11-04 11:12:13.000000000","message":"Wondering to know if you cannot do that in SQL by using a group by.\n\nSomething like:\n\n  select instance_uuid, message, max(created_at) \n  from instance_faults where instance_uuid \u003d $instance_uuids\n  group by instance_uuid;","commit_id":"fd2e946b62fdb2aadda885c16a18fb49173d37d5"},{"author":{"_account_id":8276,"name":"kiwik","email":"chenrui.momo@gmail.com","username":"kiwik"},"change_message_id":"409893cb72db1275160bda2ff3dc66763d1b7006","unresolved":false,"context_lines":[{"line_number":5682,"context_line":"    if not instance_uuids:"},{"line_number":5683,"context_line":"        return {}"},{"line_number":5684,"context_line":""},{"line_number":5685,"context_line":"    rows \u003d model_query(context, models.InstanceFault, read_deleted\u003d\u0027no\u0027).\\"},{"line_number":5686,"context_line":"                       filter(models.InstanceFault.instance_uuid.in_("},{"line_number":5687,"context_line":"                           instance_uuids)).\\"},{"line_number":5688,"context_line":"                       order_by(desc(\"created_at\"), desc(\"id\")).\\"}],"source_content_type":"text/x-python","patch_set":6,"id":"fa80f949_32161af2","side":"PARENT","line":5685,"in_reply_to":"fa80f949_909e0255","updated":"2015-11-05 04:15:17.000000000","message":"If we use SQL to handle this, I think we should group by result on an ordered instance fault by using sub query, like this:\n\n    select * from \n        (select * from instance_faults where instance_uuid in $instance_uuids order by created_at desc) \n    as order_table group by instance_uuids\n\nI\u0027m not a SQL expert, I\u0027m worried whether the SQL is exact, so I didn\u0027t change the SQL in the patch.","commit_id":"fd2e946b62fdb2aadda885c16a18fb49173d37d5"},{"author":{"_account_id":7730,"name":"Sahid Orentino Ferdjaoui","email":"sahid.ferdjaoui@industrialdiscipline.com","username":"sahid"},"change_message_id":"3031ed18f1768d3320d896f4f09c68519f4b980b","unresolved":false,"context_lines":[{"line_number":5678,"context_line":""},{"line_number":5679,"context_line":""},{"line_number":5680,"context_line":"def instance_fault_get_by_instance_uuids(context, instance_uuids):"},{"line_number":5681,"context_line":"    \"\"\"Get latest instance faults for the provided instance_uuids.\"\"\""},{"line_number":5682,"context_line":"    if not instance_uuids:"},{"line_number":5683,"context_line":"        return {}"},{"line_number":5684,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"fa80f949_70411e0b","line":5681,"updated":"2015-11-04 11:12:13.000000000","message":"What you want to do is probably to update method used to add fault by an insert on duplicate sql query and put instance_uuid as uniq. But it\u0027s not so easy to do that without to have a migration script.","commit_id":"d32626f3dae15f71307d795c60233b115dc9d7aa"},{"author":{"_account_id":8276,"name":"kiwik","email":"chenrui.momo@gmail.com","username":"kiwik"},"change_message_id":"409893cb72db1275160bda2ff3dc66763d1b7006","unresolved":false,"context_lines":[{"line_number":5678,"context_line":""},{"line_number":5679,"context_line":""},{"line_number":5680,"context_line":"def instance_fault_get_by_instance_uuids(context, instance_uuids):"},{"line_number":5681,"context_line":"    \"\"\"Get latest instance faults for the provided instance_uuids.\"\"\""},{"line_number":5682,"context_line":"    if not instance_uuids:"},{"line_number":5683,"context_line":"        return {}"},{"line_number":5684,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"fa80f949_cd2b6fea","line":5681,"in_reply_to":"fa80f949_70411e0b","updated":"2015-11-05 04:15:17.000000000","message":"I think your suggestion is good idea, but I\u0027m not sure whether deleting the instance faults history and recording only one fault are suitable, if we want to do it, that might need some discussing.\n\nThis patch base on current implemented to optimize something, if we decide to only record one fault in DB, I think that can be implemented in a separate patch.","commit_id":"d32626f3dae15f71307d795c60233b115dc9d7aa"},{"author":{"_account_id":12712,"name":"Gleb Stepanov","email":"gstepanov@mirantis.com","username":"stgleb"},"change_message_id":"7ea02d3e722d8839883bf61c5997d1653a83d4f2","unresolved":false,"context_lines":[{"line_number":5785,"context_line":"        # instance is latest fault, only return the latest faults of each"},{"line_number":5786,"context_line":"        # instance, because other faults don\u0027t used in any where."},{"line_number":5787,"context_line":"        if len(output[row[\u0027instance_uuid\u0027]]) \u003d\u003d 0:"},{"line_number":5788,"context_line":"            output[row[\u0027instance_uuid\u0027]].append(dict(row))"},{"line_number":5789,"context_line":""},{"line_number":5790,"context_line":"    return output"},{"line_number":5791,"context_line":""}],"source_content_type":"text/x-python","patch_set":11,"id":"9aed3d3a_a8a64dab","line":5788,"updated":"2016-03-01 09:58:45.000000000","message":"If you store only latest fault, why don\u0027t you store it directly, not in list?","commit_id":"427cd59d35d0ddc691f4161153dde990f4f8a198"},{"author":{"_account_id":8276,"name":"kiwik","email":"chenrui.momo@gmail.com","username":"kiwik"},"change_message_id":"b3d6ec95a72f946fac823c14e385e2e2ba9f9df1","unresolved":false,"context_lines":[{"line_number":5785,"context_line":"        # instance is latest fault, only return the latest faults of each"},{"line_number":5786,"context_line":"        # instance, because other faults don\u0027t used in any where."},{"line_number":5787,"context_line":"        if len(output[row[\u0027instance_uuid\u0027]]) \u003d\u003d 0:"},{"line_number":5788,"context_line":"            output[row[\u0027instance_uuid\u0027]].append(dict(row))"},{"line_number":5789,"context_line":""},{"line_number":5790,"context_line":"    return output"},{"line_number":5791,"context_line":""}],"source_content_type":"text/x-python","patch_set":11,"id":"7af24918_ed72f1ac","line":5788,"in_reply_to":"9aed3d3a_a8a64dab","updated":"2016-03-01 11:58:37.000000000","message":"I don\u0027t want to change the data structure, that will cause to update many related code and unit tests.","commit_id":"427cd59d35d0ddc691f4161153dde990f4f8a198"},{"author":{"_account_id":6849,"name":"Roman Podoliaka","email":"roman.podoliaka@gmail.com","username":"rpodolyaka"},"change_message_id":"8f397b5874e7b4cb76eba46130b9bb5a94c7a956","unresolved":false,"context_lines":[{"line_number":5989,"context_line":""},{"line_number":5990,"context_line":"@pick_context_manager_reader"},{"line_number":5991,"context_line":"def instance_fault_get_by_instance_uuids(context, instance_uuids):"},{"line_number":5992,"context_line":"    \"\"\"Get latest instance faults for the provided instance_uuids.\"\"\""},{"line_number":5993,"context_line":"    if not instance_uuids:"},{"line_number":5994,"context_line":"        return {}"},{"line_number":5995,"context_line":""}],"source_content_type":"text/x-python","patch_set":13,"id":"5a18252c_d1f8437f","line":5992,"updated":"2016-04-12 16:38:18.000000000","message":"Why not introduce a specialized / parameter to get only the latest faults? Looks like all results are still needed here - https://github.com/openstack/nova/blob/master/nova/objects/instance_fault.py#L107","commit_id":"617c77728921a3ed07880c18cf3ae8c0edca32e7"},{"author":{"_account_id":8276,"name":"kiwik","email":"chenrui.momo@gmail.com","username":"kiwik"},"change_message_id":"7dc431d25dcab04ff5a11c858e8e8aa99cbb5cb4","unresolved":false,"context_lines":[{"line_number":5989,"context_line":""},{"line_number":5990,"context_line":"@pick_context_manager_reader"},{"line_number":5991,"context_line":"def instance_fault_get_by_instance_uuids(context, instance_uuids):"},{"line_number":5992,"context_line":"    \"\"\"Get latest instance faults for the provided instance_uuids.\"\"\""},{"line_number":5993,"context_line":"    if not instance_uuids:"},{"line_number":5994,"context_line":"        return {}"},{"line_number":5995,"context_line":""}],"source_content_type":"text/x-python","patch_set":13,"id":"1a122d0e_939bf317","line":5992,"in_reply_to":"5a18252c_d1f8437f","updated":"2016-04-20 03:20:06.000000000","message":"Actually the all faults are fulfilled into the object, but only get the latest one in fill_faults() and _make_instance_list()","commit_id":"617c77728921a3ed07880c18cf3ae8c0edca32e7"},{"author":{"_account_id":6849,"name":"Roman Podoliaka","email":"roman.podoliaka@gmail.com","username":"rpodolyaka"},"change_message_id":"8f397b5874e7b4cb76eba46130b9bb5a94c7a956","unresolved":false,"context_lines":[{"line_number":5993,"context_line":"    if not instance_uuids:"},{"line_number":5994,"context_line":"        return {}"},{"line_number":5995,"context_line":""},{"line_number":5996,"context_line":"    rows \u003d model_query(context, models.InstanceFault, read_deleted\u003d\u0027no\u0027).\\"},{"line_number":5997,"context_line":"                       filter(models.InstanceFault.instance_uuid.in_("},{"line_number":5998,"context_line":"                           instance_uuids)).\\"},{"line_number":5999,"context_line":"                       order_by(desc(\"created_at\"), desc(\"id\")).\\"}],"source_content_type":"text/x-python","patch_set":13,"id":"5a18252c_ac10ca4f","line":5996,"updated":"2016-04-12 16:38:18.000000000","message":"Can we think of a better query here? So that we don\u0027t need to grab all rows first, only to throw away them later.","commit_id":"617c77728921a3ed07880c18cf3ae8c0edca32e7"},{"author":{"_account_id":8276,"name":"kiwik","email":"chenrui.momo@gmail.com","username":"kiwik"},"change_message_id":"7dc431d25dcab04ff5a11c858e8e8aa99cbb5cb4","unresolved":false,"context_lines":[{"line_number":5993,"context_line":"    if not instance_uuids:"},{"line_number":5994,"context_line":"        return {}"},{"line_number":5995,"context_line":""},{"line_number":5996,"context_line":"    rows \u003d model_query(context, models.InstanceFault, read_deleted\u003d\u0027no\u0027).\\"},{"line_number":5997,"context_line":"                       filter(models.InstanceFault.instance_uuid.in_("},{"line_number":5998,"context_line":"                           instance_uuids)).\\"},{"line_number":5999,"context_line":"                       order_by(desc(\"created_at\"), desc(\"id\")).\\"}],"source_content_type":"text/x-python","patch_set":13,"id":"1a122d0e_86057312","line":5996,"in_reply_to":"5a18252c_ac10ca4f","updated":"2016-04-20 03:20:06.000000000","message":"the function handle multiple instances, and I don\u0027 find out a exact SQL query to order each instance faults by \"created_at\" column then select the latest fault record at the same time in one SQL call, any suggestion?","commit_id":"617c77728921a3ed07880c18cf3ae8c0edca32e7"}]}
