Thanks Bill, John and Matthias. Glad you guys joined this discussion.
I got a lot out of the discussion.

I would like to update KIP-216 base on John's suggestion to remove the
category.


---
Vito


On Fri, Jan 17, 2020 at 2:30 AM Matthias J. Sax <matth...@confluent.io>
wrote:

> > Nevertheless, if we omit the categorization, it’s moot.
>
> Ack.
>
> I am fine to remove the middle tier. As John pointed out, it might be
> weird to have only one concrete exception type per category. We can also
> explain in detail how to handle each exception in their JavaDocs.
>
>
> -Matthias
>
> On 1/16/20 6:38 AM, Bill Bejeck wrote:
> > Vito,
> >
> > Thanks for the updates, the KIP LGTM.
> >
> > -Bill
> >
> > On Wed, Jan 15, 2020 at 11:31 PM John Roesler <vvcep...@apache.org>
> wrote:
> >
> >> Hi Vito,
> >>
> >> Haha, your archive game is on point!
> >>
> >> What Matthias said in that email is essentially what I figured was the
> >> rationale. It makes sense, but the point I was making is that this
> really
> >> doesn’t seem like a good way to structure a production app. On the other
> >> hand, considering the exception fatal has a good chance of avoiding a
> >> frustrating debug session if you just forgot to call start.
> >>
> >> Nevertheless, if we omit the categorization, it’s moot.
> >>
> >> It would be easy to add a categorization layer later if we want it, but
> >> not very easy to change it if we get it wrong.
> >>
> >> Thanks for your consideration!
> >> -John
> >>
> >> On Wed, Jan 15, 2020, at 21:14, Vito Jeng wrote:
> >>> Hi John,
> >>>
> >>> About `StreamsNotStartedException is strange` --
> >>> The original idea came from Matthias, two years ago. :)
> >>> You can reference here:
> >>>
> >>
> https://mail-archives.apache.org/mod_mbox/kafka-dev/201806.mbox/%3c6c32083e-b63c-435b-521d-032d45cc5...@confluent.io%3e
> >>>
> >>> About omitting the categorization --
> >>> It looks reasonable. I'm fine with omitting the categorization but not
> >> very
> >>> sure it is a good choice.
> >>> Does any other folks provide opinion?
> >>>
> >>>
> >>> Hi, folks,
> >>>
> >>> Just update the KIP-216, please take a look.
> >>>
> >>> ---
> >>> Vito
> >>>
> >>>
> >>> On Thu, Jan 16, 2020 at 6:35 AM Vito Jeng <v...@is-land.com.tw> wrote:
> >>>
> >>>>
> >>>> Hi, folks,
> >>>>
> >>>> Thank you suggestion, really appreciate it. :)
> >>>> I understand your concern. I'll merge StreamsNotRunningException and
> >>>> StateStoreNotAvailableException.
> >>>>
> >>>>
> >>>> ---
> >>>> Vito
> >>>>
> >>>>
> >>>> On Thu, Jan 16, 2020 at 6:22 AM John Roesler <vvcep...@apache.org>
> >> wrote:
> >>>>
> >>>>> Hey Vito,
> >>>>>
> >>>>> Yes, thanks for the KIP. Sorry the discussion has been so long.
> >>>>> Hopefully, we can close it out soon.
> >>>>>
> >>>>> I agree we can drop StreamsNotRunningException in favor of
> >>>>> just StateStoreNotAvailableException.
> >>>>>
> >>>>> Unfortunately, I have some higher-level concerns. The value
> >>>>> of these exceptions is that they tell you how to handle the
> >>>>> various situations that can arise while querying a distributed
> >>>>> data store.
> >>>>>
> >>>>> Ideally, as a caller, I should be able to just catch "retriable" or
> >>>>> "fatal" and handle them appropriately. Otherwise, there's no
> >>>>> point in having categories, and we should just have all the
> >>>>> exceptions extend InvalidStateStoreException.
> >>>>>
> >>>>> Presently, it's not possible to tell from just the
> >>>>> "retriable"/"fatal" distinction what to do. You  can tell
> >>>>> from the descriptions of the various exceptions. E.g.:
> >>>>>
> >>>>> Retriable:
> >>>>>  * StreamsRebalancingException: the exact same call
> >>>>>     should just be retried until the rebalance is complete
> >>>>>  * StateStoreMigratedException: the store handle is
> >>>>>     now invalid, so you need to re-discover the instance
> >>>>>     and get a new handle on that instance. In other words,
> >>>>>     the query itself may be valid, but the particular method
> >>>>>     invocation on this particular instance has encountered
> >>>>>     a fatal exception.
> >>>>>
> >>>>> Fatal:
> >>>>>  * UnknownStateStoreException: this is truly fatal. No amount
> >>>>>     of retrying or re-discovering is going to get you a handle on a
> >>>>>     store that doesn't exist in the cluster.
> >>>>>  * StateStoreNotAvailableException: this is actually recoverable,
> >>>>>     since the store might exist in the cluster, but isn't available
> on
> >>>>>     this particular instance (which is shut down or whatever).
> >>>>>
> >>>>> Personally, I'm not a fan of code bureaucracy, so I'm 100% fine
> >>>>> with omitting the categorization and just having 5 subclasses
> >>>>> of InvalidStateStoreException. Each of them would tell you
> >>>>> how to handle them, and it's not too many to really
> >>>>> understand and handle each one.
> >>>>>
> >>>>> If you really want to have a middle tier, I'd recommend:
> >>>>> * RetryableStateStoreException: the exact same call
> >>>>>     should be repeated.
> >>>>> * RecoverableStateStoreException: the store handle
> >>>>>     should be discarded and the caller should re-discover
> >>>>>     the location of the store and repeat the query on the
> >>>>>     correct instance.
> >>>>> * FatalStateStoreException: the query/request is totally
> >>>>>     invalid and will never succeed.
> >>>>>
> >>>>> However, attempting to categorize the proposed exceptions
> >>>>> reveals even problems with this categorization:
> >>>>> Retriable:
> >>>>> * StreamsRebalancingException
> >>>>> Recoverable:
> >>>>> * StateStoreMigratedException
> >>>>> * StreamsNotRunningException
> >>>>> Fatal:
> >>>>> * UnknownStateStoreException
> >>>>>
> >>>>> But StreamsNotStartedException is strange... It means that
> >>>>> one code path got a handle on a specific KafkaStreams object
> >>>>> instance and sent it a query before another code path
> >>>>> invoked the start() method on the exact same object instance.
> >>>>> It seems like the most likely scenario is that whoever wrote
> >>>>> the program just forgot to call start() before querying, in
> >>>>> which case, retrying isn't going to help, and a fatal exception
> >>>>> is more appropriate. I.e., it sounds like a "first 15 minutes
> >>>>> experience" problem, and making it fatal would be more
> >>>>> helpful. Even in a production context, there's no reason not
> >>>>> to sequence your application startup such that you don't
> >>>>> accept queries until after Streams is started. Thus, I guess
> >>>>> I'd categorize it under "fatal".
> >>>>>
> >>>>> Regardless of whether you make it fatal or retriable, you'd
> >>>>> still have a whole category with only one exception in it,
> >>>>> and the other two categories only have two exceptions.
> >>>>> Plus, as you pointed out in the KIP, you can't get all
> >>>>> exceptions in all cases anyway:
> >>>>> * store() can only throw NotStarted, NotRunning,
> >>>>>     and Unknown
> >>>>> * actual store queries can only throw Rebalancing,
> >>>>>     Migrated, and NotRunning
> >>>>>
> >>>>> Thus, in practice also, there are exactly three categories
> >>>>> and also exactly three exception types. It doesn't seem
> >>>>> like there's a great advantage to the categories here. To
> >>>>> avoid the categorization problem and also to clarify what
> >>>>> exceptions can actually be thrown in different circumstances,
> >>>>> it seems like we should just:
> >>>>> * get rid of the middle tier and make all the exceptions
> >>>>>     extend InvalidStateStoreException
> >>>>> * drop StateStoreNotAvailableException in favor of
> >>>>>     StreamsNotRunningException
> >>>>> * clearly document on all public methods which exceptions
> >>>>>     need to be handled
> >>>>>
> >>>>> How do you feel about this?
> >>>>> Thanks,
> >>>>> -John
> >>>>>
> >>>>> On Wed, Jan 15, 2020, at 15:13, Bill Bejeck wrote:
> >>>>>> Thanks for KIP Vito.
> >>>>>>
> >>>>>> Overall the KIP LGTM, but I'd have to agree with others on merging
> >> the
> >>>>>> `StreamsNotRunningException` and `StateStoreNotAvailableException`
> >>>>> classes.
> >>>>>>
> >>>>>> Since in both cases, the thread state is in `PENDING_SHUTDOWN ||
> >>>>>> NOT_RUNNING || ERROR` I'm not even sure how we could distinguish
> >> when to
> >>>>>> use the different
> >>>>>> exceptions.  Maybe a good middle ground would be to have a detailed
> >>>>>> exception message.
> >>>>>>
> >>>>>> The KIP freeze is close, so I think if we can agree on this, we can
> >>>>> wrap up
> >>>>>> the voting soon.
> >>>>>>
> >>>>>> Thanks,
> >>>>>> Bill
> >>>>>>
> >>>>>> On Tue, Jan 14, 2020 at 2:12 PM Matthias J. Sax <
> >> matth...@confluent.io>
> >>>>>> wrote:
> >>>>>>
> >>>>>>> Vito,
> >>>>>>>
> >>>>>>> It's still unclear to me what the advantage is, to have both
> >>>>>>> `StreamsNotRunningException` and
> >> `StateStoreNotAvailableException`?
> >>>>>>>
> >>>>>>> For both cased, the state is `PENDING_SHUTDOWN / NOT_RUNNING /
> >> ERROR`
> >>>>>>> and thus, for a user point of view, why does it matter if the
> >> store is
> >>>>>>> closed on not? I don't understand why/how this information would
> >> be
> >>>>>>> useful? Do you have a concrete example in mind how a user would
> >> react
> >>>>>>> differently to both exceptions?
> >>>>>>>
> >>>>>>>
> >>>>>>> @Vinoth: about `StreamsRebalancingException` -- to me, it seems
> >> best
> >>>>> to
> >>>>>>> actually do this on a per-query basis, ie, have an overload
> >>>>>>> `KafkaStreams#store(...)` that takes a boolean flag that allow to
> >>>>>>> _disable_ the exception and opt-in to query a active store during
> >>>>>>> recovery. However, as KIP-535 actually introduces this change in
> >>>>>>> behavior, I think KIP-216 should not cover this, but KIP-535
> >> should be
> >>>>>>> updated. I'll follow up on the other KIP thread to raise this
> >> point.
> >>>>>>>
> >>>>>>>
> >>>>>>> -Matthias
> >>>>>>>
> >>>>>>> On 1/11/20 12:26 AM, Vito Jeng wrote:
> >>>>>>>> Hi, Matthias & Vinoth,
> >>>>>>>>
> >>>>>>>> Thanks for the feedback.
> >>>>>>>>
> >>>>>>>>> What is still unclear to me is, what we gain by having both
> >>>>>>>>> `StreamsNotRunningException` and
> >>>>> `StateStoreNotAvailableException`. Both
> >>>>>>>>> exception are thrown when KafkaStreams is in state
> >>>>> PENDING_SHUTDOWN /
> >>>>>>>>> NOT_RUNNING / ERROR. Hence, as a user what do I gain to know
> >> if the
> >>>>>>>>> state store is closed on not -- I can't query it anyway? Maybe
> >> I
> >>>>> miss
> >>>>>>>>> something thought?
> >>>>>>>>
> >>>>>>>> Yes, both `StreamsNotRunningException` and
> >>>>>>>> `StateStoreNotAvailableException` are fatal exception.
> >>>>>>>> But `StateStoreNotAvailableException` is fatal exception about
> >> state
> >>>>>>> store
> >>>>>>>> related.
> >>>>>>>> I think it would be helpful that if user need to distinguish
> >> these
> >>>>> two
> >>>>>>>> different case to handle it.
> >>>>>>>>
> >>>>>>>> I'm not very sure, does that make sense?
> >>>>>>>>
> >>>>>>>>
> >>>>>>>> ---
> >>>>>>>> Vito
> >>>>>>>>
> >>>>>>>>
> >>>>>>>> On Fri, Jan 10, 2020 at 3:35 AM Vinoth Chandar <
> >> vin...@apache.org>
> >>>>>>> wrote:
> >>>>>>>>
> >>>>>>>>> +1 on merging `StreamsNotRunningException` and
> >>>>>>>>> `StateStoreNotAvailableException`, both exceptions are fatal
> >>>>> anyway. IMO
> >>>>>>>>> its best to have these exceptions be about the state store
> >> (and not
> >>>>>>> streams
> >>>>>>>>> state), to easier understanding.
> >>>>>>>>>
> >>>>>>>>> Additionally, KIP-535 allows for querying of state stores in
> >>>>> rebalancing
> >>>>>>>>> state. So do we need the StreamsRebalancingException?
> >>>>>>>>>
> >>>>>>>>>
> >>>>>>>>> On 2020/01/09 03:38:11, "Matthias J. Sax" <
> >> matth...@confluent.io>
> >>>>>>> wrote:
> >>>>>>>>>> Sorry that I dropped the ball on this...
> >>>>>>>>>>
> >>>>>>>>>> Thanks for updating the KIP. Overall LGTM now. Feel free to
> >> start
> >>>>> a
> >>>>>>> VOTE
> >>>>>>>>>> thread.
> >>>>>>>>>>
> >>>>>>>>>> What is still unclear to me is, what we gain by having both
> >>>>>>>>>> `StreamsNotRunningException` and
> >>>>> `StateStoreNotAvailableException`.
> >>>>>>> Both
> >>>>>>>>>> exception are thrown when KafkaStreams is in state
> >>>>> PENDING_SHUTDOWN /
> >>>>>>>>>> NOT_RUNNING / ERROR. Hence, as a user what do I gain to know
> >> if
> >>>>> the
> >>>>>>>>>> state store is closed on not -- I can't query it anyway?
> >> Maybe I
> >>>>> miss
> >>>>>>>>>> something thought?
> >>>>>>>>>>
> >>>>>>>>>>
> >>>>>>>>>> -Matthias
> >>>>>>>>>>
> >>>>>>>>>>
> >>>>>>>>>> On 11/3/19 6:07 PM, Vito Jeng wrote:
> >>>>>>>>>>> Sorry for the late reply, thanks for the review.
> >>>>>>>>>>>
> >>>>>>>>>>>
> >>>>>>>>>>>> About `StateStoreMigratedException`:
> >>>>>>>>>>>>
> >>>>>>>>>>>> Why is it only thrown if the state is REBALANCING? A store
> >>>>> might be
> >>>>>>>>>>>> migrated during a rebalance, and Kafka Streams might resume
> >>>>> back to
> >>>>>>>>>>>> RUNNING state and afterward somebody tries to use an old
> >> store
> >>>>>>> handle.
> >>>>>>>>>>>> Also, if state is REBALANCING, should we throw
> >>>>>>>>>>>> `StreamThreadRebalancingException`? Hence, I think
> >>>>>>>>>>>> `StateStoreMigratedException` does only make sense during
> >>>>> `RUNNING`
> >>>>>>>>> state.
> >>>>>>>>>>>>
> >>>>>>>>>>>
> >>>>>>>>>>> Thank you point this, already updated.
> >>>>>>>>>>>
> >>>>>>>>>>>
> >>>>>>>>>>> Why do we need to distinguish between
> >>>>>>> `KafkaStreamsNotRunningException`
> >>>>>>>>>>>> and `StateStoreNotAvailableException`?
> >>>>>>>>>>>>
> >>>>>>>>>>>
> >>>>>>>>>>> `KafkaStreamsNotRunningException` may be caused by various
> >>>>> reasons, I
> >>>>>>>>> think
> >>>>>>>>>>> it would be helpful that the
> >>>>>>>>>>> user can distinguish whether it is caused by the state store
> >>>>> closed.
> >>>>>>>>>>> (Maybe I am wrong...)
> >>>>>>>>>>>
> >>>>>>>>>>>
> >>>>>>>>>>> Last, why do we distinguish between `KafkaStreams` instance
> >> and
> >>>>>>>>>>>> `StreamsThread`? To me, it seems we should always refer to
> >> the
> >>>>>>>>> instance,
> >>>>>>>>>>>> because that is the level of granularity in which we
> >>>>> enable/disable
> >>>>>>>>> IQ atm.
> >>>>>>>>>>>>
> >>>>>>>>>>>
> >>>>>>>>>>> Totally agree. Do you mean the naming of state store
> >> exceptions?
> >>>>>>>>>>> I don't have special reason to distinguish these two.
> >>>>>>>>>>> Your suggestion look more reasonable for the exception
> >> naming.
> >>>>>>>>>>>
> >>>>>>>>>>>
> >>>>>>>>>>> Last, for `StateStoreMigratedException`, I would add that a
> >> user
> >>>>> need
> >>>>>>>>> to
> >>>>>>>>>>>> rediscover the store and cannot blindly retry as the store
> >>>>> handle is
> >>>>>>>>>>>> invalid and a new store handle must be retrieved. That is a
> >>>>>>> difference
> >>>>>>>>>>>> to `StreamThreadRebalancingException` that allows for
> >> "blind"
> >>>>> retries
> >>>>>>>>>>>> that either resolve (if the store is still on the same
> >> instance
> >>>>> after
> >>>>>>>>>>>> rebalancing finishes, or changes to
> >>>>> `StateStoreMigratedException` if
> >>>>>>>>> the
> >>>>>>>>>>>> store was migrated away during rebalancing).
> >>>>>>>>>>>>
> >>>>>>>>>>>
> >>>>>>>>>>> Nice, it's great! Thank you.
> >>>>>>>>>>>
> >>>>>>>>>>>
> >>>>>>>>>>> The KIP already updated, please take a look. :)
> >>>>>>>>>>>
> >>>>>>>>>>>
> >>>>>>>>>>>
> >>>>>>>>>>> On Wed, Oct 23, 2019 at 1:48 PM Matthias J. Sax <
> >>>>>>> matth...@confluent.io
> >>>>>>>>>>
> >>>>>>>>>>> wrote:
> >>>>>>>>>>>
> >>>>>>>>>>>> Any update on this KIP?
> >>>>>>>>>>>>
> >>>>>>>>>>>> On 10/7/19 3:35 PM, Matthias J. Sax wrote:
> >>>>>>>>>>>>> Sorry for the late reply. The 2.4 deadline kept us quite
> >> busy.
> >>>>>>>>>>>>>
> >>>>>>>>>>>>> About `StateStoreMigratedException`:
> >>>>>>>>>>>>>
> >>>>>>>>>>>>> Why is it only thrown if the state is REBALANCING? A store
> >>>>> might be
> >>>>>>>>>>>>> migrated during a rebalance, and Kafka Streams might resume
> >>>>> back to
> >>>>>>>>>>>>> RUNNING state and afterward somebody tries to use an old
> >> store
> >>>>>>>>> handle.
> >>>>>>>>>>>>> Also, if state is REBALANCING, should we throw
> >>>>>>>>>>>>> `StreamThreadRebalancingException`? Hence, I think
> >>>>>>>>>>>>> `StateStoreMigratedException` does only make sense during
> >>>>> `RUNNING`
> >>>>>>>>>>>> state.
> >>>>>>>>>>>>>
> >>>>>>>>>>>>>
> >>>>>>>>>>>>> Why do we need to distinguish between
> >>>>>>>>> `KafkaStreamsNotRunningException`
> >>>>>>>>>>>>> and `StateStoreNotAvailableException`?
> >>>>>>>>>>>>>
> >>>>>>>>>>>>>
> >>>>>>>>>>>>> Last, why do we distinguish between `KafkaStreams`
> >> instance and
> >>>>>>>>>>>>> `StreamsThread`? To me, it seems we should always refer to
> >> the
> >>>>>>>>> instance,
> >>>>>>>>>>>>> because that is the level of granularity in which we
> >>>>> enable/disable
> >>>>>>>>> IQ
> >>>>>>>>>>>> atm.
> >>>>>>>>>>>>>
> >>>>>>>>>>>>>
> >>>>>>>>>>>>> Last, for `StateStoreMigratedException`, I would add that a
> >>>>> user
> >>>>>>>>> need to
> >>>>>>>>>>>>> rediscover the store and cannot blindly retry as the store
> >>>>> handle is
> >>>>>>>>>>>>> invalid and a new store handle must be retrieved. That is a
> >>>>>>>>> difference
> >>>>>>>>>>>>> to `StreamThreadRebalancingException` that allows for
> >> "blind"
> >>>>>>> retries
> >>>>>>>>>>>>> that either resolve (if the store is still on the same
> >> instance
> >>>>>>> after
> >>>>>>>>>>>>> rebalancing finishes, or changes to
> >>>>> `StateStoreMigratedException` if
> >>>>>>>>> the
> >>>>>>>>>>>>> store was migrated away during rebalancing).
> >>>>>>>>>>>>>
> >>>>>>>>>>>>>
> >>>>>>>>>>>>>
> >>>>>>>>>>>>> -Matthias
> >>>>>>>>>>>>>
> >>>>>>>>>>>>> On 8/9/19 10:20 AM, Vito Jeng wrote:
> >>>>>>>>>>>>>> My bad. The short link `https://shorturl.at/CDNT9`
> <https://shorturl.at/CDNT9>
> >> <https://shorturl.at/CDNT9>
> >>>>> <https://shorturl.at/CDNT9>
> >>>>>>> <https://shorturl.at/CDNT9>
> >>>>>>>>> <https://shorturl.at/CDNT9>
> >>>>>>>>>>>> <https://shorturl.at/CDNT9>
> >>>>>>>>>>>>>> <https://shorturl.at/CDNT9> seems incorrect.
> >>>>>>>>>>>>>>
> >>>>>>>>>>>>>> Please use the following instead:
> >> https://shorturl.at/bkKQU
> >>>>>>>>>>>>>>
> >>>>>>>>>>>>>>
> >>>>>>>>>>>>>> ---
> >>>>>>>>>>>>>> Vito
> >>>>>>>>>>>>>>
> >>>>>>>>>>>>>>
> >>>>>>>>>>>>>> On Fri, Aug 9, 2019 at 10:53 AM Vito Jeng <
> >>>>> v...@is-land.com.tw>
> >>>>>>>>> wrote:
> >>>>>>>>>>>>>>
> >>>>>>>>>>>>>>> Thanks, Matthias!
> >>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>> About `StreamThreadNotStartedException`:
> >>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>> Thank you for explanation. I agree with your opinion.
> >>>>>>>>>>>>>>> `CompositeReadOnlyXxxStore#get()` would never throw
> >>>>>>>>>>>>>>> `StreamThreadNotStartedException`.
> >>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>> For the case that corresponding thread crashes after we
> >>>>> handed out
> >>>>>>>>> the
> >>>>>>>>>>>>>>> store handle. We may throw
> >> `KafkaStreamsNotRunningException`
> >>>>> or
> >>>>>>>>>>>>>>> `StateStoreMigratedException`.
> >>>>>>>>>>>>>>> In `StreamThreadStateStoreProvider`, we would throw
> >>>>>>>>>>>>>>> `KafkaStreamsNotRunningException` when stream thread is
> >> not
> >>>>>>>>> running(
> >>>>>>>>>>>>>>> https://shorturl.at/CDNT9) or throw
> >>>>> `StateStoreMigratedException`
> >>>>>>>>> when
> >>>>>>>>>>>>>>> store is closed(https://shorturl.at/hrvAN). So I think
> >> we
> >>>>> do not
> >>>>>>>>> need
> >>>>>>>>>>>> to
> >>>>>>>>>>>>>>> add a new type for this case. Does that make sense?
> >>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>> About `KafkaStreamsNotRunningException` vs
> >>>>>>>>>>>>>>> `StreamThreadNotRunningException`:
> >>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>> I understand your point. I rename
> >>>>>>>>> `StreamThreadNotRunningException` to
> >>>>>>>>>>>>>>> `KafkaStreamsNotRunningException`.
> >>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>> About check unknown state store names:
> >>>>>>>>>>>>>>> Thank you for the hint. I add a new type
> >>>>>>>>> `UnknownStateStoreException`
> >>>>>>>>>>>> for
> >>>>>>>>>>>>>>> this case.
> >>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>> Also, we should still have fatal exception
> >>>>>>>>>>>>>>> `StateStoreNotAvailableException`? Not sure why you
> >> remove
> >>>>> it?
> >>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>> Thank you point this, already add it again.
> >>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>> The KIP already updated, please take a look.
> >>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>> ---
> >>>>>>>>>>>>>>> Vito
> >>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>
> >>>>>>>>>>>>>
> >>>>>>>>>>>>
> >>>>>>>>>>>>
> >>>>>>>>>>>
> >>>>>>>>>>
> >>>>>>>>>>
> >>>>>>>>>
> >>>>>>>>
> >>>>>>>
> >>>>>>>
> >>>>>>
> >>>>>
> >>>>
> >>>
> >>
> >
>
>

Reply via email to