)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":10058,"name":"Erlon R. Cruz","email":"erlon.rodrigues.cruz@canonical.com","username":"sombrafam"},"change_message_id":"e5239c97fa992a4f5c8ce3cda771fa90d8226ba8","unresolved":false,"context_lines":[{"line_number":11,"context_line":"return the all which matches condition."},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"APIImpact"},{"line_number":14,"context_line":"Add two filters change_since and change_before in querying API."},{"line_number":15,"context_line":"\"volumes/detail?change_since\u003d2016-01-01T01:00:00\u0026change_before\u003d2016-12-31T01:00:00\""},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"DocImpact"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":4,"id":"9ad45d7e_42a9efde","line":14,"range":{"start_line":14,"start_character":0,"end_line":14,"end_character":15},"updated":"2016-08-09 13:51:37.000000000","message":"Can you also add how to use cinder client command line to call/test this API?","commit_id":"f02e57eb5e4179ffb0066c580f946be50f9dbafe"},{"author":{"_account_id":8846,"name":"Hao Wang","display_name":"Hao Wang","email":"sxmatch1986@gmail.com","username":"sxmatch"},"change_message_id":"1f4e8efe228d5548ca55fc11d388598f20704e8e","unresolved":false,"context_lines":[{"line_number":11,"context_line":"return the all which matches condition."},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"APIImpact"},{"line_number":14,"context_line":"Add two filters change_since and change_before in querying API."},{"line_number":15,"context_line":"\"volumes/detail?change_since\u003d2016-01-01T01:00:00\u0026change_before\u003d2016-12-31T01:00:00\""},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"DocImpact"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":4,"id":"7ac969e8_b0f2f56d","line":14,"range":{"start_line":14,"start_character":0,"end_line":14,"end_character":15},"in_reply_to":"7ac969e8_70007dab","updated":"2016-08-13 02:21:09.000000000","message":"Sorry Erlon, I checked the cli and found there only support to set metadata,  status, bootable and migration_status filters now. So we can\u0027t use cli to test this API.  But you can use some rest tools to test it,  like Postman in Chrome which I used.","commit_id":"f02e57eb5e4179ffb0066c580f946be50f9dbafe"},{"author":{"_account_id":8846,"name":"Hao Wang","display_name":"Hao Wang","email":"sxmatch1986@gmail.com","username":"sxmatch"},"change_message_id":"ab888f9e975b6f81b927536fab4f7741c9a49089","unresolved":false,"context_lines":[{"line_number":11,"context_line":"return the all which matches condition."},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"APIImpact"},{"line_number":14,"context_line":"Add two filters change_since and change_before in querying API."},{"line_number":15,"context_line":"\"volumes/detail?change_since\u003d2016-01-01T01:00:00\u0026change_before\u003d2016-12-31T01:00:00\""},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"DocImpact"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":4,"id":"7ac969e8_70007dab","line":14,"range":{"start_line":14,"start_character":0,"end_line":14,"end_character":15},"in_reply_to":"9ad45d7e_42a9efde","updated":"2016-08-13 01:56:04.000000000","message":"Okay, I\u0027ll check it.","commit_id":"f02e57eb5e4179ffb0066c580f946be50f9dbafe"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"0ddf8f7c4dfbd102a9967274db0bf8715f868e10","unresolved":false,"context_lines":[{"line_number":16,"context_line":"Add two filters changes-since and changes-before in querying API."},{"line_number":17,"context_line":"\"volumes/detail?changes-since\u003d2016-01-01T01:00:00\u0026changes-before\u003d2016-12-31T01:00:00\""},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"NOTE: Now some project have supported this funcation, after finding out"},{"line_number":20,"context_line":"what term they\u0027re using, here is the result:"},{"line_number":21,"context_line":""},{"line_number":22,"context_line":"changes-since: nova, glance(for api v2, it\u0027s only mentioned in spec)"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":60,"id":"3f79a3b5_8f8d7436","line":19,"range":{"start_line":19,"start_character":43,"end_line":19,"end_character":52},"updated":"2018-10-15 23:15:49.000000000","message":"function","commit_id":"d208ac8985e093821a80d9227ccfca4a968c6d29"},{"author":{"_account_id":8846,"name":"Hao Wang","display_name":"Hao Wang","email":"sxmatch1986@gmail.com","username":"sxmatch"},"change_message_id":"1bc6cedc5fc72c3953ca08e20ad53e529a0ccd9e","unresolved":false,"context_lines":[{"line_number":16,"context_line":"Add two filters changes-since and changes-before in querying API."},{"line_number":17,"context_line":"\"volumes/detail?changes-since\u003d2016-01-01T01:00:00\u0026changes-before\u003d2016-12-31T01:00:00\""},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"NOTE: Now some project have supported this funcation, after finding out"},{"line_number":20,"context_line":"what term they\u0027re using, here is the result:"},{"line_number":21,"context_line":""},{"line_number":22,"context_line":"changes-since: nova, glance(for api v2, it\u0027s only mentioned in spec)"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":60,"id":"3f79a3b5_58afe1df","line":19,"range":{"start_line":19,"start_character":43,"end_line":19,"end_character":52},"in_reply_to":"3f79a3b5_8f8d7436","updated":"2018-10-18 09:10:06.000000000","message":"Done","commit_id":"d208ac8985e093821a80d9227ccfca4a968c6d29"},{"author":{"_account_id":4523,"name":"Eric Harney","email":"eharney@redhat.com","username":"eharney"},"change_message_id":"7098054ef28075f0f77551b17d76c658b7ca6137","unresolved":false,"context_lines":[{"line_number":23,"context_line":"changed-since: neutron"},{"line_number":24,"context_line":""},{"line_number":25,"context_line":"So for keeping consistent with most of projects, Cinder considers to"},{"line_number":26,"context_line":"use changes-since and changes-before too."},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"Change-Id: I1f43c37c2266e43146637beadc027ccf6dec017e"},{"line_number":29,"context_line":"Partial-Implements: blueprint support-to-query-cinder-resources-filter-by-change-since"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":66,"id":"3f79a3b5_ab299af0","line":26,"range":{"start_line":26,"start_character":22,"end_line":26,"end_character":36},"updated":"2018-12-05 15:35:29.000000000","message":"I don\u0027t think we should call this query \"changes-before\", it doesn\u0027t make sense grammatically and will just be confusing.","commit_id":"0ba4fdf2d0cda07823d47aeed648f467ea4294cc"},{"author":{"_account_id":8846,"name":"Hao Wang","display_name":"Hao Wang","email":"sxmatch1986@gmail.com","username":"sxmatch"},"change_message_id":"a76ae9724ab9f74123c3194a50f92a5c1747f79e","unresolved":false,"context_lines":[{"line_number":23,"context_line":"changed-since: neutron"},{"line_number":24,"context_line":""},{"line_number":25,"context_line":"So for keeping consistent with most of projects, Cinder considers to"},{"line_number":26,"context_line":"use changes-since and changes-before too."},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"Change-Id: I1f43c37c2266e43146637beadc027ccf6dec017e"},{"line_number":29,"context_line":"Partial-Implements: blueprint support-to-query-cinder-resources-filter-by-change-since"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":66,"id":"3f79a3b5_ab40ab05","line":26,"range":{"start_line":26,"start_character":22,"end_line":26,"end_character":36},"in_reply_to":"3f79a3b5_ab299af0","updated":"2018-12-06 06:00:13.000000000","message":"Or we could use changes-from-before to indicate user can query resources from before some time point.  It\u0027s better?","commit_id":"0ba4fdf2d0cda07823d47aeed648f467ea4294cc"},{"author":{"_account_id":5314,"name":"Brian Rosmaita","email":"rosmaita.fossdev@gmail.com","username":"brian-rosmaita"},"change_message_id":"e35f1c48df515658d8d2b38b4401031e96098e66","unresolved":false,"context_lines":[{"line_number":18,"context_line":"\"volumes/detail?created_at\u003dgt:2016-01-01T01:00:00,lt:2016-12-31T01:00:00\""},{"line_number":19,"context_line":""},{"line_number":20,"context_line":"Change-Id: I1f43c37c2266e43146637beadc027ccf6dec017e"},{"line_number":21,"context_line":"Partial-Implements: blueprint support-to-query-cinder-resources-filter-by-change-since"},{"line_number":22,"context_line":"Co-Authored-By: wangxiyuan \u003cwangxiyuan@huawei.com\u003e"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":78,"id":"3fa7e38b_7cb688de","line":21,"updated":"2019-12-13 14:19:13.000000000","message":"This blueprint should be support-to-query-cinder-resources-filter-by-time-comparison-operators","commit_id":"64b4751bbcfbc57b93091d9b842040bea3c089dd"},{"author":{"_account_id":8846,"name":"Hao Wang","display_name":"Hao Wang","email":"sxmatch1986@gmail.com","username":"sxmatch"},"change_message_id":"80c73815a65cc1a251ac5c86e2a36cd8a99feaf6","unresolved":false,"context_lines":[{"line_number":18,"context_line":"\"volumes/detail?created_at\u003dgt:2016-01-01T01:00:00,lt:2016-12-31T01:00:00\""},{"line_number":19,"context_line":""},{"line_number":20,"context_line":"Change-Id: I1f43c37c2266e43146637beadc027ccf6dec017e"},{"line_number":21,"context_line":"Partial-Implements: blueprint support-to-query-cinder-resources-filter-by-change-since"},{"line_number":22,"context_line":"Co-Authored-By: wangxiyuan \u003cwangxiyuan@huawei.com\u003e"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":78,"id":"3fa7e38b_192f57f6","line":21,"in_reply_to":"3fa7e38b_7cb688de","updated":"2019-12-15 01:01:47.000000000","message":"sure","commit_id":"64b4751bbcfbc57b93091d9b842040bea3c089dd"}],"api-ref/source/v3/parameters.yaml":[{"author":{"_account_id":4523,"name":"Eric Harney","email":"eharney@redhat.com","username":"eharney"},"change_message_id":"63d68d755b796859e08d07dd8a495f35472fb78f","unresolved":false,"context_lines":[{"line_number":234,"context_line":"  type: boolean"},{"line_number":235,"context_line":"changes-before:"},{"line_number":236,"context_line":"  description: |"},{"line_number":237,"context_line":"    Filters reuslts by a time that resources are changed before."},{"line_number":238,"context_line":"  in: query"},{"line_number":239,"context_line":"  required: false"},{"line_number":240,"context_line":"  type: string"}],"source_content_type":"text/x-yaml","patch_set":56,"id":"df7087c5_e2b54a33","line":237,"range":{"start_line":237,"start_character":4,"end_line":237,"end_character":64},"updated":"2018-03-14 14:12:32.000000000","message":"This would make more sense if worded like\n    \"Include only results changed before this time.\"","commit_id":"0a37904da8b72b23b035b9bf45f8b0fb6e0126fe"},{"author":{"_account_id":4523,"name":"Eric Harney","email":"eharney@redhat.com","username":"eharney"},"change_message_id":"63d68d755b796859e08d07dd8a495f35472fb78f","unresolved":false,"context_lines":[{"line_number":240,"context_line":"  type: string"},{"line_number":241,"context_line":"changes-since:"},{"line_number":242,"context_line":"  description: |"},{"line_number":243,"context_line":"    Filters reuslts by a time that resources are changed since."},{"line_number":244,"context_line":"  in: query"},{"line_number":245,"context_line":"  required: false"},{"line_number":246,"context_line":"  type: string"}],"source_content_type":"text/x-yaml","patch_set":56,"id":"df7087c5_c28a8668","line":243,"updated":"2018-03-14 14:12:32.000000000","message":"Ditto","commit_id":"0a37904da8b72b23b035b9bf45f8b0fb6e0126fe"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"d07974fda226dfc35442cce379aadf080b31cf1c","unresolved":false,"context_lines":[{"line_number":216,"context_line":"  type: boolean"},{"line_number":217,"context_line":"changes-before:"},{"line_number":218,"context_line":"  description: |"},{"line_number":219,"context_line":"    Filters reuslts by a time that resources are changed before."},{"line_number":220,"context_line":"  in: query"},{"line_number":221,"context_line":"  required: false"},{"line_number":222,"context_line":"  type: string"}],"source_content_type":"text/x-yaml","patch_set":57,"id":"5f7c97a3_58b941ea","line":219,"updated":"2018-06-03 16:02:04.000000000","message":"Can these descriptions be expanded to have some mention on the expected format of the time string so API consumers know how to input the filter?","commit_id":"ff8fb789c2980b568f3eef00007d0125b6d89fdb"},{"author":{"_account_id":8846,"name":"Hao Wang","display_name":"Hao Wang","email":"sxmatch1986@gmail.com","username":"sxmatch"},"change_message_id":"cdfb73a49abd0e4b1ccd2a3c8be86970afba0fc3","unresolved":false,"context_lines":[{"line_number":216,"context_line":"  type: boolean"},{"line_number":217,"context_line":"changes-before:"},{"line_number":218,"context_line":"  description: |"},{"line_number":219,"context_line":"    Filters reuslts by a time that resources are changed before."},{"line_number":220,"context_line":"  in: query"},{"line_number":221,"context_line":"  required: false"},{"line_number":222,"context_line":"  type: string"}],"source_content_type":"text/x-yaml","patch_set":57,"id":"3f79a3b5_75b9e212","line":219,"in_reply_to":"5f7c97a3_58b941ea","updated":"2018-09-06 01:11:18.000000000","message":"sure","commit_id":"ff8fb789c2980b568f3eef00007d0125b6d89fdb"},{"author":{"_account_id":7198,"name":"Jay Bryant","email":"jungleboyj@electronicjungle.net","username":"jsbryant"},"change_message_id":"3dfda34e2e27e90d863d71993b1304d186de9fea","unresolved":false,"context_lines":[{"line_number":208,"context_line":"  in: query"},{"line_number":209,"context_line":"  required: false"},{"line_number":210,"context_line":"  type: boolean"},{"line_number":211,"context_line":"changes-from-before:"},{"line_number":212,"context_line":"  description: |"},{"line_number":213,"context_line":"    Filters reuslts by a time that resources are changed from before."},{"line_number":214,"context_line":"    The date and time stamp format is ISO 8601: CCYY-MM-DDThh:mm:ss±hh:mm."}],"source_content_type":"text/x-yaml","patch_set":74,"id":"9fb8cfa7_c97c0321","line":211,"range":{"start_line":211,"start_character":8,"end_line":211,"end_character":19},"updated":"2019-06-10 14:34:21.000000000","message":"changes-from-before is very confusing.  I think changed-prior-to","commit_id":"e9eb63d38fe94cec00883ab2077b81da12533fbc"},{"author":{"_account_id":8846,"name":"Hao Wang","display_name":"Hao Wang","email":"sxmatch1986@gmail.com","username":"sxmatch"},"change_message_id":"a66fd250e8cb2f290f20f1cb001974e0ac5e8311","unresolved":false,"context_lines":[{"line_number":208,"context_line":"  in: query"},{"line_number":209,"context_line":"  required: false"},{"line_number":210,"context_line":"  type: boolean"},{"line_number":211,"context_line":"changes-from-before:"},{"line_number":212,"context_line":"  description: |"},{"line_number":213,"context_line":"    Filters reuslts by a time that resources are changed from before."},{"line_number":214,"context_line":"    The date and time stamp format is ISO 8601: CCYY-MM-DDThh:mm:ss±hh:mm."}],"source_content_type":"text/x-yaml","patch_set":74,"id":"9fb8cfa7_812c97ac","line":211,"range":{"start_line":211,"start_character":8,"end_line":211,"end_character":19},"in_reply_to":"9fb8cfa7_c97c0321","updated":"2019-10-08 08:59:57.000000000","message":"Sure","commit_id":"e9eb63d38fe94cec00883ab2077b81da12533fbc"},{"author":{"_account_id":8846,"name":"Hao Wang","display_name":"Hao Wang","email":"sxmatch1986@gmail.com","username":"sxmatch"},"change_message_id":"a66fd250e8cb2f290f20f1cb001974e0ac5e8311","unresolved":false,"context_lines":[{"line_number":216,"context_line":"  in: query"},{"line_number":217,"context_line":"  required: false"},{"line_number":218,"context_line":"  type: string"},{"line_number":219,"context_line":"changes-since:"},{"line_number":220,"context_line":"  description: |"},{"line_number":221,"context_line":"    Filters reuslts by a time that resources are changed since."},{"line_number":222,"context_line":"    The date and time stamp format is ISO 8601: CCYY-MM-DDThh:mm:ss±hh:mm."}],"source_content_type":"text/x-yaml","patch_set":74,"id":"9fb8cfa7_3c4f0e6c","line":219,"range":{"start_line":219,"start_character":0,"end_line":219,"end_character":14},"updated":"2019-10-08 08:59:57.000000000","message":"So here we should also be changed-since, right?","commit_id":"e9eb63d38fe94cec00883ab2077b81da12533fbc"},{"author":{"_account_id":5314,"name":"Brian Rosmaita","email":"rosmaita.fossdev@gmail.com","username":"brian-rosmaita"},"change_message_id":"b9f97ddf37554519a0d70163f733cbd47e12d267","unresolved":false,"context_lines":[{"line_number":224,"context_line":"    The ±hh:mm value, if included, returns the time zone as an offset from UTC."},{"line_number":225,"context_line":"  in: query"},{"line_number":226,"context_line":"  required: false"},{"line_number":227,"context_line":"  type: string"},{"line_number":228,"context_line":"filter_updated_at:"},{"line_number":229,"context_line":"  description: |"},{"line_number":230,"context_line":"    Filters reuslts by a time that resources are updated at with time"}],"source_content_type":"text/x-yaml","patch_set":83,"id":"3fa7e38b_1ba0c88d","line":227,"updated":"2020-01-28 23:43:17.000000000","message":"add:\n\n  min_version: 3.60","commit_id":"379ef573eed03a02ba5955b1600c271529cc9966"},{"author":{"_account_id":8846,"name":"Hao Wang","display_name":"Hao Wang","email":"sxmatch1986@gmail.com","username":"sxmatch"},"change_message_id":"5719f0c5c80d0991f3ad8ec161c0bf7257c01d63","unresolved":false,"context_lines":[{"line_number":224,"context_line":"    The ±hh:mm value, if included, returns the time zone as an offset from UTC."},{"line_number":225,"context_line":"  in: query"},{"line_number":226,"context_line":"  required: false"},{"line_number":227,"context_line":"  type: string"},{"line_number":228,"context_line":"filter_updated_at:"},{"line_number":229,"context_line":"  description: |"},{"line_number":230,"context_line":"    Filters reuslts by a time that resources are updated at with time"}],"source_content_type":"text/x-yaml","patch_set":83,"id":"3fa7e38b_6873f450","line":227,"in_reply_to":"3fa7e38b_1ba0c88d","updated":"2020-02-03 10:02:19.000000000","message":"Done","commit_id":"379ef573eed03a02ba5955b1600c271529cc9966"},{"author":{"_account_id":5314,"name":"Brian Rosmaita","email":"rosmaita.fossdev@gmail.com","username":"brian-rosmaita"},"change_message_id":"b9f97ddf37554519a0d70163f733cbd47e12d267","unresolved":false,"context_lines":[{"line_number":233,"context_line":"    The ±hh:mm value, if included, returns the time zone as an offset from UTC."},{"line_number":234,"context_line":"  in: query"},{"line_number":235,"context_line":"  required: false"},{"line_number":236,"context_line":"  type: string"},{"line_number":237,"context_line":"fix_allocated_quotas:"},{"line_number":238,"context_line":"  description: |"},{"line_number":239,"context_line":"    Whether to fix all the non-leaf projects\u0027 ``allocation``"}],"source_content_type":"text/x-yaml","patch_set":83,"id":"3fa7e38b_7baa1c6d","line":236,"updated":"2020-01-28 23:43:17.000000000","message":"add:\n\n  min_version: 3.60","commit_id":"379ef573eed03a02ba5955b1600c271529cc9966"},{"author":{"_account_id":8846,"name":"Hao Wang","display_name":"Hao Wang","email":"sxmatch1986@gmail.com","username":"sxmatch"},"change_message_id":"5719f0c5c80d0991f3ad8ec161c0bf7257c01d63","unresolved":false,"context_lines":[{"line_number":233,"context_line":"    The ±hh:mm value, if included, returns the time zone as an offset from UTC."},{"line_number":234,"context_line":"  in: query"},{"line_number":235,"context_line":"  required: false"},{"line_number":236,"context_line":"  type: string"},{"line_number":237,"context_line":"fix_allocated_quotas:"},{"line_number":238,"context_line":"  description: |"},{"line_number":239,"context_line":"    Whether to fix all the non-leaf projects\u0027 ``allocation``"}],"source_content_type":"text/x-yaml","patch_set":83,"id":"3fa7e38b_08704041","line":236,"in_reply_to":"3fa7e38b_7baa1c6d","updated":"2020-02-03 10:02:19.000000000","message":"Done","commit_id":"379ef573eed03a02ba5955b1600c271529cc9966"}],"cinder/api/common.py":[{"author":{"_account_id":10058,"name":"Erlon R. Cruz","email":"erlon.rodrigues.cruz@canonical.com","username":"sombrafam"},"change_message_id":"e5239c97fa992a4f5c8ce3cda771fa90d8226ba8","unresolved":false,"context_lines":[{"line_number":49,"context_line":"                     \"query volumes. Default values \""},{"line_number":50,"context_line":"                     \"are: [\u0027name\u0027, \u0027status\u0027, \""},{"line_number":51,"context_line":"                     \"\u0027metadata\u0027, \u0027availability_zone\u0027 ,\""},{"line_number":52,"context_line":"                     \"\u0027bootable\u0027, \u0027group_id\u0027]\")"},{"line_number":53,"context_line":"]"},{"line_number":54,"context_line":""},{"line_number":55,"context_line":"CONF \u003d cfg.CONF"}],"source_content_type":"text/x-python","patch_set":4,"id":"9ad45d7e_8247671c","line":52,"range":{"start_line":52,"start_character":22,"end_line":52,"end_character":44},"updated":"2016-08-09 13:51:37.000000000","message":"\"change_since\u0027, \u0027change_before\u0027\" ??","commit_id":"f02e57eb5e4179ffb0066c580f946be50f9dbafe"},{"author":{"_account_id":8846,"name":"Hao Wang","display_name":"Hao Wang","email":"sxmatch1986@gmail.com","username":"sxmatch"},"change_message_id":"ab888f9e975b6f81b927536fab4f7741c9a49089","unresolved":false,"context_lines":[{"line_number":49,"context_line":"                     \"query volumes. Default values \""},{"line_number":50,"context_line":"                     \"are: [\u0027name\u0027, \u0027status\u0027, \""},{"line_number":51,"context_line":"                     \"\u0027metadata\u0027, \u0027availability_zone\u0027 ,\""},{"line_number":52,"context_line":"                     \"\u0027bootable\u0027, \u0027group_id\u0027]\")"},{"line_number":53,"context_line":"]"},{"line_number":54,"context_line":""},{"line_number":55,"context_line":"CONF \u003d cfg.CONF"}],"source_content_type":"text/x-python","patch_set":4,"id":"7ac969e8_0dddb242","line":52,"range":{"start_line":52,"start_character":22,"end_line":52,"end_character":44},"in_reply_to":"9ad45d7e_8247671c","updated":"2016-08-13 01:56:04.000000000","message":"Ops, forgot this, thanks :)","commit_id":"f02e57eb5e4179ffb0066c580f946be50f9dbafe"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"137aa82f9aec294dd58ace9420661835c35b40fb","unresolved":false,"context_lines":[{"line_number":46,"context_line":"                         \u0027availability_zone\u0027,"},{"line_number":47,"context_line":"                         \u0027bootable\u0027, \u0027group_id\u0027,"},{"line_number":48,"context_line":"                         \u0027changes-since\u0027, \u0027changes-before\u0027],"},{"line_number":49,"context_line":"                deprecated_for_removal\u003dTrue,"},{"line_number":50,"context_line":"                help\u003d\"Volume filter options which \""},{"line_number":51,"context_line":"                     \"non-admin user could use to \""},{"line_number":52,"context_line":"                     \"query volumes. Default values \""}],"source_content_type":"text/x-python","patch_set":62,"id":"3f79a3b5_f8290239","line":49,"updated":"2018-11-30 19:34:22.000000000","message":"This is deprecated and overdue for removal. We don\u0027t want to add new functionality to something that is going away.","commit_id":"bde958acb68095061681f686c79ef3f7e40e75cb"},{"author":{"_account_id":8846,"name":"Hao Wang","display_name":"Hao Wang","email":"sxmatch1986@gmail.com","username":"sxmatch"},"change_message_id":"2d5d5894f464ef111018ba720f4cecb6e52c12cc","unresolved":false,"context_lines":[{"line_number":46,"context_line":"                         \u0027availability_zone\u0027,"},{"line_number":47,"context_line":"                         \u0027bootable\u0027, \u0027group_id\u0027,"},{"line_number":48,"context_line":"                         \u0027changes-since\u0027, \u0027changes-before\u0027],"},{"line_number":49,"context_line":"                deprecated_for_removal\u003dTrue,"},{"line_number":50,"context_line":"                help\u003d\"Volume filter options which \""},{"line_number":51,"context_line":"                     \"non-admin user could use to \""},{"line_number":52,"context_line":"                     \"query volumes. Default values \""}],"source_content_type":"text/x-python","patch_set":62,"id":"3f79a3b5_40d90d25","line":49,"in_reply_to":"3f79a3b5_f8290239","updated":"2018-12-03 01:32:28.000000000","message":"Sure, Sean. I will move those new parameters to /etc/cinder/resource_filters.json.","commit_id":"bde958acb68095061681f686c79ef3f7e40e75cb"},{"author":{"_account_id":5314,"name":"Brian Rosmaita","email":"rosmaita.fossdev@gmail.com","username":"brian-rosmaita"},"change_message_id":"b9f97ddf37554519a0d70163f733cbd47e12d267","unresolved":false,"context_lines":[{"line_number":395,"context_line":""},{"line_number":396,"context_line":""},{"line_number":397,"context_line":"def get_enabled_time_comparsion_operators(resource\u003dNone):"},{"line_number":398,"context_line":"    \"\"\"Get list of configured/allowed time comparsion operators."},{"line_number":399,"context_line":""},{"line_number":400,"context_line":"    This method checks and returns dictionary"},{"line_number":401,"context_line":"    which contains the specified resource and its allowed comparsion operators:"}],"source_content_type":"text/x-python","patch_set":83,"id":"3fa7e38b_f61941d1","line":398,"updated":"2020-01-28 23:43:17.000000000","message":"I don\u0027t think this should be configurable.  It doesn\u0027t really make sense for an operator to disallow any of the time comparison operators.  The list should probably be hard coded somewhere.","commit_id":"379ef573eed03a02ba5955b1600c271529cc9966"},{"author":{"_account_id":8846,"name":"Hao Wang","display_name":"Hao Wang","email":"sxmatch1986@gmail.com","username":"sxmatch"},"change_message_id":"5719f0c5c80d0991f3ad8ec161c0bf7257c01d63","unresolved":false,"context_lines":[{"line_number":395,"context_line":""},{"line_number":396,"context_line":""},{"line_number":397,"context_line":"def get_enabled_time_comparsion_operators(resource\u003dNone):"},{"line_number":398,"context_line":"    \"\"\"Get list of configured/allowed time comparsion operators."},{"line_number":399,"context_line":""},{"line_number":400,"context_line":"    This method checks and returns dictionary"},{"line_number":401,"context_line":"    which contains the specified resource and its allowed comparsion operators:"}],"source_content_type":"text/x-python","patch_set":83,"id":"3fa7e38b_e8da841a","line":398,"in_reply_to":"3fa7e38b_f61941d1","updated":"2020-02-03 10:02:19.000000000","message":"Got it, that will be better. thanks.","commit_id":"379ef573eed03a02ba5955b1600c271529cc9966"},{"author":{"_account_id":5314,"name":"Brian Rosmaita","email":"rosmaita.fossdev@gmail.com","username":"brian-rosmaita"},"change_message_id":"5b1a0177cda429f6a2149c8ff3ff661bf3d42187","unresolved":false,"context_lines":[{"line_number":390,"context_line":"    \"\"\"Get list of time comparsion operators."},{"line_number":391,"context_line":""},{"line_number":392,"context_line":"    This method returns dictionary which contains the specified resource and"},{"line_number":393,"context_line":"    its allowed comparsion operators."},{"line_number":394,"context_line":"    \"\"\""},{"line_number":395,"context_line":"    operators \u003d [\"gt\", \"gte\", \"eq\", \"neq\", \"lt\", \"lte\"]"},{"line_number":396,"context_line":"    return {\"time_comparison_operators\": operators}"}],"source_content_type":"text/x-python","patch_set":84,"id":"3fa7e38b_84bf2dc9","line":393,"updated":"2020-02-03 21:13:48.000000000","message":"A few comments here.\n\n(1) It seems kind of overkill to return a dict instead of just the list of operators from this function.\n\n(2) Also, maybe name it \u0027get_time_comparison_operators\u0027?\n\n(3) The comment at line 392-393 isn\u0027t accurate any more given that this function doesn\u0027t have any parameters.  Unless you think it should?  What I mean is, right now, the etc/cinder/resource_filters.json file decides whether \u0027created_at\u0027 or \u0027updated_at\u0027 is allowed on the \"list\" call for any resource.  So that\u0027s already been decided before someone calls this function.  My question is, is there a use case where we\u0027d want to allow \u0027updated_at\u0027 to use all the time comparison operators, but \u0027created_at\u0027 would use only some strict subset?  (Same question for any other time field.)  That\u0027s the only reason I can think of for having the field name as a parameter.  I was just wondering if you had anything in mind.","commit_id":"255c2f72ce98d027670b9ba4bb65662d7a8ade8a"},{"author":{"_account_id":8846,"name":"Hao Wang","display_name":"Hao Wang","email":"sxmatch1986@gmail.com","username":"sxmatch"},"change_message_id":"d1a6e8097bcaed0eb8e99f883d69e0e03e86ab29","unresolved":false,"context_lines":[{"line_number":390,"context_line":"    \"\"\"Get list of time comparsion operators."},{"line_number":391,"context_line":""},{"line_number":392,"context_line":"    This method returns dictionary which contains the specified resource and"},{"line_number":393,"context_line":"    its allowed comparsion operators."},{"line_number":394,"context_line":"    \"\"\""},{"line_number":395,"context_line":"    operators \u003d [\"gt\", \"gte\", \"eq\", \"neq\", \"lt\", \"lte\"]"},{"line_number":396,"context_line":"    return {\"time_comparison_operators\": operators}"}],"source_content_type":"text/x-python","patch_set":84,"id":"3fa7e38b_b888361a","line":393,"in_reply_to":"3fa7e38b_84bf2dc9","updated":"2020-02-05 01:24:00.000000000","message":"Yes, I agree with you too. Seems this function has not been updated completely yet. So I make this done in the next patch. Thanks.","commit_id":"255c2f72ce98d027670b9ba4bb65662d7a8ade8a"}],"cinder/api/openstack/rest_api_version_history.rst":[{"author":{"_account_id":5314,"name":"Brian Rosmaita","email":"rosmaita.fossdev@gmail.com","username":"brian-rosmaita"},"change_message_id":"b9f97ddf37554519a0d70163f733cbd47e12d267","unresolved":false,"context_lines":[{"line_number":465,"context_line":""},{"line_number":466,"context_line":"3.60"},{"line_number":467,"context_line":"----"},{"line_number":468,"context_line":"Add \u0027created_at\u0027 and \u0027updated_at\u0027 to support users can list/detail volumes by"},{"line_number":469,"context_line":"specifying the time comparison operators along with created_at or updated_at."}],"source_content_type":"text/x-rst","patch_set":83,"id":"3fa7e38b_166add16","line":469,"range":{"start_line":468,"start_character":0,"end_line":469,"end_character":77},"updated":"2020-01-28 23:43:17.000000000","message":"Support filtering on the ``updated_at`` and ``created_at`` fields with time comparison operators for the volume summary list (``GET /v3/{project_id}/volumes``) and volume detail list (``GET /v3/{project_id}/volumes/detail``) requests.","commit_id":"379ef573eed03a02ba5955b1600c271529cc9966"},{"author":{"_account_id":8846,"name":"Hao Wang","display_name":"Hao Wang","email":"sxmatch1986@gmail.com","username":"sxmatch"},"change_message_id":"5719f0c5c80d0991f3ad8ec161c0bf7257c01d63","unresolved":false,"context_lines":[{"line_number":465,"context_line":""},{"line_number":466,"context_line":"3.60"},{"line_number":467,"context_line":"----"},{"line_number":468,"context_line":"Add \u0027created_at\u0027 and \u0027updated_at\u0027 to support users can list/detail volumes by"},{"line_number":469,"context_line":"specifying the time comparison operators along with created_at or updated_at."}],"source_content_type":"text/x-rst","patch_set":83,"id":"3fa7e38b_e89284fb","line":469,"range":{"start_line":468,"start_character":0,"end_line":469,"end_character":77},"in_reply_to":"3fa7e38b_166add16","updated":"2020-02-03 10:02:19.000000000","message":"Done","commit_id":"379ef573eed03a02ba5955b1600c271529cc9966"}],"cinder/api/v3/volumes.py":[{"author":{"_account_id":23602,"name":"Michael Dovgal","email":"dovgalmichael@gmail.com","username":"mdovgal"},"change_message_id":"82b0e76f79a7cc2a933fbf1f824dd43952f17343","unresolved":false,"context_lines":[{"line_number":117,"context_line":"        if \u0027group_id\u0027 in filters:"},{"line_number":118,"context_line":"            filters[\u0027consistencygroup_id\u0027] \u003d filters.pop(\u0027group_id\u0027)"},{"line_number":119,"context_line":""},{"line_number":120,"context_line":"        if \u0027change_since\u0027 in filters:"},{"line_number":121,"context_line":"            try:"},{"line_number":122,"context_line":"                parsed \u003d timeutils.parse_isotime(filters[\u0027change_since\u0027])"},{"line_number":123,"context_line":"            except ValueError:"},{"line_number":124,"context_line":"                msg \u003d _(\u0027Invalid change_since value\u0027)"},{"line_number":125,"context_line":"                raise exc.HTTPBadRequest(explanation\u003dmsg)"},{"line_number":126,"context_line":"            filters[\u0027change_since\u0027] \u003d parsed"},{"line_number":127,"context_line":""},{"line_number":128,"context_line":"        if \u0027change_before\u0027 in filters:"},{"line_number":129,"context_line":"            try:"},{"line_number":130,"context_line":"                parsed \u003d timeutils.parse_isotime(filters[\u0027change_before\u0027])"},{"line_number":131,"context_line":"            except ValueError:"},{"line_number":132,"context_line":"                msg \u003d _(\u0027Invalid change_before value\u0027)"},{"line_number":133,"context_line":"                raise exc.HTTPBadRequest(explanation\u003dmsg)"},{"line_number":134,"context_line":"            filters[\u0027change_before\u0027] \u003d parsed"},{"line_number":135,"context_line":""},{"line_number":136,"context_line":"        strict \u003d req.api_version_request.matches(\"3.2\", None)"},{"line_number":137,"context_line":"        self.volume_api.check_volume_filters(filters, strict)"}],"source_content_type":"text/x-python","patch_set":29,"id":"da36d5c6_d000b268","line":134,"range":{"start_line":120,"start_character":0,"end_line":134,"end_character":45},"updated":"2017-02-24 11:11:39.000000000","message":"-1 Could we make it in a loop? Just unnecessary code duplication","commit_id":"2b6de3c596decf84ecb48e4b9024b7119ae6ee9d"},{"author":{"_account_id":26458,"name":"Brin Zhang","email":"zhangbailin@inspur.com","username":"zhangbailin"},"change_message_id":"f6ab344be96dd94cfcbd59338646154a585f7602","unresolved":false,"context_lines":[{"line_number":124,"context_line":"            if change_filter in filters:"},{"line_number":125,"context_line":"                try:"},{"line_number":126,"context_line":"                    parsed \u003d timeutils.parse_isotime(filters[change_filter])"},{"line_number":127,"context_line":"                except ValueError:"},{"line_number":128,"context_line":"                    msg \u003d _(\u0027Invalid %s value\u0027) % change_filter"},{"line_number":129,"context_line":"                    raise exc.HTTPBadRequest(explanation\u003dmsg)"},{"line_number":130,"context_line":"                filters[change_filter] \u003d parsed"}],"source_content_type":"text/x-python","patch_set":58,"id":"3f79a3b5_4a2ff9a6","line":127,"range":{"start_line":127,"start_character":12,"end_line":127,"end_character":16},"updated":"2018-08-30 06:27:23.000000000","message":"Is there a missing exception handling here？If filters[\u0027changes-before\u0027] \u003c filters[\u0027changes-since\u0027], this should be raised a HTTPBadRequest?","commit_id":"8ee560f828cf8606b761e2aa476b05f097538e1e"},{"author":{"_account_id":8846,"name":"Hao Wang","display_name":"Hao Wang","email":"sxmatch1986@gmail.com","username":"sxmatch"},"change_message_id":"cdfb73a49abd0e4b1ccd2a3c8be86970afba0fc3","unresolved":false,"context_lines":[{"line_number":124,"context_line":"            if change_filter in filters:"},{"line_number":125,"context_line":"                try:"},{"line_number":126,"context_line":"                    parsed \u003d timeutils.parse_isotime(filters[change_filter])"},{"line_number":127,"context_line":"                except ValueError:"},{"line_number":128,"context_line":"                    msg \u003d _(\u0027Invalid %s value\u0027) % change_filter"},{"line_number":129,"context_line":"                    raise exc.HTTPBadRequest(explanation\u003dmsg)"},{"line_number":130,"context_line":"                filters[change_filter] \u003d parsed"}],"source_content_type":"text/x-python","patch_set":58,"id":"3f79a3b5_77001167","line":127,"range":{"start_line":127,"start_character":12,"end_line":127,"end_character":16},"in_reply_to":"3f79a3b5_4a2ff9a6","updated":"2018-09-06 01:11:18.000000000","message":"If filters[\u0027changes-before\u0027] \u003c filters[\u0027changes-since\u0027], there should return nothing.  But I think it\u0027s no harm to raise an exception here.","commit_id":"8ee560f828cf8606b761e2aa476b05f097538e1e"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"change_message_id":"7f1cb4a777dfa6be4973b580b50802b38abac03b","unresolved":false,"context_lines":[{"line_number":78,"context_line":"                               cascade\u003dcascade,"},{"line_number":79,"context_line":"                               force\u003dforce)"},{"line_number":80,"context_line":""},{"line_number":81,"context_line":"        return webob.Response(status_int\u003dhttp_client.ACCEPTED)"},{"line_number":82,"context_line":""},{"line_number":83,"context_line":"    @common.process_general_filtering(\u0027volume\u0027)"},{"line_number":84,"context_line":"    def _process_volume_filtering(self, context\u003dNone, filters\u003dNone,"}],"source_content_type":"text/x-python","patch_set":61,"id":"3f79a3b5_4c4963b6","line":81,"updated":"2018-10-18 12:17:01.000000000","message":"E1101: \u001b[1;31mModule \u0027http.client\u0027 has no \u0027ACCEPTED\u0027 member\u001b[0m (\u001b[1;31mno-member\u001b[0m)","commit_id":"c0d18bb3e33824c8310fbdb0fc6aed2ed9af7f78"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"change_message_id":"7f1cb4a777dfa6be4973b580b50802b38abac03b","unresolved":false,"context_lines":[{"line_number":184,"context_line":"        return view_builder_v3.quick_summary(num_vols, int(sum_size),"},{"line_number":185,"context_line":"                                             all_distinct_metadata)"},{"line_number":186,"context_line":""},{"line_number":187,"context_line":"    @wsgi.response(http_client.ACCEPTED)"},{"line_number":188,"context_line":"    @wsgi.Controller.api_version(mv.VOLUME_REVERT)"},{"line_number":189,"context_line":"    @wsgi.action(\u0027revert\u0027)"},{"line_number":190,"context_line":"    def revert(self, req, id, body):"}],"source_content_type":"text/x-python","patch_set":61,"id":"3f79a3b5_6c469faa","line":187,"updated":"2018-10-18 12:17:01.000000000","message":"E1101: \u001b[1;31mModule \u0027http.client\u0027 has no \u0027ACCEPTED\u0027 member\u001b[0m (\u001b[1;31mno-member\u001b[0m)","commit_id":"c0d18bb3e33824c8310fbdb0fc6aed2ed9af7f78"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"change_message_id":"7f1cb4a777dfa6be4973b580b50802b38abac03b","unresolved":false,"context_lines":[{"line_number":240,"context_line":"                            raise exc.HTTPNotFound(explanation\u003dexplanation)"},{"line_number":241,"context_line":"            return image_snapshot"},{"line_number":242,"context_line":""},{"line_number":243,"context_line":"    @wsgi.response(http_client.ACCEPTED)"},{"line_number":244,"context_line":"    @validation.schema(volumes.create, mv.BASE_VERSION,"},{"line_number":245,"context_line":"                       mv.get_prior_version(mv.GROUP_VOLUME))"},{"line_number":246,"context_line":"    @validation.schema(volumes.create_volume_v313, mv.GROUP_VOLUME,"}],"source_content_type":"text/x-python","patch_set":61,"id":"3f79a3b5_0cc12bfe","line":243,"updated":"2018-10-18 12:17:01.000000000","message":"E1101: \u001b[1;31mModule \u0027http.client\u0027 has no \u0027ACCEPTED\u0027 member\u001b[0m (\u001b[1;31mno-member\u001b[0m)","commit_id":"c0d18bb3e33824c8310fbdb0fc6aed2ed9af7f78"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"change_message_id":"7f1cb4a777dfa6be4973b580b50802b38abac03b","unresolved":false,"context_lines":[{"line_number":290,"context_line":"        if req_volume_type:"},{"line_number":291,"context_line":"            # Not found exception will be handled at the wsgi level"},{"line_number":292,"context_line":"            kwargs[\u0027volume_type\u0027] \u003d ("},{"line_number":293,"context_line":"                objects.VolumeType.get_by_name_or_id(context, req_volume_type))"},{"line_number":294,"context_line":""},{"line_number":295,"context_line":"        kwargs[\u0027metadata\u0027] \u003d volume.get(\u0027metadata\u0027, None)"},{"line_number":296,"context_line":""}],"source_content_type":"text/x-python","patch_set":61,"id":"3f79a3b5_2cc66717","line":293,"updated":"2018-10-18 12:17:01.000000000","message":"E1101: \u001b[1;31mModule \u0027cinder.objects\u0027 has no \u0027VolumeType\u0027 member\u001b[0m (\u001b[1;31mno-member\u001b[0m)","commit_id":"c0d18bb3e33824c8310fbdb0fc6aed2ed9af7f78"},{"author":{"_account_id":5314,"name":"Brian Rosmaita","email":"rosmaita.fossdev@gmail.com","username":"brian-rosmaita"},"change_message_id":"5b1a0177cda429f6a2149c8ff3ff661bf3d42187","unresolved":false,"context_lines":[{"line_number":105,"context_line":"                time_filter_dict \u003d {}"},{"line_number":106,"context_line":"                comparison_units \u003d filters[time_comparison_filter].split(\u0027,\u0027)"},{"line_number":107,"context_line":"                operators \u003d common.get_enabled_time_comparsion_operators("},{"line_number":108,"context_line":"                    )[\u0027time_comparison_operators\u0027]"},{"line_number":109,"context_line":"                for comparison_unit in comparison_units:"},{"line_number":110,"context_line":"                    try:"},{"line_number":111,"context_line":"                        operator_and_time \u003d comparison_unit.split(\":\")"}],"source_content_type":"text/x-python","patch_set":84,"id":"3fa7e38b_6141c3a7","line":108,"updated":"2020-02-03 21:13:48.000000000","message":"This is the line that pep8 doesn\u0027t like -- it wants the \u0027)\u0027 underneath the first \u0027o\u0027 in \u0027operators\u0027 (which I personally don\u0027t like, but that\u0027s the rule): https://www.flake8rules.com/rules/E123.html","commit_id":"255c2f72ce98d027670b9ba4bb65662d7a8ade8a"},{"author":{"_account_id":8846,"name":"Hao Wang","display_name":"Hao Wang","email":"sxmatch1986@gmail.com","username":"sxmatch"},"change_message_id":"d1a6e8097bcaed0eb8e99f883d69e0e03e86ab29","unresolved":false,"context_lines":[{"line_number":105,"context_line":"                time_filter_dict \u003d {}"},{"line_number":106,"context_line":"                comparison_units \u003d filters[time_comparison_filter].split(\u0027,\u0027)"},{"line_number":107,"context_line":"                operators \u003d common.get_enabled_time_comparsion_operators("},{"line_number":108,"context_line":"                    )[\u0027time_comparison_operators\u0027]"},{"line_number":109,"context_line":"                for comparison_unit in comparison_units:"},{"line_number":110,"context_line":"                    try:"},{"line_number":111,"context_line":"                        operator_and_time \u003d comparison_unit.split(\":\")"}],"source_content_type":"text/x-python","patch_set":84,"id":"3fa7e38b_18baaab9","line":108,"in_reply_to":"3fa7e38b_6141c3a7","updated":"2020-02-05 01:24:00.000000000","message":"Yeah, especially for some long parameter or function name, haha. Has updated it.","commit_id":"255c2f72ce98d027670b9ba4bb65662d7a8ade8a"},{"author":{"_account_id":5314,"name":"Brian Rosmaita","email":"rosmaita.fossdev@gmail.com","username":"brian-rosmaita"},"change_message_id":"c34d474da7186d618f287049e50114ad41fb413a","unresolved":false,"context_lines":[{"line_number":104,"context_line":"            if time_comparison_filter in filters:"},{"line_number":105,"context_line":"                time_filter_dict \u003d {}"},{"line_number":106,"context_line":"                comparison_units \u003d filters[time_comparison_filter].split(\u0027,\u0027)"},{"line_number":107,"context_line":"                operators \u003d common.get_time_comparsion_operators"},{"line_number":108,"context_line":"                for comparison_unit in comparison_units:"},{"line_number":109,"context_line":"                    try:"},{"line_number":110,"context_line":"                        operator_and_time \u003d comparison_unit.split(\":\")"}],"source_content_type":"text/x-python","patch_set":85,"id":"3fa7e38b_553476fa","line":107,"range":{"start_line":107,"start_character":28,"end_line":107,"end_character":64},"updated":"2020-02-04 13:47:44.000000000","message":"You forgot to call the function here--\u0027operators\u0027 is now referring to the function, not to its result (that\u0027s what\u0027s causing the test failures at line 116)","commit_id":"e53fd0f4736fe6ef52d7fd39788338203614f347"},{"author":{"_account_id":8846,"name":"Hao Wang","display_name":"Hao Wang","email":"sxmatch1986@gmail.com","username":"sxmatch"},"change_message_id":"d1a6e8097bcaed0eb8e99f883d69e0e03e86ab29","unresolved":false,"context_lines":[{"line_number":104,"context_line":"            if time_comparison_filter in filters:"},{"line_number":105,"context_line":"                time_filter_dict \u003d {}"},{"line_number":106,"context_line":"                comparison_units \u003d filters[time_comparison_filter].split(\u0027,\u0027)"},{"line_number":107,"context_line":"                operators \u003d common.get_time_comparsion_operators"},{"line_number":108,"context_line":"                for comparison_unit in comparison_units:"},{"line_number":109,"context_line":"                    try:"},{"line_number":110,"context_line":"                        operator_and_time \u003d comparison_unit.split(\":\")"}],"source_content_type":"text/x-python","patch_set":85,"id":"3fa7e38b_384f66c0","line":107,"range":{"start_line":107,"start_character":28,"end_line":107,"end_character":64},"in_reply_to":"3fa7e38b_553476fa","updated":"2020-02-05 01:24:00.000000000","message":"sorry miss this, done","commit_id":"e53fd0f4736fe6ef52d7fd39788338203614f347"}],"cinder/db/sqlalchemy/api.py":[{"author":{"_account_id":23083,"name":"TommyLike","email":"tommylikehu@gmail.com","username":"TommyLike"},"change_message_id":"838af8b86b6300653fd08e330fcca4b7a6848ae3","unresolved":false,"context_lines":[{"line_number":1952,"context_line":"            return None"},{"line_number":1953,"context_line":""},{"line_number":1954,"context_line":"    if \u0027change_since\u0027 in filters:"},{"line_number":1955,"context_line":"        change_since \u003d timeutils.normalize_time(filters.get(\u0027change_since\u0027))"},{"line_number":1956,"context_line":"        filters.pop(\u0027change_since\u0027)"},{"line_number":1957,"context_line":"        try:"},{"line_number":1958,"context_line":"            column_attr \u003d getattr(models.Volume, \u0027updated_at\u0027)"}],"source_content_type":"text/x-python","patch_set":1,"id":"9ad45d7e_7e794793","line":1955,"updated":"2016-08-09 04:40:01.000000000","message":"how about combining the two lines as below:\n```\nchange_since \u003d timeutils.normalize_time(filters.pop(\u0027change_since\u0027))\n```\nthe same in line 1965","commit_id":"686b495e9818d3a246587ffcfcccf9f109b0e1ca"},{"author":{"_account_id":8846,"name":"Hao Wang","display_name":"Hao Wang","email":"sxmatch1986@gmail.com","username":"sxmatch"},"change_message_id":"d8cf51089154c061ede393f91cb726f415934498","unresolved":false,"context_lines":[{"line_number":1952,"context_line":"            return None"},{"line_number":1953,"context_line":""},{"line_number":1954,"context_line":"    if \u0027change_since\u0027 in filters:"},{"line_number":1955,"context_line":"        change_since \u003d timeutils.normalize_time(filters.get(\u0027change_since\u0027))"},{"line_number":1956,"context_line":"        filters.pop(\u0027change_since\u0027)"},{"line_number":1957,"context_line":"        try:"},{"line_number":1958,"context_line":"            column_attr \u003d getattr(models.Volume, \u0027updated_at\u0027)"}],"source_content_type":"text/x-python","patch_set":1,"id":"9ad45d7e_2afae942","line":1955,"in_reply_to":"9ad45d7e_7e794793","updated":"2016-08-09 06:52:18.000000000","message":"Thanks, that\u0027s good!","commit_id":"686b495e9818d3a246587ffcfcccf9f109b0e1ca"},{"author":{"_account_id":15054,"name":"wangxiyuan","email":"wangxiyuan1007@gmail.com","username":"wangxiyuan"},"change_message_id":"55cbb8c09958e97553daa037a248f36fa2340c39","unresolved":false,"context_lines":[{"line_number":1967,"context_line":"            query \u003d query.filter(column_attr \u003c\u003d change_before)"},{"line_number":1968,"context_line":"        except AttributeError:"},{"line_number":1969,"context_line":"            LOG.debug(\"\u0027updated_at\u0027 column could not be found.\")"},{"line_number":1970,"context_line":"            return None"},{"line_number":1971,"context_line":"    # Apply exact match filters for everything else, ensure that the"},{"line_number":1972,"context_line":"    # filter value exists on the model"},{"line_number":1973,"context_line":"    for key in filters.keys():"}],"source_content_type":"text/x-python","patch_set":5,"id":"3ac371cc_0d6447e3","line":1970,"updated":"2016-08-16 09:28:16.000000000","message":"what will happen if \"change_before\" is bigger than \"change_since\"? should we reject it at api layer?","commit_id":"1e42236b42d8ba41ba9df82f592afd72e200514a"},{"author":{"_account_id":8846,"name":"Hao Wang","display_name":"Hao Wang","email":"sxmatch1986@gmail.com","username":"sxmatch"},"change_message_id":"9c224bcccfae2db82ac7c7a979e65242940a69dc","unresolved":false,"context_lines":[{"line_number":1967,"context_line":"            query \u003d query.filter(column_attr \u003c\u003d change_before)"},{"line_number":1968,"context_line":"        except AttributeError:"},{"line_number":1969,"context_line":"            LOG.debug(\"\u0027updated_at\u0027 column could not be found.\")"},{"line_number":1970,"context_line":"            return None"},{"line_number":1971,"context_line":"    # Apply exact match filters for everything else, ensure that the"},{"line_number":1972,"context_line":"    # filter value exists on the model"},{"line_number":1973,"context_line":"    for key in filters.keys():"}],"source_content_type":"text/x-python","patch_set":5,"id":"3ac371cc_2602c80b","line":1970,"in_reply_to":"3ac371cc_0d6447e3","updated":"2016-08-17 08:27:57.000000000","message":"That will return an empty list of volumes,  I think we didn\u0027t need to reject it, just return empty list.","commit_id":"1e42236b42d8ba41ba9df82f592afd72e200514a"},{"author":{"_account_id":23602,"name":"Michael Dovgal","email":"dovgalmichael@gmail.com","username":"mdovgal"},"change_message_id":"82b0e76f79a7cc2a933fbf1f824dd43952f17343","unresolved":false,"context_lines":[{"line_number":2259,"context_line":"        query \u003d query.filter(_filter_host(models.Volume.cluster_name,"},{"line_number":2260,"context_line":"                                          cluster_name))"},{"line_number":2261,"context_line":""},{"line_number":2262,"context_line":"    if filters.get(\u0027change_since\u0027):"},{"line_number":2263,"context_line":"        change_since \u003d timeutils.normalize_time(filters.pop(\u0027change_since\u0027))"},{"line_number":2264,"context_line":"        try:"},{"line_number":2265,"context_line":"            column_attr \u003d getattr(models.Volume, \u0027updated_at\u0027)"},{"line_number":2266,"context_line":"            query \u003d query.filter(column_attr \u003e\u003d change_since)"},{"line_number":2267,"context_line":"        except AttributeError:"},{"line_number":2268,"context_line":"            LOG.debug(\"\u0027updated_at\u0027 column could not be found.\")"},{"line_number":2269,"context_line":"            return None"},{"line_number":2270,"context_line":""},{"line_number":2271,"context_line":"    if filters.get(\u0027change_before\u0027):"},{"line_number":2272,"context_line":"        change_before \u003d timeutils.normalize_time(filters.pop(\u0027change_before\u0027))"},{"line_number":2273,"context_line":"        try:"},{"line_number":2274,"context_line":"            column_attr \u003d getattr(models.Volume, \u0027updated_at\u0027)"},{"line_number":2275,"context_line":"            query \u003d query.filter(column_attr \u003c\u003d change_before)"},{"line_number":2276,"context_line":"        except AttributeError:"},{"line_number":2277,"context_line":"            LOG.debug(\"\u0027updated_at\u0027 column could not be found.\")"},{"line_number":2278,"context_line":"            return None"},{"line_number":2279,"context_line":"    # Apply exact match filters for everything else, ensure that the"},{"line_number":2280,"context_line":"    # filter value exists on the model"},{"line_number":2281,"context_line":"    for key in filters.keys():"}],"source_content_type":"text/x-python","patch_set":29,"id":"da36d5c6_50a5a244","line":2278,"range":{"start_line":2262,"start_character":0,"end_line":2278,"end_character":23},"updated":"2017-02-24 11:11:39.000000000","message":"Same here","commit_id":"2b6de3c596decf84ecb48e4b9024b7119ae6ee9d"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"change_message_id":"7f1cb4a777dfa6be4973b580b50802b38abac03b","unresolved":false,"context_lines":[{"line_number":5432,"context_line":"def _translate_transfers(transfers):"},{"line_number":5433,"context_line":"    fields \u003d (\u0027id\u0027, \u0027volume_id\u0027, \u0027display_name\u0027, \u0027created_at\u0027, \u0027deleted\u0027,"},{"line_number":5434,"context_line":"              \u0027no_snapshots\u0027)"},{"line_number":5435,"context_line":"    return [{k: transfer[k] for k in fields} for transfer in transfers]"},{"line_number":5436,"context_line":""},{"line_number":5437,"context_line":""},{"line_number":5438,"context_line":"@require_admin_context"}],"source_content_type":"text/x-python","patch_set":61,"id":"3f79a3b5_8c4f7bbe","line":5435,"updated":"2018-10-18 12:17:01.000000000","message":"E1133: \u001b[1;31mNon-iterable value fields is used in an iterating context\u001b[0m (\u001b[1;31mnot-an-iterable\u001b[0m)","commit_id":"c0d18bb3e33824c8310fbdb0fc6aed2ed9af7f78"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"change_message_id":"7f1cb4a777dfa6be4973b580b50802b38abac03b","unresolved":false,"context_lines":[{"line_number":6574,"context_line":"def reset_active_backend(context, enable_replication, active_backend_id,"},{"line_number":6575,"context_line":"                         backend_host):"},{"line_number":6576,"context_line":""},{"line_number":6577,"context_line":"    service \u003d objects.Service.get_by_host_and_topic(context,"},{"line_number":6578,"context_line":"                                                    backend_host,"},{"line_number":6579,"context_line":"                                                    \u0027cinder-volume\u0027,"},{"line_number":6580,"context_line":"                                                    disabled\u003dTrue)"}],"source_content_type":"text/x-python","patch_set":61,"id":"3f79a3b5_ac4cb7c9","line":6577,"updated":"2018-10-18 12:17:01.000000000","message":"E1101: \u001b[1;31mModule \u0027cinder.objects\u0027 has no \u0027Service\u0027 member\u001b[0m (\u001b[1;31mno-member\u001b[0m)","commit_id":"c0d18bb3e33824c8310fbdb0fc6aed2ed9af7f78"}],"cinder/tests/unit/api/test_common.py":[{"author":{"_account_id":5314,"name":"Brian Rosmaita","email":"rosmaita.fossdev@gmail.com","username":"brian-rosmaita"},"change_message_id":"b9f97ddf37554519a0d70163f733cbd47e12d267","unresolved":false,"context_lines":[{"line_number":493,"context_line":"              {\u0027resource\u0027: \u0027message\u0027,"},{"line_number":494,"context_line":"               \u0027expected\u0027: [\"resource_uuid\", \"resource_type\", \"event_id\","},{"line_number":495,"context_line":"                            \"request_id\", \"message_level\"]},"},{"line_number":496,"context_line":"              {\u0027resource\u0027: \u0027pool\u0027, \u0027expected\u0027: [\"name\", \"volume_type\"]},"},{"line_number":497,"context_line":"              {\u0027resource\u0027: \u0027time_comparison_operators\u0027,"},{"line_number":498,"context_line":"               \u0027expected\u0027: [\"gt\", \"gte\", \"eq\", \"neq\", \"lt\", \"lte\"]})"},{"line_number":499,"context_line":"    @ddt.unpack"},{"line_number":500,"context_line":"    def test_filter_keys_exists(self, resource, expected):"},{"line_number":501,"context_line":"        result \u003d common.get_enabled_resource_filters(resource)"}],"source_content_type":"text/x-python","patch_set":83,"id":"3fa7e38b_711a3b6b","line":498,"range":{"start_line":496,"start_character":71,"end_line":498,"end_character":67},"updated":"2020-01-28 23:43:17.000000000","message":"(Don\u0027t forget to remove this if you remove the time_comparison_operators from the resource_filters response as I suggested elsewhere on this patch)","commit_id":"379ef573eed03a02ba5955b1600c271529cc9966"},{"author":{"_account_id":8846,"name":"Hao Wang","display_name":"Hao Wang","email":"sxmatch1986@gmail.com","username":"sxmatch"},"change_message_id":"5719f0c5c80d0991f3ad8ec161c0bf7257c01d63","unresolved":false,"context_lines":[{"line_number":493,"context_line":"              {\u0027resource\u0027: \u0027message\u0027,"},{"line_number":494,"context_line":"               \u0027expected\u0027: [\"resource_uuid\", \"resource_type\", \"event_id\","},{"line_number":495,"context_line":"                            \"request_id\", \"message_level\"]},"},{"line_number":496,"context_line":"              {\u0027resource\u0027: \u0027pool\u0027, \u0027expected\u0027: [\"name\", \"volume_type\"]},"},{"line_number":497,"context_line":"              {\u0027resource\u0027: \u0027time_comparison_operators\u0027,"},{"line_number":498,"context_line":"               \u0027expected\u0027: [\"gt\", \"gte\", \"eq\", \"neq\", \"lt\", \"lte\"]})"},{"line_number":499,"context_line":"    @ddt.unpack"},{"line_number":500,"context_line":"    def test_filter_keys_exists(self, resource, expected):"},{"line_number":501,"context_line":"        result \u003d common.get_enabled_resource_filters(resource)"}],"source_content_type":"text/x-python","patch_set":83,"id":"3fa7e38b_434a9924","line":498,"range":{"start_line":496,"start_character":71,"end_line":498,"end_character":67},"in_reply_to":"3fa7e38b_711a3b6b","updated":"2020-02-03 10:02:19.000000000","message":"Done","commit_id":"379ef573eed03a02ba5955b1600c271529cc9966"}],"cinder/tests/unit/api/v3/test_volumes.py":[{"author":{"_account_id":10058,"name":"Erlon R. Cruz","email":"erlon.rodrigues.cruz@canonical.com","username":"sombrafam"},"change_message_id":"e5239c97fa992a4f5c8ce3cda771fa90d8226ba8","unresolved":false,"context_lines":[{"line_number":155,"context_line":""},{"line_number":156,"context_line":"    @ddt.data(\u0027change_since\u0027, \u0027change_before\u0027)"},{"line_number":157,"context_line":"    def test_volume_index_filter_by_change_since_or_before(self, change):"},{"line_number":158,"context_line":"        vols \u003d self._create_volume_with_glance_metadata()"},{"line_number":159,"context_line":"        change_since \u003d datetime.datetime(2099, 1, 1, 1, 1, 1)"},{"line_number":160,"context_line":"        req \u003d fakes.HTTPRequest.blank((\"/v3/volumes?%s\u003d%s\") %"},{"line_number":161,"context_line":"                                      (change, change_since))"}],"source_content_type":"text/x-python","patch_set":4,"id":"9ad45d7e_673c05e3","line":158,"range":{"start_line":158,"start_character":8,"end_line":158,"end_character":12},"updated":"2016-08-09 13:51:37.000000000","message":"Not used","commit_id":"f02e57eb5e4179ffb0066c580f946be50f9dbafe"},{"author":{"_account_id":8846,"name":"Hao Wang","display_name":"Hao Wang","email":"sxmatch1986@gmail.com","username":"sxmatch"},"change_message_id":"ab888f9e975b6f81b927536fab4f7741c9a49089","unresolved":false,"context_lines":[{"line_number":155,"context_line":""},{"line_number":156,"context_line":"    @ddt.data(\u0027change_since\u0027, \u0027change_before\u0027)"},{"line_number":157,"context_line":"    def test_volume_index_filter_by_change_since_or_before(self, change):"},{"line_number":158,"context_line":"        vols \u003d self._create_volume_with_glance_metadata()"},{"line_number":159,"context_line":"        change_since \u003d datetime.datetime(2099, 1, 1, 1, 1, 1)"},{"line_number":160,"context_line":"        req \u003d fakes.HTTPRequest.blank((\"/v3/volumes?%s\u003d%s\") %"},{"line_number":161,"context_line":"                                      (change, change_since))"}],"source_content_type":"text/x-python","patch_set":4,"id":"7ac969e8_edb816e8","line":158,"range":{"start_line":158,"start_character":8,"end_line":158,"end_character":12},"in_reply_to":"9ad45d7e_673c05e3","updated":"2016-08-13 01:56:04.000000000","message":"Done","commit_id":"f02e57eb5e4179ffb0066c580f946be50f9dbafe"},{"author":{"_account_id":10058,"name":"Erlon R. Cruz","email":"erlon.rodrigues.cruz@canonical.com","username":"sombrafam"},"change_message_id":"e5239c97fa992a4f5c8ce3cda771fa90d8226ba8","unresolved":false,"context_lines":[{"line_number":190,"context_line":"    @ddt.data(\u0027change_since\u0027, \u0027change_before\u0027)"},{"line_number":191,"context_line":"    def test_volume_filter_by_change_since_or_before_with_invaild_time(self,"},{"line_number":192,"context_line":"                                                                       change):"},{"line_number":193,"context_line":"        vols \u003d self._create_volume_with_glance_metadata()"},{"line_number":194,"context_line":"        change_since \u003d \u0027123\u0027"},{"line_number":195,"context_line":"        req \u003d fakes.HTTPRequest.blank((\"/v3/volumes?%s\u003d%s\") %"},{"line_number":196,"context_line":"                                      (change, change_since))"}],"source_content_type":"text/x-python","patch_set":4,"id":"9ad45d7e_e730f503","line":193,"range":{"start_line":193,"start_character":8,"end_line":193,"end_character":12},"updated":"2016-08-09 13:51:37.000000000","message":"Not used.","commit_id":"f02e57eb5e4179ffb0066c580f946be50f9dbafe"},{"author":{"_account_id":8846,"name":"Hao Wang","display_name":"Hao Wang","email":"sxmatch1986@gmail.com","username":"sxmatch"},"change_message_id":"ab888f9e975b6f81b927536fab4f7741c9a49089","unresolved":false,"context_lines":[{"line_number":190,"context_line":"    @ddt.data(\u0027change_since\u0027, \u0027change_before\u0027)"},{"line_number":191,"context_line":"    def test_volume_filter_by_change_since_or_before_with_invaild_time(self,"},{"line_number":192,"context_line":"                                                                       change):"},{"line_number":193,"context_line":"        vols \u003d self._create_volume_with_glance_metadata()"},{"line_number":194,"context_line":"        change_since \u003d \u0027123\u0027"},{"line_number":195,"context_line":"        req \u003d fakes.HTTPRequest.blank((\"/v3/volumes?%s\u003d%s\") %"},{"line_number":196,"context_line":"                                      (change, change_since))"}],"source_content_type":"text/x-python","patch_set":4,"id":"7ac969e8_4dce8a84","line":193,"range":{"start_line":193,"start_character":8,"end_line":193,"end_character":12},"in_reply_to":"9ad45d7e_e730f503","updated":"2016-08-13 01:56:04.000000000","message":"Done","commit_id":"f02e57eb5e4179ffb0066c580f946be50f9dbafe"},{"author":{"_account_id":1736,"name":"Ivan Kolodyazhny","email":"e0ne@e0ne.info","username":"e0ne"},"change_message_id":"5f40b07986693011c46037b5d8f16ff86458e157","unresolved":false,"context_lines":[{"line_number":801,"context_line":"        req.environ[\u0027cinder.context\u0027] \u003d self.ctxt"},{"line_number":802,"context_line":"        res_dict \u003d self.controller.index(req)"},{"line_number":803,"context_line":"        volumes \u003d res_dict[\u0027volumes\u0027]"},{"line_number":804,"context_line":"        if change \u003d\u003d \u0027changes-since\u0027:"},{"line_number":805,"context_line":"            self.assertEqual(0, len(volumes))"},{"line_number":806,"context_line":"        else:"},{"line_number":807,"context_line":"            self.assertEqual(2, len(volumes))"}],"source_content_type":"text/x-python","patch_set":51,"id":"1f9dbf25_6f47821f","line":804,"updated":"2018-02-28 15:47:57.000000000","message":"expected results should be provided via ddt to avoid this \u0027if\u0027 statement","commit_id":"9d77b45aa46405104d33aa8040f9684947e6abbe"},{"author":{"_account_id":8846,"name":"Hao Wang","display_name":"Hao Wang","email":"sxmatch1986@gmail.com","username":"sxmatch"},"change_message_id":"406ce0a0464e53e3864031e55f7ae3227d1f8e66","unresolved":false,"context_lines":[{"line_number":801,"context_line":"        req.environ[\u0027cinder.context\u0027] \u003d self.ctxt"},{"line_number":802,"context_line":"        res_dict \u003d self.controller.index(req)"},{"line_number":803,"context_line":"        volumes \u003d res_dict[\u0027volumes\u0027]"},{"line_number":804,"context_line":"        if change \u003d\u003d \u0027changes-since\u0027:"},{"line_number":805,"context_line":"            self.assertEqual(0, len(volumes))"},{"line_number":806,"context_line":"        else:"},{"line_number":807,"context_line":"            self.assertEqual(2, len(volumes))"}],"source_content_type":"text/x-python","patch_set":51,"id":"df7087c5_b3499861","line":804,"in_reply_to":"1f9dbf25_6f47821f","updated":"2018-03-07 06:30:07.000000000","message":"sure","commit_id":"9d77b45aa46405104d33aa8040f9684947e6abbe"},{"author":{"_account_id":1736,"name":"Ivan Kolodyazhny","email":"e0ne@e0ne.info","username":"e0ne"},"change_message_id":"5f40b07986693011c46037b5d8f16ff86458e157","unresolved":false,"context_lines":[{"line_number":816,"context_line":"        req.environ[\u0027cinder.context\u0027] \u003d self.ctxt"},{"line_number":817,"context_line":"        res_dict \u003d self.controller.index(req)"},{"line_number":818,"context_line":"        volumes \u003d res_dict[\u0027volumes\u0027]"},{"line_number":819,"context_line":"        if change \u003d\u003d \u0027changes-since\u0027:"},{"line_number":820,"context_line":"            self.assertEqual(1, len(volumes))"},{"line_number":821,"context_line":"            self.assertEqual(vols[1].id, volumes[0][\u0027id\u0027])"},{"line_number":822,"context_line":"        else:"}],"source_content_type":"text/x-python","patch_set":51,"id":"1f9dbf25_2f517ad9","line":819,"updated":"2018-02-28 15:47:57.000000000","message":"The same as above","commit_id":"9d77b45aa46405104d33aa8040f9684947e6abbe"},{"author":{"_account_id":8846,"name":"Hao Wang","display_name":"Hao Wang","email":"sxmatch1986@gmail.com","username":"sxmatch"},"change_message_id":"406ce0a0464e53e3864031e55f7ae3227d1f8e66","unresolved":false,"context_lines":[{"line_number":816,"context_line":"        req.environ[\u0027cinder.context\u0027] \u003d self.ctxt"},{"line_number":817,"context_line":"        res_dict \u003d self.controller.index(req)"},{"line_number":818,"context_line":"        volumes \u003d res_dict[\u0027volumes\u0027]"},{"line_number":819,"context_line":"        if change \u003d\u003d \u0027changes-since\u0027:"},{"line_number":820,"context_line":"            self.assertEqual(1, len(volumes))"},{"line_number":821,"context_line":"            self.assertEqual(vols[1].id, volumes[0][\u0027id\u0027])"},{"line_number":822,"context_line":"        else:"}],"source_content_type":"text/x-python","patch_set":51,"id":"df7087c5_d3468c50","line":819,"in_reply_to":"1f9dbf25_2f517ad9","updated":"2018-03-07 06:30:07.000000000","message":"Done","commit_id":"9d77b45aa46405104d33aa8040f9684947e6abbe"},{"author":{"_account_id":4523,"name":"Eric Harney","email":"eharney@redhat.com","username":"eharney"},"change_message_id":"63d68d755b796859e08d07dd8a495f35472fb78f","unresolved":false,"context_lines":[{"line_number":797,"context_line":"    def test_volume_index_filter_by_change_since_or_before(self, change,"},{"line_number":798,"context_line":"                                                           expect_result):"},{"line_number":799,"context_line":"        self._create_volume_with_glance_metadata()"},{"line_number":800,"context_line":"        change_since \u003d datetime.datetime(2099, 1, 1, 1, 1, 1)"},{"line_number":801,"context_line":"        req \u003d fakes.HTTPRequest.blank((\"/v3/volumes?%s\u003d%s\") %"},{"line_number":802,"context_line":"                                      (change, change_since))"},{"line_number":803,"context_line":"        req.environ[\u0027cinder.context\u0027] \u003d self.ctxt"}],"source_content_type":"text/x-python","patch_set":56,"id":"df7087c5_e2e30a33","line":800,"updated":"2018-03-14 14:12:32.000000000","message":"I think \"change_since\" here is a string formatted as\n    \"2099-01-01 01:01:01\"\n\nIs it really correct that we expect spaces in these calls?  This seems messy and doesn\u0027t match what\u0027s in the commit message.\n\nPlease include at least one test that shows what\u0027s passed into the API as a string.","commit_id":"0a37904da8b72b23b035b9bf45f8b0fb6e0126fe"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"change_message_id":"7f1cb4a777dfa6be4973b580b50802b38abac03b","unresolved":false,"context_lines":[{"line_number":681,"context_line":"        req.body \u003d jsonutils.dump_as_bytes(body)"},{"line_number":682,"context_line":"        res \u003d req.get_response(fakes.wsgi_app("},{"line_number":683,"context_line":"            fake_auth_context\u003dself.ctxt))"},{"line_number":684,"context_line":"        res_dict \u003d jsonutils.loads(res.body)"},{"line_number":685,"context_line":"        self.assertEqual(http_client.ACCEPTED, res.status_int)"},{"line_number":686,"context_line":"        self.assertIn(\u0027id\u0027, res_dict[\u0027volume\u0027])"},{"line_number":687,"context_line":""}],"source_content_type":"text/x-python","patch_set":61,"id":"3f79a3b5_ccca5318","line":684,"updated":"2018-10-18 12:17:01.000000000","message":"E1101: \u001b[1;31mModule \u0027http.client\u0027 has no \u0027ACCEPTED\u0027 member\u001b[0m (\u001b[1;31mno-member\u001b[0m)","commit_id":"c0d18bb3e33824c8310fbdb0fc6aed2ed9af7f78"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"change_message_id":"7f1cb4a777dfa6be4973b580b50802b38abac03b","unresolved":false,"context_lines":[{"line_number":794,"context_line":"        vol \u003d {"},{"line_number":795,"context_line":"            \u0027display_name\u0027: \u0027fake_volume1\u0027,"},{"line_number":796,"context_line":"            \u0027status\u0027: \u0027available\u0027"},{"line_number":797,"context_line":"        }"},{"line_number":798,"context_line":"        volume \u003d objects.Volume(context\u003dself.ctxt, **vol)"},{"line_number":799,"context_line":"        volume.create()"},{"line_number":800,"context_line":"        return volume"}],"source_content_type":"text/x-python","patch_set":61,"id":"3f79a3b5_eccf0f26","line":797,"updated":"2018-10-18 12:17:01.000000000","message":"E1101: \u001b[1;31mModule \u0027cinder.objects\u0027 has no \u0027Volume\u0027 member\u001b[0m (\u001b[1;31mno-member\u001b[0m)","commit_id":"c0d18bb3e33824c8310fbdb0fc6aed2ed9af7f78"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"change_message_id":"7f1cb4a777dfa6be4973b580b50802b38abac03b","unresolved":false,"context_lines":[{"line_number":804,"context_line":"            \u0027display_name\u0027: \u0027fake_snapshot1\u0027,"},{"line_number":805,"context_line":"            \u0027status\u0027: \u0027available\u0027,"},{"line_number":806,"context_line":"            \u0027volume_id\u0027: volume_id"},{"line_number":807,"context_line":"        }"},{"line_number":808,"context_line":"        snapshot \u003d objects.Snapshot(context\u003dself.ctxt, **snap)"},{"line_number":809,"context_line":"        snapshot.create()"},{"line_number":810,"context_line":"        return snapshot"}],"source_content_type":"text/x-python","patch_set":61,"id":"3f79a3b5_8cd45bbe","line":807,"updated":"2018-10-18 12:17:01.000000000","message":"E1101: \u001b[1;31mModule \u0027cinder.objects\u0027 has no \u0027Snapshot\u0027 member\u001b[0m (\u001b[1;31mno-member\u001b[0m)","commit_id":"c0d18bb3e33824c8310fbdb0fc6aed2ed9af7f78"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"change_message_id":"7f1cb4a777dfa6be4973b580b50802b38abac03b","unresolved":false,"context_lines":[{"line_number":808,"context_line":"        snapshot \u003d objects.Snapshot(context\u003dself.ctxt, **snap)"},{"line_number":809,"context_line":"        snapshot.create()"},{"line_number":810,"context_line":"        return snapshot"},{"line_number":811,"context_line":""},{"line_number":812,"context_line":"    @mock.patch.object(objects.Volume, \u0027get_latest_snapshot\u0027)"},{"line_number":813,"context_line":"    @mock.patch.object(volume_api.API, \u0027get_volume\u0027)"},{"line_number":814,"context_line":"    def test_volume_revert_with_snapshot_not_found(self, mock_volume,"}],"source_content_type":"text/x-python","patch_set":61,"id":"3f79a3b5_acd117cd","line":811,"updated":"2018-10-18 12:17:01.000000000","message":"E1101: \u001b[1;31mModule \u0027cinder.objects\u0027 has no \u0027Volume\u0027 member\u001b[0m (\u001b[1;31mno-member\u001b[0m)","commit_id":"c0d18bb3e33824c8310fbdb0fc6aed2ed9af7f78"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"change_message_id":"7f1cb4a777dfa6be4973b580b50802b38abac03b","unresolved":false,"context_lines":[{"line_number":825,"context_line":"        self.assertRaises(webob.exc.HTTPBadRequest, self.controller.revert,"},{"line_number":826,"context_line":"                          req, \u0027fake_id\u0027, {\u0027revert\u0027: {\u0027snapshot_id\u0027:"},{"line_number":827,"context_line":"                                                      \u0027fake_snapshot_id\u0027}})"},{"line_number":828,"context_line":""},{"line_number":829,"context_line":"    @mock.patch.object(objects.Volume, \u0027get_latest_snapshot\u0027)"},{"line_number":830,"context_line":"    @mock.patch.object(volume_api.API, \u0027get_volume\u0027)"},{"line_number":831,"context_line":"    def test_volume_revert_with_snapshot_not_match(self, mock_volume,"}],"source_content_type":"text/x-python","patch_set":61,"id":"3f79a3b5_4cde43dc","line":828,"updated":"2018-10-18 12:17:01.000000000","message":"E1101: \u001b[1;31mModule \u0027cinder.objects\u0027 has no \u0027Volume\u0027 member\u001b[0m (\u001b[1;31mno-member\u001b[0m)","commit_id":"c0d18bb3e33824c8310fbdb0fc6aed2ed9af7f78"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"change_message_id":"7f1cb4a777dfa6be4973b580b50802b38abac03b","unresolved":false,"context_lines":[{"line_number":842,"context_line":"        self.assertRaises(webob.exc.HTTPBadRequest, self.controller.revert,"},{"line_number":843,"context_line":"                          req, \u0027fake_id\u0027, {\u0027revert\u0027: {\u0027snapshot_id\u0027:"},{"line_number":844,"context_line":"                                                      \u0027fake_snapshot_id\u0027}})"},{"line_number":845,"context_line":""},{"line_number":846,"context_line":"    @mock.patch.object(objects.Volume, \u0027get_latest_snapshot\u0027)"},{"line_number":847,"context_line":"    @mock.patch(\u0027cinder.objects.base.\u0027"},{"line_number":848,"context_line":"                \u0027CinderPersistentObject.update_single_status_where\u0027)"}],"source_content_type":"text/x-python","patch_set":61,"id":"3f79a3b5_6cdbffe9","line":845,"updated":"2018-10-18 12:17:01.000000000","message":"E1101: \u001b[1;31mModule \u0027cinder.objects\u0027 has no \u0027Volume\u0027 member\u001b[0m (\u001b[1;31mno-member\u001b[0m)","commit_id":"c0d18bb3e33824c8310fbdb0fc6aed2ed9af7f78"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"change_message_id":"7f1cb4a777dfa6be4973b580b50802b38abac03b","unresolved":false,"context_lines":[{"line_number":896,"context_line":"            \u0027mountpoint\u0027: \u0027na\u0027,"},{"line_number":897,"context_line":"            \u0027attach_time\u0027: att_time,"},{"line_number":898,"context_line":"            \u0027attach_status\u0027: fields.VolumeAttachStatus.ATTACHED"},{"line_number":899,"context_line":"        }"},{"line_number":900,"context_line":"        attachment1 \u003d objects.VolumeAttachment(self.ctxt, **a1)"},{"line_number":901,"context_line":"        attachment2 \u003d objects.VolumeAttachment(self.ctxt, **a2)"},{"line_number":902,"context_line":"        atts \u003d {\u0027objects\u0027: [attachment1, attachment2]}"}],"source_content_type":"text/x-python","patch_set":61,"id":"3f79a3b5_0cea8b76","line":899,"updated":"2018-10-18 12:17:01.000000000","message":"E1101: \u001b[1;31mModule \u0027cinder.objects\u0027 has no \u0027VolumeAttachment\u0027 member\u001b[0m (\u001b[1;31mno-member\u001b[0m)","commit_id":"c0d18bb3e33824c8310fbdb0fc6aed2ed9af7f78"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"change_message_id":"7f1cb4a777dfa6be4973b580b50802b38abac03b","unresolved":false,"context_lines":[{"line_number":897,"context_line":"            \u0027attach_time\u0027: att_time,"},{"line_number":898,"context_line":"            \u0027attach_status\u0027: fields.VolumeAttachStatus.ATTACHED"},{"line_number":899,"context_line":"        }"},{"line_number":900,"context_line":"        attachment1 \u003d objects.VolumeAttachment(self.ctxt, **a1)"},{"line_number":901,"context_line":"        attachment2 \u003d objects.VolumeAttachment(self.ctxt, **a2)"},{"line_number":902,"context_line":"        atts \u003d {\u0027objects\u0027: [attachment1, attachment2]}"},{"line_number":903,"context_line":"        attachments \u003d objects.VolumeAttachmentList(self.ctxt, **atts)"}],"source_content_type":"text/x-python","patch_set":61,"id":"3f79a3b5_2cef4787","line":900,"updated":"2018-10-18 12:17:01.000000000","message":"E1101: \u001b[1;31mModule \u0027cinder.objects\u0027 has no \u0027VolumeAttachment\u0027 member\u001b[0m (\u001b[1;31mno-member\u001b[0m)","commit_id":"c0d18bb3e33824c8310fbdb0fc6aed2ed9af7f78"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"change_message_id":"7f1cb4a777dfa6be4973b580b50802b38abac03b","unresolved":false,"context_lines":[{"line_number":899,"context_line":"        }"},{"line_number":900,"context_line":"        attachment1 \u003d objects.VolumeAttachment(self.ctxt, **a1)"},{"line_number":901,"context_line":"        attachment2 \u003d objects.VolumeAttachment(self.ctxt, **a2)"},{"line_number":902,"context_line":"        atts \u003d {\u0027objects\u0027: [attachment1, attachment2]}"},{"line_number":903,"context_line":"        attachments \u003d objects.VolumeAttachmentList(self.ctxt, **atts)"},{"line_number":904,"context_line":""},{"line_number":905,"context_line":"        fake_volume[\u0027volume_attachment\u0027] \u003d attachments"}],"source_content_type":"text/x-python","patch_set":61,"id":"3f79a3b5_cce333a0","line":902,"updated":"2018-10-18 12:17:01.000000000","message":"E1101: \u001b[1;31mModule \u0027cinder.objects\u0027 has no \u0027VolumeAttachmentList\u0027 member\u001b[0m (\u001b[1;31mno-member\u001b[0m)","commit_id":"c0d18bb3e33824c8310fbdb0fc6aed2ed9af7f78"},{"author":{"_account_id":5314,"name":"Brian Rosmaita","email":"rosmaita.fossdev@gmail.com","username":"brian-rosmaita"},"change_message_id":"b9f97ddf37554519a0d70163f733cbd47e12d267","unresolved":false,"context_lines":[{"line_number":122,"context_line":""},{"line_number":123,"context_line":"    def _create_volume_with_glance_metadata(self):"},{"line_number":124,"context_line":"        vol1 \u003d db.volume_create(self.ctxt, {\u0027display_name\u0027: \u0027test1\u0027,"},{"line_number":125,"context_line":"                                            \u0027created_at\u0027: timeutils.utcnow(),"},{"line_number":126,"context_line":"                                            \u0027updated_at\u0027: timeutils.utcnow(),"},{"line_number":127,"context_line":"                                            \u0027project_id\u0027:"},{"line_number":128,"context_line":"                                            self.ctxt.project_id,"}],"source_content_type":"text/x-python","patch_set":83,"id":"3fa7e38b_31f5a3cc","line":125,"updated":"2020-01-28 23:43:17.000000000","message":"it looks like your tests below depend on these times being different and in a specific order.  To make sure of this, I suggest creating a base time and a timedelta of a second or a minute at the beginning of the function and then initializing these like:\n\nbasetime \u003d timeutils.utcnow()\ntd \u003d datetime.timedelta(minutes\u003d1)\nvol1:\ncreated_at: basetime - 3 * td\nupdated_at: basetime - 2 * td\nvol2:\ncreated_at: basetime - td\nupdated_at: td\n\nThis way you know for sure what the relative times are.","commit_id":"379ef573eed03a02ba5955b1600c271529cc9966"},{"author":{"_account_id":8846,"name":"Hao Wang","display_name":"Hao Wang","email":"sxmatch1986@gmail.com","username":"sxmatch"},"change_message_id":"5719f0c5c80d0991f3ad8ec161c0bf7257c01d63","unresolved":false,"context_lines":[{"line_number":122,"context_line":""},{"line_number":123,"context_line":"    def _create_volume_with_glance_metadata(self):"},{"line_number":124,"context_line":"        vol1 \u003d db.volume_create(self.ctxt, {\u0027display_name\u0027: \u0027test1\u0027,"},{"line_number":125,"context_line":"                                            \u0027created_at\u0027: timeutils.utcnow(),"},{"line_number":126,"context_line":"                                            \u0027updated_at\u0027: timeutils.utcnow(),"},{"line_number":127,"context_line":"                                            \u0027project_id\u0027:"},{"line_number":128,"context_line":"                                            self.ctxt.project_id,"}],"source_content_type":"text/x-python","patch_set":83,"id":"3fa7e38b_43f859c0","line":125,"in_reply_to":"3fa7e38b_31f5a3cc","updated":"2020-02-03 10:02:19.000000000","message":"No problem, this will be clear more. and I think the updated_at time on vol2 should be \"basetime\". :)","commit_id":"379ef573eed03a02ba5955b1600c271529cc9966"},{"author":{"_account_id":5314,"name":"Brian Rosmaita","email":"rosmaita.fossdev@gmail.com","username":"brian-rosmaita"},"change_message_id":"5b1a0177cda429f6a2149c8ff3ff661bf3d42187","unresolved":false,"context_lines":[{"line_number":122,"context_line":""},{"line_number":123,"context_line":"    def _create_volume_with_glance_metadata(self):"},{"line_number":124,"context_line":"        vol1 \u003d db.volume_create(self.ctxt, {\u0027display_name\u0027: \u0027test1\u0027,"},{"line_number":125,"context_line":"                                            \u0027created_at\u0027: timeutils.utcnow(),"},{"line_number":126,"context_line":"                                            \u0027updated_at\u0027: timeutils.utcnow(),"},{"line_number":127,"context_line":"                                            \u0027project_id\u0027:"},{"line_number":128,"context_line":"                                            self.ctxt.project_id,"}],"source_content_type":"text/x-python","patch_set":83,"id":"3fa7e38b_cf4b03b0","line":125,"in_reply_to":"3fa7e38b_43f859c0","updated":"2020-02-03 21:13:48.000000000","message":"Good catch! Glad you\u0027re paying attention!","commit_id":"379ef573eed03a02ba5955b1600c271529cc9966"},{"author":{"_account_id":5314,"name":"Brian Rosmaita","email":"rosmaita.fossdev@gmail.com","username":"brian-rosmaita"},"change_message_id":"b9f97ddf37554519a0d70163f733cbd47e12d267","unresolved":false,"context_lines":[{"line_number":1034,"context_line":"            mv.VOLUME_TIME_COMPARISON_FILTER)"},{"line_number":1035,"context_line":"        res_dict \u003d self.controller.index(req)"},{"line_number":1036,"context_line":"        volumes \u003d res_dict[\u0027volumes\u0027]"},{"line_number":1037,"context_line":"        self.assertEqual(result, len(volumes))"},{"line_number":1038,"context_line":""},{"line_number":1039,"context_line":"    @ddt.data(\u0027created_at\u0027, \u0027updated_at\u0027)"},{"line_number":1040,"context_line":"    def test_volume_filter_by_time_with_invaild_time(self, change):"}],"source_content_type":"text/x-python","patch_set":83,"id":"3fa7e38b_7120fb4b","line":1037,"updated":"2020-01-28 23:43:17.000000000","message":"it would be good to also check the volume id here to make sure that you\u0027re getting the correct one","commit_id":"379ef573eed03a02ba5955b1600c271529cc9966"},{"author":{"_account_id":8846,"name":"Hao Wang","display_name":"Hao Wang","email":"sxmatch1986@gmail.com","username":"sxmatch"},"change_message_id":"5719f0c5c80d0991f3ad8ec161c0bf7257c01d63","unresolved":false,"context_lines":[{"line_number":1034,"context_line":"            mv.VOLUME_TIME_COMPARISON_FILTER)"},{"line_number":1035,"context_line":"        res_dict \u003d self.controller.index(req)"},{"line_number":1036,"context_line":"        volumes \u003d res_dict[\u0027volumes\u0027]"},{"line_number":1037,"context_line":"        self.assertEqual(result, len(volumes))"},{"line_number":1038,"context_line":""},{"line_number":1039,"context_line":"    @ddt.data(\u0027created_at\u0027, \u0027updated_at\u0027)"},{"line_number":1040,"context_line":"    def test_volume_filter_by_time_with_invaild_time(self, change):"}],"source_content_type":"text/x-python","patch_set":83,"id":"3fa7e38b_43bff9c9","line":1037,"in_reply_to":"3fa7e38b_7120fb4b","updated":"2020-02-03 10:02:19.000000000","message":"Done","commit_id":"379ef573eed03a02ba5955b1600c271529cc9966"},{"author":{"_account_id":5314,"name":"Brian Rosmaita","email":"rosmaita.fossdev@gmail.com","username":"brian-rosmaita"},"change_message_id":"5b1a0177cda429f6a2149c8ff3ff661bf3d42187","unresolved":false,"context_lines":[{"line_number":124,"context_line":"        basetime \u003d timeutils.utcnow()"},{"line_number":125,"context_line":"        td \u003d datetime.timedelta(minutes\u003d1)"},{"line_number":126,"context_line":""},{"line_number":127,"context_line":"        vol1 \u003d db.volume_create(self.ctxt, {\u0027display_name\u0027: \u0027test1\u0027,"},{"line_number":128,"context_line":"                                            \u0027created_at\u0027: basetime - 3 * td,"},{"line_number":129,"context_line":"                                            \u0027updated_at\u0027: basetime - 2 * td,"},{"line_number":130,"context_line":"                                            \u0027project_id\u0027:"}],"source_content_type":"text/x-python","patch_set":84,"id":"3fa7e38b_618a2366","line":127,"updated":"2020-02-03 21:13:48.000000000","message":"I suggest adding\n\n  \u0027id\u0027: fake.VOLUME_ID\n\nhere and using fake.VOLUME2_ID for the next one so that you can refer to the IDs in the ddt.data later","commit_id":"255c2f72ce98d027670b9ba4bb65662d7a8ade8a"},{"author":{"_account_id":8846,"name":"Hao Wang","display_name":"Hao Wang","email":"sxmatch1986@gmail.com","username":"sxmatch"},"change_message_id":"d1a6e8097bcaed0eb8e99f883d69e0e03e86ab29","unresolved":false,"context_lines":[{"line_number":124,"context_line":"        basetime \u003d timeutils.utcnow()"},{"line_number":125,"context_line":"        td \u003d datetime.timedelta(minutes\u003d1)"},{"line_number":126,"context_line":""},{"line_number":127,"context_line":"        vol1 \u003d db.volume_create(self.ctxt, {\u0027display_name\u0027: \u0027test1\u0027,"},{"line_number":128,"context_line":"                                            \u0027created_at\u0027: basetime - 3 * td,"},{"line_number":129,"context_line":"                                            \u0027updated_at\u0027: basetime - 2 * td,"},{"line_number":130,"context_line":"                                            \u0027project_id\u0027:"}],"source_content_type":"text/x-python","patch_set":84,"id":"3fa7e38b_98fc5a72","line":127,"in_reply_to":"3fa7e38b_618a2366","updated":"2020-02-05 01:24:00.000000000","message":"sure","commit_id":"255c2f72ce98d027670b9ba4bb65662d7a8ade8a"},{"author":{"_account_id":5314,"name":"Brian Rosmaita","email":"rosmaita.fossdev@gmail.com","username":"brian-rosmaita"},"change_message_id":"5b1a0177cda429f6a2149c8ff3ff661bf3d42187","unresolved":false,"context_lines":[{"line_number":1038,"context_line":"        res_dict \u003d self.controller.index(req)"},{"line_number":1039,"context_line":"        volumes \u003d res_dict[\u0027volumes\u0027]"},{"line_number":1040,"context_line":"        self.assertEqual(result, len(volumes))"},{"line_number":1041,"context_line":"        if change \u003d\u003d \u0027updated_at\u003deq:\u0027:"},{"line_number":1042,"context_line":"            self.assertEqual(vols[1].id, volumes[0][\u0027id\u0027])"},{"line_number":1043,"context_line":"        else:"},{"line_number":1044,"context_line":"            self.assertEqual(vols[0].id, volumes[0][\u0027id\u0027])"}],"source_content_type":"text/x-python","patch_set":84,"id":"3fa7e38b_410367be","line":1041,"updated":"2020-02-03 21:13:48.000000000","message":"This may be a personal taste, but I really don\u0027t like to include logic in unit tests (because how do you know it\u0027s right without a meta-unit-test for it?).  If you use the fake_constants for the volume IDs as I suggest at line 127, you can pass in the expected volume ID as part of the ddt.data instead of having this \u0027if\u0027 statement.","commit_id":"255c2f72ce98d027670b9ba4bb65662d7a8ade8a"},{"author":{"_account_id":8846,"name":"Hao Wang","display_name":"Hao Wang","email":"sxmatch1986@gmail.com","username":"sxmatch"},"change_message_id":"d1a6e8097bcaed0eb8e99f883d69e0e03e86ab29","unresolved":false,"context_lines":[{"line_number":1038,"context_line":"        res_dict \u003d self.controller.index(req)"},{"line_number":1039,"context_line":"        volumes \u003d res_dict[\u0027volumes\u0027]"},{"line_number":1040,"context_line":"        self.assertEqual(result, len(volumes))"},{"line_number":1041,"context_line":"        if change \u003d\u003d \u0027updated_at\u003deq:\u0027:"},{"line_number":1042,"context_line":"            self.assertEqual(vols[1].id, volumes[0][\u0027id\u0027])"},{"line_number":1043,"context_line":"        else:"},{"line_number":1044,"context_line":"            self.assertEqual(vols[0].id, volumes[0][\u0027id\u0027])"}],"source_content_type":"text/x-python","patch_set":84,"id":"3fa7e38b_9831ba5b","line":1041,"in_reply_to":"3fa7e38b_410367be","updated":"2020-02-05 01:24:00.000000000","message":"Got it, thanks.","commit_id":"255c2f72ce98d027670b9ba4bb65662d7a8ade8a"},{"author":{"_account_id":5314,"name":"Brian Rosmaita","email":"rosmaita.fossdev@gmail.com","username":"brian-rosmaita"},"change_message_id":"9b06983b9bd324cbcc5e4db9b3b4c9d77371c427","unresolved":false,"context_lines":[{"line_number":1000,"context_line":"    def test_volume_index_filter_by_created_at_with_gt_and_lt(self, change,"},{"line_number":1001,"context_line":"                                                              expect_result):"},{"line_number":1002,"context_line":"        self._create_volume_with_glance_metadata()"},{"line_number":1003,"context_line":"        change_time \u003d datetime.datetime(2099, 1, 1, 1, 1, 1)"},{"line_number":1004,"context_line":"        req \u003d fakes.HTTPRequest.blank((\"/v3/volumes?%s%s\") %"},{"line_number":1005,"context_line":"                                      (change, change_time))"},{"line_number":1006,"context_line":"        req.environ[\u0027cinder.context\u0027] \u003d self.ctxt"}],"source_content_type":"text/x-python","patch_set":86,"id":"1fa4df85_955f82e4","line":1003,"updated":"2020-02-24 16:25:51.000000000","message":"nit: this test will have to be revised in 2099!\n\nBecause of the way you\u0027re setting the times in _create_volume_with_glance_metadata() you could use utcnow() + 1 minute here, or you could change _create_volume_with_glance_metadata() to take basetime as an optional parameter and pass in what you want to use as basetime for this test.","commit_id":"e4b2f8319d534805f5bf5530fd09e8b9737b4a5d"},{"author":{"_account_id":8846,"name":"Hao Wang","display_name":"Hao Wang","email":"sxmatch1986@gmail.com","username":"sxmatch"},"change_message_id":"f597dd5797e539177fd9d1fe3792a372910e233d","unresolved":false,"context_lines":[{"line_number":1000,"context_line":"    def test_volume_index_filter_by_created_at_with_gt_and_lt(self, change,"},{"line_number":1001,"context_line":"                                                              expect_result):"},{"line_number":1002,"context_line":"        self._create_volume_with_glance_metadata()"},{"line_number":1003,"context_line":"        change_time \u003d datetime.datetime(2099, 1, 1, 1, 1, 1)"},{"line_number":1004,"context_line":"        req \u003d fakes.HTTPRequest.blank((\"/v3/volumes?%s%s\") %"},{"line_number":1005,"context_line":"                                      (change, change_time))"},{"line_number":1006,"context_line":"        req.environ[\u0027cinder.context\u0027] \u003d self.ctxt"}],"source_content_type":"text/x-python","patch_set":86,"id":"1fa4df85_f206ff20","line":1003,"in_reply_to":"1fa4df85_955f82e4","updated":"2020-02-25 09:34:11.000000000","message":"thanks Brian, will fix it.","commit_id":"e4b2f8319d534805f5bf5530fd09e8b9737b4a5d"},{"author":{"_account_id":5314,"name":"Brian Rosmaita","email":"rosmaita.fossdev@gmail.com","username":"brian-rosmaita"},"change_message_id":"9b06983b9bd324cbcc5e4db9b3b4c9d77371c427","unresolved":false,"context_lines":[{"line_number":1059,"context_line":"    def test_volume_index_filter_by_time_with_lte_and_gte(self):"},{"line_number":1060,"context_line":"        vols \u003d self._create_volume_with_glance_metadata()"},{"line_number":1061,"context_line":"        change_since \u003d vols[1].updated_at"},{"line_number":1062,"context_line":"        change_before \u003d datetime.datetime(2099, 1, 1, 1, 1, 1)"},{"line_number":1063,"context_line":"        req \u003d fakes.HTTPRequest.blank((\"/v3/volumes?updated_at\u003dlte:%s\u0026\""},{"line_number":1064,"context_line":"                                       \"updated_at\u003dgte:%s\") %"},{"line_number":1065,"context_line":"                                      (change_before, change_since))"}],"source_content_type":"text/x-python","patch_set":86,"id":"1fa4df85_35700e73","line":1062,"updated":"2020-02-24 16:25:51.000000000","message":"same issue as line 1003","commit_id":"e4b2f8319d534805f5bf5530fd09e8b9737b4a5d"},{"author":{"_account_id":8846,"name":"Hao Wang","display_name":"Hao Wang","email":"sxmatch1986@gmail.com","username":"sxmatch"},"change_message_id":"f597dd5797e539177fd9d1fe3792a372910e233d","unresolved":false,"context_lines":[{"line_number":1059,"context_line":"    def test_volume_index_filter_by_time_with_lte_and_gte(self):"},{"line_number":1060,"context_line":"        vols \u003d self._create_volume_with_glance_metadata()"},{"line_number":1061,"context_line":"        change_since \u003d vols[1].updated_at"},{"line_number":1062,"context_line":"        change_before \u003d datetime.datetime(2099, 1, 1, 1, 1, 1)"},{"line_number":1063,"context_line":"        req \u003d fakes.HTTPRequest.blank((\"/v3/volumes?updated_at\u003dlte:%s\u0026\""},{"line_number":1064,"context_line":"                                       \"updated_at\u003dgte:%s\") %"},{"line_number":1065,"context_line":"                                      (change_before, change_since))"}],"source_content_type":"text/x-python","patch_set":86,"id":"1fa4df85_1204fb16","line":1062,"in_reply_to":"1fa4df85_35700e73","updated":"2020-02-25 09:34:11.000000000","message":"Done","commit_id":"e4b2f8319d534805f5bf5530fd09e8b9737b4a5d"}],"etc/cinder/resource_filters.json":[{"author":{"_account_id":5314,"name":"Brian Rosmaita","email":"rosmaita.fossdev@gmail.com","username":"brian-rosmaita"},"change_message_id":"b9f97ddf37554519a0d70163f733cbd47e12d267","unresolved":false,"context_lines":[{"line_number":12,"context_line":"                \"request_id\", \"message_level\"],"},{"line_number":13,"context_line":"    \"pool\": [\"name\", \"volume_type\"],"},{"line_number":14,"context_line":"    \"volume_type\": [\"is_public\"],"},{"line_number":15,"context_line":"    \"time_comparison_operators\": [\"gt\", \"gte\", \"eq\", \"neq\", \"lt\", \"lte\"]"},{"line_number":16,"context_line":"}"}],"source_content_type":"application/json","patch_set":83,"id":"3fa7e38b_d6bbe5e0","line":15,"updated":"2020-01-28 23:43:17.000000000","message":"I don\u0027t think these should be included here.  (1) They aren\u0027t a resource, and (2) if time comparison filtering is implemented for any other resources, we\u0027ll be using the same operators.  So I think these should just be documented as part of the query-string syntax in the api-ref.","commit_id":"379ef573eed03a02ba5955b1600c271529cc9966"},{"author":{"_account_id":8846,"name":"Hao Wang","display_name":"Hao Wang","email":"sxmatch1986@gmail.com","username":"sxmatch"},"change_message_id":"5719f0c5c80d0991f3ad8ec161c0bf7257c01d63","unresolved":false,"context_lines":[{"line_number":12,"context_line":"                \"request_id\", \"message_level\"],"},{"line_number":13,"context_line":"    \"pool\": [\"name\", \"volume_type\"],"},{"line_number":14,"context_line":"    \"volume_type\": [\"is_public\"],"},{"line_number":15,"context_line":"    \"time_comparison_operators\": [\"gt\", \"gte\", \"eq\", \"neq\", \"lt\", \"lte\"]"},{"line_number":16,"context_line":"}"}],"source_content_type":"application/json","patch_set":83,"id":"3fa7e38b_034b415e","line":15,"in_reply_to":"3fa7e38b_d6bbe5e0","updated":"2020-02-03 10:02:19.000000000","message":"em, agree with you, so this will be removed. thanks","commit_id":"379ef573eed03a02ba5955b1600c271529cc9966"}],"releasenotes/notes/support-to-query-cinder-resources-filter-by-change-since-32ae9aaea131d598.yaml":[{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"d07974fda226dfc35442cce379aadf080b31cf1c","unresolved":false,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"features:"},{"line_number":3,"context_line":"  - Users can query volumes by specifying the time that resources are changed"},{"line_number":4,"context_line":"    since or before, and cinder will return the all which matches condition."}],"source_content_type":"text/x-yaml","patch_set":57,"id":"5f7c97a3_78d51d1b","line":4,"range":{"start_line":4,"start_character":44,"end_line":4,"end_character":51},"updated":"2018-06-03 16:02:04.000000000","message":"/the all/all/\n\n/which matches condition/which match the condition/","commit_id":"ff8fb789c2980b568f3eef00007d0125b6d89fdb"},{"author":{"_account_id":8846,"name":"Hao Wang","display_name":"Hao Wang","email":"sxmatch1986@gmail.com","username":"sxmatch"},"change_message_id":"cdfb73a49abd0e4b1ccd2a3c8be86970afba0fc3","unresolved":false,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"features:"},{"line_number":3,"context_line":"  - Users can query volumes by specifying the time that resources are changed"},{"line_number":4,"context_line":"    since or before, and cinder will return the all which matches condition."}],"source_content_type":"text/x-yaml","patch_set":57,"id":"3f79a3b5_d5db164c","line":4,"range":{"start_line":4,"start_character":44,"end_line":4,"end_character":51},"in_reply_to":"5f7c97a3_78d51d1b","updated":"2018-09-06 01:11:18.000000000","message":"Done","commit_id":"ff8fb789c2980b568f3eef00007d0125b6d89fdb"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"0ddf8f7c4dfbd102a9967274db0bf8715f868e10","unresolved":false,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"features:"},{"line_number":3,"context_line":"  - Users can query volumes by specifying the time that resources are changed"},{"line_number":4,"context_line":"    since or before, and cinder will return all which match the condition."}],"source_content_type":"text/x-yaml","patch_set":60,"id":"3f79a3b5_6f7b3828","line":4,"updated":"2018-10-15 23:15:49.000000000","message":"If you need to do an update, please add the specific parameters of ``changes-since`` and ``changes-before`` to this description.","commit_id":"d208ac8985e093821a80d9227ccfca4a968c6d29"},{"author":{"_account_id":8846,"name":"Hao Wang","display_name":"Hao Wang","email":"sxmatch1986@gmail.com","username":"sxmatch"},"change_message_id":"1bc6cedc5fc72c3953ca08e20ad53e529a0ccd9e","unresolved":false,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"features:"},{"line_number":3,"context_line":"  - Users can query volumes by specifying the time that resources are changed"},{"line_number":4,"context_line":"    since or before, and cinder will return all which match the condition."}],"source_content_type":"text/x-yaml","patch_set":60,"id":"3f79a3b5_d8f1b102","line":4,"in_reply_to":"3f79a3b5_6f7b3828","updated":"2018-10-18 09:10:06.000000000","message":"Sure","commit_id":"d208ac8985e093821a80d9227ccfca4a968c6d29"},{"author":{"_account_id":7198,"name":"Jay Bryant","email":"jungleboyj@electronicjungle.net","username":"jsbryant"},"change_message_id":"3dfda34e2e27e90d863d71993b1304d186de9fea","unresolved":false,"context_lines":[{"line_number":3,"context_line":"  - Users can query volumes by specifying the time that resources are changed"},{"line_number":4,"context_line":"    since or before, and cinder will return all which match the condition. To"},{"line_number":5,"context_line":"    use this feature, user need to specify two parameters of \u0027\u0027changes-since\u0027\u0027"},{"line_number":6,"context_line":"    and \u0027\u0027changes-from-before\u0027\u0027 in query url with microversion \u00273.56\u0027."}],"source_content_type":"text/x-yaml","patch_set":74,"id":"9fb8cfa7_29ba7fc0","line":6,"range":{"start_line":6,"start_character":64,"end_line":6,"end_character":68},"updated":"2019-06-10 14:34:21.000000000","message":"This has changed in recent patches.","commit_id":"e9eb63d38fe94cec00883ab2077b81da12533fbc"}],"releasenotes/notes/support-to-query-cinder-resources-filter-by-update-at-and-created-at-32ae9aaea131d598.yaml":[{"author":{"_account_id":5314,"name":"Brian Rosmaita","email":"rosmaita.fossdev@gmail.com","username":"brian-rosmaita"},"change_message_id":"b9f97ddf37554519a0d70163f733cbd47e12d267","unresolved":false,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"features:"},{"line_number":3,"context_line":"  - Users can query volumes by specifying the time that resources are created"},{"line_number":4,"context_line":"    at or updated at with time comparison operators, and cinder will return all"},{"line_number":5,"context_line":"    which match the condition. To use this feature, user need to specify two"},{"line_number":6,"context_line":"    parameters of \u0027\u0027created_at\u0027\u0027 or \u0027\u0027updated_at\u0027\u0027 with comparison operators"},{"line_number":7,"context_line":"    \"gt/gte/eq/neq/lt/lte\" in query url with microversion \u00273.60\u0027."}],"source_content_type":"text/x-yaml","patch_set":83,"id":"3fa7e38b_d605257a","line":7,"range":{"start_line":3,"start_character":4,"end_line":7,"end_character":65},"updated":"2020-01-28 23:43:17.000000000","message":"How about:\n\nBeginning with microversion 3.60, users may apply time comparison filters to the volume summary list and volume detail list requests by using the ``created_at`` or ``updated_at`` fields.  Time must be expressed in ISO 8601 format.  See the `Block Storage API v3 Reference\n\u003chttps://docs.openstack.org/api-ref/block-storage/v3/index.html\u003e`_\nfor details.","commit_id":"379ef573eed03a02ba5955b1600c271529cc9966"},{"author":{"_account_id":8846,"name":"Hao Wang","display_name":"Hao Wang","email":"sxmatch1986@gmail.com","username":"sxmatch"},"change_message_id":"5719f0c5c80d0991f3ad8ec161c0bf7257c01d63","unresolved":false,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"features:"},{"line_number":3,"context_line":"  - Users can query volumes by specifying the time that resources are created"},{"line_number":4,"context_line":"    at or updated at with time comparison operators, and cinder will return all"},{"line_number":5,"context_line":"    which match the condition. To use this feature, user need to specify two"},{"line_number":6,"context_line":"    parameters of \u0027\u0027created_at\u0027\u0027 or \u0027\u0027updated_at\u0027\u0027 with comparison operators"},{"line_number":7,"context_line":"    \"gt/gte/eq/neq/lt/lte\" in query url with microversion \u00273.60\u0027."}],"source_content_type":"text/x-yaml","patch_set":83,"id":"3fa7e38b_43129957","line":7,"range":{"start_line":3,"start_character":4,"end_line":7,"end_character":65},"in_reply_to":"3fa7e38b_d605257a","updated":"2020-02-03 10:02:19.000000000","message":"Sure, done","commit_id":"379ef573eed03a02ba5955b1600c271529cc9966"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"fd8748353c20f08945e4eb241ebf0b4effe577e3","unresolved":false,"context_lines":[{"line_number":2,"context_line":"features:"},{"line_number":3,"context_line":"  - Beginning with microversion 3.60, users may apply time comparison filters"},{"line_number":4,"context_line":"    to the volume summary list and volume detail list requests by using the"},{"line_number":5,"context_line":"    \"created_at\" or \"updated_at\" fields. Time must be expressed in ISO"},{"line_number":6,"context_line":"    8601 format. See the \u0027Block Storage API v3 Reference"},{"line_number":7,"context_line":"    \u003chttps://docs.openstack.org/api-ref/block-storage/v3/index.html\u003e\u0027_ for"},{"line_number":8,"context_line":"    details."}],"source_content_type":"text/x-yaml","patch_set":87,"id":"1fa4df85_3b76ab08","line":6,"range":{"start_line":5,"start_character":67,"end_line":6,"end_character":8},"updated":"2020-02-25 15:39:49.000000000","message":"Would be good to give an example of what this format is for those that don\u0027t know, but at least there is the link to the API ref that will have it.","commit_id":"7e98d14a5724efaa8b02d8dc1c5d28cde7ce0ea6"}]}
