)]}'
{"nova/cmd/manage.py":[{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"156546cb26224cbdfed7fea5f92e3e7c60374152","unresolved":true,"context_lines":[{"line_number":224,"context_line":"    @args(\u0027--all-cells\u0027, action\u003d\u0027store_true\u0027, dest\u003d\u0027all_cells\u0027,"},{"line_number":225,"context_line":"          default\u003dFalse, help\u003d\u0027Run command across all cells.\u0027)"},{"line_number":226,"context_line":"    @args(\u0027--task-log\u0027, action\u003d\u0027store_true\u0027, dest\u003d\u0027task_log\u0027, default\u003dFalse,"},{"line_number":227,"context_line":"          help\u003d\u0027Hard delete task_log table rows while archiving\u0027)"},{"line_number":228,"context_line":"    def archive_deleted_rows(self, max_rows\u003d1000, verbose\u003dFalse,"},{"line_number":229,"context_line":"                             until_complete\u003dFalse, purge\u003dFalse,"},{"line_number":230,"context_line":"                             before\u003dNone, all_cells\u003dFalse, task_log\u003dFalse):"}],"source_content_type":"text/x-python","patch_set":1,"id":"5094fa7e_b24eda91","line":227,"updated":"2021-03-19 18:08:02.000000000","message":"It feels a bit weird that everything else here is moved to the shadow table, which is then truncated if \u0027--purge\u0027 happens, _except_ for this. From what I can see, we should have shadow tables available for these. Any reason we don\u0027t want to just move them too?","commit_id":"344207d7c5379b954858e12b08957e79f2fc7345"},{"author":{"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},"change_message_id":"537b8b12911b5a57347e9e6f9648869f6738bfdd","unresolved":true,"context_lines":[{"line_number":224,"context_line":"    @args(\u0027--all-cells\u0027, action\u003d\u0027store_true\u0027, dest\u003d\u0027all_cells\u0027,"},{"line_number":225,"context_line":"          default\u003dFalse, help\u003d\u0027Run command across all cells.\u0027)"},{"line_number":226,"context_line":"    @args(\u0027--task-log\u0027, action\u003d\u0027store_true\u0027, dest\u003d\u0027task_log\u0027, default\u003dFalse,"},{"line_number":227,"context_line":"          help\u003d\u0027Hard delete task_log table rows while archiving\u0027)"},{"line_number":228,"context_line":"    def archive_deleted_rows(self, max_rows\u003d1000, verbose\u003dFalse,"},{"line_number":229,"context_line":"                             until_complete\u003dFalse, purge\u003dFalse,"},{"line_number":230,"context_line":"                             before\u003dNone, all_cells\u003dFalse, task_log\u003dFalse):"}],"source_content_type":"text/x-python","patch_set":1,"id":"bf59ab4e_a24f3cbd","line":227,"in_reply_to":"5094fa7e_b24eda91","updated":"2021-03-22 18:57:04.000000000","message":"I hear you and I actually thought the same thing. But I second-guessed it, and kept going back and forth wondering if I did that, would reviewers say, \"why bother putting things into the shadow tables, why don\u0027t you just delete them?\" 😆\n\nThe reason I was thinking that is because there are a few cases of \u0027nova_api\u0027 database (\u0027nova_api\u0027 has no soft delete functionality) tables (instance_mappings, request_specs) where we don\u0027t delete the record when the instance is deleted. For example, we need the instance mapping in order to list or show a deleted instance, sp we need to keep it around until the instance record is purged. Instead, we hard delete the instance mapping record when we archive the associated instance. Because of this behavior, I wasn\u0027t sure what reviewers would think in the task_log case. (Granted, task_log is from the \u0027main\u0027 database, not \u0027nova_api\u0027).\n\nBecause you\u0027ve pointed out exactly what I was thinking, I think that will likely make more sense to most and I\u0027ll go ahead and change this to put records into the shadow tables instead of hard deleting them. And then hard deletion can be done via --purge and \u0027nova-manage db purge\u0027 the way it\u0027s done for the rest of the \u0027main\u0027 database tables.","commit_id":"344207d7c5379b954858e12b08957e79f2fc7345"},{"author":{"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},"change_message_id":"73cd342b4d962e7199c4f24729fee4d6166675d7","unresolved":true,"context_lines":[{"line_number":411,"context_line":"                table_to_rows_archived.setdefault(table_name, 0)"},{"line_number":412,"context_line":"                deleted_task_logs \u003d sa_db.task_log_destroy_bulk("},{"line_number":413,"context_line":"                    ctxt, before\u003dbefore_date)"},{"line_number":414,"context_line":"                table_to_rows_archived[table_name] +\u003d deleted_task_logs"},{"line_number":415,"context_line":"            # If we\u0027re not archiving until there is nothing more to archive, we"},{"line_number":416,"context_line":"            # have reached max_rows in this cell DB or there was nothing to"},{"line_number":417,"context_line":"            # archive."}],"source_content_type":"text/x-python","patch_set":1,"id":"720e479b_3d5b2057","line":414,"updated":"2021-03-12 23:40:18.000000000","message":"I wasn\u0027t sure about defaulting to a result entry like:\n\n | task_log | 0 |\n\nin the case that no task_log records were archived, but code above for instance_mappings, request_specs, and instance_group_member setdefault to 0 so I followed that.\n\nIn the case of instance_mappings and request_specs, if you have deleted_instance_uuids, you know that you will have non-zero for the result count. But for instance_group_member, that\u0027s not guaranteed. If the instance wasn\u0027t a member of any server groups, it would say\n\n | API_DB.instance_group_member | 0 |","commit_id":"344207d7c5379b954858e12b08957e79f2fc7345"}],"nova/db/sqlalchemy/api.py":[{"author":{"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},"change_message_id":"73cd342b4d962e7199c4f24729fee4d6166675d7","unresolved":true,"context_lines":[{"line_number":4055,"context_line":"    # no other code deletes them, so we\u0027ll just provide a way to hard delete"},{"line_number":4056,"context_line":"    # them as part of the database archive process. We use the updated_at"},{"line_number":4057,"context_line":"    # timestamp for archivals that wish to cleanup rows from before a specified"},{"line_number":4058,"context_line":"    # data/time only."},{"line_number":4059,"context_line":"    query \u003d model_query(context, models.TaskLog)"},{"line_number":4060,"context_line":"    if before:"},{"line_number":4061,"context_line":"        query \u003d query.filter(models.TaskLog.updated_at \u003c before)"}],"source_content_type":"text/x-python","patch_set":1,"id":"f8544707_46e2f453","line":4058,"range":{"start_line":4058,"start_character":6,"end_line":4058,"end_character":15},"updated":"2021-03-12 23:40:18.000000000","message":"\u003cdate\u003e","commit_id":"344207d7c5379b954858e12b08957e79f2fc7345"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"e604193d64e9419d6a95d84e0c685790a2c4a50f","unresolved":true,"context_lines":[{"line_number":4284,"context_line":""},{"line_number":4285,"context_line":""},{"line_number":4286,"context_line":"def archive_deleted_rows(context\u003dNone, max_rows\u003dNone, before\u003dNone,"},{"line_number":4287,"context_line":"                         task_log\u003dNone):"},{"line_number":4288,"context_line":"    \"\"\"Move up to max_rows rows from production tables to the corresponding"},{"line_number":4289,"context_line":"    shadow tables."},{"line_number":4290,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"0e44f3f3_a931ca92","line":4287,"range":{"start_line":4287,"start_character":34,"end_line":4287,"end_character":38},"updated":"2021-06-10 12:55:18.000000000","message":"I think False would be more explicit in this case.","commit_id":"0844fc6df984d73ffa78b4327b5623e9ad4e2f8d"},{"author":{"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},"change_message_id":"d6bd9547f1dbf41505346701a0f83c45f764d92f","unresolved":true,"context_lines":[{"line_number":4284,"context_line":""},{"line_number":4285,"context_line":""},{"line_number":4286,"context_line":"def archive_deleted_rows(context\u003dNone, max_rows\u003dNone, before\u003dNone,"},{"line_number":4287,"context_line":"                         task_log\u003dNone):"},{"line_number":4288,"context_line":"    \"\"\"Move up to max_rows rows from production tables to the corresponding"},{"line_number":4289,"context_line":"    shadow tables."},{"line_number":4290,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"18012b46_65903bb6","line":4287,"range":{"start_line":4287,"start_character":34,"end_line":4287,"end_character":38},"in_reply_to":"0e44f3f3_a931ca92","updated":"2021-06-11 01:16:33.000000000","message":"Fair enough, will change.","commit_id":"0844fc6df984d73ffa78b4327b5623e9ad4e2f8d"},{"author":{"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},"change_message_id":"4cb82a7099d51ddb71544db8b9804a266b74daaf","unresolved":false,"context_lines":[{"line_number":4284,"context_line":""},{"line_number":4285,"context_line":""},{"line_number":4286,"context_line":"def archive_deleted_rows(context\u003dNone, max_rows\u003dNone, before\u003dNone,"},{"line_number":4287,"context_line":"                         task_log\u003dNone):"},{"line_number":4288,"context_line":"    \"\"\"Move up to max_rows rows from production tables to the corresponding"},{"line_number":4289,"context_line":"    shadow tables."},{"line_number":4290,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"abb64cc9_328d66dc","line":4287,"range":{"start_line":4287,"start_character":34,"end_line":4287,"end_character":38},"in_reply_to":"18012b46_65903bb6","updated":"2021-06-17 01:58:39.000000000","message":"Done","commit_id":"0844fc6df984d73ffa78b4327b5623e9ad4e2f8d"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"e604193d64e9419d6a95d84e0c685790a2c4a50f","unresolved":true,"context_lines":[{"line_number":4366,"context_line":"    # is never set. So, prefer specific timestamp columns here"},{"line_number":4367,"context_line":"    # for those special cases."},{"line_number":4368,"context_line":"    overrides \u003d {"},{"line_number":4369,"context_line":"        \u0027shadow_instance_actions\u0027: \u0027created_at\u0027,"},{"line_number":4370,"context_line":"        \u0027shadow_instance_actions_events\u0027: \u0027created_at\u0027,"},{"line_number":4371,"context_line":"        \u0027shadow_task_log\u0027: \u0027updated_at\u0027,"},{"line_number":4372,"context_line":"    }"},{"line_number":4373,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"02b3669a_4daf4d0d","line":4370,"range":{"start_line":4369,"start_character":0,"end_line":4370,"end_character":55},"updated":"2021-06-10 12:55:18.000000000","message":"Im wondering how these tables are archived as L4221 filters for deleted_at","commit_id":"0844fc6df984d73ffa78b4327b5623e9ad4e2f8d"},{"author":{"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},"change_message_id":"d6bd9547f1dbf41505346701a0f83c45f764d92f","unresolved":true,"context_lines":[{"line_number":4366,"context_line":"    # is never set. So, prefer specific timestamp columns here"},{"line_number":4367,"context_line":"    # for those special cases."},{"line_number":4368,"context_line":"    overrides \u003d {"},{"line_number":4369,"context_line":"        \u0027shadow_instance_actions\u0027: \u0027created_at\u0027,"},{"line_number":4370,"context_line":"        \u0027shadow_instance_actions_events\u0027: \u0027created_at\u0027,"},{"line_number":4371,"context_line":"        \u0027shadow_task_log\u0027: \u0027updated_at\u0027,"},{"line_number":4372,"context_line":"    }"},{"line_number":4373,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"fe34de1a_ce60c6e2","line":4370,"range":{"start_line":4369,"start_character":0,"end_line":4370,"end_character":55},"in_reply_to":"02b3669a_4daf4d0d","updated":"2021-06-11 01:16:33.000000000","message":"deleted_at is only filtered when --before is specified, so I guess you only get to archive those tables when you don\u0027t use --before :P","commit_id":"0844fc6df984d73ffa78b4327b5623e9ad4e2f8d"},{"author":{"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},"change_message_id":"5611edd699feaae6092de73c0be5ddfa8be60fdc","unresolved":true,"context_lines":[{"line_number":4366,"context_line":"    # is never set. So, prefer specific timestamp columns here"},{"line_number":4367,"context_line":"    # for those special cases."},{"line_number":4368,"context_line":"    overrides \u003d {"},{"line_number":4369,"context_line":"        \u0027shadow_instance_actions\u0027: \u0027created_at\u0027,"},{"line_number":4370,"context_line":"        \u0027shadow_instance_actions_events\u0027: \u0027created_at\u0027,"},{"line_number":4371,"context_line":"        \u0027shadow_task_log\u0027: \u0027updated_at\u0027,"},{"line_number":4372,"context_line":"    }"},{"line_number":4373,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"3f74512d_24ede50e","line":4370,"range":{"start_line":4369,"start_character":0,"end_line":4370,"end_character":55},"in_reply_to":"343f6017_68d5898d","updated":"2021-06-17 01:47:47.000000000","message":"Proposed a func test to catch possible future issues here:\n\nhttps://review.opendev.org/c/openstack/nova/+/796744","commit_id":"0844fc6df984d73ffa78b4327b5623e9ad4e2f8d"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"88972960c2fb30cdfd159470c4913359f4da7aad","unresolved":false,"context_lines":[{"line_number":4366,"context_line":"    # is never set. So, prefer specific timestamp columns here"},{"line_number":4367,"context_line":"    # for those special cases."},{"line_number":4368,"context_line":"    overrides \u003d {"},{"line_number":4369,"context_line":"        \u0027shadow_instance_actions\u0027: \u0027created_at\u0027,"},{"line_number":4370,"context_line":"        \u0027shadow_instance_actions_events\u0027: \u0027created_at\u0027,"},{"line_number":4371,"context_line":"        \u0027shadow_task_log\u0027: \u0027updated_at\u0027,"},{"line_number":4372,"context_line":"    }"},{"line_number":4373,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"af63d783_cbd60b3b","line":4370,"range":{"start_line":4369,"start_character":0,"end_line":4370,"end_character":55},"in_reply_to":"3f74512d_24ede50e","updated":"2021-06-18 08:02:57.000000000","message":"Thanks for looking into this. If it work then I\u0027m happy.","commit_id":"0844fc6df984d73ffa78b4327b5623e9ad4e2f8d"},{"author":{"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},"change_message_id":"5ad9d92527fcc5a70172b402aeca06723829da03","unresolved":true,"context_lines":[{"line_number":4366,"context_line":"    # is never set. So, prefer specific timestamp columns here"},{"line_number":4367,"context_line":"    # for those special cases."},{"line_number":4368,"context_line":"    overrides \u003d {"},{"line_number":4369,"context_line":"        \u0027shadow_instance_actions\u0027: \u0027created_at\u0027,"},{"line_number":4370,"context_line":"        \u0027shadow_instance_actions_events\u0027: \u0027created_at\u0027,"},{"line_number":4371,"context_line":"        \u0027shadow_task_log\u0027: \u0027updated_at\u0027,"},{"line_number":4372,"context_line":"    }"},{"line_number":4373,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"343f6017_68d5898d","line":4370,"range":{"start_line":4369,"start_character":0,"end_line":4370,"end_character":55},"in_reply_to":"5752fcfb_9bb14210","updated":"2021-06-17 01:31:25.000000000","message":"Update: I just wrote up a func test locally and could not cause a situation where instance_actions were left behind after doing an \u0027archive_deleted_rows --before\u0027. The instance_actions are getting archived fine. I was confused and then I looked at the code again and realized I accidentally fixed that with https://review.opendev.org/c/openstack/nova/+/773834 (walk table FK relationships and archive any records that point back at the parent).\n\nSo ... feel unsure whether it\u0027s worth doing anything about that one.\n\ntask_log doesn\u0027t have any FK relationships so it needs the special handling at archive time.","commit_id":"0844fc6df984d73ffa78b4327b5623e9ad4e2f8d"},{"author":{"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},"change_message_id":"3fbff6182cbfc43b79aff36194be31d88649b3d4","unresolved":true,"context_lines":[{"line_number":4366,"context_line":"    # is never set. So, prefer specific timestamp columns here"},{"line_number":4367,"context_line":"    # for those special cases."},{"line_number":4368,"context_line":"    overrides \u003d {"},{"line_number":4369,"context_line":"        \u0027shadow_instance_actions\u0027: \u0027created_at\u0027,"},{"line_number":4370,"context_line":"        \u0027shadow_instance_actions_events\u0027: \u0027created_at\u0027,"},{"line_number":4371,"context_line":"        \u0027shadow_task_log\u0027: \u0027updated_at\u0027,"},{"line_number":4372,"context_line":"    }"},{"line_number":4373,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"5752fcfb_9bb14210","line":4370,"range":{"start_line":4369,"start_character":0,"end_line":4370,"end_character":55},"in_reply_to":"d32c9458_1dc5ba00","updated":"2021-06-16 23:12:24.000000000","message":"Looks like L4221 is a bug, a comparison of NULL with a datetime will just select none of those rows, so passing --before will result in no instance_actions or instance_actions_events being archived. We would similarly need to use the overrides concept there too. I\u0027ll look at adding some test coverage for that to verify we have a bug and test a fix.\n\n mysql\u003e select id,deleted_at from nova_cell1.instance_actions where deleted_at \u003c \"2021-06-15 17:38:58\";\n Empty set (0.00 sec)\n\n mysql\u003e select id,deleted_at from nova_cell1.instance_actions where deleted_at \u003e \"2021-06-15 17:38:58\";\n Empty set (0.00 sec)","commit_id":"0844fc6df984d73ffa78b4327b5623e9ad4e2f8d"},{"author":{"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},"change_message_id":"65b2740d4e1850678b740165fe159115386c0d99","unresolved":true,"context_lines":[{"line_number":4366,"context_line":"    # is never set. So, prefer specific timestamp columns here"},{"line_number":4367,"context_line":"    # for those special cases."},{"line_number":4368,"context_line":"    overrides \u003d {"},{"line_number":4369,"context_line":"        \u0027shadow_instance_actions\u0027: \u0027created_at\u0027,"},{"line_number":4370,"context_line":"        \u0027shadow_instance_actions_events\u0027: \u0027created_at\u0027,"},{"line_number":4371,"context_line":"        \u0027shadow_task_log\u0027: \u0027updated_at\u0027,"},{"line_number":4372,"context_line":"    }"},{"line_number":4373,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"d32c9458_1dc5ba00","line":4370,"range":{"start_line":4369,"start_character":0,"end_line":4370,"end_character":55},"in_reply_to":"fe34de1a_ce60c6e2","updated":"2021-06-11 01:22:33.000000000","message":"Hm, actually it seems like such a comparison would raise an error, but it must not somehow... not sure what happens when you say .where(None \u003c datetime)?","commit_id":"0844fc6df984d73ffa78b4327b5623e9ad4e2f8d"}],"nova/tests/unit/db/test_db_api.py":[{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"e604193d64e9419d6a95d84e0c685790a2c4a50f","unresolved":true,"context_lines":[{"line_number":6166,"context_line":"                                                       tablename,"},{"line_number":6167,"context_line":"                                                       max_rows\u003d2,"},{"line_number":6168,"context_line":"                                                       before\u003dNone,"},{"line_number":6169,"context_line":"                                                       task_log\u003dNone)"},{"line_number":6170,"context_line":"        # Verify we have 4 left in main"},{"line_number":6171,"context_line":"        rows \u003d self.conn.execute(qmt).fetchall()"},{"line_number":6172,"context_line":"        self.assertEqual(len(rows), 4)"}],"source_content_type":"text/x-python","patch_set":6,"id":"d704ba2d_cddfa97a","line":6169,"range":{"start_line":6169,"start_character":64,"end_line":6169,"end_character":68},"updated":"2021-06-10 12:55:18.000000000","message":"False would be better","commit_id":"0844fc6df984d73ffa78b4327b5623e9ad4e2f8d"},{"author":{"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},"change_message_id":"4cb82a7099d51ddb71544db8b9804a266b74daaf","unresolved":false,"context_lines":[{"line_number":6166,"context_line":"                                                       tablename,"},{"line_number":6167,"context_line":"                                                       max_rows\u003d2,"},{"line_number":6168,"context_line":"                                                       before\u003dNone,"},{"line_number":6169,"context_line":"                                                       task_log\u003dNone)"},{"line_number":6170,"context_line":"        # Verify we have 4 left in main"},{"line_number":6171,"context_line":"        rows \u003d self.conn.execute(qmt).fetchall()"},{"line_number":6172,"context_line":"        self.assertEqual(len(rows), 4)"}],"source_content_type":"text/x-python","patch_set":6,"id":"70ce03fa_686ceb03","line":6169,"range":{"start_line":6169,"start_character":64,"end_line":6169,"end_character":68},"in_reply_to":"bcc69880_ce507c89","updated":"2021-06-17 01:58:39.000000000","message":"Done","commit_id":"0844fc6df984d73ffa78b4327b5623e9ad4e2f8d"},{"author":{"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},"change_message_id":"d6bd9547f1dbf41505346701a0f83c45f764d92f","unresolved":true,"context_lines":[{"line_number":6166,"context_line":"                                                       tablename,"},{"line_number":6167,"context_line":"                                                       max_rows\u003d2,"},{"line_number":6168,"context_line":"                                                       before\u003dNone,"},{"line_number":6169,"context_line":"                                                       task_log\u003dNone)"},{"line_number":6170,"context_line":"        # Verify we have 4 left in main"},{"line_number":6171,"context_line":"        rows \u003d self.conn.execute(qmt).fetchall()"},{"line_number":6172,"context_line":"        self.assertEqual(len(rows), 4)"}],"source_content_type":"text/x-python","patch_set":6,"id":"bcc69880_ce507c89","line":6169,"range":{"start_line":6169,"start_character":64,"end_line":6169,"end_character":68},"in_reply_to":"d704ba2d_cddfa97a","updated":"2021-06-11 01:16:33.000000000","message":"Ack","commit_id":"0844fc6df984d73ffa78b4327b5623e9ad4e2f8d"}],"releasenotes/notes/archive-task-logs-fa9dd7c5859b5e30.yaml":[{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"e604193d64e9419d6a95d84e0c685790a2c4a50f","unresolved":true,"context_lines":[{"line_number":4,"context_line":"    archive_deleted_rows`` CLI. When ``--task-log`` is specified, ``task_log``"},{"line_number":5,"context_line":"    table records will be archived while archiving the database. The"},{"line_number":6,"context_line":"    ``--task-log`` option works in conjunction with ``--before`` if operators"},{"line_number":7,"context_line":"    desire archving only records that are older than ``\u003cdate\u003e``. The"},{"line_number":8,"context_line":"    ``updated_at`` field is used by ``--task-log --before \u003cdate\u003e`` to determine"},{"line_number":9,"context_line":"    the age of a ``task_log`` record for archival."},{"line_number":10,"context_line":""}],"source_content_type":"text/x-yaml","patch_set":6,"id":"d4dd65e4_11e80c7d","line":7,"range":{"start_line":7,"start_character":11,"end_line":7,"end_character":19},"updated":"2021-06-10 12:55:18.000000000","message":"nit:archiving","commit_id":"0844fc6df984d73ffa78b4327b5623e9ad4e2f8d"},{"author":{"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},"change_message_id":"4cb82a7099d51ddb71544db8b9804a266b74daaf","unresolved":false,"context_lines":[{"line_number":4,"context_line":"    archive_deleted_rows`` CLI. When ``--task-log`` is specified, ``task_log``"},{"line_number":5,"context_line":"    table records will be archived while archiving the database. The"},{"line_number":6,"context_line":"    ``--task-log`` option works in conjunction with ``--before`` if operators"},{"line_number":7,"context_line":"    desire archving only records that are older than ``\u003cdate\u003e``. The"},{"line_number":8,"context_line":"    ``updated_at`` field is used by ``--task-log --before \u003cdate\u003e`` to determine"},{"line_number":9,"context_line":"    the age of a ``task_log`` record for archival."},{"line_number":10,"context_line":""}],"source_content_type":"text/x-yaml","patch_set":6,"id":"cd30baef_a04f0bbb","line":7,"range":{"start_line":7,"start_character":11,"end_line":7,"end_character":19},"in_reply_to":"34406153_f2dac7c8","updated":"2021-06-17 01:58:39.000000000","message":"Done","commit_id":"0844fc6df984d73ffa78b4327b5623e9ad4e2f8d"},{"author":{"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},"change_message_id":"d6bd9547f1dbf41505346701a0f83c45f764d92f","unresolved":true,"context_lines":[{"line_number":4,"context_line":"    archive_deleted_rows`` CLI. When ``--task-log`` is specified, ``task_log``"},{"line_number":5,"context_line":"    table records will be archived while archiving the database. The"},{"line_number":6,"context_line":"    ``--task-log`` option works in conjunction with ``--before`` if operators"},{"line_number":7,"context_line":"    desire archving only records that are older than ``\u003cdate\u003e``. The"},{"line_number":8,"context_line":"    ``updated_at`` field is used by ``--task-log --before \u003cdate\u003e`` to determine"},{"line_number":9,"context_line":"    the age of a ``task_log`` record for archival."},{"line_number":10,"context_line":""}],"source_content_type":"text/x-yaml","patch_set":6,"id":"34406153_f2dac7c8","line":7,"range":{"start_line":7,"start_character":11,"end_line":7,"end_character":19},"in_reply_to":"d4dd65e4_11e80c7d","updated":"2021-06-11 01:16:33.000000000","message":"Thanks","commit_id":"0844fc6df984d73ffa78b4327b5623e9ad4e2f8d"}]}
