Hi Yanfei,

Thanks for your reply!

Yes, this FLIP aims to change all state-related exceptions to
unchecked exceptions and remove all exceptions from the signature. So
I believe we have come to an agreement to keep the interfaces simple.


Best regards,
Zakelly

On Wed, Sep 20, 2023 at 2:26 PM Zakelly Lan <zakelly....@gmail.com> wrote:
>
> Hi Hangxiang,
>
> Thank you for your response! Here are my thoughts:
>
> 1. Regarding the exceptions thrown by internal interfaces, I suggest
> keeping them as checked exceptions. Since these exceptions will be
> handled by the internal callers, it is meaningful to throw them as
> checked ones. If we need to make changes to these classes, we can
> create separate tickets alongside this FLIP. What are your thoughts on
> this?
> 2. StateIOException is primarily thrown by file-based state like
> RocksDB, while StateAccessException is more generic and can be thrown
> by heap states. Additionally, I believe there may be more subclasses
> of StateAccessException that we can add. We can consider this when
> implementing.
> 3. I would like to make this change in version 1.19. As mentioned in
> this FLIP, many users do not catch any exceptions since the element
> processing function exposes the exception to the upper layer.
> Therefore, the impact is manageable. And I completely agree that we
> should clearly document this change in the next release notes.
>
>
> Best regards,
> Zakelly
>
> On Wed, Sep 20, 2023 at 12:35 PM Yanfei Lei <fredia...@gmail.com> wrote:
> >
> > Hi Zakelly,
> >
> > Thanks for bringing this up. +1 for reorganizing.
> >
> > IIUC, this proposal aims to change all state-related exceptions to
> > unchecked exceptions. If users have caught checked exceptions (such as
> > IOException ) in their code, leaving the code as is would also work.
> >
> > Is it possible not to put any exceptions in the signature of
> > user-facing interfaces? As the proposal mentioned, users can do a few
> > things even if they catch the exceptions. Keeping the interface simple
> > may be easier to understand.
> >
> >
> > Best,
> > Yanfei
> >
> > Hangxiang Yu <master...@gmail.com> 于2023年9月19日周二 18:16写道:
> > >
> > > Hi, Zakelly.
> > >
> > > Thanks for the proposal.
> > >
> > > +1 for reorganizing exceptions of state interfaces which indeed confuses 
> > > me
> > > currently.
> > >
> > > From my experience, users usually omit these exceptions because they 
> > > cannot
> > > do much even if they catch the exceptions.
> > >
> > > I have some problems and suggestions, PTAL:
> > >
> > >    1. Could we also reorganize or add more state exceptions (may be 
> > > related
> > >    to other state interfaces/classes e.g. KeyedStateBackend) into the
> > >    exception class diagrams ? Although these state-related classes may not
> > >    be public, it could be better to consider them together to make all
> > >    state-related exceptions clear. For example, we could reorganize some
> > >    existing exceptions such as StateMigrationException, add some 
> > > exceptions
> > >    such as StateNotFoundException.
> > >    2. Could you clarify or give an example about the extended relation
> > >    "StateAccessException -- StateIOException" ? When do we just return
> > >    StateAccessException instead of StateIOException or others ?
> > >    3. Which version do you want to implement it in ? Since it has to break
> > >    changes for users who have catched the IOException, If we want to 
> > > implement
> > >    it in 1.19, we must mark it very clearly in the release note, or we 
> > > should
> > >    make it in 2.0.
> > >
> > >
> > > On Tue, Sep 19, 2023 at 5:08 PM Zakelly Lan <zakelly....@gmail.com> wrote:
> > >
> > > > Hi everyone,
> > > >
> > > > I would like to initiate a discussion on FLIP-368, which focuses on
> > > > reorganizing the exceptions thrown in state interfaces [1].
> > > >
> > > > Currently, we have identified several problems with the exceptions
> > > > thrown by state-related interfaces:
> > > >   1. The exception types thrown by each interface are inconsistent.
> > > > While most of the interfaces claim to throw `Exception`, the
> > > > interfaces of `ValueState` throw `IOException`. Additionally, the
> > > > `State#clear()` never throws an exception. This can be confusing for
> > > > users.
> > > >   2. The use of `Exception` or `IOException` as the thrown exception
> > > > type is too generic and lacks specificity.
> > > >   3. Users may not be able to handle these exceptions. In cases where
> > > > an exception occurs while accessing state, the job should fail. This
> > > > aligns more with the characteristic of *unchecked exceptions* instead
> > > > of checked exceptions.
> > > >
> > > > To address these issues, we borrow the idea of throwing unchecked
> > > > exceptions in Java Collection API and propose the following changes in
> > > > state-related exceptions:
> > > >   1. Introduction of specific unchecked exception types for different
> > > > reasons, providing users with more precise information about the cause
> > > > of the exception.
> > > >   2. Removal of all checked exceptions from interface signatures and
> > > > instead, throwing newly introduced unchecked exceptions in the
> > > > implementations.
> > > >
> > > > Please share your thoughts and suggestions regarding the proposed
> > > > changes. Thank you for your attention and support.
> > > >
> > > >
> > > > Best,
> > > > Zakelly
> > > >
> > > > [1] FLIP-368: Reorganize the exceptions thrown in state interfaces,
> > > > https://cwiki.apache.org/confluence/x/eZ2zDw
> > > >
> > >
> > >
> > > --
> > > Best,
> > > Hangxiang.

Reply via email to