Thanks Matthias.

The KIP is about InvalidStateStoreException.
I pick `StateStoreNotAvailableException` because it may be more intuitive
than `StreamsNotRunningException`.

No matter which one picked, it's good to me.

---
Vito


On Wed, Jan 22, 2020 at 7:44 AM Matthias J. Sax <matth...@confluent.io>
wrote:

> Thanks for updating the KIP!
>
> One last comment/question: you kept `StateStoreNotAvailableException` in
> favor of `StreamsNotRunningException` (to merge both as suggested).
>
> I am wondering, if it might be better to keep
> `StreamsNotRunningException` instead of
> `StateStoreNotAvailableException`, because this exception is thrown if
> Streams is in state PENDING_SHUTDOWN / NOT_RUNNING / ERROR ?
>
>
>
> -Matthias
>
> On 1/17/20 9:56 PM, John Roesler wrote:
> > 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>
> >>>>>>>>>>>>>>>>>> <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