[Feature] Split the table hierarchy and materialize the store a table is served by
Los mantenedores suelen responder en 3 días
Evaluación
- Dificultad
- 5/5
- Tiempo estimado
- Más de una semana
- Aptitud para principiantes
- 20/100
Línea de trabajo
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.
Escrito por el modelo de indexación a partir del texto del issue.
Descripción
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!
- Lenguaje dominante
- C++
- Estrellas
- 70
- Forks
- 36
- Merge medio
- 3 d 16 h
- PR fusionados (30 d)
- 38
Preparar el entorno
- Sin Dockerfile ni archivo de Docker Compose
- Tiene una plantilla de pull request
- Leer la guía de contribución
Primeros pasos
- Lee el issue completo y luego la guía de contribución del proyecto.
- Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
- Haz un fork del repositorio y trabaja en una rama.
- Abre un pull request que haga referencia al número del issue.
Más de apache/paimon-cpp
-
bug
Dificultad 4/5 3-5 días Aptitud para principiantes 57/100
apache/paimon-cpp#454 ·
Los mantenedores suelen responder en 3 días
-
[Feature] Support hybrid file-index queries with full-text search, vector search, and predicateAbiertoenhancement
Dificultad 5/5 Más de una semana Aptitud para principiantes 35/100
apache/paimon-cpp#452 ·
Los mantenedores suelen responder en 3 días
-
Dificultad 5/5 Más de una semana Aptitud para principiantes 8/100
apache/paimon-cpp#435 · 2 comentarios ·
Los mantenedores suelen responder en 3 días
-
enhancement
Dificultad 5/5 Más de una semana Aptitud para principiantes 35/100
apache/paimon-cpp#410 ·
Los mantenedores suelen responder en 3 días
-
enhancement
Dificultad 5/5 Más de una semana Aptitud para principiantes 25/100
apache/paimon-cpp#409 ·
Los mantenedores suelen responder en 3 días
Todos los issues de apache/paimon-cpp
Issues similares
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 85/100
Los mantenedores suelen responder en 1 día
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 69/100
notepad-plus-plus/notepad-plus-plus#18553 ·
Los mantenedores suelen responder en 1 día
-
Windows ARM memory-leakAbiertobug docs performance
Dificultad 1/5 Menos de una hora Aptitud para principiantes 85/100
Los mantenedores suelen responder en 3 días
-
good first issue help wanted
Dificultad 2/5 1-3 horas Aptitud para principiantes 85/100
-
good first issue neural P2
Dificultad 2/5 1-3 horas Aptitud para principiantes 65/100