Thanks, Vito. I've just cast my vote.
-John

On Fri, Jan 17, 2020, at 21:32, Vito Jeng wrote:
> Hi, folks,
> 
> Just update the KIP, please take a look.
> 
> Thanks!
> 
> ---
> Vito
> 
> 
> On Fri, Jan 17, 2020 at 9:12 AM Vito Jeng <v...@is-land.com.tw> wrote:
> 
> > 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