sundapeng commented on code in PR #8728:
URL: https://github.com/apache/paimon/pull/8728#discussion_r3610960395
##########
paimon-core/src/main/java/org/apache/paimon/rest/RESTCatalog.java:
##########
@@ -567,8 +575,13 @@ public void createTable(Identifier identifier, Schema
schema, boolean ignoreIfEx
checkNotBranch(identifier, "createTable");
checkNotSystemTable(identifier, "createTable");
validateCreateTable(schema, dataTokenEnabled);
- createExternalTablePathIfNotExist(schema);
tableDefaultOptions.forEach(schema.options()::putIfAbsent);
Review Comment:
🟡 **[minor] [migration]** createTable 顺序交换:`table-default.path` 现在会参与
external-path 建目录与 managed-table 内外部判定
diff 把 `tableDefaultOptions.forEach(schema.options()::putIfAbsent)` 移到了
`createExternalTablePathIfNotExist` **之前**(此前在其后)。两个副作用:(1) 若 catalog 配置了
`table-default.path`,`createExternalTablePathIfNotExist` 现在会为**每个**建表请求 mkdir
这个默认路径——此前 defaults 对它不可见;(2) `validateManagedFormatTableCatalog` 的 `isExternal
= schema.options().containsKey(PATH.key())` 在 defaults 合并**之后**计算,所以在配置了
`table-default.path` 的 catalog 中创建的内部 managed format table 会被误判为 external
而被拒绝("Managed format table must be an internal table")。两者都是对存量 CREATE TABLE
流程的行为变更,仅在该 catalog 配置下显现,但共享 catalog 配置 `table-default.path` 是合理场景。
**证据**:RESTCatalog.java:578-584:defaults 在 578 合并,externality 在 583 由合并后的
options 推导,`createExternalTablePathIfNotExist` 在
584;`createExternalTablePathIfNotExist`(1373-1383 行)会 mkdir
`options.get(PATH.key())`。父提交中 `createExternalTablePathIfNotExist` 在 defaults
应用之前执行。
**建议**:用用户显式指定的 options(合并 tableDefaultOptions 之前快照 option map)计算
externality;`createExternalTablePathIfNotExist` 也保持在合并 defaults 之前的 schema
上执行,或显式排除把 `table-default.path` 当作 external 标记。
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
To unsubscribe, e-mail: [email protected]
For queries about this service, please contact Infrastructure at:
[email protected]