Hi yuxia,

Thanks for the detailed proposal. I have a few additional questions, mainly
around production migration and data correctness.

1. Write availability during migration

The current proposal requires users to stop native Paimon writers before
invoking the procedure, while new writes through Fluss can only start after
the Bulk Load, snapshot registration, validation, and datalake enablement
have all completed.

For a large primary-key table, the Bulk Load may take a long time, so the
business write outage could potentially last for hours. Since the final
validation compares the table-level Paimon snapshot ID, it also seems that
writes to partitions outside the selected Bulk Load scope would advance the
snapshot and cause validation to fail.

Is an offline, maintenance-window-style migration an intentional limitation
of this FIP?

For production migration, would it be possible to separate the long-running
baseline load from the final write ownership cutover? One possible flow
would be:

1. capture a baseline Paimon snapshot;
2. Bulk Load that snapshot while Paimon writers continue running;
3. catch up changes committed after the baseline;
4. stop or fence the Paimon writers briefly;
5. apply the remaining changes, verify consistency, and enable Fluss;
6. switch application writes to Fluss.

This would require defining the incremental replay, ordering,
deduplication, fencing, rollback, and exact handoff boundary. If online
migration is outside the scope of FIP-25, I think it would still be useful
to document the expected write outage and the recommended recovery
procedure when a long-running migration fails.

2. Enforcement for partially initialized regular partitions

For a regular partitioned primary-key table, the proposal allows users to
Bulk Load only selected partitions. It states that unloaded partitions do
not support Fluss lookups or writes and that users must ensure no writes
are issued to them.

How is the set of successfully initialized partitions persisted and exposed
after the procedure completes? Should Fluss reject lookup and write
requests to an unloaded partition, instead of relying only on an
operational requirement?

Without such enforcement, an accidental write to an unloaded partition may
treat the historical KV state as empty and produce incorrect upsert,
delete, or changelog behavior. It would also be helpful to clarify whether
and how the remaining partitions can be initialized later.

3. Handling of unknown Paimon properties

The compatibility section explains that properties unknown to the Paimon
version bundled with Fluss are allowed, because they may be application
metadata. It also acknowledges that such a property may actually control
behavior introduced by a newer Paimon version, in which case promotion
could succeed even though the resulting Fluss semantics are different.

For a correctness-sensitive operation such as in-place promotion, is
silently allowing these properties the right default?

Would it be safer to report all unknown properties and require an explicit
acknowledgement or allowlist before proceeding? A strict mode that rejects
unknown properties by default could also make the compatibility guarantee
easier for users to understand.

Best regards,
Zhe Wang


Liting Liu (litiliu) via dev <[email protected]> 于2026年9月9日周三 16:52写道:

> Hi Yuxia and Fluss community,
>
> Thanks for sharing FIP-25. It is a very interesting proposal. While
> reading it and comparing it with the current `apache/main` branch, I had a
> few questions that may be worth clarifying.
>
> First, the proposal says that `CALL sys.enable_fluss_on_lake_table(...)`
> waits for the `load_lake_data_to_fluss` Bulk Load job, snapshot
> registration, and datalake enablement to complete before returning.
>
> For a large Paimon table, this operation could take a considerable amount
> of time. Depending on the SQL Gateway, client, or HTTP/proxy configuration,
> the caller might time out while the underlying operation is still running.
> In that situation, it may be difficult for the caller to determine the
> final outcome.
>
> Would it make sense for the procedure to return a promotion operation ID
> and provide a separate way to query its status? Alternatively, it would be
> helpful to document how timeout and cancellation are expected to work.
>
> Second, I was wondering about failure recovery and retry behavior.
>
> If Fluss table creation succeeds but the Bulk Load job fails, the proposal
> says that the table remains present with datalake disabled. On a subsequent
> call, however, the existing table may cause the procedure to skip table
> creation and Bulk Load. It would be useful to clarify how the procedure can
> distinguish a successfully initialized table from one whose Bulk Load
> failed or is still incomplete.
>
> Could the design consider persisting some information such as the
> following to make retry and recovery easier to understand?
>
> - promotion operation ID;
> - source Paimon snapshot ID;
> - selected partitions;
> - Bulk Load transaction ID.
>
> It may also be helpful to describe the expected retry, abort, timeout, and
> cancellation semantics, and to make sure that a retry cannot enable
> datalake before the Bulk Load result has been successfully verified.
>
> Best regards,
>
> Liting Liu
>
> From: yuxia <[email protected]>
> Date: Tuesday, September 8, 2026 at 15:23
> To: dev <[email protected]>
> Subject: [DISCUSS] FIP-25: Support In-Place Promotion of Existing Paimon
> Tables to Datalake-Enabled Fluss Tables
>
> Hi Fluss community,
>
> I'd like to start a discussion on FIP-25: Support In-Place Promotion of
> Existing Paimon Tables to Datalake-Enabled Fluss Tables[1].
>
> This FIP proposes promoting an existing Paimon table to a datalake-enabled
> Fluss table in place through:
>
> CALL sys.enable_fluss_on_lake_table(...);
>
> "In-place" means reusing the existing Paimon table and historical data
> without creating a replacement table or rewriting the data to Paimon. Fluss
> creates the corresponding metadata, initializes historical primary-key
> state through Bulk Load when necessary, and validates schema and snapshot
> consistency before enabling datalake.
>
> Feedback and suggestions are welcome.
>
> [1]:
> https://cwiki.apache.org/confluence/spaces/FLUSS/pages/406623572/FIP-25+Support+In-Place+Promotion+of+Existing+Paimon+Tables+to+Datalake-Enabled+Fluss+Tables
>
> Best regards,
> Yuxia
>

Reply via email to