[Feature] Split the table hierarchy and materialize the store a table is served by
Maintainer thường phản hồi trong vòng 3 ngày
Đánh giá
- Độ khó
- 5/5
- Thời gian dự kiến
- Hơn một tuần
- Mức phù hợp với người mới
- 20/100
Hướng nghiên cứu
The issue describes changes across Table, FileStoreTable, FormatTable, SystemTable, RestCatalog::GetTable, and the table scan/read paths, but names no source files or tests. Start by locating those definitions and the existing table hierarchy, then read the open pull request #447 to understand the work already underway. Done means the hierarchy and file system behavior match the described solution and the affected tests pass.
Do mô hình lập chỉ mục viết ra từ nội dung của issue.
Mô tả
Search before asking
- I searched in the issues and found nothing similar.
Motivation
A single Table class dispatched everything: the differences between managed, format, and system tables lived in if branches inside one 1400-line table.cpp, every operator call (NewScan/NewRead/NewWrite/NewCommit) re-merged a fresh options map and re-parsed CoreOptions — the state Java Paimon's AbstractFileStore parses exactly once — and the file system a table is served by was resolved before the schema's access configuration was even known.
The ambiguity produced real defects:
RestCatalog::GetTable(Identifier("sys", "tables"))returned the read-only schema of a global system table but still passed it to the managed-table load, which statically cast it toTableSchemaand calledPrimaryKeys()on it — undefined behavior.- The operator factory path built the file system from the context options alone; a schema carrying remote backend and credentials (delivered through
SetTableSchema()) was therefore served by the default local backend, and reading its data failed. - The
$roand$audit_logviews built their underlying scans and reads from the context's file system, ignoring the one their table was opened with; a context that also carried a file-system scheme map was then refused outright (WithFileSystem()andWithFileSystemSchemeToIdentifierMap() cannot be used together). FileStoreTable::Copyhalf-applied abranchoption: it was written into the copy's schema options but never moved the copy's branch, so the consistency check reported the branch actually served as a conflict and let a mismatched one through.- An option conflict between a context and a held table was reported with both raw values in the error message, leaking credentials into logs.
- With REST data tokens enabled, the system tables a
GetTable()call returned were bound to the catalog-wide file system, so$snapshotsand friends read the data table's files without the table-level credentials and failed.
Solution
- Split the hierarchy:
Tablebecomes an abstract base (NewXxxpure virtual, a new virtualCopy(dynamic_options)), implemented byFileStoreTable— withAppendOnlyFileStoreTable/PrimaryKeyFileStoreTablesubclasses — byFormatTable(which now derives fromTableand owns its own assembly, absorbingformat_table_loader), and by theSystemTablefamily. - Introduce a
FileStore(the counterpart of Java'sAbstractFileStore) that materializesCoreOptionsonce at construction, resolves the served file system after the options are known (schema-carried access configuration names its own backend; the caller's explicit file system wins over it), carries the file-system scheme map, and hosts the operator factories (NewPathFactory,NewSnapshotManager,NewManifestList, ...).FileStoreTableholds its schema/snapshot managers and its branch;SwitchToBranchderives a table of another branch. - Give context options one clear place to speak: the load. A factory-path load (
TableScan::Create(ctx)etc.) merges the context options over the schema's throughTable::Copy()— a table is the product of its load — whileNewXxxon a held table refuses a contradicting option (option 'X' is 'A' in the context but 'B' on the table, values redacted).Copynever half-appliestypeorbranch; managers are handed over unless a file-system option among the copy's changes the resolution, in which case fresh ones are built. - Fix the surrounding defects:
RestCatalog::GetTableservessys-database global system tables locally and binds per-table system tables toGetTableFileSystem();$ro/$audit_log/$binlogprefer the context's file system and fall back to the table's only when the context names neither a file system nor a scheme map; the scan-fallback read context merges the load's dynamic options so the fallback reader recognises what the main one does.
Anything else?
- Options a schema carries that do not parse now fail at table-build time rather than at the first operator; a table opened with neither a schema-carried backend nor a caller file system is served by the default local one instead of holding a null one.
- No storage format or protocol change. Public API changes:
Tableis abstract (constructor protected,Name/FullName/NewXxx/Copyvirtual,Table::CurrentBranch()replaced byFileStoreTable::CurrentBranch()),FormatTablederives fromTable(staticFormatTable::Copy(table, options)becomes the virtualTable::Copy(options),GetLocation()becomesGetRootPath()), andFileStoreTable::SwitchToBranchis new.
Are you willing to submit a PR?
- I'm willing to submit a PR!
- Ngôn ngữ chính
- C++
- Star
- 70
- Fork
- 36
- Merge trung bình
- 3 ngày 16 giờ
- Pull request đã merge (30 ngày)
- 38
Chuẩn bị môi trường
- Không có Dockerfile hay tệp Docker Compose
- Có mẫu pull request
- Đọc hướng dẫn đóng góp
Bắt đầu từ đâu
- Đọc hết issue, rồi đọc hướng dẫn đóng góp của dự án.
- Bình luận trên issue rằng bạn sẽ nhận — tránh hai người làm cùng một việc.
- Fork repository và làm thay đổi trên một nhánh.
- Mở pull request có tham chiếu số hiệu của issue.
Issue khác của apache/paimon-cpp
-
bug
Độ khó 4/5 3-5 ngày Mức phù hợp với người mới 57/100
apache/paimon-cpp#454 ·
Maintainer thường phản hồi trong vòng 3 ngày
-
[Feature] Support hybrid file-index queries with full-text search, vector search, and predicateĐang mởenhancement
Độ khó 5/5 Hơn một tuần Mức phù hợp với người mới 35/100
apache/paimon-cpp#452 ·
Maintainer thường phản hồi trong vòng 3 ngày
-
Độ khó 5/5 Hơn một tuần Mức phù hợp với người mới 8/100
apache/paimon-cpp#435 · 2 bình luận ·
Maintainer thường phản hồi trong vòng 3 ngày
-
enhancement
Độ khó 5/5 Hơn một tuần Mức phù hợp với người mới 35/100
apache/paimon-cpp#410 ·
Maintainer thường phản hồi trong vòng 3 ngày
-
enhancement
Độ khó 5/5 Hơn một tuần Mức phù hợp với người mới 25/100
apache/paimon-cpp#409 ·
Maintainer thường phản hồi trong vòng 3 ngày
Tất cả issue của apache/paimon-cpp
Issue tương tự
-
[Bug] [Go] Ack returns nil when the server answers with a non-OK statusCó thể đã có người làm @leizhiyuan đã nhận hôm nay. Đang mở
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 84/100
apache/rocketmq-clients#1465 ·
Maintainer thường phản hồi trong vòng 2 ngày
-
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 72/100
KhronosGroup/Vulkan-Tutorial#534 ·
-
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 65/100
Maintainer thường phản hồi trong vòng 2 ngày
-
bug IO
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 65/100
MrNeRF/LichtFeld-Studio#3824 ·
Maintainer thường phản hồi trong vòng 1 ngày
-
pnnx: manual tanh GELU fusion loses the approximation modeCó thể đã có người làm @ktz03 đã nhận hôm nay. Đang mở
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 78/100
Tencent/ncnn#7175 · 1 reaction ·
Maintainer thường phản hồi trong vòng 1 ngày