Skip to content

Commit e42b018

Browse files
committed
feat: enhance delete_builds method to return deleted collections info and improve logging
1 parent 7095ff2 commit e42b018

File tree

1 file changed

+41
-3
lines changed

1 file changed

+41
-3
lines changed

biothings/hub/dataindex/mongo_build_cleanup.py

Lines changed: 41 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
from functools import partial
22

3+
from biothings import config as btconfig
34
from biothings.hub.manager import BaseManager
45
from biothings.utils.hub_db import get_src_build
56
from config import logger as logging
@@ -36,22 +37,59 @@ def list_builds(self, build_config=None, build_name=None):
3637

3738
async def delete_builds(self, build_ids):
3839
if not build_ids:
39-
return {"deleted_count": 0}
40+
return {
41+
"deleted_count": 0,
42+
"target_collections_deleted_count": 0,
43+
"target_collections_deleted": [],
44+
}
4045

4146
from biothings.utils import mongo
4247

4348
conn = mongo.get_hub_db_async_conn()
4449
try:
4550
src_build = mongo.get_src_build_async(conn)
51+
52+
build_docs = []
53+
async for doc in src_build.find({"_id": {"$in": build_ids}}, {"_id": 1, "target_name": 1}):
54+
build_docs.append(doc)
55+
56+
target_collection_candidates = set()
57+
for doc in build_docs:
58+
build_id = doc["_id"]
59+
target_name = doc.get("target_name")
60+
target_collection_candidates.add(build_id)
61+
if target_name and target_name != build_id:
62+
target_collection_candidates.add(target_name)
63+
64+
target_collections_deleted = []
65+
if target_collection_candidates:
66+
target_db = conn[btconfig.DATA_TARGET_DATABASE]
67+
existing_collections = await target_db.list_collection_names(
68+
filter={"name": {"$in": list(target_collection_candidates)}}
69+
)
70+
71+
for collection_name in existing_collections:
72+
await target_db[collection_name].drop()
73+
target_collections_deleted.append(collection_name)
74+
4675
result = await src_build.delete_many({"_id": {"$in": build_ids}})
47-
return {"deleted_count": result.deleted_count}
76+
return {
77+
"deleted_count": result.deleted_count,
78+
"target_collections_deleted_count": len(target_collections_deleted),
79+
"target_collections_deleted": sorted(target_collections_deleted),
80+
}
4881
finally:
4982
await conn.close()
5083

5184
def done(self, future):
5285
try:
5386
result = future.result()
54-
logging.info("Deleted %d MongoDB builds", result.get("deleted_count", 0), extra={"notify": True})
87+
logging.info(
88+
"Deleted %d MongoDB builds and dropped %d target collections",
89+
result.get("deleted_count", 0),
90+
result.get("target_collections_deleted_count", 0),
91+
extra={"notify": True},
92+
)
5593
except Exception as exc:
5694
logging.exception("Failed to delete MongoDB builds: %s", exc, extra={"notify": True})
5795

0 commit comments

Comments
 (0)