sorry, typo: It is a known "anti-pattern" instead of "ant-pattern"

Best regards,
Jing

On Wed, Sep 20, 2023 at 7:23 PM Jing Ge <j...@ververica.com> wrote:

> Hi Zakelly,
>
> Thanks for driving this topic. From good software engineering's
> perspective, I have different thoughts:
>
> 1. The idea to get rid of all checked Exceptions and replace them with
> unchecked Exceptions is a known ant-pattern: "Generally speaking, do not
> throw a RuntimeException or create a subclass of RuntimeException simply
> because you don't want to be bothered with specifying the exceptions your
> methods can throw." [1] Checked Exceptions mean expected exceptions that
> can help developers find a way to catch them and decide what to do. It is
> part of the public API signature that can help developers build robust
> systems. We should not mix concepts and build expected exceptions with
> unchecked Java Exception classes.
> 2. The comment Stephan left [2] clearly pointed out that we should avoid
> using generic Java Exceptions, and "find some more 'specific' exceptions
> for the signature, like throws IOException or throws StateAccessException."
> So, the idea is to define/use specific checked Exception classes instead of
> using unchecked Exceptions.
>
> Looking forward to your thoughts.
>
> Best regards,
> Jing
>
>
> [1]
> https://docs.oracle.com/javase/tutorial/essential/exceptions/runtime.html
> [2] https://github.com/apache/flink/pull/3380#issuecomment-281631160
>
> On Wed, Sep 20, 2023 at 4:52 PM Zakelly Lan <zakelly....@gmail.com> wrote:
>
>> 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