)]}'
{"/PATCHSET_LEVEL":[{"author":{"_account_id":28356,"name":"Rafael Weingartner","email":"rafael@apache.org","username":"rafaelweingartner"},"change_message_id":"5ff85c9ec0cb5c466d892f9ca39dd26e63899610","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":16,"id":"fcf3b27d_54df9849","updated":"2022-01-06 15:11:34.000000000","message":"Also, Mariusz, what is the method that you are calling?\n\nhttps://review.opendev.org/c/openstack/cloudkitty-specs/+/791245/14/specs/xena/reprocessing_api.rst#74\n\n```\nThe endpoint for the schedule reprocessing API will be:\n - `POST` `/v2/task/reprocess`\n   - :param: scope_id -- a list of scope IDs to schedule reprocessing to.\n   - :param: start_reprocess_time -- a timestamp to start reprocessing.\n   - :param: end_reprocess_time -- a timestamp to end reprocessing.\n   - :param: reason -- the reason for the reprocessing\n - `GET` `/v2/task/reprocess/\u003cscope_id\u003e` -- to retrieve the\n   reprocessing schedules for a single scope.\n - `GET` `/v2/task/reprocesses` - to retrieve the\n   reprocessing schedules for multiple scopes\n```","commit_id":"b442ab31b707b3dd920668b7dfc388cdd963d11b"},{"author":{"_account_id":28356,"name":"Rafael Weingartner","email":"rafael@apache.org","username":"rafaelweingartner"},"change_message_id":"24383ee3a60fe2e87a8743be24f0b1e062e13d5a","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":16,"id":"da159a31_26c14520","updated":"2022-01-17 20:26:53.000000000","message":"I amended the code to follow the new endpoint standard defined in the spec. Can you guys re-review this one?","commit_id":"b442ab31b707b3dd920668b7dfc388cdd963d11b"},{"author":{"_account_id":25277,"name":"Mariusz Karpiarz","email":"mariusz.karpiarz@codethink.co.uk","username":"mkarpiarz"},"change_message_id":"193848dc35d901a3e75ec28c489eece2a59d617c","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":16,"id":"7a038f9e_4fc8c1f1","updated":"2022-01-06 14:54:11.000000000","message":"Rafael: When I use your change in my test environment, I get this error message:\n\n```\nsqlalchemy.exc.CompileError: Can\u0027t resolve label reference for ORDER BY / GROUP BY / DISTINCT etc. Textual SQL expression \u0027id desc\u0027 should be explicitly declared as text(\u0027id desc\u0027)\n```\nMy metrics.yml is very basic:\n\n```\nmetrics:\n  vcpus:\n    unit: vcpu\n    mutate: NONE\n    groupby:\n      - id\n    metadata:\n      - flavor_id\n    extra_args:\n      aggregation_method: avg\n```\nDo I need to cherry-pick any other commits?","commit_id":"b442ab31b707b3dd920668b7dfc388cdd963d11b"},{"author":{"_account_id":28356,"name":"Rafael Weingartner","email":"rafael@apache.org","username":"rafaelweingartner"},"change_message_id":"bab45a6216bbbbe055d4f63005a007e792c1b04c","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":16,"id":"1ebe08a7_897f80a0","in_reply_to":"07970c41_32a9ddcd","updated":"2022-01-07 11:35:36.000000000","message":"Kolla-ansible executes the following commands:\n```\nif [[ \"${!KOLLA_BOOTSTRAP[@]}\" ]]; then\n    cloudkitty-dbsync upgrade\n    cloudkitty-storage-init\n    exit 0\nfi\n```","commit_id":"b442ab31b707b3dd920668b7dfc388cdd963d11b"},{"author":{"_account_id":25277,"name":"Mariusz Karpiarz","email":"mariusz.karpiarz@codethink.co.uk","username":"mkarpiarz"},"change_message_id":"99b05b9f2e0cb4f0c591a221672d424d9d0e98c2","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":16,"id":"aee91a49_7157fd63","in_reply_to":"1ebe08a7_897f80a0","updated":"2022-01-07 12:39:09.000000000","message":"Bingo, `cloudkitty-storage-init` was the missing part! Now my \"cloudkitty\" database looks like this:\n```\n+-------------------------------------+\n| Tables_in_cloudkitty                |\n+-------------------------------------+\n| cloudkitty_alembic                  |\n| cloudkitty_storage_states           |\n| hashmap_alembic                     |\n| hashmap_fields                      |\n| hashmap_groups                      |\n| hashmap_mappings                    |\n| hashmap_services                    |\n| hashmap_thresholds                  |\n| modules_state                       |\n| pyscripts_alembic                   |\n| pyscripts_scripts                   |\n| service_to_collector_mappings       |\n| states                              |\n| storage_scope_reprocessing_schedule |\n| storage_states_alembic              |\n+-------------------------------------+\n```\nHowever the sqlalchemy error persists.\n\nComparing with your output, I can see these two tables are still missing from my database: `rated_data_frames` and `storage_sqlalchemy_alembic`. Are these needed for this change to work?","commit_id":"b442ab31b707b3dd920668b7dfc388cdd963d11b"},{"author":{"_account_id":28356,"name":"Rafael Weingartner","email":"rafael@apache.org","username":"rafaelweingartner"},"change_message_id":"70ba892fc3901c6f30fc58156d5f33b6f7acc078","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":16,"id":"30deac66_54129f60","in_reply_to":"22f642ab_4319da72","updated":"2022-01-06 18:39:20.000000000","message":"The code that I have here is exactly the same. Did the cherry-pick you executed finish with success? Also, how is the reprocessing table in the DB (is it there?)?","commit_id":"b442ab31b707b3dd920668b7dfc388cdd963d11b"},{"author":{"_account_id":25277,"name":"Mariusz Karpiarz","email":"mariusz.karpiarz@codethink.co.uk","username":"mkarpiarz"},"change_message_id":"ef80924b4ca7eb31f53f1811867e4526eafd87cb","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":16,"id":"edd26e5c_42666a81","in_reply_to":"30deac66_54129f60","updated":"2022-01-07 09:27:48.000000000","message":"I run a branch checkout from Gerrit\u0027s repo and I can see your changes so I\u0027m sure this was successful. I\u0027d also run `cloudkitty-dbsync upgrade` and here are all tables I see in my \"cloudkitty\" database:\n\n```\n+-------------------------------+\n| Tables_in_cloudkitty          |\n+-------------------------------+\n| cloudkitty_alembic            |\n| cloudkitty_storage_states     |\n| hashmap_alembic               |\n| hashmap_fields                |\n| hashmap_groups                |\n| hashmap_mappings              |\n| hashmap_services              |\n| hashmap_thresholds            |\n| modules_state                 |\n| pyscripts_alembic             |\n| pyscripts_scripts             |\n| service_to_collector_mappings |\n| states                        |\n| storage_states_alembic        |\n+-------------------------------+\n```\nDo you see the reprocessing table on this list? Do I have to drop this database and run `cloudkitty-dbsync upgrade` again?","commit_id":"b442ab31b707b3dd920668b7dfc388cdd963d11b"},{"author":{"_account_id":25277,"name":"Mariusz Karpiarz","email":"mariusz.karpiarz@codethink.co.uk","username":"mkarpiarz"},"change_message_id":"49612041003fcde77181cb0dd12e75c20f54865d","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":16,"id":"4042c5c2_b1d74a33","in_reply_to":"315370b1_1cdc6798","updated":"2022-01-07 10:49:03.000000000","message":"Yes, missing tables would explain the error message. However even after dropping my \"cloudkitty\" table and re-running `cloudkitty-dbsync upgrade` I\u0027m left with a database missing the \"storage_scope_reprocessing_schedule\" table. Do I have to upgrade to the 9feccd32 revision or specify a module?","commit_id":"b442ab31b707b3dd920668b7dfc388cdd963d11b"},{"author":{"_account_id":28356,"name":"Rafael Weingartner","email":"rafael@apache.org","username":"rafaelweingartner"},"change_message_id":"d1225dde92293633aa8b2af77935dd9fce220a87","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":16,"id":"07970c41_32a9ddcd","in_reply_to":"4042c5c2_b1d74a33","updated":"2022-01-07 11:34:06.000000000","message":"I confess that I never did it manually. I always use Kolla-ansible to upgrade the modules.","commit_id":"b442ab31b707b3dd920668b7dfc388cdd963d11b"},{"author":{"_account_id":28356,"name":"Rafael Weingartner","email":"rafael@apache.org","username":"rafaelweingartner"},"change_message_id":"8393366b11aa7651ae4b24b323a420e9d71804b3","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":16,"id":"b9ecfd51_9f01c1ad","in_reply_to":"7a038f9e_4fc8c1f1","updated":"2022-01-06 14:56:12.000000000","message":"Are you sure that this error is caused by my changeset? This seems to be related to the group by configurations that you did. What is your collector backend? Also, can you share the stack trace of the error?","commit_id":"b442ab31b707b3dd920668b7dfc388cdd963d11b"},{"author":{"_account_id":25277,"name":"Mariusz Karpiarz","email":"mariusz.karpiarz@codethink.co.uk","username":"mkarpiarz"},"change_message_id":"04c0bdf6f92dde4abbc31b7dded0b1984dc62864","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":16,"id":"a71ea10e_3216970e","in_reply_to":"8f5b80cd_07542d6e","updated":"2022-01-07 13:07:55.000000000","message":"Yes, it\u0027s exactly the same \"sqlalchemy.exc.CompileError: Can\u0027t resolve label reference for ORDER BY / GROUP BY / DISTINCT etc. Textual SQL expression \u0027id desc\u0027 should be explicitly declared as text(\u0027id desc\u0027)\" error. Unless you have any more ideas, I think I\u0027ll have to use a debugger to get to the bottom of this issue.","commit_id":"b442ab31b707b3dd920668b7dfc388cdd963d11b"},{"author":{"_account_id":28356,"name":"Rafael Weingartner","email":"rafael@apache.org","username":"rafaelweingartner"},"change_message_id":"7e1f716ef258ab89bbbbd907b3a6c5cc65fe293b","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":16,"id":"aeaf9a12_c98bf11d","in_reply_to":"a71ea10e_3216970e","updated":"2022-01-07 13:12:25.000000000","message":"To facilitate your work you can just add a Log entry:\n\n```\n        query \u003d apply_offset_and_limit(limit, offset, query)\n        LOG.debug(\"Query being executed to retrieve all reprocessing schedules: [%s].\", query)\n        result_set \u003d query.all()\n```\n\nThen, you can get the SQL and check what is going on with it.","commit_id":"b442ab31b707b3dd920668b7dfc388cdd963d11b"},{"author":{"_account_id":25277,"name":"Mariusz Karpiarz","email":"mariusz.karpiarz@codethink.co.uk","username":"mkarpiarz"},"change_message_id":"4f8d10dec56f95fff17fe46c4874a7130b5f0471","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":16,"id":"4343c93e_834197af","in_reply_to":"aeaf9a12_c98bf11d","updated":"2022-01-07 14:01:12.000000000","message":"Awesome, I\u0027ll try this. Thanks!","commit_id":"b442ab31b707b3dd920668b7dfc388cdd963d11b"},{"author":{"_account_id":28356,"name":"Rafael Weingartner","email":"rafael@apache.org","username":"rafaelweingartner"},"change_message_id":"df3e7235aeba3e09e05ed982b4f2b0ffce1c45cc","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":16,"id":"8f5b80cd_07542d6e","in_reply_to":"aee91a49_7157fd63","updated":"2022-01-07 12:58:09.000000000","message":"The same error persists? \n\nRegarding the other tables, I am not sure. I would need to take a look when they are created.","commit_id":"b442ab31b707b3dd920668b7dfc388cdd963d11b"},{"author":{"_account_id":25277,"name":"Mariusz Karpiarz","email":"mariusz.karpiarz@codethink.co.uk","username":"mkarpiarz"},"change_message_id":"6a1eff6c2a5ef5e0ccd0f318db94d3be582177b5","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":16,"id":"d51fc6f8_c74ec595","in_reply_to":"b9ecfd51_9f01c1ad","updated":"2022-01-06 15:08:26.000000000","message":"GET `/v2/reprocesses` doesn\u0027t seem to work on the latest stable/wallaby branch but I\u0027m not seeing any SQL-related error messages if I use this branch.","commit_id":"b442ab31b707b3dd920668b7dfc388cdd963d11b"},{"author":{"_account_id":28356,"name":"Rafael Weingartner","email":"rafael@apache.org","username":"rafaelweingartner"},"change_message_id":"95c73dfe3893a70f36f0582394d9ac2f8973538b","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":16,"id":"90cbb96e_7cd7edcc","in_reply_to":"d51fc6f8_c74ec595","updated":"2022-01-06 15:10:14.000000000","message":"Do you see a stacktrace in the log file?","commit_id":"b442ab31b707b3dd920668b7dfc388cdd963d11b"},{"author":{"_account_id":28356,"name":"Rafael Weingartner","email":"rafael@apache.org","username":"rafaelweingartner"},"change_message_id":"539092204a0a507860fc6f15509d53b313fda8f7","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":16,"id":"315370b1_1cdc6798","in_reply_to":"edd26e5c_42666a81","updated":"2022-01-07 10:23:52.000000000","message":"That is why you are getting the error. There seems to have some issue in your db.\n\n```\nMySQL [cloudkitty]\u003e show tables;\n+-------------------------------------+\n| Tables_in_cloudkitty                |\n+-------------------------------------+\n| cloudkitty_alembic                  |\n| cloudkitty_storage_states           |\n| hashmap_alembic                     |\n| hashmap_fields                      |\n| hashmap_groups                      |\n| hashmap_mappings                    |\n| hashmap_services                    |\n| hashmap_thresholds                  |\n| modules_state                       |\n| pyscripts_alembic                   |\n| pyscripts_scripts                   |\n| rated_data_frames                   |\n| service_to_collector_mappings       |\n| states                              |\n| storage_scope_reprocessing_schedule |\n| storage_sqlalchemy_alembic          |\n| storage_states_alembic              |\n+-------------------------------------+\n17 rows in set (0.00 sec)\n\n```","commit_id":"b442ab31b707b3dd920668b7dfc388cdd963d11b"},{"author":{"_account_id":25277,"name":"Mariusz Karpiarz","email":"mariusz.karpiarz@codethink.co.uk","username":"mkarpiarz"},"change_message_id":"9fa14944c04edeec995c39c4f455d3ea0a028643","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":16,"id":"22f642ab_4319da72","in_reply_to":"fcf3b27d_54df9849","updated":"2022-01-06 15:27:56.000000000","message":"My previous message had a typo - I\u0027m running GET /v2/task/reprocesses. Here is the traceback: https://paste.opendev.org/show/811953/\n\nShould I rebase the change against stable/xena? My current parent is 2acaa5a4a3ee83b14cec9b20d0cb690ac04383e2.","commit_id":"b442ab31b707b3dd920668b7dfc388cdd963d11b"},{"author":{"_account_id":25277,"name":"Mariusz Karpiarz","email":"mariusz.karpiarz@codethink.co.uk","username":"mkarpiarz"},"change_message_id":"80cc08f8d6fc8c30ca5ae844ac8d69189064b552","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":17,"id":"75f2bd4a_863ecbae","updated":"2022-01-21 13:13:22.000000000","message":"Rafael: Are you using the latest version of SQLAlchemy in your test/dev environment? For me both SQLAlchemy\u003d\u003d1.4.31 and SQLAlchemy\u003d\u003d1.4.29 result in the same error messages, consistently, even in a fresh environment.\n\nI found a fix which solves this problem. Do you want me to submit this fix as the next patch or should I add it as a comment?","commit_id":"352ab5d4dcf23f61611d32b6a9560c2714977fe7"},{"author":{"_account_id":28356,"name":"Rafael Weingartner","email":"rafael@apache.org","username":"rafaelweingartner"},"change_message_id":"c5b4bbdf16234ea07e91deb226bfae8d67e0cde0","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":17,"id":"68417c09_ae6f3847","updated":"2022-01-18 00:26:41.000000000","message":"recheck","commit_id":"352ab5d4dcf23f61611d32b6a9560c2714977fe7"},{"author":{"_account_id":25277,"name":"Mariusz Karpiarz","email":"mariusz.karpiarz@codethink.co.uk","username":"mkarpiarz"},"change_message_id":"60a97e0d3422cc6a6161c60887ecceb2bfbf2eb7","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":19,"id":"b5127134_df035d1b","updated":"2022-01-21 15:21:43.000000000","message":"Rafael: I\u0027m now seeing this error:\n```\noslo_policy.policy.PolicyNotRegistered: Policy schedule:get_task_reprocesses has not been registered\n```\nShouldn\u0027t this patch have registered the new policies or am I missing something obvious here?","commit_id":"2cc244dc239db50426cf45b8a63e66ad68db4180"},{"author":{"_account_id":28356,"name":"Rafael Weingartner","email":"rafael@apache.org","username":"rafaelweingartner"},"change_message_id":"15b8f580169d89b2c62a2fa5b13138595100e5fd","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":19,"id":"6b091069_b342ceb4","in_reply_to":"b5127134_df035d1b","updated":"2022-01-21 16:15:02.000000000","message":"It is a left over from the API renaming. I just fixed it.","commit_id":"2cc244dc239db50426cf45b8a63e66ad68db4180"},{"author":{"_account_id":25277,"name":"Mariusz Karpiarz","email":"mariusz.karpiarz@codethink.co.uk","username":"mkarpiarz"},"change_message_id":"2ac8a3c5c9981450cfa041287f5b7834216eb273","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":20,"id":"5e3f792a_7b03dc34","updated":"2022-01-21 16:32:41.000000000","message":"Thanks, Rafael! I can now confirm I get a correct reply (i.e. an empty list) when calling GET /v2/task/reprocesses. I\u0027m now moving on to testing the POST method.","commit_id":"65d90d673357e60ddc70e67cafa64ea196b74519"},{"author":{"_account_id":28356,"name":"Rafael Weingartner","email":"rafael@apache.org","username":"rafaelweingartner"},"change_message_id":"fd7dace295f7fa0426d4aef8945d7e13041d68c0","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":21,"id":"0dbd728a_63551043","updated":"2022-01-27 23:35:37.000000000","message":"recheck","commit_id":"7b6eff0a47016b6c0d3f680b015fdf10bc4827b8"},{"author":{"_account_id":28356,"name":"Rafael Weingartner","email":"rafael@apache.org","username":"rafaelweingartner"},"change_message_id":"e82a687faffb6a7b2c55ec12264b271b2afb43f4","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":21,"id":"9d723019_3393a463","updated":"2022-01-27 20:53:35.000000000","message":"recheck","commit_id":"7b6eff0a47016b6c0d3f680b015fdf10bc4827b8"},{"author":{"_account_id":25277,"name":"Mariusz Karpiarz","email":"mariusz.karpiarz@codethink.co.uk","username":"mkarpiarz"},"change_message_id":"9bfc9662fdd2279489fc595c66bd207cd35f7d37","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":23,"id":"7be9fc3f_a9c3d03e","updated":"2022-02-04 12:07:12.000000000","message":"Rafael: With this payload sent to POST /v2/task/reprocesses:\n```\n\u0027{\"reason\": \"Reprocessing test\", \"scope_ids\": \"67c5c76d241f406189426962e47b481f\", \"start_reprocess_time\": \"2022-02-04 00:00:00+00:00\", \"end_reprocess_time\": \"2022-02-04 23:00:00+00:00\"}\u0027\n```\nI get this error message back:\n```\n{\"message\": \"Invalid data \u0027None\u0027 : expected a dictionary (path: \u0027[]\u0027)\"}\n```\nDo you have an idea which variable is this referring to or should I debug this myself?","commit_id":"8b77b178c94baad7b87d030c66a29007ff53965a"},{"author":{"_account_id":28356,"name":"Rafael Weingartner","email":"rafael@apache.org","username":"rafaelweingartner"},"change_message_id":"f377f00c9da5c1783af5d2e50f55a246951ca096","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":23,"id":"ee7f40a6_5526d89d","in_reply_to":"7a6b8137_59ab6236","updated":"2022-02-07 11:34:10.000000000","message":"I fixed this issue. It was something I missed while developing some patches in parallel. We changed the name of this column some patches ago.","commit_id":"8b77b178c94baad7b87d030c66a29007ff53965a"},{"author":{"_account_id":25277,"name":"Mariusz Karpiarz","email":"mariusz.karpiarz@codethink.co.uk","username":"mkarpiarz"},"change_message_id":"f2b539cda18e2fe79fc6211531aa09e940fd1249","unresolved":true,"context_lines":[],"source_content_type":"","patch_set":23,"id":"7a6b8137_59ab6236","in_reply_to":"7be9fc3f_a9c3d03e","updated":"2022-02-04 12:26:39.000000000","message":"Turns out I had to add the \"Content-Type: application/json\" header to my call to fix this problem.\n\nHowever, now I see this error in processor\u0027s logs:\n```\n2022-02-04 12:21:42.684 6784 ERROR cloudkitty.api.v2   File \"/home/centos/cloudkitty/venv/lib/python3.6/site-packages/cloudkitty/api/v2/task/reprocess.py\", line 156, in validate_start_end_for_reprocessing\n2022-02-04 12:21:42.684 6784 ERROR cloudkitty.api.v2     if start_reprocess_time \u003e scope.state:\n2022-02-04 12:21:42.684 6784 ERROR cloudkitty.api.v2 AttributeError: \u0027IdentifierState\u0027 object has no attribute \u0027state\u0027\n2022-02-04 12:21:42.684 6784 ERROR cloudkitty.api.v2\n```","commit_id":"8b77b178c94baad7b87d030c66a29007ff53965a"},{"author":{"_account_id":25277,"name":"Mariusz Karpiarz","email":"mariusz.karpiarz@codethink.co.uk","username":"mkarpiarz"},"change_message_id":"f78fa96cdee69834fbbf6ee90c2d2a8cbc618f3d","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":23,"id":"11fc4403_df85d7c6","in_reply_to":"ee7f40a6_5526d89d","updated":"2022-02-07 14:11:20.000000000","message":"Thanks for the patch! Now I\u0027m able to schedule reprocessing tasks.","commit_id":"8b77b178c94baad7b87d030c66a29007ff53965a"},{"author":{"_account_id":25277,"name":"Mariusz Karpiarz","email":"mariusz.karpiarz@codethink.co.uk","username":"mkarpiarz"},"change_message_id":"e77ff8f161d610ea38d21f8296146c79393bf188","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":25,"id":"09523f7a_19a58098","updated":"2022-02-15 16:35:04.000000000","message":"Is there anything in particular you still want me to test here? From my point of view this feature is ready to be merged and I\u0027m ready to give it a +2.","commit_id":"4d544b7a01ce0107b91009be6162c18c9a1f751a"},{"author":{"_account_id":25277,"name":"Mariusz Karpiarz","email":"mariusz.karpiarz@codethink.co.uk","username":"mkarpiarz"},"change_message_id":"c52ecc189a0a6190a5a88fe08dafe25538aaa3b2","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":25,"id":"7a0af613_adbfb45c","updated":"2022-02-15 16:17:41.000000000","message":"Rafael: Should scheduled reprocessing jobs disappear from the output from GET /v2/task/reprocesses when they are done? In my test environment all my test jobs are still there and this makes it look as if they haven\u0027t finished yet (it\u0027s been days since I scheduled them though and they work on just a handful of records). Is this by design or should I debug?","commit_id":"4d544b7a01ce0107b91009be6162c18c9a1f751a"},{"author":{"_account_id":28356,"name":"Rafael Weingartner","email":"rafael@apache.org","username":"rafaelweingartner"},"change_message_id":"1eeeb67b61ee9e3cfcb47438e933c2dc3f13a008","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":25,"id":"e0f0663e_f03c1224","in_reply_to":"09523f7a_19a58098","updated":"2022-02-15 16:36:44.000000000","message":"I think that you did everything that was needed. Therefore, if you think that the patch deserves a +2, we would be one step closer to merging it next week on Monday.","commit_id":"4d544b7a01ce0107b91009be6162c18c9a1f751a"},{"author":{"_account_id":25277,"name":"Mariusz Karpiarz","email":"mariusz.karpiarz@codethink.co.uk","username":"mkarpiarz"},"change_message_id":"7271b8a4b858879575107b1f65c62771ea03d793","unresolved":true,"context_lines":[],"source_content_type":"","patch_set":25,"id":"f799488b_2df7762c","in_reply_to":"0a7973ef_dd9e4911","updated":"2022-02-15 16:28:09.000000000","message":"Cool, thanks. `current_reprocess_time` is indeed equal to `end_reprocess_time` for all my jobs so they are done. Do you guys think it might be worth returning a boolean parameter when reprocessing is done? Or at least filter the output from GET /v2/task/reprocesses to only show jobs in progress? My concern is that if the output gets very long, it might cause the GET call to run very slow.","commit_id":"4d544b7a01ce0107b91009be6162c18c9a1f751a"},{"author":{"_account_id":28356,"name":"Rafael Weingartner","email":"rafael@apache.org","username":"rafaelweingartner"},"change_message_id":"2cb25297ed3a0631fbd3bbe20e84384273d3500e","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":25,"id":"0a7973ef_dd9e4911","in_reply_to":"7a0af613_adbfb45c","updated":"2022-02-15 16:19:53.000000000","message":"No, they do not disappear. The point is that the `current_reprocess_time` is going to be equals to the end_processing time. This indicates that the processing has finished.","commit_id":"4d544b7a01ce0107b91009be6162c18c9a1f751a"},{"author":{"_account_id":25277,"name":"Mariusz Karpiarz","email":"mariusz.karpiarz@codethink.co.uk","username":"mkarpiarz"},"change_message_id":"e77ff8f161d610ea38d21f8296146c79393bf188","unresolved":true,"context_lines":[],"source_content_type":"","patch_set":25,"id":"e4e94166_3d50d221","in_reply_to":"bff310f6_839a0124","updated":"2022-02-15 16:35:04.000000000","message":"I think it would be better to submit a separate patch for filtering the output. There\u0027s been a lot of work done in this one already and I don\u0027t want to delay the merge even further.","commit_id":"4d544b7a01ce0107b91009be6162c18c9a1f751a"},{"author":{"_account_id":28356,"name":"Rafael Weingartner","email":"rafael@apache.org","username":"rafaelweingartner"},"change_message_id":"4ff860c73fb98c69197865f94e9c9f29af02c829","unresolved":true,"context_lines":[],"source_content_type":"","patch_set":25,"id":"bff310f6_839a0124","in_reply_to":"f799488b_2df7762c","updated":"2022-02-15 16:30:42.000000000","message":"I see. Can we make this extension in an new round of changes? Or, do you think that we need it right away with the feature?","commit_id":"4d544b7a01ce0107b91009be6162c18c9a1f751a"},{"author":{"_account_id":28356,"name":"Rafael Weingartner","email":"rafael@apache.org","username":"rafaelweingartner"},"change_message_id":"1480116c2f80768c7614ca658d73d026189767b2","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":27,"id":"538e3fcf_67d36414","updated":"2022-02-22 11:54:29.000000000","message":"Pierre Riteau, thanks for your valuable reviews!\nI have amended the code as you suggested.\n","commit_id":"70d0b02d483049ed90a140c1b9de191ae4377961"},{"author":{"_account_id":28356,"name":"Rafael Weingartner","email":"rafael@apache.org","username":"rafaelweingartner"},"change_message_id":"25722f45c4c31f97afaab350da53d02df0ef3fd5","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":30,"id":"e565f191_43a05822","updated":"2022-02-24 13:39:07.000000000","message":"Hello Pierre and Mariusz, \nDo you think that this patch is ready to be merged? Maybe we can get this through in Yoga, if everything is ok.","commit_id":"5108c381c986745ae265e3f09d6725f01e688fe5"},{"author":{"_account_id":28356,"name":"Rafael Weingartner","email":"rafael@apache.org","username":"rafaelweingartner"},"change_message_id":"e9cd54eff7efc402c581b47eb540e27fd8d5df39","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":30,"id":"6bc218a8_28fa077e","updated":"2022-02-22 13:25:00.000000000","message":"recheck","commit_id":"5108c381c986745ae265e3f09d6725f01e688fe5"},{"author":{"_account_id":28356,"name":"Rafael Weingartner","email":"rafael@apache.org","username":"rafaelweingartner"},"change_message_id":"48f363bc808628f7fe96632c63e08bc6267bc23d","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":31,"id":"ce8e506b_5ae94303","updated":"2022-02-25 13:42:33.000000000","message":"Thanks Pierre!","commit_id":"f3155e7fe2b59471853702cf206ec4b9b31b7865"},{"author":{"_account_id":15197,"name":"Pierre Riteau","email":"pierre@stackhpc.com","username":"priteau","status":"StackHPC"},"change_message_id":"c2c05e0435cad28ba7e3e8ef5f2d94f2494139c0","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":32,"id":"12c5ccb0_e903b22a","updated":"2022-02-25 15:02:56.000000000","message":"Thanks Rafael!","commit_id":"65af204a1ccefbc59dcc9e0bba3d0914bea92785"},{"author":{"_account_id":28356,"name":"Rafael Weingartner","email":"rafael@apache.org","username":"rafaelweingartner"},"change_message_id":"5fdf37e5370987f3baf096fc53da31cee45b76c4","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":32,"id":"63bb13bf_326eab52","updated":"2022-02-25 15:44:00.000000000","message":"recheck","commit_id":"65af204a1ccefbc59dcc9e0bba3d0914bea92785"}],"cloudkitty/api/v2/task/reprocess.py":[{"author":{"_account_id":15197,"name":"Pierre Riteau","email":"pierre@stackhpc.com","username":"priteau","status":"StackHPC"},"change_message_id":"baddef78369c682335dea6a47bebe4bce739e6dc","unresolved":true,"context_lines":[{"line_number":11,"context_line":"#    License for the specific language governing permissions and limitations"},{"line_number":12,"context_line":"#    under the License."},{"line_number":13,"context_line":"#"},{"line_number":14,"context_line":"import flask"},{"line_number":15,"context_line":"import voluptuous"},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"from cloudkitty.utils import tz as tzutils"},{"line_number":18,"context_line":"from cloudkitty.utils import validation as validation_utils"},{"line_number":19,"context_line":""},{"line_number":20,"context_line":"from cloudkitty import storage_state"},{"line_number":21,"context_line":""},{"line_number":22,"context_line":"from cloudkitty.api.v2 import base"},{"line_number":23,"context_line":"from cloudkitty.api.v2 import utils as api_utils"},{"line_number":24,"context_line":""},{"line_number":25,"context_line":""},{"line_number":26,"context_line":"from cloudkitty.common import policy"},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"from cloudkitty.storage_state.models import ReprocessingScheduler"},{"line_number":29,"context_line":""},{"line_number":30,"context_line":"from datetimerange import DateTimeRange"},{"line_number":31,"context_line":""},{"line_number":32,"context_line":"from werkzeug import exceptions as http_exceptions"},{"line_number":33,"context_line":""},{"line_number":34,"context_line":"from oslo_log import log"},{"line_number":35,"context_line":""},{"line_number":36,"context_line":"LOG \u003d log.getLogger(__name__)"},{"line_number":37,"context_line":""}],"source_content_type":"text/x-python","patch_set":25,"id":"301d0c32_15625b1c","line":34,"range":{"start_line":14,"start_character":0,"end_line":34,"end_character":24},"updated":"2022-02-21 13:58:21.000000000","message":"This is an unusual way of sorting imports, I am surprised pep8 did not complain.","commit_id":"4d544b7a01ce0107b91009be6162c18c9a1f751a"},{"author":{"_account_id":15197,"name":"Pierre Riteau","email":"pierre@stackhpc.com","username":"priteau","status":"StackHPC"},"change_message_id":"7e16f36d4b35f8d8b8a7aec8ec4675e4fc32be12","unresolved":true,"context_lines":[{"line_number":11,"context_line":"#    License for the specific language governing permissions and limitations"},{"line_number":12,"context_line":"#    under the License."},{"line_number":13,"context_line":"#"},{"line_number":14,"context_line":"import flask"},{"line_number":15,"context_line":"import voluptuous"},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"from cloudkitty.utils import tz as tzutils"},{"line_number":18,"context_line":"from cloudkitty.utils import validation as validation_utils"},{"line_number":19,"context_line":""},{"line_number":20,"context_line":"from cloudkitty import storage_state"},{"line_number":21,"context_line":""},{"line_number":22,"context_line":"from cloudkitty.api.v2 import base"},{"line_number":23,"context_line":"from cloudkitty.api.v2 import utils as api_utils"},{"line_number":24,"context_line":""},{"line_number":25,"context_line":""},{"line_number":26,"context_line":"from cloudkitty.common import policy"},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"from cloudkitty.storage_state.models import ReprocessingScheduler"},{"line_number":29,"context_line":""},{"line_number":30,"context_line":"from datetimerange import DateTimeRange"},{"line_number":31,"context_line":""},{"line_number":32,"context_line":"from werkzeug import exceptions as http_exceptions"},{"line_number":33,"context_line":""},{"line_number":34,"context_line":"from oslo_log import log"},{"line_number":35,"context_line":""},{"line_number":36,"context_line":"LOG \u003d log.getLogger(__name__)"},{"line_number":37,"context_line":""}],"source_content_type":"text/x-python","patch_set":25,"id":"593ae9ca_5e197ef3","line":34,"range":{"start_line":14,"start_character":0,"end_line":34,"end_character":24},"in_reply_to":"27a68875_5220b7ae","updated":"2022-02-21 15:22:54.000000000","message":"https://docs.openstack.org/hacking/latest/user/hacking.html#import-order-template","commit_id":"4d544b7a01ce0107b91009be6162c18c9a1f751a"},{"author":{"_account_id":28356,"name":"Rafael Weingartner","email":"rafael@apache.org","username":"rafaelweingartner"},"change_message_id":"1d074d86bc6e3a0d350f227a71617eec3253ed1c","unresolved":true,"context_lines":[{"line_number":11,"context_line":"#    License for the specific language governing permissions and limitations"},{"line_number":12,"context_line":"#    under the License."},{"line_number":13,"context_line":"#"},{"line_number":14,"context_line":"import flask"},{"line_number":15,"context_line":"import voluptuous"},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"from cloudkitty.utils import tz as tzutils"},{"line_number":18,"context_line":"from cloudkitty.utils import validation as validation_utils"},{"line_number":19,"context_line":""},{"line_number":20,"context_line":"from cloudkitty import storage_state"},{"line_number":21,"context_line":""},{"line_number":22,"context_line":"from cloudkitty.api.v2 import base"},{"line_number":23,"context_line":"from cloudkitty.api.v2 import utils as api_utils"},{"line_number":24,"context_line":""},{"line_number":25,"context_line":""},{"line_number":26,"context_line":"from cloudkitty.common import policy"},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"from cloudkitty.storage_state.models import ReprocessingScheduler"},{"line_number":29,"context_line":""},{"line_number":30,"context_line":"from datetimerange import DateTimeRange"},{"line_number":31,"context_line":""},{"line_number":32,"context_line":"from werkzeug import exceptions as http_exceptions"},{"line_number":33,"context_line":""},{"line_number":34,"context_line":"from oslo_log import log"},{"line_number":35,"context_line":""},{"line_number":36,"context_line":"LOG \u003d log.getLogger(__name__)"},{"line_number":37,"context_line":""}],"source_content_type":"text/x-python","patch_set":25,"id":"27a68875_5220b7ae","line":34,"range":{"start_line":14,"start_character":0,"end_line":34,"end_character":24},"in_reply_to":"301d0c32_15625b1c","updated":"2022-02-21 14:07:09.000000000","message":"I did it without thinking much about PEP8. I was actually separating into groups of \"from\". DO you suggest something different?","commit_id":"4d544b7a01ce0107b91009be6162c18c9a1f751a"},{"author":{"_account_id":28356,"name":"Rafael Weingartner","email":"rafael@apache.org","username":"rafaelweingartner"},"change_message_id":"1480116c2f80768c7614ca658d73d026189767b2","unresolved":false,"context_lines":[{"line_number":11,"context_line":"#    License for the specific language governing permissions and limitations"},{"line_number":12,"context_line":"#    under the License."},{"line_number":13,"context_line":"#"},{"line_number":14,"context_line":"import flask"},{"line_number":15,"context_line":"import voluptuous"},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"from cloudkitty.utils import tz as tzutils"},{"line_number":18,"context_line":"from cloudkitty.utils import validation as validation_utils"},{"line_number":19,"context_line":""},{"line_number":20,"context_line":"from cloudkitty import storage_state"},{"line_number":21,"context_line":""},{"line_number":22,"context_line":"from cloudkitty.api.v2 import base"},{"line_number":23,"context_line":"from cloudkitty.api.v2 import utils as api_utils"},{"line_number":24,"context_line":""},{"line_number":25,"context_line":""},{"line_number":26,"context_line":"from cloudkitty.common import policy"},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"from cloudkitty.storage_state.models import ReprocessingScheduler"},{"line_number":29,"context_line":""},{"line_number":30,"context_line":"from datetimerange import DateTimeRange"},{"line_number":31,"context_line":""},{"line_number":32,"context_line":"from werkzeug import exceptions as http_exceptions"},{"line_number":33,"context_line":""},{"line_number":34,"context_line":"from oslo_log import log"},{"line_number":35,"context_line":""},{"line_number":36,"context_line":"LOG \u003d log.getLogger(__name__)"},{"line_number":37,"context_line":""}],"source_content_type":"text/x-python","patch_set":25,"id":"9cf3b2fa_2109027b","line":34,"range":{"start_line":14,"start_character":0,"end_line":34,"end_character":24},"in_reply_to":"593ae9ca_5e197ef3","updated":"2022-02-22 11:54:29.000000000","message":"Done","commit_id":"4d544b7a01ce0107b91009be6162c18c9a1f751a"},{"author":{"_account_id":15197,"name":"Pierre Riteau","email":"pierre@stackhpc.com","username":"priteau","status":"StackHPC"},"change_message_id":"37f159b288fa6c9eed4c8aa1507c84ff38fa0898","unresolved":true,"context_lines":[{"line_number":110,"context_line":"                \"previously processed timestamp.\")"},{"line_number":111,"context_line":"        if end_reprocess_time \u003c start_reprocess_time:"},{"line_number":112,"context_line":"            raise http_exceptions.BadRequest("},{"line_number":113,"context_line":"                \"End reprocessing timestamp [%s] cannot be less than \""},{"line_number":114,"context_line":"                \"start reprocessing timestamp [%s].\""},{"line_number":115,"context_line":"                % (start_reprocess_time, end_reprocess_time))"},{"line_number":116,"context_line":""},{"line_number":117,"context_line":"    @staticmethod"},{"line_number":118,"context_line":"    def validate_scope_ids(scope_ids):"}],"source_content_type":"text/x-python","patch_set":25,"id":"91775de7_4b15d468","line":115,"range":{"start_line":113,"start_character":0,"end_line":115,"end_character":61},"updated":"2022-02-21 14:04:19.000000000","message":"Your parameters are inverted here.","commit_id":"4d544b7a01ce0107b91009be6162c18c9a1f751a"},{"author":{"_account_id":28356,"name":"Rafael Weingartner","email":"rafael@apache.org","username":"rafaelweingartner"},"change_message_id":"7bec96dac7de046b9413ea53ecef8bc7056dd8e9","unresolved":false,"context_lines":[{"line_number":110,"context_line":"                \"previously processed timestamp.\")"},{"line_number":111,"context_line":"        if end_reprocess_time \u003c start_reprocess_time:"},{"line_number":112,"context_line":"            raise http_exceptions.BadRequest("},{"line_number":113,"context_line":"                \"End reprocessing timestamp [%s] cannot be less than \""},{"line_number":114,"context_line":"                \"start reprocessing timestamp [%s].\""},{"line_number":115,"context_line":"                % (start_reprocess_time, end_reprocess_time))"},{"line_number":116,"context_line":""},{"line_number":117,"context_line":"    @staticmethod"},{"line_number":118,"context_line":"    def validate_scope_ids(scope_ids):"}],"source_content_type":"text/x-python","patch_set":25,"id":"0dc3709e_888cb0e3","line":115,"range":{"start_line":113,"start_character":0,"end_line":115,"end_character":61},"in_reply_to":"91775de7_4b15d468","updated":"2022-02-21 14:09:21.000000000","message":"fixed","commit_id":"4d544b7a01ce0107b91009be6162c18c9a1f751a"},{"author":{"_account_id":15197,"name":"Pierre Riteau","email":"pierre@stackhpc.com","username":"priteau","status":"StackHPC"},"change_message_id":"1e6d887df950dcc1c614f4896ff60f090eeea311","unresolved":true,"context_lines":[{"line_number":124,"context_line":""},{"line_number":125,"context_line":"        if option_all_selected and len(scope_ids) !\u003d 1:"},{"line_number":126,"context_line":"            raise http_exceptions.BadRequest("},{"line_number":127,"context_line":"                \"Cannot use \u0027ALL\u0027 with scope ID [%s]. Either schedule a \""},{"line_number":128,"context_line":"                \"reprocessing for all active scopes using \u0027ALL\u0027 option, \""},{"line_number":129,"context_line":"                \"or inform only the scopes you desire to schedule a \""},{"line_number":130,"context_line":"                \"reprocessing.\" % scope_ids)"},{"line_number":131,"context_line":""},{"line_number":132,"context_line":"    @staticmethod"},{"line_number":133,"context_line":"    def check_if_there_are_invalid_scopes("}],"source_content_type":"text/x-python","patch_set":25,"id":"e0638871_25a6c471","line":130,"range":{"start_line":127,"start_character":0,"end_line":130,"end_character":44},"updated":"2022-02-21 14:09:14.000000000","message":"Since scope_ids is a list, will it look like this?\n\nCannot use \u0027ALL\u0027 with scope ID [[id1,id2]].","commit_id":"4d544b7a01ce0107b91009be6162c18c9a1f751a"},{"author":{"_account_id":15197,"name":"Pierre Riteau","email":"pierre@stackhpc.com","username":"priteau","status":"StackHPC"},"change_message_id":"1e6d887df950dcc1c614f4896ff60f090eeea311","unresolved":true,"context_lines":[{"line_number":173,"context_line":"            self, all_scopes_to_reprocess, end_reprocess_time,"},{"line_number":174,"context_line":"            start_reprocess_time):"},{"line_number":175,"context_line":""},{"line_number":176,"context_line":"        scheduleding_range \u003d DateTimeRange("},{"line_number":177,"context_line":"            start_reprocess_time, end_reprocess_time)"},{"line_number":178,"context_line":""},{"line_number":179,"context_line":"        for scope_to_reprocess in all_scopes_to_reprocess:"}],"source_content_type":"text/x-python","patch_set":25,"id":"d17760f5_621f3d43","line":176,"range":{"start_line":176,"start_character":8,"end_line":176,"end_character":26},"updated":"2022-02-21 14:09:14.000000000","message":"scheduling_range? (and later uses)","commit_id":"4d544b7a01ce0107b91009be6162c18c9a1f751a"},{"author":{"_account_id":15197,"name":"Pierre Riteau","email":"pierre@stackhpc.com","username":"priteau","status":"StackHPC"},"change_message_id":"30924a0801595f4ff2b39d690d1b00a176413dba","unresolved":false,"context_lines":[{"line_number":173,"context_line":"            self, all_scopes_to_reprocess, end_reprocess_time,"},{"line_number":174,"context_line":"            start_reprocess_time):"},{"line_number":175,"context_line":""},{"line_number":176,"context_line":"        scheduleding_range \u003d DateTimeRange("},{"line_number":177,"context_line":"            start_reprocess_time, end_reprocess_time)"},{"line_number":178,"context_line":""},{"line_number":179,"context_line":"        for scope_to_reprocess in all_scopes_to_reprocess:"}],"source_content_type":"text/x-python","patch_set":25,"id":"7c89035f_85839046","line":176,"range":{"start_line":176,"start_character":8,"end_line":176,"end_character":26},"in_reply_to":"d17760f5_621f3d43","updated":"2022-02-25 13:41:33.000000000","message":"Done","commit_id":"4d544b7a01ce0107b91009be6162c18c9a1f751a"},{"author":{"_account_id":15197,"name":"Pierre Riteau","email":"pierre@stackhpc.com","username":"priteau","status":"StackHPC"},"change_message_id":"1e6d887df950dcc1c614f4896ff60f090eeea311","unresolved":true,"context_lines":[{"line_number":185,"context_line":"            if not all_reprocessing_schedules:"},{"line_number":186,"context_line":"                LOG.debug("},{"line_number":187,"context_line":"                    \"No need to validate possible collision of reprocessing \""},{"line_number":188,"context_line":"                    \"for scope [%s] because it does not have active\""},{"line_number":189,"context_line":"                    \"reprocessing schedules.\" % scope_to_reprocess)"},{"line_number":190,"context_line":"                continue"},{"line_number":191,"context_line":""}],"source_content_type":"text/x-python","patch_set":25,"id":"978186c2_d05def09","line":188,"range":{"start_line":188,"start_character":67,"end_line":188,"end_character":68},"updated":"2022-02-21 14:09:14.000000000","message":"Missing space here.","commit_id":"4d544b7a01ce0107b91009be6162c18c9a1f751a"},{"author":{"_account_id":15197,"name":"Pierre Riteau","email":"pierre@stackhpc.com","username":"priteau","status":"StackHPC"},"change_message_id":"30924a0801595f4ff2b39d690d1b00a176413dba","unresolved":false,"context_lines":[{"line_number":185,"context_line":"            if not all_reprocessing_schedules:"},{"line_number":186,"context_line":"                LOG.debug("},{"line_number":187,"context_line":"                    \"No need to validate possible collision of reprocessing \""},{"line_number":188,"context_line":"                    \"for scope [%s] because it does not have active\""},{"line_number":189,"context_line":"                    \"reprocessing schedules.\" % scope_to_reprocess)"},{"line_number":190,"context_line":"                continue"},{"line_number":191,"context_line":""}],"source_content_type":"text/x-python","patch_set":25,"id":"9d6ee34b_01e64bbd","line":188,"range":{"start_line":188,"start_character":67,"end_line":188,"end_character":68},"in_reply_to":"978186c2_d05def09","updated":"2022-02-25 13:41:33.000000000","message":"Done","commit_id":"4d544b7a01ce0107b91009be6162c18c9a1f751a"},{"author":{"_account_id":15197,"name":"Pierre Riteau","email":"pierre@stackhpc.com","username":"priteau","status":"StackHPC"},"change_message_id":"1e6d887df950dcc1c614f4896ff60f090eeea311","unresolved":true,"context_lines":[{"line_number":207,"context_line":"                            scope_to_reprocess) + \"Error: [%s].\" % e)"},{"line_number":208,"context_line":""},{"line_number":209,"context_line":"    @staticmethod"},{"line_number":210,"context_line":"    def generate_overlap_error_message(scheduled_range, scheduleding_range,"},{"line_number":211,"context_line":"                                       scope_to_reprocess):"},{"line_number":212,"context_line":"        return \"Cannot schedule a reprocessing for scope [%s] for \" \\"},{"line_number":213,"context_line":"               \"reprocessing time [%s], because it already has a schedule \" \\"}],"source_content_type":"text/x-python","patch_set":25,"id":"2d53e16c_0375adf8","line":210,"range":{"start_line":210,"start_character":56,"end_line":210,"end_character":74},"updated":"2022-02-21 14:09:14.000000000","message":"scheduling_range? (and later uses)","commit_id":"4d544b7a01ce0107b91009be6162c18c9a1f751a"},{"author":{"_account_id":15197,"name":"Pierre Riteau","email":"pierre@stackhpc.com","username":"priteau","status":"StackHPC"},"change_message_id":"30924a0801595f4ff2b39d690d1b00a176413dba","unresolved":false,"context_lines":[{"line_number":207,"context_line":"                            scope_to_reprocess) + \"Error: [%s].\" % e)"},{"line_number":208,"context_line":""},{"line_number":209,"context_line":"    @staticmethod"},{"line_number":210,"context_line":"    def generate_overlap_error_message(scheduled_range, scheduleding_range,"},{"line_number":211,"context_line":"                                       scope_to_reprocess):"},{"line_number":212,"context_line":"        return \"Cannot schedule a reprocessing for scope [%s] for \" \\"},{"line_number":213,"context_line":"               \"reprocessing time [%s], because it already has a schedule \" \\"}],"source_content_type":"text/x-python","patch_set":25,"id":"2023f52b_8e8eec1b","line":210,"range":{"start_line":210,"start_character":56,"end_line":210,"end_character":74},"in_reply_to":"2d53e16c_0375adf8","updated":"2022-02-25 13:41:33.000000000","message":"Done","commit_id":"4d544b7a01ce0107b91009be6162c18c9a1f751a"}],"cloudkitty/orchestrator.py":[{"author":{"_account_id":15197,"name":"Pierre Riteau","email":"pierre@stackhpc.com","username":"priteau","status":"StackHPC"},"change_message_id":"7e16f36d4b35f8d8b8a7aec8ec4675e4fc32be12","unresolved":true,"context_lines":[{"line_number":633,"context_line":"                scope_db, CONF.collect.period)"},{"line_number":634,"context_line":"        else:"},{"line_number":635,"context_line":"            LOG.debug(\"It seems that the processing for schedule [%s] was \""},{"line_number":636,"context_line":"                      \"finished by other Cloudkitty reprocessor.\", scope)"},{"line_number":637,"context_line":"            return None"},{"line_number":638,"context_line":""},{"line_number":639,"context_line":"    def load_scopes_to_process(self):"}],"source_content_type":"text/x-python","patch_set":26,"id":"0bc3e460_88470ed5","line":636,"range":{"start_line":636,"start_character":41,"end_line":636,"end_character":51},"updated":"2022-02-21 15:22:54.000000000","message":"CloudKitty","commit_id":"9163fa870127bee2d78d7cf13fca9851a302a1c9"},{"author":{"_account_id":28356,"name":"Rafael Weingartner","email":"rafael@apache.org","username":"rafaelweingartner"},"change_message_id":"1480116c2f80768c7614ca658d73d026189767b2","unresolved":false,"context_lines":[{"line_number":633,"context_line":"                scope_db, CONF.collect.period)"},{"line_number":634,"context_line":"        else:"},{"line_number":635,"context_line":"            LOG.debug(\"It seems that the processing for schedule [%s] was \""},{"line_number":636,"context_line":"                      \"finished by other Cloudkitty reprocessor.\", scope)"},{"line_number":637,"context_line":"            return None"},{"line_number":638,"context_line":""},{"line_number":639,"context_line":"    def load_scopes_to_process(self):"}],"source_content_type":"text/x-python","patch_set":26,"id":"cdbe20ce_60e7d643","line":636,"range":{"start_line":636,"start_character":41,"end_line":636,"end_character":51},"in_reply_to":"0bc3e460_88470ed5","updated":"2022-02-22 11:54:29.000000000","message":"Done","commit_id":"9163fa870127bee2d78d7cf13fca9851a302a1c9"},{"author":{"_account_id":15197,"name":"Pierre Riteau","email":"pierre@stackhpc.com","username":"priteau","status":"StackHPC"},"change_message_id":"7e16f36d4b35f8d8b8a7aec8ec4675e4fc32be12","unresolved":true,"context_lines":[{"line_number":640,"context_line":"        self.tenants \u003d self.reprocessing_scheduler_db.get_all()"},{"line_number":641,"context_line":"        random.shuffle(self.tenants)"},{"line_number":642,"context_line":""},{"line_number":643,"context_line":"        LOG.info(\u0027Reprocessing Worker [%s] loaded [%s] schedules to process.\u0027,"},{"line_number":644,"context_line":"                 self._worker_id, len(self.tenants))"},{"line_number":645,"context_line":""},{"line_number":646,"context_line":"    def generate_lock_base_name(self, scope):"}],"source_content_type":"text/x-python","patch_set":26,"id":"6c2ed4d1_fdc59894","line":643,"range":{"start_line":643,"start_character":31,"end_line":643,"end_character":37},"updated":"2022-02-21 15:22:54.000000000","message":"worker","commit_id":"9163fa870127bee2d78d7cf13fca9851a302a1c9"},{"author":{"_account_id":28356,"name":"Rafael Weingartner","email":"rafael@apache.org","username":"rafaelweingartner"},"change_message_id":"1480116c2f80768c7614ca658d73d026189767b2","unresolved":false,"context_lines":[{"line_number":640,"context_line":"        self.tenants \u003d self.reprocessing_scheduler_db.get_all()"},{"line_number":641,"context_line":"        random.shuffle(self.tenants)"},{"line_number":642,"context_line":""},{"line_number":643,"context_line":"        LOG.info(\u0027Reprocessing Worker [%s] loaded [%s] schedules to process.\u0027,"},{"line_number":644,"context_line":"                 self._worker_id, len(self.tenants))"},{"line_number":645,"context_line":""},{"line_number":646,"context_line":"    def generate_lock_base_name(self, scope):"}],"source_content_type":"text/x-python","patch_set":26,"id":"d4e8c5c4_0e0f3a00","line":643,"range":{"start_line":643,"start_character":31,"end_line":643,"end_character":37},"in_reply_to":"6c2ed4d1_fdc59894","updated":"2022-02-22 11:54:29.000000000","message":"Done","commit_id":"9163fa870127bee2d78d7cf13fca9851a302a1c9"}],"cloudkitty/storage/v2/influx.py":[{"author":{"_account_id":15197,"name":"Pierre Riteau","email":"pierre@stackhpc.com","username":"priteau","status":"StackHPC"},"change_message_id":"7e16f36d4b35f8d8b8a7aec8ec4675e4fc32be12","unresolved":true,"context_lines":[{"line_number":268,"context_line":"            query +\u003d filter_query"},{"line_number":269,"context_line":"        query +\u003d \u0027;\u0027"},{"line_number":270,"context_line":""},{"line_number":271,"context_line":"        LOG.debug(\"InfluxDb query to delete elements filtering by [%s] and \""},{"line_number":272,"context_line":"                  \"with [begin\u003d%s, end\u003d%s]: [%].\", filters, begin, end, query)"},{"line_number":273,"context_line":""},{"line_number":274,"context_line":"        self._conn.query(query)"}],"source_content_type":"text/x-python","patch_set":26,"id":"32ee317f_1e5f2820","line":271,"range":{"start_line":271,"start_character":19,"end_line":271,"end_character":27},"updated":"2022-02-21 15:22:54.000000000","message":"InfluxDB","commit_id":"9163fa870127bee2d78d7cf13fca9851a302a1c9"},{"author":{"_account_id":28356,"name":"Rafael Weingartner","email":"rafael@apache.org","username":"rafaelweingartner"},"change_message_id":"1480116c2f80768c7614ca658d73d026189767b2","unresolved":false,"context_lines":[{"line_number":268,"context_line":"            query +\u003d filter_query"},{"line_number":269,"context_line":"        query +\u003d \u0027;\u0027"},{"line_number":270,"context_line":""},{"line_number":271,"context_line":"        LOG.debug(\"InfluxDb query to delete elements filtering by [%s] and \""},{"line_number":272,"context_line":"                  \"with [begin\u003d%s, end\u003d%s]: [%].\", filters, begin, end, query)"},{"line_number":273,"context_line":""},{"line_number":274,"context_line":"        self._conn.query(query)"}],"source_content_type":"text/x-python","patch_set":26,"id":"1707a6de_ae43f96f","line":271,"range":{"start_line":271,"start_character":19,"end_line":271,"end_character":27},"in_reply_to":"32ee317f_1e5f2820","updated":"2022-02-22 11:54:29.000000000","message":"Done","commit_id":"9163fa870127bee2d78d7cf13fca9851a302a1c9"}],"cloudkitty/storage_state/__init__.py":[{"author":{"_account_id":25277,"name":"Mariusz Karpiarz","email":"mariusz.karpiarz@codethink.co.uk","username":"mkarpiarz"},"change_message_id":"80cc08f8d6fc8c30ca5ae844ac8d69189064b552","unresolved":true,"context_lines":[{"line_number":344,"context_line":"        if remove_finished:"},{"line_number":345,"context_line":"            query \u003d self.remove_finished_processing_schedules(query)"},{"line_number":346,"context_line":"        if order:"},{"line_number":347,"context_line":"            query \u003d query.order_by(\"id %s\" % order)"},{"line_number":348,"context_line":""},{"line_number":349,"context_line":"        query \u003d apply_offset_and_limit(limit, offset, query)"},{"line_number":350,"context_line":""}],"source_content_type":"text/x-python","patch_set":17,"id":"e9f0385e_7a19ff1d","line":347,"range":{"start_line":347,"start_character":12,"end_line":347,"end_character":51},"updated":"2022-01-21 13:13:22.000000000","message":"This line is causing this error with the latest version of SQLAlchemy:\n```\nTextual SQL expression \u0027id desc\u0027 should be explicitly declared as text(\u0027id desc\u0027)\n```","commit_id":"352ab5d4dcf23f61611d32b6a9560c2714977fe7"},{"author":{"_account_id":25277,"name":"Mariusz Karpiarz","email":"mariusz.karpiarz@codethink.co.uk","username":"mkarpiarz"},"change_message_id":"8d74ce3ec2198209c69bdcbab90bce0e35d78f2a","unresolved":false,"context_lines":[{"line_number":344,"context_line":"        if remove_finished:"},{"line_number":345,"context_line":"            query \u003d self.remove_finished_processing_schedules(query)"},{"line_number":346,"context_line":"        if order:"},{"line_number":347,"context_line":"            query \u003d query.order_by(\"id %s\" % order)"},{"line_number":348,"context_line":""},{"line_number":349,"context_line":"        query \u003d apply_offset_and_limit(limit, offset, query)"},{"line_number":350,"context_line":""}],"source_content_type":"text/x-python","patch_set":17,"id":"6653dc62_dd7b18ac","line":347,"range":{"start_line":347,"start_character":12,"end_line":347,"end_character":51},"in_reply_to":"8383f5d9_819c587f","updated":"2022-01-27 14:23:31.000000000","message":"Done","commit_id":"352ab5d4dcf23f61611d32b6a9560c2714977fe7"},{"author":{"_account_id":28356,"name":"Rafael Weingartner","email":"rafael@apache.org","username":"rafaelweingartner"},"change_message_id":"44a3fb5d6d9ccf54592f1233b678d336b1ea219c","unresolved":true,"context_lines":[{"line_number":344,"context_line":"        if remove_finished:"},{"line_number":345,"context_line":"            query \u003d self.remove_finished_processing_schedules(query)"},{"line_number":346,"context_line":"        if order:"},{"line_number":347,"context_line":"            query \u003d query.order_by(\"id %s\" % order)"},{"line_number":348,"context_line":""},{"line_number":349,"context_line":"        query \u003d apply_offset_and_limit(limit, offset, query)"},{"line_number":350,"context_line":""}],"source_content_type":"text/x-python","patch_set":17,"id":"8383f5d9_819c587f","line":347,"range":{"start_line":347,"start_character":12,"end_line":347,"end_character":51},"in_reply_to":"9ea0d43f_6d8f6f17","updated":"2022-01-21 13:22:12.000000000","message":"I created a patch. Can you check it?","commit_id":"352ab5d4dcf23f61611d32b6a9560c2714977fe7"},{"author":{"_account_id":25277,"name":"Mariusz Karpiarz","email":"mariusz.karpiarz@codethink.co.uk","username":"mkarpiarz"},"change_message_id":"87e8e1efe3fe3caf2f512177cc0a37306894530b","unresolved":true,"context_lines":[{"line_number":344,"context_line":"        if remove_finished:"},{"line_number":345,"context_line":"            query \u003d self.remove_finished_processing_schedules(query)"},{"line_number":346,"context_line":"        if order:"},{"line_number":347,"context_line":"            query \u003d query.order_by(\"id %s\" % order)"},{"line_number":348,"context_line":""},{"line_number":349,"context_line":"        query \u003d apply_offset_and_limit(limit, offset, query)"},{"line_number":350,"context_line":""}],"source_content_type":"text/x-python","patch_set":17,"id":"6b34e8dc_7c405545","line":347,"range":{"start_line":347,"start_character":12,"end_line":347,"end_character":51},"in_reply_to":"9ea0d43f_6d8f6f17","updated":"2022-01-21 13:21:47.000000000","message":"Well, I also tried using SQLAlchemy\u003d\u003d1.3.20 (the minimal version from requirements) but this one gave me a different error. I cannot test all possible versions of SQLAlchemy so we either adapt the code to the latest version or pin requirements to a known working version.","commit_id":"352ab5d4dcf23f61611d32b6a9560c2714977fe7"},{"author":{"_account_id":28356,"name":"Rafael Weingartner","email":"rafael@apache.org","username":"rafaelweingartner"},"change_message_id":"909f99ed22fb3ad2d8999e35b53ffe94d357c879","unresolved":true,"context_lines":[{"line_number":344,"context_line":"        if remove_finished:"},{"line_number":345,"context_line":"            query \u003d self.remove_finished_processing_schedules(query)"},{"line_number":346,"context_line":"        if order:"},{"line_number":347,"context_line":"            query \u003d query.order_by(\"id %s\" % order)"},{"line_number":348,"context_line":""},{"line_number":349,"context_line":"        query \u003d apply_offset_and_limit(limit, offset, query)"},{"line_number":350,"context_line":""}],"source_content_type":"text/x-python","patch_set":17,"id":"9ea0d43f_6d8f6f17","line":347,"range":{"start_line":347,"start_character":12,"end_line":347,"end_character":51},"in_reply_to":"e9f0385e_7a19ff1d","updated":"2022-01-21 13:17:34.000000000","message":"No, I am not using the latest one. Then, this is the problem.\n\nWhat is the alternative?","commit_id":"352ab5d4dcf23f61611d32b6a9560c2714977fe7"},{"author":{"_account_id":25277,"name":"Mariusz Karpiarz","email":"mariusz.karpiarz@codethink.co.uk","username":"mkarpiarz"},"change_message_id":"d111f4b52946f4010a15161aa09728dc4d204fbd","unresolved":true,"context_lines":[{"line_number":345,"context_line":"        if remove_finished:"},{"line_number":346,"context_line":"            query \u003d self.remove_finished_processing_schedules(query)"},{"line_number":347,"context_line":"        if order:"},{"line_number":348,"context_line":"            query \u003d query.order_by(text(\"id %s\" % order))"},{"line_number":349,"context_line":""},{"line_number":350,"context_line":"        query \u003d apply_offset_and_limit(limit, offset, query)"},{"line_number":351,"context_line":""}],"source_content_type":"text/x-python","patch_set":18,"id":"d1bf6334_39b0aa10","line":348,"range":{"start_line":348,"start_character":12,"end_line":348,"end_character":57},"updated":"2022-01-21 13:30:52.000000000","message":"Yes, this fixes the problem. However shouldn\u0027t we be using \"sql.text()\" and \"from sqlalchemy import sql\" instead? It feels to me using just \"text()\" is like asking for a conflict with the same function name from a different module...","commit_id":"6cf9dbbbd75e88d6a22e34c44ae80077c1abaa63"},{"author":{"_account_id":28356,"name":"Rafael Weingartner","email":"rafael@apache.org","username":"rafaelweingartner"},"change_message_id":"e2f71cc4a9e564ca96742328c32e322a1622026b","unresolved":false,"context_lines":[{"line_number":345,"context_line":"        if remove_finished:"},{"line_number":346,"context_line":"            query \u003d self.remove_finished_processing_schedules(query)"},{"line_number":347,"context_line":"        if order:"},{"line_number":348,"context_line":"            query \u003d query.order_by(text(\"id %s\" % order))"},{"line_number":349,"context_line":""},{"line_number":350,"context_line":"        query \u003d apply_offset_and_limit(limit, offset, query)"},{"line_number":351,"context_line":""}],"source_content_type":"text/x-python","patch_set":18,"id":"75cf7030_8d9f4eba","line":348,"range":{"start_line":348,"start_character":12,"end_line":348,"end_character":57},"in_reply_to":"d1bf6334_39b0aa10","updated":"2022-01-21 13:35:53.000000000","message":"That also works. Done.","commit_id":"6cf9dbbbd75e88d6a22e34c44ae80077c1abaa63"},{"author":{"_account_id":15197,"name":"Pierre Riteau","email":"pierre@stackhpc.com","username":"priteau","status":"StackHPC"},"change_message_id":"7e16f36d4b35f8d8b8a7aec8ec4675e4fc32be12","unresolved":true,"context_lines":[{"line_number":334,"context_line":"        session.begin()"},{"line_number":335,"context_line":""},{"line_number":336,"context_line":"        query \u003d utils.model_query(self.model, session)"},{"line_number":337,"context_line":""},{"line_number":338,"context_line":"        if order not in [\u0027asc\u0027, \u0027desc\u0027]:"},{"line_number":339,"context_line":"            LOG.debug(\"The order [%s] is not valid.\""},{"line_number":340,"context_line":"                      \"Therefore, we set it to `desc`.\", order)"},{"line_number":341,"context_line":"            order \u003d \"desc\""},{"line_number":342,"context_line":""},{"line_number":343,"context_line":"        if identifier:"},{"line_number":344,"context_line":"            query \u003d query.filter(self.model.identifier.in_(identifier))"}],"source_content_type":"text/x-python","patch_set":26,"id":"8d33bdb3_f9f9d7bf","line":341,"range":{"start_line":337,"start_character":0,"end_line":341,"end_character":26},"updated":"2022-02-21 15:22:54.000000000","message":"I would raise an exception if an invalid order is provided. And we can perform validation in the API layer.","commit_id":"9163fa870127bee2d78d7cf13fca9851a302a1c9"},{"author":{"_account_id":28356,"name":"Rafael Weingartner","email":"rafael@apache.org","username":"rafaelweingartner"},"change_message_id":"1480116c2f80768c7614ca658d73d026189767b2","unresolved":false,"context_lines":[{"line_number":334,"context_line":"        session.begin()"},{"line_number":335,"context_line":""},{"line_number":336,"context_line":"        query \u003d utils.model_query(self.model, session)"},{"line_number":337,"context_line":""},{"line_number":338,"context_line":"        if order not in [\u0027asc\u0027, \u0027desc\u0027]:"},{"line_number":339,"context_line":"            LOG.debug(\"The order [%s] is not valid.\""},{"line_number":340,"context_line":"                      \"Therefore, we set it to `desc`.\", order)"},{"line_number":341,"context_line":"            order \u003d \"desc\""},{"line_number":342,"context_line":""},{"line_number":343,"context_line":"        if identifier:"},{"line_number":344,"context_line":"            query \u003d query.filter(self.model.identifier.in_(identifier))"}],"source_content_type":"text/x-python","patch_set":26,"id":"2b410996_ce00b401","line":341,"range":{"start_line":337,"start_character":0,"end_line":341,"end_character":26},"in_reply_to":"8d33bdb3_f9f9d7bf","updated":"2022-02-22 11:54:29.000000000","message":"Done","commit_id":"9163fa870127bee2d78d7cf13fca9851a302a1c9"},{"author":{"_account_id":15197,"name":"Pierre Riteau","email":"pierre@stackhpc.com","username":"priteau","status":"StackHPC"},"change_message_id":"7e16f36d4b35f8d8b8a7aec8ec4675e4fc32be12","unresolved":true,"context_lines":[{"line_number":438,"context_line":"        if not result_set:"},{"line_number":439,"context_line":"            LOG.warning(\"Trying to update current time to [%s] for identifier \""},{"line_number":440,"context_line":"                        \"[%s] and reprocessing range [start\u003d%, end\u003d%s], but \""},{"line_number":441,"context_line":"                        \"we could not find a scheduler for this scheduler.\","},{"line_number":442,"context_line":"                        new_current_time_stamp, identifier,"},{"line_number":443,"context_line":"                        start_reprocess_time, end_reprocess_time)"},{"line_number":444,"context_line":"            return"}],"source_content_type":"text/x-python","patch_set":26,"id":"65bb7ade_ec21c142","line":441,"range":{"start_line":441,"start_character":45,"end_line":441,"end_character":73},"updated":"2022-02-21 15:22:54.000000000","message":"???","commit_id":"9163fa870127bee2d78d7cf13fca9851a302a1c9"},{"author":{"_account_id":28356,"name":"Rafael Weingartner","email":"rafael@apache.org","username":"rafaelweingartner"},"change_message_id":"1480116c2f80768c7614ca658d73d026189767b2","unresolved":false,"context_lines":[{"line_number":438,"context_line":"        if not result_set:"},{"line_number":439,"context_line":"            LOG.warning(\"Trying to update current time to [%s] for identifier \""},{"line_number":440,"context_line":"                        \"[%s] and reprocessing range [start\u003d%, end\u003d%s], but \""},{"line_number":441,"context_line":"                        \"we could not find a scheduler for this scheduler.\","},{"line_number":442,"context_line":"                        new_current_time_stamp, identifier,"},{"line_number":443,"context_line":"                        start_reprocess_time, end_reprocess_time)"},{"line_number":444,"context_line":"            return"}],"source_content_type":"text/x-python","patch_set":26,"id":"d53c93b5_21d76cfc","line":441,"range":{"start_line":441,"start_character":45,"end_line":441,"end_character":73},"in_reply_to":"65bb7ade_ec21c142","updated":"2022-02-22 11:54:29.000000000","message":"Done","commit_id":"9163fa870127bee2d78d7cf13fca9851a302a1c9"}],"doc/source/api-reference/v2/task/reprocessing.inc":[{"author":{"_account_id":25277,"name":"Mariusz Karpiarz","email":"mariusz.karpiarz@codethink.co.uk","username":"mkarpiarz"},"change_message_id":"612a94700b180f78a7886d189b0d86f2f308ee5c","unresolved":true,"context_lines":[{"line_number":7,"context_line":"Currently, the only task available is the reprocessing one, which is avaiable"},{"line_number":8,"context_line":"via the following endpoints."},{"line_number":9,"context_line":""},{"line_number":10,"context_line":" - POST `/v2/task/reprocess` -- to create a reprocessing task."},{"line_number":11,"context_line":" - GET `/v2/task/reprocess/\u003cpath_scope_id\u003e` -- to retrieve a reprocessing task."},{"line_number":12,"context_line":" - GET `/v2/task/reprocesses` -- to retrieve all reprocessing task."},{"line_number":13,"context_line":""}],"source_content_type":"text/x-c++src","patch_set":20,"id":"6deb78d2_03f6bf67","line":10,"range":{"start_line":10,"start_character":18,"end_line":10,"end_character":27},"updated":"2022-01-27 14:22:15.000000000","message":"The API expects \"reprocesses\" here. Wouldn\u0027t be better to use the singular form here and only allow to create one reprocessing task per API call?","commit_id":"65d90d673357e60ddc70e67cafa64ea196b74519"},{"author":{"_account_id":25277,"name":"Mariusz Karpiarz","email":"mariusz.karpiarz@codethink.co.uk","username":"mkarpiarz"},"change_message_id":"1a656d73d281d4cebd57cd60df100c93357c726a","unresolved":false,"context_lines":[{"line_number":7,"context_line":"Currently, the only task available is the reprocessing one, which is avaiable"},{"line_number":8,"context_line":"via the following endpoints."},{"line_number":9,"context_line":""},{"line_number":10,"context_line":" - POST `/v2/task/reprocess` -- to create a reprocessing task."},{"line_number":11,"context_line":" - GET `/v2/task/reprocess/\u003cpath_scope_id\u003e` -- to retrieve a reprocessing task."},{"line_number":12,"context_line":" - GET `/v2/task/reprocesses` -- to retrieve all reprocessing task."},{"line_number":13,"context_line":""}],"source_content_type":"text/x-c++src","patch_set":20,"id":"f8f4b540_713e5227","line":10,"range":{"start_line":10,"start_character":18,"end_line":10,"end_character":27},"in_reply_to":"6deb78d2_03f6bf67","updated":"2022-01-28 12:58:08.000000000","message":"Done","commit_id":"65d90d673357e60ddc70e67cafa64ea196b74519"},{"author":{"_account_id":25277,"name":"Mariusz Karpiarz","email":"mariusz.karpiarz@codethink.co.uk","username":"mkarpiarz"},"change_message_id":"612a94700b180f78a7886d189b0d86f2f308ee5c","unresolved":true,"context_lines":[{"line_number":53,"context_line":"-------"},{"line_number":54,"context_line":".. code-block:: shell"},{"line_number":55,"context_line":""},{"line_number":56,"context_line":"   curl -s -X POST \"https://\u003ccloudkitty_server_and_port_here\u003e/v2/task/reprocess\" -H \"Accept: application/json\" -H \"User-Agent: python-keystoneclient\" -H \"X-Auth-Token: ${ACCESS_TOKEN_KEYSTONE}\" -H \"Content-Type: application/json\" -d \u0027{\"reason\": \"Reprocessing test\", \"scope_ids\": \"\u003cSome scope ID\u003e\", \"start_reprocess_time\": \"2021-06-01 00:00:00+00:00\", \"end_reprocess_time\": \"2021-06-01 23:00:00+00:00\"}\u0027"},{"line_number":57,"context_line":""},{"line_number":58,"context_line":"Retrieve a reprocessing task"},{"line_number":59,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"}],"source_content_type":"text/x-c++src","patch_set":20,"id":"44028baa_71877733","line":56,"range":{"start_line":56,"start_character":266,"end_line":56,"end_character":296},"updated":"2022-01-27 14:22:15.000000000","message":"Should the \"scope_ids\" parameter be required when creating a new task? If I want to create my first reprocessing job, where can I find the value for this parameter? When I specify an empty dict, I get this error back:\n```\n{\"message\": \"Invalid data \u0027None\u0027 : expected a dictionary (path: \u0027[]\u0027)\"}\n```","commit_id":"65d90d673357e60ddc70e67cafa64ea196b74519"},{"author":{"_account_id":28356,"name":"Rafael Weingartner","email":"rafael@apache.org","username":"rafaelweingartner"},"change_message_id":"467109bca3f752b38e6cf3a674486096ea0a82b5","unresolved":false,"context_lines":[{"line_number":53,"context_line":"-------"},{"line_number":54,"context_line":".. code-block:: shell"},{"line_number":55,"context_line":""},{"line_number":56,"context_line":"   curl -s -X POST \"https://\u003ccloudkitty_server_and_port_here\u003e/v2/task/reprocess\" -H \"Accept: application/json\" -H \"User-Agent: python-keystoneclient\" -H \"X-Auth-Token: ${ACCESS_TOKEN_KEYSTONE}\" -H \"Content-Type: application/json\" -d \u0027{\"reason\": \"Reprocessing test\", \"scope_ids\": \"\u003cSome scope ID\u003e\", \"start_reprocess_time\": \"2021-06-01 00:00:00+00:00\", \"end_reprocess_time\": \"2021-06-01 23:00:00+00:00\"}\u0027"},{"line_number":57,"context_line":""},{"line_number":58,"context_line":"Retrieve a reprocessing task"},{"line_number":59,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"}],"source_content_type":"text/x-c++src","patch_set":20,"id":"5ef664fe_593caaf5","line":56,"range":{"start_line":56,"start_character":266,"end_line":56,"end_character":296},"in_reply_to":"44028baa_71877733","updated":"2022-01-27 20:01:43.000000000","message":"The scope IDs can be retrieved via \"/v2/scope\" API, which is the API that one can use to list all scopes, and their status.","commit_id":"65d90d673357e60ddc70e67cafa64ea196b74519"},{"author":{"_account_id":28356,"name":"Rafael Weingartner","email":"rafael@apache.org","username":"rafaelweingartner"},"change_message_id":"c45d84cac4ca85e5b5bcfb7ac769dc2f44ab13d2","unresolved":false,"context_lines":[{"line_number":53,"context_line":"-------"},{"line_number":54,"context_line":".. code-block:: shell"},{"line_number":55,"context_line":""},{"line_number":56,"context_line":"   curl -s -X POST \"https://\u003ccloudkitty_server_and_port_here\u003e/v2/task/reprocess\" -H \"Accept: application/json\" -H \"User-Agent: python-keystoneclient\" -H \"X-Auth-Token: ${ACCESS_TOKEN_KEYSTONE}\" -H \"Content-Type: application/json\" -d \u0027{\"reason\": \"Reprocessing test\", \"scope_ids\": \"\u003cSome scope ID\u003e\", \"start_reprocess_time\": \"2021-06-01 00:00:00+00:00\", \"end_reprocess_time\": \"2021-06-01 23:00:00+00:00\"}\u0027"},{"line_number":57,"context_line":""},{"line_number":58,"context_line":"Retrieve a reprocessing task"},{"line_number":59,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"}],"source_content_type":"text/x-c++src","patch_set":20,"id":"c63ca62b_84023454","line":56,"range":{"start_line":56,"start_character":266,"end_line":56,"end_character":296},"in_reply_to":"57c420a7_4b1c30d7","updated":"2022-01-28 13:38:08.000000000","message":"Done","commit_id":"65d90d673357e60ddc70e67cafa64ea196b74519"},{"author":{"_account_id":25277,"name":"Mariusz Karpiarz","email":"mariusz.karpiarz@codethink.co.uk","username":"mkarpiarz"},"change_message_id":"e2329d6be0c42c2ba161006f1c34ec1a1f682199","unresolved":true,"context_lines":[{"line_number":53,"context_line":"-------"},{"line_number":54,"context_line":".. code-block:: shell"},{"line_number":55,"context_line":""},{"line_number":56,"context_line":"   curl -s -X POST \"https://\u003ccloudkitty_server_and_port_here\u003e/v2/task/reprocess\" -H \"Accept: application/json\" -H \"User-Agent: python-keystoneclient\" -H \"X-Auth-Token: ${ACCESS_TOKEN_KEYSTONE}\" -H \"Content-Type: application/json\" -d \u0027{\"reason\": \"Reprocessing test\", \"scope_ids\": \"\u003cSome scope ID\u003e\", \"start_reprocess_time\": \"2021-06-01 00:00:00+00:00\", \"end_reprocess_time\": \"2021-06-01 23:00:00+00:00\"}\u0027"},{"line_number":57,"context_line":""},{"line_number":58,"context_line":"Retrieve a reprocessing task"},{"line_number":59,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"}],"source_content_type":"text/x-c++src","patch_set":20,"id":"57c420a7_4b1c30d7","line":56,"range":{"start_line":56,"start_character":266,"end_line":56,"end_character":296},"in_reply_to":"5ef664fe_593caaf5","updated":"2022-01-28 12:57:48.000000000","message":"Ah, good to know. Thanks! What do you think about adding a short sentence explaining where to get the scope ID from?","commit_id":"65d90d673357e60ddc70e67cafa64ea196b74519"},{"author":{"_account_id":25277,"name":"Mariusz Karpiarz","email":"mariusz.karpiarz@codethink.co.uk","username":"mkarpiarz"},"change_message_id":"f78fa96cdee69834fbbf6ee90c2d2a8cbc618f3d","unresolved":true,"context_lines":[{"line_number":43,"context_line":"Response"},{"line_number":44,"context_line":"--------"},{"line_number":45,"context_line":""},{"line_number":46,"context_line":"We will return an empty object as the response in case of success:"},{"line_number":47,"context_line":""},{"line_number":48,"context_line":".. code-block:: javascript"},{"line_number":49,"context_line":""}],"source_content_type":"text/x-c++src","patch_set":24,"id":"19cae3cb_b8e56fed","line":46,"range":{"start_line":46,"start_character":0,"end_line":46,"end_character":66},"updated":"2022-02-07 14:11:20.000000000","message":"I\u0027m not sure returning an empty dict is the best idea here. I feel empty objects indicate that nothing\u0027s been done and so we should at least add a brief message. But then, since we return the HTTP code, this might not matter that much.","commit_id":"ad0715c4669fd0cb53b649f15344eb796f4a632e"},{"author":{"_account_id":28356,"name":"Rafael Weingartner","email":"rafael@apache.org","username":"rafaelweingartner"},"change_message_id":"9dec50aa703164bafb78259d880042a498998436","unresolved":true,"context_lines":[{"line_number":43,"context_line":"Response"},{"line_number":44,"context_line":"--------"},{"line_number":45,"context_line":""},{"line_number":46,"context_line":"We will return an empty object as the response in case of success:"},{"line_number":47,"context_line":""},{"line_number":48,"context_line":".. code-block:: javascript"},{"line_number":49,"context_line":""}],"source_content_type":"text/x-c++src","patch_set":24,"id":"b8b85be8_3c57d15e","line":46,"range":{"start_line":46,"start_character":0,"end_line":46,"end_character":66},"in_reply_to":"19cae3cb_b8e56fed","updated":"2022-02-07 14:22:59.000000000","message":"Would you like to see something different?\n\nNormally, in a post message, such as this one, I see the HTTTP 200 as enough. It is an API called schedule, where we send the data to schedule. just returning 200 would be enough. \n\nWould you like to see something else?","commit_id":"ad0715c4669fd0cb53b649f15344eb796f4a632e"},{"author":{"_account_id":15197,"name":"Pierre Riteau","email":"pierre@stackhpc.com","username":"priteau","status":"StackHPC"},"change_message_id":"aaaf3d46f1a42717c947360a9b50ad3734081e8b","unresolved":false,"context_lines":[{"line_number":43,"context_line":"Response"},{"line_number":44,"context_line":"--------"},{"line_number":45,"context_line":""},{"line_number":46,"context_line":"We will return an empty object as the response in case of success:"},{"line_number":47,"context_line":""},{"line_number":48,"context_line":".. code-block:: javascript"},{"line_number":49,"context_line":""}],"source_content_type":"text/x-c++src","patch_set":24,"id":"36cf9ebb_4c5937b6","line":46,"range":{"start_line":46,"start_character":0,"end_line":46,"end_character":66},"in_reply_to":"a49ac1d8_253f1ea2","updated":"2022-02-25 13:51:28.000000000","message":"It\u0027s a bit unusual but let\u0027s go with it for now.","commit_id":"ad0715c4669fd0cb53b649f15344eb796f4a632e"},{"author":{"_account_id":25277,"name":"Mariusz Karpiarz","email":"mariusz.karpiarz@codethink.co.uk","username":"mkarpiarz"},"change_message_id":"9944c35b3d7283c6df64a22dc2b66a7def141f5c","unresolved":true,"context_lines":[{"line_number":43,"context_line":"Response"},{"line_number":44,"context_line":"--------"},{"line_number":45,"context_line":""},{"line_number":46,"context_line":"We will return an empty object as the response in case of success:"},{"line_number":47,"context_line":""},{"line_number":48,"context_line":".. code-block:: javascript"},{"line_number":49,"context_line":""}],"source_content_type":"text/x-c++src","patch_set":24,"id":"a49ac1d8_253f1ea2","line":46,"range":{"start_line":46,"start_character":0,"end_line":46,"end_character":66},"in_reply_to":"b8b85be8_3c57d15e","updated":"2022-02-08 09:20:45.000000000","message":"It\u0027s just that in my opinion returning an empty object instead of even a stock message like \"reprocessing task scheduled successfully\", may puzzle the user sending requests to the API (until the read the specs of course). On the other side, end users will, most likely, work with these APIs through a CLI which can then display status messages based on HTTP codes so the payload might just not matter.\nPierre: What do you think and what\u0027s normal practice in cases like this?","commit_id":"ad0715c4669fd0cb53b649f15344eb796f4a632e"}],"doc/source/api-reference/v2/task/reprocessing_parameters.yml":[{"author":{"_account_id":15197,"name":"Pierre Riteau","email":"pierre@stackhpc.com","username":"priteau","status":"StackHPC"},"change_message_id":"4a8269abd42cb77167b5f097a965f5400b2afe3d","unresolved":true,"context_lines":[{"line_number":1,"context_line":"path_scope_id:"},{"line_number":2,"context_line":"  in: path"},{"line_number":3,"context_line":"  description: |"},{"line_number":4,"context_line":"    The scope ID that one desires to retrieve."},{"line_number":5,"context_line":"  type: string"},{"line_number":6,"context_line":"  required: true"},{"line_number":7,"context_line":""}],"source_content_type":"text/x-yaml","patch_set":26,"id":"35503ba7_d63878f3","line":4,"range":{"start_line":4,"start_character":4,"end_line":4,"end_character":46},"updated":"2022-02-21 14:56:51.000000000","message":"The scope ID to retrieve.","commit_id":"9163fa870127bee2d78d7cf13fca9851a302a1c9"},{"author":{"_account_id":28356,"name":"Rafael Weingartner","email":"rafael@apache.org","username":"rafaelweingartner"},"change_message_id":"1480116c2f80768c7614ca658d73d026189767b2","unresolved":false,"context_lines":[{"line_number":1,"context_line":"path_scope_id:"},{"line_number":2,"context_line":"  in: path"},{"line_number":3,"context_line":"  description: |"},{"line_number":4,"context_line":"    The scope ID that one desires to retrieve."},{"line_number":5,"context_line":"  type: string"},{"line_number":6,"context_line":"  required: true"},{"line_number":7,"context_line":""}],"source_content_type":"text/x-yaml","patch_set":26,"id":"f0ca880b_fb1d8228","line":4,"range":{"start_line":4,"start_character":4,"end_line":4,"end_character":46},"in_reply_to":"35503ba7_d63878f3","updated":"2022-02-22 11:54:29.000000000","message":"Done","commit_id":"9163fa870127bee2d78d7cf13fca9851a302a1c9"},{"author":{"_account_id":15197,"name":"Pierre Riteau","email":"pierre@stackhpc.com","username":"priteau","status":"StackHPC"},"change_message_id":"4a8269abd42cb77167b5f097a965f5400b2afe3d","unresolved":true,"context_lines":[{"line_number":26,"context_line":"    informed, all reprocessing tasks, for all scopes are retrieved."},{"line_number":27,"context_line":"  required: false"},{"line_number":28,"context_line":"  type: string"},{"line_number":29,"context_line":""},{"line_number":30,"context_line":""},{"line_number":31,"context_line":"end_reprocess_time:"},{"line_number":32,"context_line":"  in: body"}],"source_content_type":"text/x-yaml","patch_set":26,"id":"8ed6ea99_b14c2927","line":29,"range":{"start_line":29,"start_character":0,"end_line":29,"end_character":0},"updated":"2022-02-21 14:56:51.000000000","message":"No need for extra line break?","commit_id":"9163fa870127bee2d78d7cf13fca9851a302a1c9"},{"author":{"_account_id":28356,"name":"Rafael Weingartner","email":"rafael@apache.org","username":"rafaelweingartner"},"change_message_id":"1480116c2f80768c7614ca658d73d026189767b2","unresolved":false,"context_lines":[{"line_number":26,"context_line":"    informed, all reprocessing tasks, for all scopes are retrieved."},{"line_number":27,"context_line":"  required: false"},{"line_number":28,"context_line":"  type: string"},{"line_number":29,"context_line":""},{"line_number":30,"context_line":""},{"line_number":31,"context_line":"end_reprocess_time:"},{"line_number":32,"context_line":"  in: body"}],"source_content_type":"text/x-yaml","patch_set":26,"id":"2ffefa09_4cc78309","line":29,"range":{"start_line":29,"start_character":0,"end_line":29,"end_character":0},"in_reply_to":"8ed6ea99_b14c2927","updated":"2022-02-22 11:54:29.000000000","message":"Done","commit_id":"9163fa870127bee2d78d7cf13fca9851a302a1c9"},{"author":{"_account_id":15197,"name":"Pierre Riteau","email":"pierre@stackhpc.com","username":"priteau","status":"StackHPC"},"change_message_id":"4a8269abd42cb77167b5f097a965f5400b2afe3d","unresolved":true,"context_lines":[{"line_number":46,"context_line":"  \u003c\u003c: *scope_ids_query"},{"line_number":47,"context_line":"  in: body"},{"line_number":48,"context_line":"  description: |"},{"line_number":49,"context_line":"    The scope IDs that one wants to reprocess. If you want to schedule more"},{"line_number":50,"context_line":"    than one, you must separate them with comma."},{"line_number":51,"context_line":"  required: true"},{"line_number":52,"context_line":""},{"line_number":53,"context_line":"start_reprocess_time:"}],"source_content_type":"text/x-yaml","patch_set":26,"id":"40550167_36e3c2a5","line":50,"range":{"start_line":49,"start_character":4,"end_line":50,"end_character":48},"updated":"2022-02-21 14:56:51.000000000","message":"The scope IDs to reprocess. Must be comma-separated to schedule more than one.","commit_id":"9163fa870127bee2d78d7cf13fca9851a302a1c9"},{"author":{"_account_id":28356,"name":"Rafael Weingartner","email":"rafael@apache.org","username":"rafaelweingartner"},"change_message_id":"1480116c2f80768c7614ca658d73d026189767b2","unresolved":false,"context_lines":[{"line_number":46,"context_line":"  \u003c\u003c: *scope_ids_query"},{"line_number":47,"context_line":"  in: body"},{"line_number":48,"context_line":"  description: |"},{"line_number":49,"context_line":"    The scope IDs that one wants to reprocess. If you want to schedule more"},{"line_number":50,"context_line":"    than one, you must separate them with comma."},{"line_number":51,"context_line":"  required: true"},{"line_number":52,"context_line":""},{"line_number":53,"context_line":"start_reprocess_time:"}],"source_content_type":"text/x-yaml","patch_set":26,"id":"1e34063a_c4e55acc","line":50,"range":{"start_line":49,"start_character":4,"end_line":50,"end_character":48},"in_reply_to":"40550167_36e3c2a5","updated":"2022-02-22 11:54:29.000000000","message":"Done","commit_id":"9163fa870127bee2d78d7cf13fca9851a302a1c9"},{"author":{"_account_id":15197,"name":"Pierre Riteau","email":"pierre@stackhpc.com","username":"priteau","status":"StackHPC"},"change_message_id":"4a8269abd42cb77167b5f097a965f5400b2afe3d","unresolved":true,"context_lines":[{"line_number":56,"context_line":"    The start date for the reprocessing task."},{"line_number":57,"context_line":"  type: iso8601 timestamp"},{"line_number":58,"context_line":"  required: true"},{"line_number":59,"context_line":""},{"line_number":60,"context_line":""},{"line_number":61,"context_line":""},{"line_number":62,"context_line":""}],"source_content_type":"text/x-yaml","patch_set":26,"id":"81a2ada2_51697bcf","line":59,"updated":"2022-02-21 14:56:51.000000000","message":"Remove line breaks","commit_id":"9163fa870127bee2d78d7cf13fca9851a302a1c9"},{"author":{"_account_id":28356,"name":"Rafael Weingartner","email":"rafael@apache.org","username":"rafaelweingartner"},"change_message_id":"1480116c2f80768c7614ca658d73d026189767b2","unresolved":false,"context_lines":[{"line_number":56,"context_line":"    The start date for the reprocessing task."},{"line_number":57,"context_line":"  type: iso8601 timestamp"},{"line_number":58,"context_line":"  required: true"},{"line_number":59,"context_line":""},{"line_number":60,"context_line":""},{"line_number":61,"context_line":""},{"line_number":62,"context_line":""}],"source_content_type":"text/x-yaml","patch_set":26,"id":"6786cd4a_2b040e70","line":59,"in_reply_to":"81a2ada2_51697bcf","updated":"2022-02-22 11:54:29.000000000","message":"Done","commit_id":"9163fa870127bee2d78d7cf13fca9851a302a1c9"}],"lower-constraints.txt":[{"author":{"_account_id":15197,"name":"Pierre Riteau","email":"pierre@stackhpc.com","username":"priteau","status":"StackHPC"},"change_message_id":"a0f1774052b5e8da575f145535992e55eb503c5e","unresolved":true,"context_lines":[{"line_number":33,"context_line":"futurist\u003d\u003d2.3.0 # Apache-2.0"},{"line_number":34,"context_line":"bandit\u003e\u003d1.6.0 # Apache-2.0"},{"line_number":35,"context_line":"datetimerange\u003d\u003d0.6.1 # MIT"},{"line_number":36,"context_line":""},{"line_number":37,"context_line":""},{"line_number":38,"context_line":"# test-requirements"},{"line_number":39,"context_line":"coverage\u003d\u003d5.3 # Apache-2.0"}],"source_content_type":"text/plain","patch_set":25,"id":"9760a076_fbc0871c","line":36,"updated":"2022-02-21 14:10:31.000000000","message":"No need for this extra line break?","commit_id":"4d544b7a01ce0107b91009be6162c18c9a1f751a"},{"author":{"_account_id":28356,"name":"Rafael Weingartner","email":"rafael@apache.org","username":"rafaelweingartner"},"change_message_id":"1480116c2f80768c7614ca658d73d026189767b2","unresolved":false,"context_lines":[{"line_number":33,"context_line":"futurist\u003d\u003d2.3.0 # Apache-2.0"},{"line_number":34,"context_line":"bandit\u003e\u003d1.6.0 # Apache-2.0"},{"line_number":35,"context_line":"datetimerange\u003d\u003d0.6.1 # MIT"},{"line_number":36,"context_line":""},{"line_number":37,"context_line":""},{"line_number":38,"context_line":"# test-requirements"},{"line_number":39,"context_line":"coverage\u003d\u003d5.3 # Apache-2.0"}],"source_content_type":"text/plain","patch_set":25,"id":"c05e206b_7c15b5b6","line":36,"in_reply_to":"9760a076_fbc0871c","updated":"2022-02-22 11:54:29.000000000","message":"Done","commit_id":"4d544b7a01ce0107b91009be6162c18c9a1f751a"}],"releasenotes/notes/introduce-reprocessing-api-822db3edc256507a.yaml":[{"author":{"_account_id":15197,"name":"Pierre Riteau","email":"pierre@stackhpc.com","username":"priteau","status":"StackHPC"},"change_message_id":"a0f1774052b5e8da575f145535992e55eb503c5e","unresolved":true,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"features:"},{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    Reprocessing schedule API."}],"source_content_type":"text/x-yaml","patch_set":25,"id":"de933eab_2111062c","line":4,"range":{"start_line":4,"start_character":4,"end_line":4,"end_character":30},"updated":"2022-02-21 14:10:31.000000000","message":"Please add more details, it\u0027s a major feature! 😊","commit_id":"4d544b7a01ce0107b91009be6162c18c9a1f751a"},{"author":{"_account_id":28356,"name":"Rafael Weingartner","email":"rafael@apache.org","username":"rafaelweingartner"},"change_message_id":"1480116c2f80768c7614ca658d73d026189767b2","unresolved":false,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"features:"},{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    Reprocessing schedule API."}],"source_content_type":"text/x-yaml","patch_set":25,"id":"bb82cb07_d138926f","line":4,"range":{"start_line":4,"start_character":4,"end_line":4,"end_character":30},"in_reply_to":"de933eab_2111062c","updated":"2022-02-22 11:54:29.000000000","message":"Done","commit_id":"4d544b7a01ce0107b91009be6162c18c9a1f751a"}]}
