|
10 | 10 |
|
11 | 11 | dynamodb = boto3.client("dynamodb") |
12 | 12 | paginator = dynamodb.get_paginator("scan") |
| 13 | +resource = boto3.resource("dynamodb") |
13 | 14 |
|
14 | 15 | logger.setLevel("ERROR") |
15 | 16 |
|
@@ -79,28 +80,36 @@ def _delete_pointers(table_name: str, pointers_to_delete: list[str]) -> dict[str |
79 | 80 |
|
80 | 81 | print("Deleting invalid pointers...") |
81 | 82 | pointers_deleted = 0 |
82 | | - for _id, _ in pointers_to_delete: |
83 | | - try: |
84 | | - item_key = {"S": f"D#{_id}"} |
85 | | - dynamodb.delete_item( |
86 | | - TableName=table_name, |
87 | | - Key={"pk": item_key, "sk": item_key}, |
88 | | - ReturnValues="NONE", |
89 | | - ) |
90 | | - |
91 | | - pointers_deleted += 1 |
92 | | - |
93 | | - if pointers_deleted % 1000 == 0: |
94 | | - print(".", end="", flush=True) |
95 | | - except Exception as exc: |
96 | | - print(f"Failed to delete pointer {_id}: {exc}") |
| 83 | + failed_to_delete = 0 |
| 84 | + |
| 85 | + for _batch_id in range(0, len(pointers_to_delete), 25): |
| 86 | + batch = [ |
| 87 | + { |
| 88 | + "DeleteRequest": { |
| 89 | + "Key": { |
| 90 | + "pk": {"S": f"D#{pointer_id}"}, |
| 91 | + "sk": {"S": f"D#{pointer_id}"}, |
| 92 | + } |
| 93 | + } |
| 94 | + } |
| 95 | + for pointer_id in pointers_to_delete[_batch_id : _batch_id + 25] |
| 96 | + ] |
| 97 | + |
| 98 | + result = dynamodb.batch_write_item(RequestItems={table_name: batch}) |
| 99 | + |
| 100 | + unprocessed_items = len(result.get("UnprocessedItems", [])) |
| 101 | + pointers_deleted += 25 - unprocessed_items |
| 102 | + failed_to_delete += unprocessed_items |
| 103 | + if pointers_deleted % 1000 == 0: |
| 104 | + print(".", end="", flush=True) |
97 | 105 |
|
98 | 106 | end_time = datetime.now(tz=timezone.utc) |
99 | 107 |
|
100 | 108 | print(" Done") |
101 | 109 | return { |
102 | 110 | "pointers_to_delete": len(pointers_to_delete), |
103 | 111 | "deleted_pointers": pointers_deleted, |
| 112 | + "failed_deletes": failed_to_delete, |
104 | 113 | "deletes-took-secs": timedelta.total_seconds(end_time - start_time), |
105 | 114 | } |
106 | 115 |
|
|
0 commit comments