Hi, Guojun,

I’d like to share my thoughts about your questions.

1. Expiration of savepoint
In my opinion, savepoints are created in a long interval, so there will not 
exist too many of them.
If users create a savepoint per day, there are 365 savepoints a year. So I 
didn’t consider expiration 
of it, and I think provide a flink action like `delete-savepoint id = 1` is 
enough now. 
But if it is really important, we can introduce table options to do so. I think 
we can do it like expiring 
snapshots.

2. >   id of compacted snapshot picked by the savepoint
My initial idea is picking a compacted snapshot or doing compaction before 
creating savepoint. But 
After discuss with Jingsong, I found it’s difficult. So now I suppose to 
directly create savepoint from 
the given snapshot. Maybe we can optimize it later.
The changes will be updated soon.
> manifest file list in system-table
I think manifest file is not very important for users. Users can find when a 
savepoint is created, and 
get the savepoint id, then they can query it from the savepoint by the id. I 
did’t see what scenario 
the users need the manifest file information. What do you think?

Best, 
Yu Zelin

> 2023年5月24日 10:50,Guojun Li <[email protected]> 写道:
> 
> Thanks zelin for bringing up the discussion. I'm thinking about:
> 1. How to manage the savepoints if there are no expiration mechanism, by
> the TTL management of storages or external script?
> 2. I think the id of compacted snapshot picked by the savepoint and
> manifest file list is also important information for users, could these
> information be stored in the system-table?
> 
> Best,
> Guojun
> 
> On Mon, May 22, 2023 at 9:13 PM Jingsong Li <[email protected]> wrote:
> 
>> FYI
>> 
>> The PIP lacks a table to show Discussion thread & Vote thread & ISSUE...
>> 
>> Best
>> Jingsong
>> 
>> On Mon, May 22, 2023 at 4:48 PM yu zelin <[email protected]> wrote:
>>> 
>>> Hi, all,
>>> 
>>> Thank all of you for your suggestions and questions. After reading your
>> suggestions, I adopt some of them and I want to share my opinions here.
>>> 
>>> To make my statements more clear, I will still use the word `savepoint`.
>> When we make a consensus, the name may be changed.
>>> 
>>> 1. The purposes of savepoint
>>> 
>>> As Shammon mentioned, Flink and database also have the concept of
>> `savepoint`. So it’s better to clarify the purposes of our savepoint.
>> Thanks for Nicholas and Jingsong, I think your explanations are very clear.
>> I’d like to give my summary:
>>> 
>>> (1) Fault recovery (or we can say disaster recovery). Users can ROLL
>> BACK to a savepoint if needed. If user rollbacks to a savepoint, the table
>> will hold the data in the savepoint and the data committed  after the
>> savepoint will be deleted. In this scenario we need savepoint because
>> snapshots may have expired, the savepoint can keep longer and save user’s
>> old data.
>>> 
>>> (2) Record versions of data at a longer interval (typically daily level
>> or weekly level). With savepoint, user can query the old data in batch
>> mode. Comparing to copy records to a new table or merge incremental records
>> with old records (like using merge into in Hive), the savepoint is more
>> lightweight because we don’t copy data files, we just record the meta data
>> of them.
>>> 
>>> As you can see, savepoint is very similar to snapshot. The differences
>> are:
>>> 
>>> (1) Savepoint lives longer. In most cases, snapshot’s life time is
>> about several minutes to hours. We suppose the savepoint can live several
>> days, weeks, or even months.
>>> 
>>> (2) Savepoint is mainly used for batch reading for historical data. In
>> this PIP, we don’t introduce streaming reading for savepoint.
>>> 
>>> 2. Candidates of name
>>> 
>>> I agree with Jingsong that we can use a new name. Since the purpose and
>> mechanism (savepoint is very similar to snapshot) of savepoint is similar
>> to `tag` in iceberg, maybe we can use `tag`.
>>> 
>>> In my opinion, an alternative is `anchor`. All the snapshots are like
>> the navigation path of the streaming data, and an `anchor` can stop it in a
>> place.
>>> 
>>> 3. Public table operations and options
>>> 
>>> We supposed to expose some operations and table options for user to
>> manage the savepoint.
>>> 
>>> (1) Operations (Currently for Flink)
>>> We provide flink actions to manage savepoints:
>>>    create-savepoint: To generate a savepoint from latest snapshot.
>> Support to create from specified snapshot.
>>>    delete-savepoint: To delete specified savepoint.
>>>    rollback-to: To roll back to a specified savepoint.
>>> 
>>> (2) Table options
>>> We suppose to provide options for creating savepoint periodically:
>>>    savepoint.create-time: When to create the savepoint. Example: 00:00
>>>    savepoint.create-interval: Interval between the creation of two
>> savepoints. Examples: 2 d.
>>>    savepoint.time-retained: The maximum time of savepoints to retain.
>>> 
>>> (3) Procedures (future work)
>>> Spark supports SQL extension. After we support Spark CALL statement, we
>> can provide procedures to create, delete or rollback to savepoint for Spark
>> users.
>>> 
>>> Support of CALL is on the road map of Flink. In future version, we can
>> also support savepoint-related procedures for Flink users.
>>> 
>>> 4. Expiration of data files
>>> 
>>> Currently, when a snapshot is expired, data files that not be used by
>> other snapshots. After we introduce the savepoint, we must make sure the
>> data files saved by savepoint will not be deleted.
>>> 
>>> Conversely,  when a savepoint is deleted, the data files that not be
>> used by existing snapshots and other savepoints will be deleted.
>>> 
>>> I have wrote some POC codes to implement it. I will update the mechanism
>> in PIP soon.
>>> 
>>> Best,
>>> Yu Zelin
>>> 
>>>> 2023年5月21日 20:54,Jingsong Li <[email protected]> 写道:
>>>> 
>>>> Thanks Yun for your information.
>>>> 
>>>> We need to be careful to avoid confusion between Paimon and Flink
>>>> concepts about "savepoint"
>>>> 
>>>> Maybe we don't have to insist on using this "savepoint", for example,
>>>> TAG is also a candidate just like Iceberg [1]
>>>> 
>>>> [1] https://iceberg.apache.org/docs/latest/branching/
>>>> 
>>>> Best,
>>>> Jingsong
>>>> 
>>>> On Sun, May 21, 2023 at 8:51 PM Jingsong Li <[email protected]>
>> wrote:
>>>>> 
>>>>> Thanks Nicholas for your detailed requirements.
>>>>> 
>>>>> We need to supplement user requirements in FLIP, which is mainly aimed
>>>>> at two purposes:
>>>>> 1. Fault recovery for data errors (named: restore or rollback-to)
>>>>> 2. Used to record versions at the day level (such as), targeting
>> batch queries
>>>>> 
>>>>> Best,
>>>>> Jingsong
>>>>> 
>>>>> On Sat, May 20, 2023 at 2:55 PM Yun Tang <[email protected]> wrote:
>>>>>> 
>>>>>> Hi Guys,
>>>>>> 
>>>>>> Since we use Paimon with Flink in most cases, I think we need to
>> identify the same word "savepoint" in different systems.
>>>>>> 
>>>>>> For Flink, savepoint means:
>>>>>> 
>>>>>> 1.  Triggered by users, not periodically triggered by the system
>> itself. However, this FLIP wants to support it created periodically.
>>>>>> 2.  Even the so-called incremental native savepoint [1], it will
>> not depend on the previous checkpoints or savepoints, it will still copy
>> files on DFS to the self-contained savepoint folder. However, from the
>> description of this FLIP about the deletion of expired snapshot files,
>> paimion savepoint will refer to the previously existing files directly.
>>>>>> 
>>>>>> I don't think we need to make the semantics of Paimon totally the
>> same as Flink's. However, we need to introduce a table to tell the
>> difference compared with Flink and discuss about the difference.
>>>>>> 
>>>>>> [1]
>> https://cwiki.apache.org/confluence/display/FLINK/FLIP-203%3A+Incremental+savepoints#FLIP203:Incrementalsavepoints-Semantic
>>>>>> 
>>>>>> Best
>>>>>> Yun Tang
>>>>>> ________________________________
>>>>>> From: Nicholas Jiang <[email protected]>
>>>>>> Sent: Friday, May 19, 2023 17:40
>>>>>> To: [email protected] <[email protected]>
>>>>>> Subject: Re: [DISCUSS] PIP-4 Support savepoint
>>>>>> 
>>>>>> Hi Guys,
>>>>>> 
>>>>>> Thanks Zelin for driving the savepoint proposal. I propose some
>> opinions for savepont:
>>>>>> 
>>>>>> -- About "introduce savepoint for Paimon to persist full data in a
>> time point"
>>>>>> 
>>>>>> The motivation of savepoint proposal is more like snapshot TTL
>> management. Actually, disaster recovery is very much mission critical for
>> any software. Especially when it comes to data systems, the impact could be
>> very serious leading to delay in business decisions or even wrong business
>> decisions at times. Savepoint is proposed to assist users in recovering
>> data from a previous state: "savepoint" and "restore".
>>>>>> 
>>>>>> "savepoint" saves the Paimon table as of the commit time, therefore
>> if there is a savepoint, the data generated in the corresponding commit
>> could not be clean. Meanwhile, savepoint could let user restore the table
>> to this savepoint at a later point in time if need be. On similar lines,
>> savepoint cannot be triggered on a commit that is already cleaned up.
>> Savepoint is synonymous to taking a backup, just that we don't make a new
>> copy of the table, but just save the state of the table elegantly so that
>> we can restore it later when in need.
>>>>>> 
>>>>>> "restore" lets you restore your table to one of the savepoint
>> commit. Meanwhile, it cannot be undone (or reversed) and so care should be
>> taken before doing a restore. At this time, Paimon would delete all data
>> files and commit files (timeline files) greater than the savepoint commit
>> to which the table is being restored.
>>>>>> 
>>>>>> BTW, it's better to introduce snapshot view based on savepoint,
>> which could improve query performance of historical data for Paimon table.
>>>>>> 
>>>>>> -- About Public API of savepont
>>>>>> 
>>>>>> Current introduced savepoint interfaces in Public API are not enough
>> for users, for example, deleteSavepoint, restoreSavepoint etc.
>>>>>> 
>>>>>> -- About "Paimon's savepoint need to be combined with Flink's
>> savepoint":
>>>>>> 
>>>>>> If paimon supports savepoint mechanism and provides savepoint
>> interfaces, the integration with Flink's savepoint is not blocked for this
>> proposal.
>>>>>> 
>>>>>> In summary, savepoint is not only used to improve the query
>> performance of historical data, but also used for disaster recovery
>> processing.
>>>>>> 
>>>>>> On 2023/05/17 09:53:11 Jingsong Li wrote:
>>>>>>> What Shammon mentioned is interesting. I agree with what he said
>> about
>>>>>>> the differences in savepoints between databases and stream
>> computing.
>>>>>>> 
>>>>>>> About "Paimon's savepoint need to be combined with Flink's
>> savepoint":
>>>>>>> 
>>>>>>> I think it is possible, but we may need to deal with this in another
>>>>>>> mechanism, because the snapshots after savepoint may expire. We need
>>>>>>> to compare data between two savepoints to generate incremental data
>>>>>>> for streaming read.
>>>>>>> 
>>>>>>> But this may not need to block FLIP, it looks like the current
>> design
>>>>>>> does not break the future combination?
>>>>>>> 
>>>>>>> Best,
>>>>>>> Jingsong
>>>>>>> 
>>>>>>> On Wed, May 17, 2023 at 5:33 PM Shammon FY <[email protected]>
>> wrote:
>>>>>>>> 
>>>>>>>> Hi Caizhi,
>>>>>>>> 
>>>>>>>> Thanks for your comments. As you mentioned, I think we may need to
>> discuss
>>>>>>>> the role of savepoint in Paimon.
>>>>>>>> 
>>>>>>>> If I understand correctly, the main feature of savepoint in the
>> current PIP
>>>>>>>> is that the savepoint will not be expired, and users can perform a
>> query on
>>>>>>>> the savepoint according to time-travel. Besides that, there is
>> savepoint in
>>>>>>>> the database and Flink.
>>>>>>>> 
>>>>>>>> 1. Savepoint in database. The database can roll back table data to
>> the
>>>>>>>> specified 'version' based on savepoint. So the key point of
>> savepoint in
>>>>>>>> the database is to rollback data.
>>>>>>>> 
>>>>>>>> 2. Savepoint in Flink. Users can trigger a savepoint with a
>> specific
>>>>>>>> 'path', and save all data of state to the savepoint for job. Then
>> users can
>>>>>>>> create a new job based on the savepoint to continue consuming
>> incremental
>>>>>>>> data. I think the core capabilities are: backup for a job, and
>> resume a job
>>>>>>>> based on the savepoint.
>>>>>>>> 
>>>>>>>> In addition to the above, Paimon may also face data write
>> corruption and
>>>>>>>> need to recover data based on the specified savepoint. So we may
>> need to
>>>>>>>> consider what abilities should Paimon savepoint need besides the
>> ones
>>>>>>>> mentioned in the current PIP?
>>>>>>>> 
>>>>>>>> Additionally, as mentioned above, Flink also has
>>>>>>>> savepoint mechanism. During the process of streaming data from
>> Flink to
>>>>>>>> Paimon, does Paimon's savepoint need to be combined with Flink's
>> savepoint?
>>>>>>>> 
>>>>>>>> 
>>>>>>>> Best,
>>>>>>>> Shammon FY
>>>>>>>> 
>>>>>>>> 
>>>>>>>> On Wed, May 17, 2023 at 4:02 PM Caizhi Weng <[email protected]>
>> wrote:
>>>>>>>> 
>>>>>>>>> Hi developers!
>>>>>>>>> 
>>>>>>>>> Thanks Zelin for bringing up the discussion. The proposal seems
>> good to me
>>>>>>>>> overall. However I'd also like to bring up a few options.
>>>>>>>>> 
>>>>>>>>> 1. As Jingsong mentioned, Savepoint class should not become a
>> public API,
>>>>>>>>> at least for now. What we need to discuss for the public API is
>> how the
>>>>>>>>> users can create or delete savepoints. For example, what the
>> table option
>>>>>>>>> looks like, what commands and options are provided for the Flink
>> action,
>>>>>>>>> etc.
>>>>>>>>> 
>>>>>>>>> 2. Currently most Flink actions are related to streaming
>> processing, so
>>>>>>>>> only Flink can support them. However, savepoint creation and
>> deletion seems
>>>>>>>>> like a feature for batch processing. So aside from Flink actions,
>> shall we
>>>>>>>>> also provide something like Spark actions for savepoints?
>>>>>>>>> 
>>>>>>>>> I would also like to comment on Shammon's views.
>>>>>>>>> 
>>>>>>>>> Should we introduce an option for savepoint path which may be
>> different
>>>>>>>>>> from 'warehouse'? Then users can backup the data of savepoint.
>>>>>>>>>> 
>>>>>>>>> 
>>>>>>>>> I don't see this is necessary. To backup a table the user just
>> need to copy
>>>>>>>>> all files from the table directory. Savepoint in Paimon, as far
>> as I
>>>>>>>>> understand, is mainly for users to review historical data, not
>> for backing
>>>>>>>>> up tables.
>>>>>>>>> 
>>>>>>>>> Will the savepoint copy data files from snapshot or only save
>> meta files?
>>>>>>>>>> 
>>>>>>>>> 
>>>>>>>>> It would be a heavy burden if a savepoint copies all its files.
>> As I
>>>>>>>>> mentioned above, savepoint is not for backing up tables.
>>>>>>>>> 
>>>>>>>>> How can users create a new table and restore data from the
>> specified
>>>>>>>>>> savepoint?
>>>>>>>>> 
>>>>>>>>> 
>>>>>>>>> This reminds me of savepoints in Flink. Still, savepoint is not
>> for backing
>>>>>>>>> up tables so I guess we don't need to support "restoring data"
>> from a
>>>>>>>>> savepoint.
>>>>>>>>> 
>>>>>>>>> Shammon FY <[email protected]> 于2023年5月17日周三 10:32写道:
>>>>>>>>> 
>>>>>>>>>> Thanks Zelin for initiating this discussion. I have some
>> comments:
>>>>>>>>>> 
>>>>>>>>>> 1. Should we introduce an option for savepoint path which may be
>>>>>>>>> different
>>>>>>>>>> from 'warehouse'? Then users can backup the data of savepoint.
>>>>>>>>>> 
>>>>>>>>>> 2. Will the savepoint copy data files from snapshot or only save
>> meta
>>>>>>>>>> files? The description in the PIP "After we introduce savepoint,
>> we
>>>>>>>>> should
>>>>>>>>>> also check if the data files are used by savepoints." looks like
>> we only
>>>>>>>>>> save meta files for savepoint.
>>>>>>>>>> 
>>>>>>>>>> 3. How can users create a new table and restore data from the
>> specified
>>>>>>>>>> savepoint?
>>>>>>>>>> 
>>>>>>>>>> Best,
>>>>>>>>>> Shammon FY
>>>>>>>>>> 
>>>>>>>>>> 
>>>>>>>>>> On Wed, May 17, 2023 at 10:19 AM Jingsong Li <
>> [email protected]>
>>>>>>>>>> wrote:
>>>>>>>>>> 
>>>>>>>>>>> Thanks Zelin for driving.
>>>>>>>>>>> 
>>>>>>>>>>> Some comments:
>>>>>>>>>>> 
>>>>>>>>>>> 1. I think it's possible to advance `Proposed Changes` to the
>> top,
>>>>>>>>>>> Public API has no meaning if I don't know how to do it.
>>>>>>>>>>> 
>>>>>>>>>>> 2. Public API, Savepoint and SavepointManager are not Public
>> API, only
>>>>>>>>>>> Flink action or configuration option should be public API.
>>>>>>>>>>> 
>>>>>>>>>>> 3.Maybe we can have a separate chapter to describe
>>>>>>>>>>> `savepoint.create-interval`, maybe 'Periodically savepoint'? It
>> is not
>>>>>>>>>>> just an interval, because the true user case is savepoint after
>> 0:00.
>>>>>>>>>>> 
>>>>>>>>>>> 4.About 'Interaction with Snapshot', to be continued ...
>>>>>>>>>>> 
>>>>>>>>>>> Best,
>>>>>>>>>>> Jingsong
>>>>>>>>>>> 
>>>>>>>>>>> On Tue, May 16, 2023 at 7:07 PM yu zelin <[email protected]
>>> 
>>>>>>>>> wrote:
>>>>>>>>>>>> 
>>>>>>>>>>>> Hi, Paimon Devs,
>>>>>>>>>>>>    I’d like to start a discussion about PIP-4[1]. In this
>> PIP, I
>>>>>>>>> want
>>>>>>>>>>> to talk about why we need savepoint, and some thoughts about
>> managing
>>>>>>>>> and
>>>>>>>>>>> using savepoint. Look forward to your question and suggestions.
>>>>>>>>>>>> 
>>>>>>>>>>>> Best,
>>>>>>>>>>>> Yu Zelin
>>>>>>>>>>>> 
>>>>>>>>>>>> [1] https://cwiki.apache.org/confluence/x/NxE0Dw
>>>>>>>>>>> 
>>>>>>>>>> 
>>>>>>>>> 
>>>>>>> 
>>> 
>> 

Reply via email to