)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":17860,"name":"Samuel de Medeiros Queiroz","email":"samueldmq@gmail.com","username":"samueldmq"},"change_message_id":"a467810823a4d23e7e3712157bd1c77a06504169","unresolved":false,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Make fetching all foreign keys in a join"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"With this, list_users takes only 1 call to db!"},{"line_number":10,"context_line":""},{"line_number":11,"context_line":"Change-Id: I35ad7b02cd1f695634f5feba6d924fd0301e7640"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":2,"id":"9a89bdaa_e9e52938","line":9,"updated":"2016-09-07 00:58:59.000000000","message":"Please expand on why this is better","commit_id":"90b783cb476c722bd633a7c4762219fdf465bb6f"},{"author":{"_account_id":17860,"name":"Samuel de Medeiros Queiroz","email":"samueldmq@gmail.com","username":"samueldmq"},"change_message_id":"1a58ebdd1f5464e619750e8f658a6d872ef9b151","unresolved":false,"context_lines":[{"line_number":8,"context_line":""},{"line_number":9,"context_line":"With this, list_users takes only 1 call to db, which is faster."},{"line_number":10,"context_line":""},{"line_number":11,"context_line":"With the change it takes ~0.352s on my PC to list users"},{"line_number":12,"context_line":"Without the change it takes ~1.5s on my PC to list users"},{"line_number":13,"context_line":""},{"line_number":14,"context_line":"Change-Id: I35ad7b02cd1f695634f5feba6d924fd0301e7640"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":4,"id":"9a89bdaa_2c6b71f2","line":12,"range":{"start_line":11,"start_character":0,"end_line":12,"end_character":56},"updated":"2016-09-07 16:34:38.000000000","message":"it looks like this doesn\u0027t represent a real-world scenario, I am holding a -1 on this until we make sure it\u0027s an improvement, let\u0027s see what the perfomance bot says about it","commit_id":"79e42a37d6a450a2f76b29e69262fbd03f6ed7ac"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"27f30d3166f0e6a781d9eb9820b3fc6946b09585","unresolved":false,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Make fetching all foreign keys in a join"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"With this, list_users takes only 1 call to db, which is faster."},{"line_number":10,"context_line":""},{"line_number":11,"context_line":"With the change it takes ~0.352s on my PC to list users"},{"line_number":12,"context_line":"Without the change it takes ~1.5s on my PC to list users"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":5,"id":"9f436f4f_1ff5d857","line":9,"updated":"2017-08-09 18:17:26.000000000","message":"How many calls were made previously?","commit_id":"a9f453523b9b5dd3be3cb63f5bec7f4a580f3483"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"27f30d3166f0e6a781d9eb9820b3fc6946b09585","unresolved":false,"context_lines":[{"line_number":9,"context_line":"With this, list_users takes only 1 call to db, which is faster."},{"line_number":10,"context_line":""},{"line_number":11,"context_line":"With the change it takes ~0.352s on my PC to list users"},{"line_number":12,"context_line":"Without the change it takes ~1.5s on my PC to list users"},{"line_number":13,"context_line":""},{"line_number":14,"context_line":"Change-Id: I35ad7b02cd1f695634f5feba6d924fd0301e7640"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":5,"id":"9f436f4f_3ff09c67","line":12,"updated":"2017-08-09 18:17:26.000000000","message":"How many users where in the deployment?","commit_id":"a9f453523b9b5dd3be3cb63f5bec7f4a580f3483"}],"keystone/identity/backends/sql_model.py":[{"author":{"_account_id":18338,"name":"Ron De Rose","email":"ronald.de.rose@intel.com","username":"derosenet"},"change_message_id":"053ae85834c7b13b4e05e965525946c344a7fbc6","unresolved":false,"context_lines":[{"line_number":34,"context_line":"    extra \u003d sql.Column(sql.JsonBlob())"},{"line_number":35,"context_line":"    default_project_id \u003d sql.Column(sql.String(64))"},{"line_number":36,"context_line":"    local_user \u003d orm.relationship(\u0027LocalUser\u0027, uselist\u003dFalse,"},{"line_number":37,"context_line":"                                  single_parent\u003dTrue, lazy\u003d\u0027joined\u0027,"},{"line_number":38,"context_line":"                                  cascade\u003d\u0027all,delete-orphan\u0027, backref\u003d\u0027user\u0027)"},{"line_number":39,"context_line":"    federated_users \u003d orm.relationship(\u0027FederatedUser\u0027,"},{"line_number":40,"context_line":"                                       single_parent\u003dTrue,"}],"source_content_type":"text/x-python","patch_set":1,"id":"bacf61ea_de17ba52","line":37,"range":{"start_line":37,"start_character":60,"end_line":37,"end_character":66},"updated":"2016-07-27 18:48:26.000000000","message":"lazy\u003d\u0027subquery\u0027 is eager loading and fixes the performance issue, correct?  If so, is this still needed?","commit_id":"8401200126b46cd2aedd209ac5924a09c6a30c88"},{"author":{"_account_id":18338,"name":"Ron De Rose","email":"ronald.de.rose@intel.com","username":"derosenet"},"change_message_id":"033a05493ccdbb277a07083d23144c76c5068c67","unresolved":false,"context_lines":[{"line_number":34,"context_line":"    extra \u003d sql.Column(sql.JsonBlob())"},{"line_number":35,"context_line":"    default_project_id \u003d sql.Column(sql.String(64))"},{"line_number":36,"context_line":"    local_user \u003d orm.relationship(\u0027LocalUser\u0027, uselist\u003dFalse,"},{"line_number":37,"context_line":"                                  single_parent\u003dTrue, lazy\u003d\u0027joined\u0027,"},{"line_number":38,"context_line":"                                  cascade\u003d\u0027all,delete-orphan\u0027, backref\u003d\u0027user\u0027)"},{"line_number":39,"context_line":"    federated_users \u003d orm.relationship(\u0027FederatedUser\u0027,"},{"line_number":40,"context_line":"                                       single_parent\u003dTrue,"}],"source_content_type":"text/x-python","patch_set":1,"id":"bacf61ea_3581c54b","line":37,"range":{"start_line":37,"start_character":60,"end_line":37,"end_character":66},"in_reply_to":"bacf61ea_8354c654","updated":"2016-07-27 23:46:30.000000000","message":"Along those lines, for one to many:\n* \"joined eager loading only makes sense when the size of the collections are relatively small.\"\n* where as, \"subquery load makes sense when the collections are larger.\"\n\nhttp://docs.sqlalchemy.org/en/latest/orm/loading_relationships.html\n\nThe user collections (local_user, password...) should be small; thus joined probably makes more sense here. My only reservation, is when I was researching hybrid properties, I remember reading that subquery loading prevented some errors. However, I\u0027m not finding those articles now.","commit_id":"8401200126b46cd2aedd209ac5924a09c6a30c88"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"acacb57082cb074f58bfe3c6ded50d5fea1156b2","unresolved":false,"context_lines":[{"line_number":34,"context_line":"    extra \u003d sql.Column(sql.JsonBlob())"},{"line_number":35,"context_line":"    default_project_id \u003d sql.Column(sql.String(64))"},{"line_number":36,"context_line":"    local_user \u003d orm.relationship(\u0027LocalUser\u0027, uselist\u003dFalse,"},{"line_number":37,"context_line":"                                  single_parent\u003dTrue, lazy\u003d\u0027joined\u0027,"},{"line_number":38,"context_line":"                                  cascade\u003d\u0027all,delete-orphan\u0027, backref\u003d\u0027user\u0027)"},{"line_number":39,"context_line":"    federated_users \u003d orm.relationship(\u0027FederatedUser\u0027,"},{"line_number":40,"context_line":"                                       single_parent\u003dTrue,"}],"source_content_type":"text/x-python","patch_set":1,"id":"bacf61ea_8354c654","line":37,"range":{"start_line":37,"start_character":60,"end_line":37,"end_character":66},"in_reply_to":"bacf61ea_9dbb850e","updated":"2016-07-27 20:02:19.000000000","message":"according to the docs both \u0027joined\u0027 and \u0027subquery\u0027 will eagerly load\n\nhttp://docs.sqlalchemy.org/en/latest/orm/relationship_api.html#sqlalchemy.orm.relationship.params.lazy\n\njoined - items should be loaded “eagerly” in the same query as that of the parent, using a JOIN or LEFT OUTER JOIN. Whether the join is “outer” or not is determined by the innerjoin parameter.\n\nsubquery - items should be loaded “eagerly” as the parents are loaded, using one additional SQL statement, which issues a JOIN to a subquery of the original statement, for each collection requested.","commit_id":"8401200126b46cd2aedd209ac5924a09c6a30c88"},{"author":{"_account_id":13478,"name":"Boris Bobrov","email":"b.bobrov@sap.com","username":"bbobrov"},"change_message_id":"a7b07ccbafe21525f7b7c2f3ca41c0347cb1e93b","unresolved":false,"context_lines":[{"line_number":34,"context_line":"    extra \u003d sql.Column(sql.JsonBlob())"},{"line_number":35,"context_line":"    default_project_id \u003d sql.Column(sql.String(64))"},{"line_number":36,"context_line":"    local_user \u003d orm.relationship(\u0027LocalUser\u0027, uselist\u003dFalse,"},{"line_number":37,"context_line":"                                  single_parent\u003dTrue, lazy\u003d\u0027joined\u0027,"},{"line_number":38,"context_line":"                                  cascade\u003d\u0027all,delete-orphan\u0027, backref\u003d\u0027user\u0027)"},{"line_number":39,"context_line":"    federated_users \u003d orm.relationship(\u0027FederatedUser\u0027,"},{"line_number":40,"context_line":"                                       single_parent\u003dTrue,"}],"source_content_type":"text/x-python","patch_set":1,"id":"bacf61ea_9dbb850e","line":37,"range":{"start_line":37,"start_character":60,"end_line":37,"end_character":66},"in_reply_to":"bacf61ea_de17ba52","updated":"2016-07-27 19:13:43.000000000","message":"\u003e lazy\u003d\u0027subquery\u0027 is eager loading\n\none of the ways to eager load, yes\n\n\u003e and fixes the performance issue\n\nkinda. With subquery it takes 3 seconds to fetch the list (on my pc) and with joined it takes 0.2.\n\n\u003e If so, is this still needed?\n\nMaybe. 0.2s sounds good to me! But there might be performance degradation somewhere.","commit_id":"8401200126b46cd2aedd209ac5924a09c6a30c88"},{"author":{"_account_id":18338,"name":"Ron De Rose","email":"ronald.de.rose@intel.com","username":"derosenet"},"change_message_id":"27e34227f2a6906952d08930a1ab94b9154ffdf2","unresolved":false,"context_lines":[{"line_number":34,"context_line":"    extra \u003d sql.Column(sql.JsonBlob())"},{"line_number":35,"context_line":"    default_project_id \u003d sql.Column(sql.String(64))"},{"line_number":36,"context_line":"    local_user \u003d orm.relationship(\u0027LocalUser\u0027, uselist\u003dFalse,"},{"line_number":37,"context_line":"                                  single_parent\u003dTrue, lazy\u003d\u0027joined\u0027,"},{"line_number":38,"context_line":"                                  cascade\u003d\u0027all,delete-orphan\u0027, backref\u003d\u0027user\u0027)"},{"line_number":39,"context_line":"    federated_users \u003d orm.relationship(\u0027FederatedUser\u0027,"},{"line_number":40,"context_line":"                                       single_parent\u003dTrue,"}],"source_content_type":"text/x-python","patch_set":2,"id":"bacf61ea_b57e55ac","line":37,"range":{"start_line":37,"start_character":60,"end_line":37,"end_character":66},"updated":"2016-07-28 00:11:40.000000000","message":"For one to many:\n* \"joined eager loading only makes sense when the size of the collections are relatively small.\"\n* where as, \"subquery load makes sense when the collections are larger.\"\nhttp://docs.sqlalchemy.org/en/latest/orm/loading_relationships.html\n\nThe user collections (local_user, password...) would be small; thus joined loading would perform better here. My only reservation is, that when I was researching hybrid properties, I remember reading that subquery loading prevented some errors. I\u0027m not finding those articles now, however this may be why you are failing some tempest tests such as:\ntempest.api.identity.admin.v2.test_users.UsersTestJSON.test_update_user_password\n\nThe hybrid properties may need to be tweaked if we go with joined loading.","commit_id":"90b783cb476c722bd633a7c4762219fdf465bb6f"}]}
