Got it, thanks Matthias.

---
Vito


On Thu, Jan 23, 2020 at 1:31 PM Matthias J. Sax <matth...@confluent.io>
wrote:

> Thanks Vito.
>
> I am also ok with either name. Just a personal slight preference, but
> not a important.
>
>
> -Matthias
>
> On 1/21/20 6:52 PM, Vito Jeng wrote:
> > 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>
> >>>>>>>>>>>>>>>>>>>> <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