)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":12898,"name":"Tony Breeds","email":"tony@bakeyournoodle.com","username":"tonyb"},"change_message_id":"e845808baa8183692163965e0e273635edc05fa1","unresolved":false,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Nova Server Count API Extension"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"This blueprint proposes a new REST API extension that returns the number"},{"line_number":10,"context_line":"of servers that match the specified search criteria."},{"line_number":11,"context_line":""},{"line_number":12,"context_line":"Previously-approved: juno"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":1,"id":"5a890539_8a7b917a","line":9,"updated":"2014-11-19 04:25:37.000000000","message":"Nit: using blueprint here puts this in a bp/proposes branch which isn\u0027t ideal","commit_id":"099ec135dc9c9eaaca03885d29a37fbf23b32eca"},{"author":{"_account_id":10559,"name":"Steven Kaufer","email":"kaufer@us.ibm.com","username":"kaufer"},"change_message_id":"85a0047921ec8a0937efa6eb6f1f8f07d7fb1f41","unresolved":false,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Nova Server Count API Extension"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"This blueprint proposes a new REST API extension that returns the number"},{"line_number":10,"context_line":"of servers that match the specified search criteria."},{"line_number":11,"context_line":""},{"line_number":12,"context_line":"Previously-approved: juno"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":1,"id":"5a890539_d3f8da4b","line":9,"in_reply_to":"5a890539_8a7b917a","updated":"2014-11-20 20:01:42.000000000","message":"Oh, I was not aware of this -- I will remove that key.","commit_id":"099ec135dc9c9eaaca03885d29a37fbf23b32eca"}],"specs/kilo/approved/server-count-api.rst":[{"author":{"_account_id":12898,"name":"Tony Breeds","email":"tony@bakeyournoodle.com","username":"tonyb"},"change_message_id":"e845808baa8183692163965e0e273635edc05fa1","unresolved":false,"context_lines":[{"line_number":45,"context_line":"number of systems in a given state without drilling down into each set."},{"line_number":46,"context_line":""},{"line_number":47,"context_line":"From a deployer\u0027s perspective, creating this dashboard with the existing APIs"},{"line_number":48,"context_line":"is very painful since pagination is required (assume more then the default of"},{"line_number":49,"context_line":"1k items). Also, processing time to get this data using the existing APIs"},{"line_number":50,"context_line":"(even the non-detailed) is slow (and possibly inaccurate -- see #3) compared"},{"line_number":51,"context_line":"to the processing time to get and return a single number."}],"source_content_type":"text/x-rst","patch_set":1,"id":"5a890539_cadbd97b","line":48,"updated":"2014-11-19 04:25:37.000000000","message":"s/then/than/","commit_id":"099ec135dc9c9eaaca03885d29a37fbf23b32eca"},{"author":{"_account_id":10559,"name":"Steven Kaufer","email":"kaufer@us.ibm.com","username":"kaufer"},"change_message_id":"85a0047921ec8a0937efa6eb6f1f8f07d7fb1f41","unresolved":false,"context_lines":[{"line_number":45,"context_line":"number of systems in a given state without drilling down into each set."},{"line_number":46,"context_line":""},{"line_number":47,"context_line":"From a deployer\u0027s perspective, creating this dashboard with the existing APIs"},{"line_number":48,"context_line":"is very painful since pagination is required (assume more then the default of"},{"line_number":49,"context_line":"1k items). Also, processing time to get this data using the existing APIs"},{"line_number":50,"context_line":"(even the non-detailed) is slow (and possibly inaccurate -- see #3) compared"},{"line_number":51,"context_line":"to the processing time to get and return a single number."}],"source_content_type":"text/x-rst","patch_set":1,"id":"5a890539_53722ae6","line":48,"in_reply_to":"5a890539_cadbd97b","updated":"2014-11-20 20:01:42.000000000","message":"Done","commit_id":"099ec135dc9c9eaaca03885d29a37fbf23b32eca"},{"author":{"_account_id":5292,"name":"Christopher Yeoh","email":"cbkyeoh@gmail.com","username":"cyeoh-0"},"change_message_id":"96f9bd840531be9724c8caaaa1675c3fb04c9d9a","unresolved":false,"context_lines":[{"line_number":134,"context_line":"to be added to nova.api.openstack.compute.plugins.v3.servers directly. Common"},{"line_number":135,"context_line":"filter processing needs to broken out into utility functions (same idea as the"},{"line_number":136,"context_line":"v2 API). For v3, the \u0027count\u0027 GET API can be registered with the Servers"},{"line_number":137,"context_line":"extensions.V3APIExtensionBase directly."},{"line_number":138,"context_line":""},{"line_number":139,"context_line":"Alternatives"},{"line_number":140,"context_line":"------------"}],"source_content_type":"text/x-rst","patch_set":1,"id":"5a890539_cef7f157","line":137,"updated":"2014-11-14 06:45:46.000000000","message":"So others may disagree, but I think that we just implement this in v2.1? V2.1 should be fully merged in 2-3 weeks and we can use microversions for the api part. Otherwise its yet another dummy extension time.","commit_id":"099ec135dc9c9eaaca03885d29a37fbf23b32eca"},{"author":{"_account_id":10559,"name":"Steven Kaufer","email":"kaufer@us.ibm.com","username":"kaufer"},"change_message_id":"85a0047921ec8a0937efa6eb6f1f8f07d7fb1f41","unresolved":false,"context_lines":[{"line_number":134,"context_line":"to be added to nova.api.openstack.compute.plugins.v3.servers directly. Common"},{"line_number":135,"context_line":"filter processing needs to broken out into utility functions (same idea as the"},{"line_number":136,"context_line":"v2 API). For v3, the \u0027count\u0027 GET API can be registered with the Servers"},{"line_number":137,"context_line":"extensions.V3APIExtensionBase directly."},{"line_number":138,"context_line":""},{"line_number":139,"context_line":"Alternatives"},{"line_number":140,"context_line":"------------"}],"source_content_type":"text/x-rst","patch_set":1,"id":"5a890539_735d6648","line":137,"in_reply_to":"5a890539_4ae8c916","updated":"2014-11-20 20:01:42.000000000","message":"Ok, I think that I\u0027ll leave this as is.  I will also change the references from v3 to v2.1 elsewhere in this spec.","commit_id":"099ec135dc9c9eaaca03885d29a37fbf23b32eca"},{"author":{"_account_id":10559,"name":"Steven Kaufer","email":"kaufer@us.ibm.com","username":"kaufer"},"change_message_id":"cf1184f2d302a43a88f727d4cd4da68d47fc0438","unresolved":false,"context_lines":[{"line_number":134,"context_line":"to be added to nova.api.openstack.compute.plugins.v3.servers directly. Common"},{"line_number":135,"context_line":"filter processing needs to broken out into utility functions (same idea as the"},{"line_number":136,"context_line":"v2 API). For v3, the \u0027count\u0027 GET API can be registered with the Servers"},{"line_number":137,"context_line":"extensions.V3APIExtensionBase directly."},{"line_number":138,"context_line":""},{"line_number":139,"context_line":"Alternatives"},{"line_number":140,"context_line":"------------"}],"source_content_type":"text/x-rst","patch_set":1,"id":"5a890539_fb327fa5","line":137,"in_reply_to":"5a890539_cef7f157","updated":"2014-11-17 03:16:56.000000000","message":"So this would go into v2.1 only?  Can you point me to some doc that explains how this will work?","commit_id":"099ec135dc9c9eaaca03885d29a37fbf23b32eca"},{"author":{"_account_id":5292,"name":"Christopher Yeoh","email":"cbkyeoh@gmail.com","username":"cyeoh-0"},"change_message_id":"38cffd09b5799f89d781ae794cb796c6cf7c4f4a","unresolved":false,"context_lines":[{"line_number":134,"context_line":"to be added to nova.api.openstack.compute.plugins.v3.servers directly. Common"},{"line_number":135,"context_line":"filter processing needs to broken out into utility functions (same idea as the"},{"line_number":136,"context_line":"v2 API). For v3, the \u0027count\u0027 GET API can be registered with the Servers"},{"line_number":137,"context_line":"extensions.V3APIExtensionBase directly."},{"line_number":138,"context_line":""},{"line_number":139,"context_line":"Alternatives"},{"line_number":140,"context_line":"------------"}],"source_content_type":"text/x-rst","patch_set":1,"id":"5a890539_4ae8c916","line":137,"in_reply_to":"5a890539_fb327fa5","updated":"2014-11-19 04:20:55.000000000","message":"I was just thinking that it would be less work for you if v2.1 is ready. But maybe lower risk for you if you just put it in v2 and v2.1 given I\u0027m not yet sure of the timing for the landing of microversions yet. It was just a thought bubble at the time I guess...\n\nThe microversions spec describes how you can test incoming request versions and base your behaviour on that. We\u0027ll have some better docs once we get closer to landing the patches","commit_id":"099ec135dc9c9eaaca03885d29a37fbf23b32eca"},{"author":{"_account_id":12898,"name":"Tony Breeds","email":"tony@bakeyournoodle.com","username":"tonyb"},"change_message_id":"e845808baa8183692163965e0e273635edc05fa1","unresolved":false,"context_lines":[{"line_number":148,"context_line":"getting summary count data at scale.  For example, if the total cloud has 5k"},{"line_number":149,"context_line":"VMs then doing paginated queries to iterate over the non-detailed \u0027/servers\u0027"},{"line_number":150,"context_line":"API with a filter and limit/marker is really inefficient -- the API is going"},{"line_number":151,"context_line":"to return more data then the user cares about (and do a lot of processing to"},{"line_number":152,"context_line":"get it).  Assume that there are 2,500 instances in an active state; if the"},{"line_number":153,"context_line":"non-detailed query (and the default limit of 1k) is used then the application"},{"line_number":154,"context_line":"would have to make 3 separate REST API calls to get the all of the VMs and,"}],"source_content_type":"text/x-rst","patch_set":1,"id":"5a890539_6a62e5ae","line":151,"updated":"2014-11-19 04:25:37.000000000","message":"s/then/than/","commit_id":"099ec135dc9c9eaaca03885d29a37fbf23b32eca"},{"author":{"_account_id":10559,"name":"Steven Kaufer","email":"kaufer@us.ibm.com","username":"kaufer"},"change_message_id":"85a0047921ec8a0937efa6eb6f1f8f07d7fb1f41","unresolved":false,"context_lines":[{"line_number":148,"context_line":"getting summary count data at scale.  For example, if the total cloud has 5k"},{"line_number":149,"context_line":"VMs then doing paginated queries to iterate over the non-detailed \u0027/servers\u0027"},{"line_number":150,"context_line":"API with a filter and limit/marker is really inefficient -- the API is going"},{"line_number":151,"context_line":"to return more data then the user cares about (and do a lot of processing to"},{"line_number":152,"context_line":"get it).  Assume that there are 2,500 instances in an active state; if the"},{"line_number":153,"context_line":"non-detailed query (and the default limit of 1k) is used then the application"},{"line_number":154,"context_line":"would have to make 3 separate REST API calls to get the all of the VMs and,"}],"source_content_type":"text/x-rst","patch_set":1,"id":"5a890539_f3307609","line":151,"in_reply_to":"5a890539_6a62e5ae","updated":"2014-11-20 20:01:42.000000000","message":"Done","commit_id":"099ec135dc9c9eaaca03885d29a37fbf23b32eca"},{"author":{"_account_id":5292,"name":"Christopher Yeoh","email":"cbkyeoh@gmail.com","username":"cyeoh-0"},"change_message_id":"96f9bd840531be9724c8caaaa1675c3fb04c9d9a","unresolved":false,"context_lines":[{"line_number":190,"context_line":""},{"line_number":191,"context_line":"* NEW v2 URL: v2/{tenant_id}/servers/count"},{"line_number":192,"context_line":""},{"line_number":193,"context_line":"* NEW v3 URL: v3/servers/count"},{"line_number":194,"context_line":""},{"line_number":195,"context_line":"* Description: Get number of servers"},{"line_number":196,"context_line":""}],"source_content_type":"text/x-rst","patch_set":1,"id":"5a890539_4ea3014f","line":193,"updated":"2014-11-14 06:45:46.000000000","message":"so although we have a v3 directory its all v2.1 now and it has the tenant id back in the patch again for v2 compat :-(","commit_id":"099ec135dc9c9eaaca03885d29a37fbf23b32eca"},{"author":{"_account_id":10559,"name":"Steven Kaufer","email":"kaufer@us.ibm.com","username":"kaufer"},"change_message_id":"cf1184f2d302a43a88f727d4cd4da68d47fc0438","unresolved":false,"context_lines":[{"line_number":190,"context_line":""},{"line_number":191,"context_line":"* NEW v2 URL: v2/{tenant_id}/servers/count"},{"line_number":192,"context_line":""},{"line_number":193,"context_line":"* NEW v3 URL: v3/servers/count"},{"line_number":194,"context_line":""},{"line_number":195,"context_line":"* Description: Get number of servers"},{"line_number":196,"context_line":""}],"source_content_type":"text/x-rst","patch_set":1,"id":"5a890539_7b1e8f0d","line":193,"in_reply_to":"5a890539_4ea3014f","updated":"2014-11-17 03:16:56.000000000","message":"Ok, so the v.2.1 URL will be v2.1/{tenant_id}/servers/count, correct?","commit_id":"099ec135dc9c9eaaca03885d29a37fbf23b32eca"},{"author":{"_account_id":5292,"name":"Christopher Yeoh","email":"cbkyeoh@gmail.com","username":"cyeoh-0"},"change_message_id":"38cffd09b5799f89d781ae794cb796c6cf7c4f4a","unresolved":false,"context_lines":[{"line_number":190,"context_line":""},{"line_number":191,"context_line":"* NEW v2 URL: v2/{tenant_id}/servers/count"},{"line_number":192,"context_line":""},{"line_number":193,"context_line":"* NEW v3 URL: v3/servers/count"},{"line_number":194,"context_line":""},{"line_number":195,"context_line":"* Description: Get number of servers"},{"line_number":196,"context_line":""}],"source_content_type":"text/x-rst","patch_set":1,"id":"5a890539_aaf76df4","line":193,"in_reply_to":"5a890539_7b1e8f0d","updated":"2014-11-19 04:20:55.000000000","message":"yes the v2.1 api will look exactly the same to users as the v2 api (at least until we start landing microversion based changes)","commit_id":"099ec135dc9c9eaaca03885d29a37fbf23b32eca"},{"author":{"_account_id":5292,"name":"Christopher Yeoh","email":"cbkyeoh@gmail.com","username":"cyeoh-0"},"change_message_id":"96f9bd840531be9724c8caaaa1675c3fb04c9d9a","unresolved":false,"context_lines":[{"line_number":199,"context_line":"* Normal Response Codes: Same as the \u0027v2/{tenant_id}/servers/detail\u0027 API):"},{"line_number":200,"context_line":""},{"line_number":201,"context_line":"  * 200"},{"line_number":202,"context_line":"  * 203"},{"line_number":203,"context_line":""},{"line_number":204,"context_line":"* Error Response Codes (same as the \u0027v2/{tenant_id}/servers/detail\u0027 API):"},{"line_number":205,"context_line":""}],"source_content_type":"text/x-rst","patch_set":1,"id":"5a890539_ae91c5f2","line":202,"updated":"2014-11-14 06:45:46.000000000","message":"hrm not sure where 203 comes from?","commit_id":"099ec135dc9c9eaaca03885d29a37fbf23b32eca"},{"author":{"_account_id":5292,"name":"Christopher Yeoh","email":"cbkyeoh@gmail.com","username":"cyeoh-0"},"change_message_id":"38cffd09b5799f89d781ae794cb796c6cf7c4f4a","unresolved":false,"context_lines":[{"line_number":199,"context_line":"* Normal Response Codes: Same as the \u0027v2/{tenant_id}/servers/detail\u0027 API):"},{"line_number":200,"context_line":""},{"line_number":201,"context_line":"  * 200"},{"line_number":202,"context_line":"  * 203"},{"line_number":203,"context_line":""},{"line_number":204,"context_line":"* Error Response Codes (same as the \u0027v2/{tenant_id}/servers/detail\u0027 API):"},{"line_number":205,"context_line":""}],"source_content_type":"text/x-rst","patch_set":1,"id":"5a890539_ea46d520","line":202,"in_reply_to":"5a890539_9bf09bca","updated":"2014-11-19 04:20:55.000000000","message":"So I wonder if the docs are wrong? I couldn\u0027t find any reference to a 203 in the code for detail. Unless you\u0027re planning on using it for count probably best to drop it.","commit_id":"099ec135dc9c9eaaca03885d29a37fbf23b32eca"},{"author":{"_account_id":10559,"name":"Steven Kaufer","email":"kaufer@us.ibm.com","username":"kaufer"},"change_message_id":"cf1184f2d302a43a88f727d4cd4da68d47fc0438","unresolved":false,"context_lines":[{"line_number":199,"context_line":"* Normal Response Codes: Same as the \u0027v2/{tenant_id}/servers/detail\u0027 API):"},{"line_number":200,"context_line":""},{"line_number":201,"context_line":"  * 200"},{"line_number":202,"context_line":"  * 203"},{"line_number":203,"context_line":""},{"line_number":204,"context_line":"* Error Response Codes (same as the \u0027v2/{tenant_id}/servers/detail\u0027 API):"},{"line_number":205,"context_line":""}],"source_content_type":"text/x-rst","patch_set":1,"id":"5a890539_9bf09bca","line":202,"in_reply_to":"5a890539_ae91c5f2","updated":"2014-11-17 03:16:56.000000000","message":"I just copied this from the current nova API doc here:  http://developer.openstack.org/api-ref-compute-v2.html\n\nUnder the GET /v2/?{tenant_id}?/servers doc there is:\nNormal response codes  200, 203","commit_id":"099ec135dc9c9eaaca03885d29a37fbf23b32eca"},{"author":{"_account_id":10559,"name":"Steven Kaufer","email":"kaufer@us.ibm.com","username":"kaufer"},"change_message_id":"85a0047921ec8a0937efa6eb6f1f8f07d7fb1f41","unresolved":false,"context_lines":[{"line_number":199,"context_line":"* Normal Response Codes: Same as the \u0027v2/{tenant_id}/servers/detail\u0027 API):"},{"line_number":200,"context_line":""},{"line_number":201,"context_line":"  * 200"},{"line_number":202,"context_line":"  * 203"},{"line_number":203,"context_line":""},{"line_number":204,"context_line":"* Error Response Codes (same as the \u0027v2/{tenant_id}/servers/detail\u0027 API):"},{"line_number":205,"context_line":""}],"source_content_type":"text/x-rst","patch_set":1,"id":"5a890539_730ba62b","line":202,"in_reply_to":"5a890539_ea46d520","updated":"2014-11-20 20:01:42.000000000","message":"Done","commit_id":"099ec135dc9c9eaaca03885d29a37fbf23b32eca"},{"author":{"_account_id":5292,"name":"Christopher Yeoh","email":"cbkyeoh@gmail.com","username":"cyeoh-0"},"change_message_id":"a34d6fa54c3fa1b6397c88e4630d9982b65ecd64","unresolved":false,"context_lines":[{"line_number":188,"context_line":"  * Name: ServerCounts"},{"line_number":189,"context_line":"  * Alias: os-server-counts"},{"line_number":190,"context_line":""},{"line_number":191,"context_line":"* NEW v2 URL: v2/{tenant_id}/servers/count"},{"line_number":192,"context_line":""},{"line_number":193,"context_line":"* NEW v2.1 URL: v2.1/{tenant_id}/servers/count"},{"line_number":194,"context_line":""}],"source_content_type":"text/x-rst","patch_set":2,"id":"3a961159_6c9a656f","line":191,"updated":"2014-12-12 06:20:04.000000000","message":"Depending on when 2.1 goes live this might be a 2.1 only thing","commit_id":"41b0887113401f6308af0e34b3aa5203f08957d2"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"6bac29067c2e184eacb6dacdd01ad2885774b5f6","unresolved":false,"context_lines":[{"line_number":43,"context_line":"there are many instances in \u0027error\u0027. It is likely that once the admin sees"},{"line_number":44,"context_line":"this count that they will then drill down into the data. However, without"},{"line_number":45,"context_line":"this new API support, the admin will not know if there are unacceptable"},{"line_number":46,"context_line":"number of systems in a given state without drilling down into each set."},{"line_number":47,"context_line":""},{"line_number":48,"context_line":"From a deployer\u0027s perspective, creating this dashboard with the existing APIs"},{"line_number":49,"context_line":"is very painful since pagination is required (assume more then the default of"}],"source_content_type":"text/x-rst","patch_set":3,"id":"3a961159_295a8c83","line":46,"updated":"2014-12-17 01:43:53.000000000","message":"Why not offer a better admin API experience and have URIs like GET /reports/servers-group-by-status, or GET /reports/servers-error-group-by-fault-code or something like that? I mean, address the actual use case above instead of changing the main REST API to return an optional count?","commit_id":"26c4af4bd51bf8199996bddee9114ede4bfb6cc0"},{"author":{"_account_id":10559,"name":"Steven Kaufer","email":"kaufer@us.ibm.com","username":"kaufer"},"change_message_id":"c44a8dba52b58ad7fa96669ebed480f0be4ea3ed","unresolved":false,"context_lines":[{"line_number":43,"context_line":"there are many instances in \u0027error\u0027. It is likely that once the admin sees"},{"line_number":44,"context_line":"this count that they will then drill down into the data. However, without"},{"line_number":45,"context_line":"this new API support, the admin will not know if there are unacceptable"},{"line_number":46,"context_line":"number of systems in a given state without drilling down into each set."},{"line_number":47,"context_line":""},{"line_number":48,"context_line":"From a deployer\u0027s perspective, creating this dashboard with the existing APIs"},{"line_number":49,"context_line":"is very painful since pagination is required (assume more then the default of"}],"source_content_type":"text/x-rst","patch_set":3,"id":"3a961159_84ca7318","line":46,"in_reply_to":"3a961159_295a8c83","updated":"2014-12-17 16:00:28.000000000","message":"I agree.  This use case is really an artifact of the original spec that contained a dedicated /servers/count API that only retrieved a count value.  Now that the scope if this has changed to include the total count on the existing REST API then this use case is no longer applicable.\n\nThe \"reports\" API idea is an intriguing concept :)","commit_id":"26c4af4bd51bf8199996bddee9114ede4bfb6cc0"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"6bac29067c2e184eacb6dacdd01ad2885774b5f6","unresolved":false,"context_lines":[{"line_number":57,"context_line":"\"infinite scrolling\" where they have no idea how many items really are in the"},{"line_number":58,"context_line":"list (more just show up as you scroll down or navigate to the next page)."},{"line_number":59,"context_line":"Using this new count API support, the UI table can indicate how many total"},{"line_number":60,"context_line":"items are in the list (ie, showing 1-20 of 1000)."},{"line_number":61,"context_line":""},{"line_number":62,"context_line":"Assume that you have 500 instances in error state and that you can open a UI"},{"line_number":63,"context_line":"table showing their details -- when creating the table, assume that the UI"}],"source_content_type":"text/x-rst","patch_set":3,"id":"3a961159_495fd872","line":60,"updated":"2014-12-17 01:43:53.000000000","message":"I am extremely dubious of this particular use case, as I\u0027ve stated on the mailing lists :) Honestly, what value does knowing that there are 4381 pages of results give the user?","commit_id":"26c4af4bd51bf8199996bddee9114ede4bfb6cc0"},{"author":{"_account_id":10559,"name":"Steven Kaufer","email":"kaufer@us.ibm.com","username":"kaufer"},"change_message_id":"c44a8dba52b58ad7fa96669ebed480f0be4ea3ed","unresolved":false,"context_lines":[{"line_number":57,"context_line":"\"infinite scrolling\" where they have no idea how many items really are in the"},{"line_number":58,"context_line":"list (more just show up as you scroll down or navigate to the next page)."},{"line_number":59,"context_line":"Using this new count API support, the UI table can indicate how many total"},{"line_number":60,"context_line":"items are in the list (ie, showing 1-20 of 1000)."},{"line_number":61,"context_line":""},{"line_number":62,"context_line":"Assume that you have 500 instances in error state and that you can open a UI"},{"line_number":63,"context_line":"table showing their details -- when creating the table, assume that the UI"}],"source_content_type":"text/x-rst","patch_set":3,"id":"3a961159_3fc8e873","line":60,"in_reply_to":"3a961159_495fd872","updated":"2014-12-17 16:00:28.000000000","message":"I agree that once the number of items is \"big enough\" then the value of knowing the exact number decreases.\n\nHowever, IMO, if you are in a UI table that only shows 5 rows then there is value in knowing if you are seeing \"1-5 of 6\" or \"1-5 of 20\" or \"1-5 of 100\".","commit_id":"26c4af4bd51bf8199996bddee9114ede4bfb6cc0"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"6bac29067c2e184eacb6dacdd01ad2885774b5f6","unresolved":false,"context_lines":[{"line_number":67,"context_line":"to the \u0027servers in error state\u0027 table -- the UI only retrieves the first 100"},{"line_number":68,"context_line":"items so it impossible to know if there are 101 total items or 500 total"},{"line_number":69,"context_line":"items. As an admin, I would like to know what the total number of items in the"},{"line_number":70,"context_line":"table is."},{"line_number":71,"context_line":""},{"line_number":72,"context_line":"Use Case 3:  Inherent timing window when adding a new item with limit/marker"},{"line_number":73,"context_line":"processing. Assume that you are using pagination to iterate over the data to"}],"source_content_type":"text/x-rst","patch_set":3,"id":"3a961159_6953b46c","line":70,"updated":"2014-12-17 01:43:53.000000000","message":"See above about actually solving this use case with a good reporting API.","commit_id":"26c4af4bd51bf8199996bddee9114ede4bfb6cc0"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"6bac29067c2e184eacb6dacdd01ad2885774b5f6","unresolved":false,"context_lines":[{"line_number":76,"context_line":"will not detect that this new item was added."},{"line_number":77,"context_line":""},{"line_number":78,"context_line":"While this timing window is small, it does exist so getting an accurate count"},{"line_number":79,"context_line":"using this method is not guaranteed to be accurate."},{"line_number":80,"context_line":""},{"line_number":81,"context_line":"I realize that you can argue that the count API may not handle this UI use case"},{"line_number":82,"context_line":"either. However, the count will always be accurate from the DB at the time that"}],"source_content_type":"text/x-rst","patch_set":3,"id":"3a961159_8950e05f","line":79,"updated":"2014-12-17 01:43:53.000000000","message":"Meh. This particular use case is less than convincing. If I do a Google Search on \"OpenStack\", navigate to second page, then five minutes (or five seconds) later, I go back to the first page and see a result that wasn\u0027t there before, so what? All it means is that there is a new result item that now belongs in that first page of results because either it was newly added or some part of its state changed so that it belonged in the first page of results. This is a non-use-case IMO.","commit_id":"26c4af4bd51bf8199996bddee9114ede4bfb6cc0"},{"author":{"_account_id":10559,"name":"Steven Kaufer","email":"kaufer@us.ibm.com","username":"kaufer"},"change_message_id":"c44a8dba52b58ad7fa96669ebed480f0be4ea3ed","unresolved":false,"context_lines":[{"line_number":76,"context_line":"will not detect that this new item was added."},{"line_number":77,"context_line":""},{"line_number":78,"context_line":"While this timing window is small, it does exist so getting an accurate count"},{"line_number":79,"context_line":"using this method is not guaranteed to be accurate."},{"line_number":80,"context_line":""},{"line_number":81,"context_line":"I realize that you can argue that the count API may not handle this UI use case"},{"line_number":82,"context_line":"either. However, the count will always be accurate from the DB at the time that"}],"source_content_type":"text/x-rst","patch_set":3,"id":"3a961159_bf8218fe","line":79,"in_reply_to":"3a961159_8950e05f","updated":"2014-12-17 16:00:28.000000000","message":"I agree; I was attempting to show the the only other alternative for getting a count (ie, multiple GET queries using pagination) was not guaranteed to be accurate and that a single count() sqlalchemy operation would be.\n\nI will remove this use case.","commit_id":"26c4af4bd51bf8199996bddee9114ede4bfb6cc0"},{"author":{"_account_id":10559,"name":"Steven Kaufer","email":"kaufer@us.ibm.com","username":"kaufer"},"change_message_id":"c44a8dba52b58ad7fa96669ebed480f0be4ea3ed","unresolved":false,"context_lines":[{"line_number":83,"context_line":"the .count() function was processed -- the same claim cannot be made about"},{"line_number":84,"context_line":"getting the count using limit/marker since multiple DB calls are being invoked"},{"line_number":85,"context_line":"to calculate the number."},{"line_number":86,"context_line":""},{"line_number":87,"context_line":""},{"line_number":88,"context_line":"Project Priority"},{"line_number":89,"context_line":"----------------"}],"source_content_type":"text/x-rst","patch_set":3,"id":"3a961159_1fc5ec3c","line":86,"updated":"2014-12-17 16:00:28.000000000","message":"Now that all 3 of my use cases have been reviewed it is obvious that I need to re-work them.\n\nSince the scope of this spec has change to include a query parameter on the existing API then, IMO, there is only a single use case: Knowing the total count of instances during pagination queries.","commit_id":"26c4af4bd51bf8199996bddee9114ede4bfb6cc0"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"6bac29067c2e184eacb6dacdd01ad2885774b5f6","unresolved":false,"context_lines":[{"line_number":109,"context_line":"will follow the existing functions used for retrieving server instances, for"},{"line_number":110,"context_line":"example:"},{"line_number":111,"context_line":""},{"line_number":112,"context_line":"* Compute API: get_count function"},{"line_number":113,"context_line":""},{"line_number":114,"context_line":"* Instance layer (InstanceList class): get_count_by_filters function"},{"line_number":115,"context_line":""}],"source_content_type":"text/x-rst","patch_set":3,"id":"3a961159_a94d9cc6","line":112,"updated":"2014-12-17 01:43:53.000000000","message":"Why? Shouldn\u0027t the get_servers() compute API method just return a tuple with the results of the DB query and the total count instead of creating a new get_count() method? I\u0027m thinking here of having a single RPC call to the conductor to grab an InstanceList object. I don\u0027t want to have to do two RPC calls, one for the results and another for the count.","commit_id":"26c4af4bd51bf8199996bddee9114ede4bfb6cc0"},{"author":{"_account_id":10559,"name":"Steven Kaufer","email":"kaufer@us.ibm.com","username":"kaufer"},"change_message_id":"c44a8dba52b58ad7fa96669ebed480f0be4ea3ed","unresolved":false,"context_lines":[{"line_number":109,"context_line":"will follow the existing functions used for retrieving server instances, for"},{"line_number":110,"context_line":"example:"},{"line_number":111,"context_line":""},{"line_number":112,"context_line":"* Compute API: get_count function"},{"line_number":113,"context_line":""},{"line_number":114,"context_line":"* Instance layer (InstanceList class): get_count_by_filters function"},{"line_number":115,"context_line":""}],"source_content_type":"text/x-rst","patch_set":3,"id":"3a961159_7a5efeea","line":112,"in_reply_to":"3a961159_a94d9cc6","updated":"2014-12-17 16:00:28.000000000","message":"Ok, this makes sense. So then the current compute API get_all function would then have a new include_count\u003dFalse kwarg which, if True, would return a tuple of (servers, count).","commit_id":"26c4af4bd51bf8199996bddee9114ede4bfb6cc0"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"6bac29067c2e184eacb6dacdd01ad2885774b5f6","unresolved":false,"context_lines":[{"line_number":111,"context_line":""},{"line_number":112,"context_line":"* Compute API: get_count function"},{"line_number":113,"context_line":""},{"line_number":114,"context_line":"* Instance layer (InstanceList class): get_count_by_filters function"},{"line_number":115,"context_line":""},{"line_number":116,"context_line":"* DB layer: instance_count_by_filters function"},{"line_number":117,"context_line":""}],"source_content_type":"text/x-rst","patch_set":3,"id":"3a961159_c94ae8ab","line":114,"updated":"2014-12-17 01:43:53.000000000","message":"See above... this is a performance problem. We want to do it all in a single RPC call.","commit_id":"26c4af4bd51bf8199996bddee9114ede4bfb6cc0"},{"author":{"_account_id":10559,"name":"Steven Kaufer","email":"kaufer@us.ibm.com","username":"kaufer"},"change_message_id":"c44a8dba52b58ad7fa96669ebed480f0be4ea3ed","unresolved":false,"context_lines":[{"line_number":111,"context_line":""},{"line_number":112,"context_line":"* Compute API: get_count function"},{"line_number":113,"context_line":""},{"line_number":114,"context_line":"* Instance layer (InstanceList class): get_count_by_filters function"},{"line_number":115,"context_line":""},{"line_number":116,"context_line":"* DB layer: instance_count_by_filters function"},{"line_number":117,"context_line":""}],"source_content_type":"text/x-rst","patch_set":3,"id":"3a961159_1af41ace","line":114,"in_reply_to":"3a961159_c94ae8ab","updated":"2014-12-17 16:00:28.000000000","message":"Agreed.\n\nInstanceList.get_by_filters would also have the same new include_count kwarg and conditionally return the same (servers, count) tuple.","commit_id":"26c4af4bd51bf8199996bddee9114ede4bfb6cc0"},{"author":{"_account_id":10559,"name":"Steven Kaufer","email":"kaufer@us.ibm.com","username":"kaufer"},"change_message_id":"c44a8dba52b58ad7fa96669ebed480f0be4ea3ed","unresolved":false,"context_lines":[{"line_number":113,"context_line":""},{"line_number":114,"context_line":"* Instance layer (InstanceList class): get_count_by_filters function"},{"line_number":115,"context_line":""},{"line_number":116,"context_line":"* DB layer: instance_count_by_filters function"},{"line_number":117,"context_line":""},{"line_number":118,"context_line":"* Sqlalchemy layer: instance_count_by_filters function"},{"line_number":119,"context_line":""}],"source_content_type":"text/x-rst","patch_set":3,"id":"3a961159_fa1f4e07","line":116,"updated":"2014-12-17 16:00:28.000000000","message":"At the DB layer we would still want a separate function correct?  We would not want to return the (servers, count) tuple here.","commit_id":"26c4af4bd51bf8199996bddee9114ede4bfb6cc0"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"6bac29067c2e184eacb6dacdd01ad2885774b5f6","unresolved":false,"context_lines":[{"line_number":164,"context_line":"consistency and prevent dual maintenance."},{"line_number":165,"context_line":""},{"line_number":166,"context_line":"A v2.1 API extension count be created in order to conditionally honor the new"},{"line_number":167,"context_line":"query parameter."},{"line_number":168,"context_line":""},{"line_number":169,"context_line":"Data model impact"},{"line_number":170,"context_line":"-----------------"}],"source_content_type":"text/x-rst","patch_set":3,"id":"3a961159_e9c6c415","line":167,"updated":"2014-12-17 01:43:53.000000000","message":"There are other alternatives. We could use the MySQL FOUND_ROWS() function along with the SQL_CALC_FOUND_ROWS hint:\n\nhttp://dev.mysql.com/doc/refman/5.0/en/information-functions.html#function_found-rows\n\nand the PostgreSQL alternative that uses windowing functions:\n\nhttp://www.postgresql.org/docs/current/interactive/tutorial-window.html","commit_id":"26c4af4bd51bf8199996bddee9114ede4bfb6cc0"},{"author":{"_account_id":10559,"name":"Steven Kaufer","email":"kaufer@us.ibm.com","username":"kaufer"},"change_message_id":"c44a8dba52b58ad7fa96669ebed480f0be4ea3ed","unresolved":false,"context_lines":[{"line_number":164,"context_line":"consistency and prevent dual maintenance."},{"line_number":165,"context_line":""},{"line_number":166,"context_line":"A v2.1 API extension count be created in order to conditionally honor the new"},{"line_number":167,"context_line":"query parameter."},{"line_number":168,"context_line":""},{"line_number":169,"context_line":"Data model impact"},{"line_number":170,"context_line":"-----------------"}],"source_content_type":"text/x-rst","patch_set":3,"id":"3a961159_5f53f438","line":167,"in_reply_to":"3a961159_e9c6c415","updated":"2014-12-17 16:00:28.000000000","message":"With sqlalchemy are these options available?  In my prototype I simple called the count() function on the query_prefix to retrieve the count.","commit_id":"26c4af4bd51bf8199996bddee9114ede4bfb6cc0"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"6bac29067c2e184eacb6dacdd01ad2885774b5f6","unresolved":false,"context_lines":[{"line_number":217,"context_line":"\u003e             \"rel\": \"count\""},{"line_number":218,"context_line":"\u003e         }"},{"line_number":219,"context_line":"\u003e     ]"},{"line_number":220,"context_line":"\u003e }"},{"line_number":221,"context_line":""},{"line_number":222,"context_line":"Security impact"},{"line_number":223,"context_line":"---------------"}],"source_content_type":"text/x-rst","patch_set":3,"id":"3a961159_09ccf034","line":220,"updated":"2014-12-17 01:43:53.000000000","message":"-1 on this. link objects are meant to be hrefs, not data points. The count is a data point about the links, not a link object itself, therefore it belongs as a distinct member of the outermost object. So, something like:\n\n {\n \"servers\": [...],\n \"server_links\": [...],\n \"found_rows\": \u003cint\u003e\n }\n\nwould be more appropriate.","commit_id":"26c4af4bd51bf8199996bddee9114ede4bfb6cc0"},{"author":{"_account_id":10559,"name":"Steven Kaufer","email":"kaufer@us.ibm.com","username":"kaufer"},"change_message_id":"c44a8dba52b58ad7fa96669ebed480f0be4ea3ed","unresolved":false,"context_lines":[{"line_number":217,"context_line":"\u003e             \"rel\": \"count\""},{"line_number":218,"context_line":"\u003e         }"},{"line_number":219,"context_line":"\u003e     ]"},{"line_number":220,"context_line":"\u003e }"},{"line_number":221,"context_line":""},{"line_number":222,"context_line":"Security impact"},{"line_number":223,"context_line":"---------------"}],"source_content_type":"text/x-rst","patch_set":3,"id":"3a961159_3f2f08a3","line":220,"in_reply_to":"3a961159_09ccf034","updated":"2014-12-17 16:00:28.000000000","message":"Agreed, will update to your example above.","commit_id":"26c4af4bd51bf8199996bddee9114ede4bfb6cc0"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"6bac29067c2e184eacb6dacdd01ad2885774b5f6","unresolved":false,"context_lines":[{"line_number":238,"context_line":"------------------"},{"line_number":239,"context_line":""},{"line_number":240,"context_line":"None -- This new API is not introducing any new DB joins that would affect"},{"line_number":241,"context_line":"performance."},{"line_number":242,"context_line":""},{"line_number":243,"context_line":"Other deployer impact"},{"line_number":244,"context_line":"---------------------"}],"source_content_type":"text/x-rst","patch_set":3,"id":"3a961159_29d1accd","line":241,"updated":"2014-12-17 01:43:53.000000000","message":"Joins aren\u0027t the only thing that affects performance. Doing the exact same query *twice* does affect performance, and this implementation does exactly that: two queries, one for the page of results and one for the count, for each API call.","commit_id":"26c4af4bd51bf8199996bddee9114ede4bfb6cc0"},{"author":{"_account_id":10559,"name":"Steven Kaufer","email":"kaufer@us.ibm.com","username":"kaufer"},"change_message_id":"c44a8dba52b58ad7fa96669ebed480f0be4ea3ed","unresolved":false,"context_lines":[{"line_number":238,"context_line":"------------------"},{"line_number":239,"context_line":""},{"line_number":240,"context_line":"None -- This new API is not introducing any new DB joins that would affect"},{"line_number":241,"context_line":"performance."},{"line_number":242,"context_line":""},{"line_number":243,"context_line":"Other deployer impact"},{"line_number":244,"context_line":"---------------------"}],"source_content_type":"text/x-rst","patch_set":3,"id":"3a961159_ff0bc028","line":241,"in_reply_to":"3a961159_29d1accd","updated":"2014-12-17 16:00:28.000000000","message":"Agreed.\n\nI will update the spec to state that, when including the new query parameter, an additional DB call will be made; however, we will ensure that this is done in a single RPC call.","commit_id":"26c4af4bd51bf8199996bddee9114ede4bfb6cc0"}],"specs/liberty/approved/server-count-api.rst":[{"author":{"_account_id":13997,"name":"SHIGEMATSU Mitsuhiro","email":"shigematsu.mitsuhiro@lab.ntt.co.jp","username":"pshige"},"change_message_id":"fa860bff75d44682e40f834c7ebd77136a0aae9b","unresolved":false,"context_lines":[{"line_number":189,"context_line":""},{"line_number":190,"context_line":"If the with_count parameter is supplied, then (in addition to the DB"},{"line_number":191,"context_line":"operations required to get the server data) the sqlalchemy count"},{"line_number":192,"context_line":"fuction will be also executed. However, both of of these operations"},{"line_number":193,"context_line":"will execute in the same RPC."},{"line_number":194,"context_line":""},{"line_number":195,"context_line":"Other deployer impact"}],"source_content_type":"text/x-rst","patch_set":6,"id":"da20952f_fa3240f1","line":192,"updated":"2015-09-06 04:45:21.000000000","message":"s/fuction/function/; s/of of/of/;","commit_id":"65966880971c499fd929901441a7136355a15e57"},{"author":{"_account_id":7730,"name":"Sahid Orentino Ferdjaoui","email":"sahid.ferdjaoui@industrialdiscipline.com","username":"sahid"},"change_message_id":"5fb07036ecb3848c97b7f5305430af8b16d38ae0","unresolved":false,"context_lines":[{"line_number":190,"context_line":"If the with_count parameter is supplied, then (in addition to the DB"},{"line_number":191,"context_line":"operations required to get the server data) the sqlalchemy count"},{"line_number":192,"context_line":"fuction will be also executed. However, both of of these operations"},{"line_number":193,"context_line":"will execute in the same RPC."},{"line_number":194,"context_line":""},{"line_number":195,"context_line":"Other deployer impact"},{"line_number":196,"context_line":"---------------------"}],"source_content_type":"text/x-rst","patch_set":6,"id":"baa041b7_9a872461","line":193,"updated":"2015-04-02 20:37:34.000000000","message":"Thanks for this update. So you don\u0027t want add note about mysql and the function found_rows  even if this will avoid the necessity of an additional db operation\n\nhttps://dev.mysql.com/doc/refman/5.0/en/information-functions.html#function_found-rows","commit_id":"65966880971c499fd929901441a7136355a15e57"},{"author":{"_account_id":10559,"name":"Steven Kaufer","email":"kaufer@us.ibm.com","username":"kaufer"},"change_message_id":"54d430fe21af900dbae81402594865ae94a70fd7","unresolved":false,"context_lines":[{"line_number":190,"context_line":"If the with_count parameter is supplied, then (in addition to the DB"},{"line_number":191,"context_line":"operations required to get the server data) the sqlalchemy count"},{"line_number":192,"context_line":"fuction will be also executed. However, both of of these operations"},{"line_number":193,"context_line":"will execute in the same RPC."},{"line_number":194,"context_line":""},{"line_number":195,"context_line":"Other deployer impact"},{"line_number":196,"context_line":"---------------------"}],"source_content_type":"text/x-rst","patch_set":6,"id":"baa041b7_3a5ff842","line":193,"in_reply_to":"baa041b7_9a872461","updated":"2015-04-02 20:58:30.000000000","message":"Sahid: I don\u0027t know how this would be implemented since we are using sqlalchemy. Do you know how the found-rows function could be utilized in the nova code?","commit_id":"65966880971c499fd929901441a7136355a15e57"}],"specs/liberty/server-count-api.rst":[{"author":{"_account_id":7730,"name":"Sahid Orentino Ferdjaoui","email":"sahid.ferdjaoui@industrialdiscipline.com","username":"sahid"},"change_message_id":"18ccd01d62fab656ee67c9446db8e4ce0e5a0b11","unresolved":false,"context_lines":[{"line_number":190,"context_line":"If the with_count parameter is supplied, then an additional DB operation"},{"line_number":191,"context_line":"will executed. However, both of these DB operations will be executed in the"},{"line_number":192,"context_line":"same RPC."},{"line_number":193,"context_line":""},{"line_number":194,"context_line":"Other deployer impact"},{"line_number":195,"context_line":"---------------------"},{"line_number":196,"context_line":""}],"source_content_type":"text/x-rst","patch_set":5,"id":"9a80dd14_e8e01828","line":193,"updated":"2015-03-19 10:58:10.000000000","message":"You can use a particular mechanism with MySQL to retrieve the count with only one query, but I do not know with other database. Perhaps a note about it can be interesting to keep it in mind.\n\nhttps://dev.mysql.com/doc/refman/5.0/en/information-functions.html#function_found-rows","commit_id":"051c7316c2fc0348f87894c5d437a236499946ce"},{"author":{"_account_id":7730,"name":"Sahid Orentino Ferdjaoui","email":"sahid.ferdjaoui@industrialdiscipline.com","username":"sahid"},"change_message_id":"752718e28e63b64ed1935e8bb5104669d247d44d","unresolved":false,"context_lines":[{"line_number":190,"context_line":"If the with_count parameter is supplied, then an additional DB operation"},{"line_number":191,"context_line":"will executed. However, both of these DB operations will be executed in the"},{"line_number":192,"context_line":"same RPC."},{"line_number":193,"context_line":""},{"line_number":194,"context_line":"Other deployer impact"},{"line_number":195,"context_line":"---------------------"},{"line_number":196,"context_line":""}],"source_content_type":"text/x-rst","patch_set":5,"id":"9a80dd14_eb7ff714","line":193,"in_reply_to":"9a80dd14_1642e6aa","updated":"2015-03-20 13:29:42.000000000","message":"Not sure;  Can you tell me what is this additional DB operation?","commit_id":"051c7316c2fc0348f87894c5d437a236499946ce"},{"author":{"_account_id":10559,"name":"Steven Kaufer","email":"kaufer@us.ibm.com","username":"kaufer"},"change_message_id":"98ddfe3d5fb55e5a52b2df074bfbcb4486f4d1c9","unresolved":false,"context_lines":[{"line_number":190,"context_line":"If the with_count parameter is supplied, then an additional DB operation"},{"line_number":191,"context_line":"will executed. However, both of these DB operations will be executed in the"},{"line_number":192,"context_line":"same RPC."},{"line_number":193,"context_line":""},{"line_number":194,"context_line":"Other deployer impact"},{"line_number":195,"context_line":"---------------------"},{"line_number":196,"context_line":""}],"source_content_type":"text/x-rst","patch_set":5,"id":"9a80dd14_1642e6aa","line":193,"in_reply_to":"9a80dd14_e8e01828","updated":"2015-03-19 13:27:58.000000000","message":"Sahid,\n\nsqlalchemy should abstract this with the use of the \"count\" function (noted on line 90). See doc at:\n\nhttp://docs.sqlalchemy.org/en/rel_0_9/orm/tutorial.html\n\nhttp://docs.sqlalchemy.org/en/rel_0_9/orm/query.html\n\nDoes this address your concerns?","commit_id":"051c7316c2fc0348f87894c5d437a236499946ce"},{"author":{"_account_id":10559,"name":"Steven Kaufer","email":"kaufer@us.ibm.com","username":"kaufer"},"change_message_id":"feb3371198aefe60b8cccc823c29c31f7a470fc5","unresolved":false,"context_lines":[{"line_number":190,"context_line":"If the with_count parameter is supplied, then an additional DB operation"},{"line_number":191,"context_line":"will executed. However, both of these DB operations will be executed in the"},{"line_number":192,"context_line":"same RPC."},{"line_number":193,"context_line":""},{"line_number":194,"context_line":"Other deployer impact"},{"line_number":195,"context_line":"---------------------"},{"line_number":196,"context_line":""}],"source_content_type":"text/x-rst","patch_set":5,"id":"da9b358b_9c74d8fd","line":193,"in_reply_to":"9a80dd14_eb7ff714","updated":"2015-03-30 15:01:36.000000000","message":"Shaid: Sorry for the delay. I do not understand your question, what are you trying to understand? Do the sqlalchemy links provided above not contain the information that you are looking for?","commit_id":"051c7316c2fc0348f87894c5d437a236499946ce"},{"author":{"_account_id":7730,"name":"Sahid Orentino Ferdjaoui","email":"sahid.ferdjaoui@industrialdiscipline.com","username":"sahid"},"change_message_id":"3a7fedc77cf65d53b21d69d1c62eb865a648e7c0","unresolved":false,"context_lines":[{"line_number":190,"context_line":"If the with_count parameter is supplied, then an additional DB operation"},{"line_number":191,"context_line":"will executed. However, both of these DB operations will be executed in the"},{"line_number":192,"context_line":"same RPC."},{"line_number":193,"context_line":""},{"line_number":194,"context_line":"Other deployer impact"},{"line_number":195,"context_line":"---------------------"},{"line_number":196,"context_line":""}],"source_content_type":"text/x-rst","patch_set":5,"id":"baa041b7_e7d011cc","line":193,"in_reply_to":"baa041b7_1588be21","updated":"2015-04-01 16:35:32.000000000","message":"Yes and that is my point. It is not necessary to execute an additional db COUNT operation. You need to pass to the primary query SQL_CALC_FOUND_ROWS. I just wanted that you set a note about it.\n\nhttps://dev.mysql.com/doc/refman/5.0/en/information-functions.html#function_found-rows\n\nI have double checked with sqlalchemy#count, it does not handle in native this command.","commit_id":"051c7316c2fc0348f87894c5d437a236499946ce"},{"author":{"_account_id":7730,"name":"Sahid Orentino Ferdjaoui","email":"sahid.ferdjaoui@industrialdiscipline.com","username":"sahid"},"change_message_id":"18a42ac971e7f20fd7baf76890f0562cb2228efe","unresolved":false,"context_lines":[{"line_number":190,"context_line":"If the with_count parameter is supplied, then an additional DB operation"},{"line_number":191,"context_line":"will executed. However, both of these DB operations will be executed in the"},{"line_number":192,"context_line":"same RPC."},{"line_number":193,"context_line":""},{"line_number":194,"context_line":"Other deployer impact"},{"line_number":195,"context_line":"---------------------"},{"line_number":196,"context_line":""}],"source_content_type":"text/x-rst","patch_set":5,"id":"baa041b7_8e124e61","line":193,"in_reply_to":"baa041b7_9b5bdc54","updated":"2015-04-02 19:11:40.000000000","message":"finally... :) - Well I know that mysql support it so a least we can add a note about it.","commit_id":"051c7316c2fc0348f87894c5d437a236499946ce"},{"author":{"_account_id":10559,"name":"Steven Kaufer","email":"kaufer@us.ibm.com","username":"kaufer"},"change_message_id":"a19f403918c0be466f8b3d9d9e44d2dc7581be94","unresolved":false,"context_lines":[{"line_number":190,"context_line":"If the with_count parameter is supplied, then an additional DB operation"},{"line_number":191,"context_line":"will executed. However, both of these DB operations will be executed in the"},{"line_number":192,"context_line":"same RPC."},{"line_number":193,"context_line":""},{"line_number":194,"context_line":"Other deployer impact"},{"line_number":195,"context_line":"---------------------"},{"line_number":196,"context_line":""}],"source_content_type":"text/x-rst","patch_set":5,"id":"baa041b7_1588be21","line":193,"in_reply_to":"baa041b7_da6cc50a","updated":"2015-04-01 16:25:41.000000000","message":"I think that I understand your confusion.  So the DB operation here is abstracted by sqlalchemy -- the details for what exactly is being executed will be DB specific.\n\nIf line 190 is changed to the following would it help?\n\n- If the with_count parameter is supplied, then the additional sqlalchemy \"count\" function will be executed in order to determine the count.","commit_id":"051c7316c2fc0348f87894c5d437a236499946ce"},{"author":{"_account_id":10559,"name":"Steven Kaufer","email":"kaufer@us.ibm.com","username":"kaufer"},"change_message_id":"e22ae2e5172eb3b5cb61a27246f0f5289c87c419","unresolved":false,"context_lines":[{"line_number":190,"context_line":"If the with_count parameter is supplied, then an additional DB operation"},{"line_number":191,"context_line":"will executed. However, both of these DB operations will be executed in the"},{"line_number":192,"context_line":"same RPC."},{"line_number":193,"context_line":""},{"line_number":194,"context_line":"Other deployer impact"},{"line_number":195,"context_line":"---------------------"},{"line_number":196,"context_line":""}],"source_content_type":"text/x-rst","patch_set":5,"id":"baa041b7_9b5bdc54","line":193,"in_reply_to":"baa041b7_e7d011cc","updated":"2015-04-01 18:21:38.000000000","message":"Interesting, I\u0027m not sure if we could expose this option with sqlalchemy. Also, do you know if the various OpenStack supported databases support it?","commit_id":"051c7316c2fc0348f87894c5d437a236499946ce"},{"author":{"_account_id":7730,"name":"Sahid Orentino Ferdjaoui","email":"sahid.ferdjaoui@industrialdiscipline.com","username":"sahid"},"change_message_id":"3fb0755f7b8bea9a251b78929067dd3a2a544c62","unresolved":false,"context_lines":[{"line_number":190,"context_line":"If the with_count parameter is supplied, then an additional DB operation"},{"line_number":191,"context_line":"will executed. However, both of these DB operations will be executed in the"},{"line_number":192,"context_line":"same RPC."},{"line_number":193,"context_line":""},{"line_number":194,"context_line":"Other deployer impact"},{"line_number":195,"context_line":"---------------------"},{"line_number":196,"context_line":""}],"source_content_type":"text/x-rst","patch_set":5,"id":"baa041b7_da6cc50a","line":193,"in_reply_to":"da9b358b_9c74d8fd","updated":"2015-04-01 15:49:30.000000000","message":"s/Shaid/Sahid :) ..no worries - So you say that \"If the with_count parameter is supplied, then an additional DB operation will executed\" I would like to know what is this additional DB operation?","commit_id":"051c7316c2fc0348f87894c5d437a236499946ce"}]}
