Skip to content

Commit dce8c4b

Browse files
Add debug prints for owner resolution
Co-authored-by: yourton.ma <yourton.ma@gmail.com>
1 parent 0d2db45 commit dce8c4b

File tree

3 files changed

+86
-1
lines changed

3 files changed

+86
-1
lines changed

RUN_DEBUG_NOW.md

Lines changed: 71 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,71 @@
1+
# 立即运行调试
2+
3+
## 🚀 现在执行
4+
5+
```bash
6+
cd ~/workspaces/OpenMetadata
7+
8+
# 清除缓存(重要!)
9+
find ingestion/src -name "*.pyc" -delete
10+
find ingestion/src -name "__pycache__" -exec rm -rf {} + 2>/dev/null
11+
12+
# 运行测试,只看调试输出
13+
metadata ingest -c ingestion/tests/unit/metadata/ingestion/owner_config_tests/test-03-multiple-users.yaml 2>&1 | grep "🔍"
14+
```
15+
16+
## 📊 现在会看到的输出
17+
18+
### 场景 1: ownerConfig 没有配置(配置解析失败)
19+
20+
```
21+
🔍 [GET_DB_OWNER] database=finance_db, has_ownerConfig=False
22+
🔍 [DB_CHECK] database=finance_db, owner_ref=None, has_root=None
23+
🔍 [DB_NO_OWNER] database=finance_db, clearing context
24+
```
25+
26+
**说明**: `ownerConfig` 没有被正确解析或传递。
27+
28+
**原因**: 可能是 Pydantic 模型生成问题,需要重新生成。
29+
30+
---
31+
32+
### 场景 2: ownerConfig 有,但 owner_ref 是 None(没找到 owner)
33+
34+
```
35+
🔍 [GET_DB_OWNER] database=finance_db, has_ownerConfig=True
36+
🔍 [GET_DB_OWNER] owner_ref=None, has_root=None
37+
🔍 [DB_CHECK] database=finance_db, owner_ref=None, has_root=None
38+
🔍 [DB_NO_OWNER] database=finance_db, clearing context
39+
```
40+
41+
**说明**: 配置存在,但没有匹配到 finance_db 的 owner。
42+
43+
**原因**:
44+
- FQN 匹配问题
45+
- 配置中的 database 名字不对
46+
- resolve_owner 函数返回了 None
47+
48+
---
49+
50+
### 场景 3: 正常(应该看到)
51+
52+
```
53+
🔍 [GET_DB_OWNER] database=finance_db, has_ownerConfig=True
54+
🔍 [GET_DB_OWNER] owner_ref=EntityReferenceList(...), has_root=[EntityReference(...), EntityReference(...)]
55+
🔍 [DB_CHECK] database=finance_db, owner_ref=EntityReferenceList(...), has_root=[...]
56+
🔍 [STORE_DB] database=finance_db, owner_names=['alice', 'bob'], storing=['alice', 'bob'], type=<class 'list'>
57+
```
58+
59+
**说明**: 一切正常!
60+
61+
---
62+
63+
## 🔍 请告诉我输出
64+
65+
运行后,请把所有 `🔍` 开头的输出都告诉我,特别是:
66+
67+
1. `has_ownerConfig` 是 True 还是 False?
68+
2. `owner_ref` 是什么?
69+
3. 是否看到 `STORE_DB``DB_NO_OWNER`
70+
71+
这样我们就能知道问题在哪里了!

ingestion/src/metadata/ingestion/source/database/common_db_source.py

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -220,19 +220,24 @@ def yield_database(
220220
# Store database owner in context BEFORE yielding (for multi-threading)
221221
# This ensures worker threads get the correct parent_owner when they copy context
222222
database_owner_ref = self.get_database_owner_ref(database_name)
223+
224+
# 🔍 DEBUG: Check if we got owner_ref
225+
import sys
226+
print(f"🔍 [DB_CHECK] database={database_name}, owner_ref={database_owner_ref}, has_root={database_owner_ref.root if database_owner_ref else None}", file=sys.stderr)
227+
223228
if database_owner_ref and database_owner_ref.root:
224229
# Store ALL owner names (support multiple owners for inheritance)
225230
database_owner_names = [owner.name for owner in database_owner_ref.root]
226231
# If only one owner, store as string; otherwise store as list
227232
database_owner = database_owner_names[0] if len(database_owner_names) == 1 else database_owner_names
228233

229234
# 🔍 DEBUG: Verify what we're storing
230-
import sys
231235
print(f"🔍 [STORE_DB] database={database_name}, owner_names={database_owner_names}, storing={database_owner}, type={type(database_owner)}", file=sys.stderr)
232236

233237
self.context.get().upsert("database_owner", database_owner)
234238
else:
235239
# Clear context to avoid residual owner from previous database
240+
print(f"🔍 [DB_NO_OWNER] database={database_name}, clearing context", file=sys.stderr)
236241
self.context.get().upsert("database_owner", None)
237242

238243
database_request = CreateDatabaseRequest(

ingestion/src/metadata/ingestion/source/database/database_service.py

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -596,6 +596,11 @@ def get_database_owner_ref(
596596
EntityReferenceList with owner or None
597597
"""
598598
try:
599+
# 🔍 DEBUG
600+
import sys
601+
has_config = hasattr(self.source_config, "ownerConfig") and self.source_config.ownerConfig
602+
print(f"🔍 [GET_DB_OWNER] database={database_name}, has_ownerConfig={has_config}", file=sys.stderr)
603+
599604
# Priority 1: Use ownerConfig if configured
600605
if (
601606
hasattr(self.source_config, "ownerConfig")
@@ -608,6 +613,10 @@ def get_database_owner_ref(
608613
entity_name=database_name,
609614
parent_owner=None, # Database is top level
610615
)
616+
617+
# 🔍 DEBUG
618+
print(f"🔍 [GET_DB_OWNER] owner_ref={owner_ref}, has_root={owner_ref.root if owner_ref else None}", file=sys.stderr)
619+
611620
if owner_ref:
612621
return owner_ref
613622

0 commit comments

Comments
 (0)