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


On Tue, Jul 30, 2019 at 6:04 AM Matthias J. Sax <matth...@confluent.io>
wrote:

> Any update on this KIP Vito?
>
>
> On 7/11/19 4:26 PM, Matthias J. Sax wrote:
> > Thanks Vito! I think the KIP shapes out nicely!
> >
> >
> > To answer the open question you raised (I also adjust my answers based
> > on the latest KIP update)
> >
> >
> >
> > About `StreamThreadNotStartedException`: I understand what you pointed
> > out. However, I think we can consider the following: If a thread is not
> > started yet, and `KafkaStreams#store()` throw this exception, we would
> > not return a `CompositeReadOnlyXxxStore` to the user. Hence, `get()`
> > cannot be called. And if we return `CompositeReadOnlyXxxStore` the
> > thread was started and `get()` would never hit the condition to throw
> > the exception? Or do I miss something (this part of the logic is a
> > little tricky...)
> >
> > However, thinking about it, what could happen IMHO is, that the
> > corresponding thread crashes after we handed out the store handle. For
> > this case, it would make sense to throw an exception from `get()` but it
> > would be a different one IMHO. Maybe we need a new type
> > (`StreamThreadDeadException` or similar?) or we should reuse
> > `StoreMigratedException` because if a thread dies we would migrate the
> > store to another thread. (The tricky part might be, to detect this
> > condition correctly -- not 100% sure atm how we could do this.)
> >
> > What do you think about this?
> >
> >
> >
> > About `KafkaStreamsNotRunningException` vs
> > `StreamThreadNotRunningException` -- I see your point. Atm, I think we
> > don't allow querying at all if KafkaStreams is not in state RUNNING
> > (correct me if I am wrong). Hence, if there is an instance with 2
> > thread, and 1 thread is actually up and ready, but the other thread is
> > not, you cannot query anything. Only if both threads are in state
> > RUNNING we allow to query. It might be possible to change the code to
> > allow querying if a thread is ready independent from the other threads.
> > For this case, the name you suggest would make more sense. But I
> > _think_, that the current behavior is different and thus,
> > `KafkaStreamsNotRunningException` seems to reflect the current behavior
> > better? -- I also want to add that we are talking about a fatal
> > exception -- if a thread crashes, we would migrate the store to another
> > thread and it would not be fatal, but the store can be re-discovered.
> > Only if all thread would die, if would be fatal -- however, for this
> > case KafakStreams would transit to DEAD anyway.
> >
> >
> >
> >> When the user passes a store name to `KafkaStreams#store()`, does there
> >> have a way that distinguish the store name is "a wrong name" or
> "migrated"
> >> during `QueryableStoreProvider#getStore()`?
> >> From my current understanding, I cannot distinguish these two.
> >
> > This should be possible. In the private KafkaStreams constructor, we
> > have access to `InternalTopologyBuilder` that can give us all known
> > store names. Hence, we can get a set of all known store names, keep them
> > as a member variable and use in `KafkaStreams#store()` in an initial
> > check if the store name is valid or not.
> >
> >
> >
> >> Should we remove `StreamThreadNotRunningException` and throw
> >> `FatalStateStoreException` directly ?
> >
> > I would keep both, because `FatalStateStoreException` is not very
> > descriptive. Also, we should still have fatal exception
> > `StateStoreNotAvailableException`? Not sure why you remove it?
> >
> >
> >
> > Glad you found a way to avoid
> > `QueryableStoreType#setStreams(KafkaStreams streams)`.
> >
> >
> >
> > -Matthias
> >
> >
> > On 7/5/19 8:03 AM, Vito Jeng wrote:
> >> Hi, Mattias,
> >>
> >> Just completed the modification of KIP, please take a look when you are
> >> available.
> >>
> >> ---
> >> Vito
> >>
> >>
> >> On Wed, Jul 3, 2019 at 9:07 PM Vito Jeng <v...@is-land.com.tw> wrote:
> >>
> >>> Hi, Matthias,
> >>>
> >>> This is second part.
> >>>
> >>>> For the internal exceptions:
> >>>>
> >>>> `StateStoreClosedException` -- why can it be wrapped as
> >>>> `StreamThreadNotStartedException` ? It seems that the later would only
> >>>> be thrown by `KafkaStreams#store()` and thus would be throw directly.
> >>>
> >>> Both `StateStoreClosedException` and `EmptyStateStoreException` not
> can be
> >>> wrapped as `StreamThreadNotStartedException`.
> >>> This is a mistaken written in the previous KIP. Thank you point this.
> >>>
> >>>> A closed-exception should only happen after a store was successfully
> >>>> retrieved but cannot be queried any longer? Hence, converting/wrapping
> >>>> it into a `StateStoreMigratedException` make sense. I am also not
> sure,
> >>>> when a closed-exception would be wrapped by a
> >>>> `StateStoreNotAvailableException` (implying my understanding as
> describe
> >>>> above)?
> >>>>
> >>>> Same questions about `EmptyStateStoreException`.
> >>>>
> >>>> Thinking about both internal exceptions twice, I am wondering if it
> >>>> makes sense to have both internal exceptions at all? I have the
> >>>> impression that it make only sense to wrap them with a
> >>>> `StateStoreMigragedException`, but if they are wrapped into the same
> >>>> exception all the time, we can just remove both and throw
> >>>> `StateStoreMigratedException` directly?
> >>>
> >>> After deeper thinking, I think you are right. It seems we can throw
> >>> `StateStoreMigratedException` directly.
> >>> So that we can remove `StateStoreClosedException`,
> >>> `EmptyStateStoreException` and `StateStoreNotAvailableException`.
> >>> Will update the KIP.
> >>>
> >>> BTW, if we remove above three exceptions, the
> >>> `StreamThreadNotRunningException` will be the only one sub class
> extends
> >>> from FatalStateStoreException.
> >>> Should we remove `StreamThreadNotRunningException` and throw
> >>> `FatalStateStoreException` directly ?
> >>>
> >>>> Last point: Why do we need to add?
> >>>> QueryableStoreType#setStreams(KafkaStreams streams);
> >>>> John asked this question already and you replied to it. But I am not
> >>>> sure what your answer means. Can you explain it in more detail?
> >>>
> >>> The main purpose is to pass the KafkaStreams reference into
> >>> CompositeReadOnlyKeyValueStore / CompositeReadOnlySessionStore/
> >>> CompositeReadOnlyWindowStore instance.
> >>> We need check KafkaStreams state to warp InvalidStateStoreException in
> to
> >>> other exception(e.g., StateStoreMigratedException) when the user
> accesses
> >>> these read-only stores.
> >>>
> >>> The original thought is to add `setStreams` method in to
> >>> QueryableStoreType. But now I think I find a better way during recent
> days.
> >>> This way does not need to change any public interface. So we can skip
> this
> >>> question. :)
> >>>
> >>>
> >>> I will update the KIP based on our discussion.
> >>> Thank you for help to finish the KIP!
> >>>
> >>> ---
> >>> Vito
> >>>
> >>>
> >>> On Thu, Jun 6, 2019 at 8:23 AM Matthias J. Sax <matth...@confluent.io>
> >>> wrote:
> >>>
> >>>> Hi Vito,
> >>>>
> >>>> sorry for dropping this discussion on the floor a while back. I was
> just
> >>>> re-reading the KIP and discussion thread, and I think it is shaping
> out
> >>>> nicely!
> >>>>
> >>>> I like the overall hierarchy of the exception classes.
> >>>>
> >>>> Some things are still not 100% clear:
> >>>>
> >>>>
> >>>> You listed all methods that may throw an `InvalidStateStoreException`
> >>>> atm. For the new exceptions, can any exception be thrown by any
> method?
> >>>> It might help to understand this relationship better.
> >>>>
> >>>> For example, StreamThreadNotStartedException, seems to only make sense
> >>>> for `KafkaStreams#store()`?
> >>>>
> >>>>
> >>>> For `StreamThreadNotRunningException` should we rename it to
> >>>> `KafkaStreamsNotRunningException` ?
> >>>>
> >>>>
> >>>> The description of `StreamThreadNotRunningException` and
> >>>> `StateStoreNotAvailableException` seems to be the same? From my
> >>>> understandng, the description makes sense for
> >>>> `StreamThreadNotRunningException` -- for
> >>>> `StateStoreNotAvailableException` I was expecting/inferring from the
> >>>> name, that it would be thrown if no such store exists in the topology
> at
> >>>> all (ie, user passed in a invalid/wrong store name). For this case,
> this
> >>>> exception should be thrown only from `KafkaStreams#store()` ?
> >>>>
> >>>>
> >>>> For the internal exceptions:
> >>>>
> >>>> `StateStoreClosedException` -- why can it be wrapped as
> >>>> `StreamThreadNotStartedException` ? It seems that the later would only
> >>>> be thrown by `KafkaStreams#store()` and thus would be throw directly.
> A
> >>>> closed-exception should only happen after a store was successfully
> >>>> retrieved but cannot be queried any longer? Hence, converting/wrapping
> >>>> it into a `StateStoreMigratedException` make sense. I am also not
> sure,
> >>>> when a closed-exception would be wrapped by a
> >>>> `StateStoreNotAvailableException` (implying my understanding as
> describe
> >>>> above)?
> >>>>
> >>>> Same questions about `EmptyStateStoreException`.
> >>>>
> >>>> Thinking about both internal exceptions twice, I am wondering if it
> >>>> makes sense to have both internal exceptions at all? I have the
> >>>> impression that it make only sense to wrap them with a
> >>>> `StateStoreMigragedException`, but if they are wrapped into the same
> >>>> exception all the time, we can just remove both and throw
> >>>> `StateStoreMigratedException` directly?
> >>>>
> >>>>
> >>>> Last point: Why do we need to add?
> >>>>
> >>>>> QueryableStoreType#setStreams(KafkaStreams streams);
> >>>>
> >>>> John asked this question already and you replied to it. But I am not
> >>>> sure what your answer means. Can you explain it in more detail?
> >>>>
> >>>>
> >>>>
> >>>> Thanks for your patience on this KIP!
> >>>>
> >>>>
> >>>>
> >>>> -Matthias
> >>>>
> >>>>
> >>>>
> >>>>
> >>>>
> >>>>
> >>>> On 11/11/18 4:55 AM, Vito Jeng wrote:
> >>>>> Hi, Matthias,
> >>>>>
> >>>>> KIP already updated.
> >>>>>
> >>>>>> - StateStoreClosedException:
> >>>>>>   will be wrapped to StateStoreMigratedException or
> >>>>> StateStoreNotAvailableException later.
> >>>>>> Can you clarify the cases (ie, when will it be wrapped with the one
> or
> >>>>> the other)?
> >>>>>
> >>>>> For example, in the
> implementation(CompositeReadOnlyKeyValueStore#get),
> >>>> we
> >>>>> get all stores first, and then call ReadOnlyKeyValueStore#get to get
> >>>> value
> >>>>> in every store iteration.
> >>>>>
> >>>>> When calling ReadOnlyKeyValueStore#get, the StateStoreClosedException
> >>>> will
> >>>>> be thrown if the state store is not open.
> >>>>> We need catch StateStoreClosedException and wrap it in different
> >>>> exception
> >>>>> type:
> >>>>>   * If the stream's state is CREATED, we wrap
> StateStoreClosedException
> >>>>> with StreamThreadNotStartedException. User can retry until to
> RUNNING.
> >>>>>   * If the stream's state is RUNNING / REBALANCING, the state store
> >>>> should
> >>>>> be migrated, we wrap StateStoreClosedException with
> >>>>> StateStoreMigratedException. User can rediscover the state store.
> >>>>>   * If the stream's state is PENDING_SHUTDOWN / NOT_RUNNING / ERROR,
> the
> >>>>> stream thread is not available, we wrap StateStoreClosedException
> with
> >>>>> StateStoreNotAvailableException. User cannot retry when this
> exception
> >>>> is
> >>>>> thrown.
> >>>>>
> >>>>>
> >>>>>> - StateStoreIsEmptyException:
> >>>>>>  I don't understand the semantic of this exception. Maybe it's a
> naming
> >>>>> issue?
> >>>>>
> >>>>> I think yes. :)
> >>>>> Does `EmptyStateStoreException` is better ? (already updated in the
> KIP)
> >>>>>
> >>>>>
> >>>>>> - StateStoreIsEmptyException:
> >>>>>> will be wrapped to StateStoreMigratedException or
> >>>>> StateStoreNotAvailableException later.
> >>>>>> Also, can you clarify the cases (ie, when will it be wrapped with
> the
> >>>> one
> >>>>> or the other)?
> >>>>>
> >>>>> For example, in the implementation
> >>>> (CompositeReadOnlyKeyValueStore#get), we
> >>>>> call StateStoreProvider#stores (WrappingStoreProvider#stores) to get
> all
> >>>>> stores. EmptyStateStoreException will be thrown when cannot find any
> >>>> store
> >>>>> and then we need catch it and wrap it in different exception type:
> >>>>>   * If the stream's state is CREATED, we wrap
> EmptyStateStoreException
> >>>> with
> >>>>> StreamThreadNotStartedException. User can retry until to RUNNING.
> >>>>>   * If the stream's state is RUNNING / REBALANCING, the state store
> >>>> should
> >>>>> be migrated, we wrap EmptyStateStoreException with
> >>>>> StateStoreMigratedException. User can rediscover the state store.
> >>>>>   * If the stream's state is PENDING_SHUTDOWN / NOT_RUNNING / ERROR,
> the
> >>>>> stream thread is not available, we wrap EmptyStateStoreException with
> >>>>> StateStoreNotAvailableException. User cannot retry when this
> exception
> >>>> is
> >>>>> thrown.
> >>>>>
> >>>>> I hope the above reply can clarify.
> >>>>>
> >>>>> The last one that was not replied was:
> >>>>>
> >>>>>> I am also wondering, if we should introduce a fatal exception
> >>>>>> `UnkownStateStoreException` to tell users that they passed in an
> >>>> unknown
> >>>>>> store name?
> >>>>>
> >>>>> Until now, unknown state store is not thinking about in the KIP.
> >>>>> I believe it would be very useful for users.
> >>>>>
> >>>>> Looking at the related code(WrappingStoreProvider#stores),
> >>>>> I found that I can't distinguish between the state store was migrated
> >>>> or an
> >>>>> unknown state store.
> >>>>>
> >>>>> Any thoughts?
> >>>>>
> >>>>> ---
> >>>>> Vito
> >>>>>
> >>>>>
> >>>>>
> >>>>> On Sun, Nov 11, 2018 at 5:31 PM Vito Jeng <v...@is-land.com.tw>
> wrote:
> >>>>>
> >>>>>> Hi, Matthias,
> >>>>>>
> >>>>>> Sorry for the late reply.
> >>>>>>
> >>>>>>> I am wondering what the semantic impact/change is, if we introduce
> >>>>>>> `RetryableStateStoreException` and `FatalStateStoreException` that
> >>>> both
> >>>>>>> inherit from it. While I like the introduction of both from a high
> >>>> level
> >>>>>>> point of view, I just want to make sure it's semantically sound and
> >>>>>>> backward compatible. Atm, I think it's fine, but I want to point it
> >>>> out
> >>>>>>> such that everybody can think about this, too, so we can verify
> that
> >>>>>>> it's a natural evolving API change.
> >>>>>>
> >>>>>> Thank you for pointing this out. This's really important for public
> >>>> API.
> >>>>>>
> >>>>>> Just when I was replying to you, I found that KIP needs some modify.
> >>>>>> I will fix it ASAP, and then let's continue the discussion.
> >>>>>>
> >>>>>> ---
> >>>>>> Vito
> >>>>>>
> >>>>>>
> >>>>>> On Wed, Nov 7, 2018 at 7:06 AM Matthias J. Sax <
> matth...@confluent.io>
> >>>>>> wrote:
> >>>>>>
> >>>>>>> Hey Vito,
> >>>>>>>
> >>>>>>> I saw that you updated your PR, but did not reply to my last
> comments.
> >>>>>>> Any thoughts?
> >>>>>>>
> >>>>>>>
> >>>>>>> -Matthias
> >>>>>>>
> >>>>>>> On 10/19/18 10:34 AM, Matthias J. Sax wrote:
> >>>>>>>> Glad to have you back Vito :)
> >>>>>>>>
> >>>>>>>> Some follow up thoughts:
> >>>>>>>>
> >>>>>>>>  - the current `InvalidStateStoreException` is documents as being
> >>>>>>>> sometimes retry-able. From the JavaDocs:
> >>>>>>>>
> >>>>>>>>> These exceptions may be transient [...] Hence, it is valid to
> >>>> backoff
> >>>>>>> and retry when handling this exception.
> >>>>>>>>
> >>>>>>>> I am wondering what the semantic impact/change is, if we introduce
> >>>>>>>> `RetryableStateStoreException` and `FatalStateStoreException` that
> >>>> both
> >>>>>>>> inherit from it. While I like the introduction of both from a high
> >>>> level
> >>>>>>>> point of view, I just want to make sure it's semantically sound
> and
> >>>>>>>> backward compatible. Atm, I think it's fine, but I want to point
> it
> >>>> out
> >>>>>>>> such that everybody can think about this, too, so we can verify
> that
> >>>>>>>> it's a natural evolving API change.
> >>>>>>>>
> >>>>>>>>  - StateStoreClosedException:
> >>>>>>>>
> >>>>>>>>> will be wrapped to StateStoreMigratedException or
> >>>>>>> StateStoreNotAvailableException later.
> >>>>>>>>
> >>>>>>>> Can you clarify the cases (ie, when will it be wrapped with the
> one
> >>>> or
> >>>>>>>> the other)?
> >>>>>>>>
> >>>>>>>>  - StateStoreIsEmptyException:
> >>>>>>>>
> >>>>>>>> I don't understand the semantic of this exception. Maybe it's a
> >>>> naming
> >>>>>>>> issue?
> >>>>>>>>
> >>>>>>>>> will be wrapped to StateStoreMigratedException or
> >>>>>>> StateStoreNotAvailableException later.
> >>>>>>>>
> >>>>>>>> Also, can you clarify the cases (ie, when will it be wrapped with
> the
> >>>>>>>> one or the other)?
> >>>>>>>>
> >>>>>>>>
> >>>>>>>> I am also wondering, if we should introduce a fatal exception
> >>>>>>>> `UnkownStateStoreException` to tell users that they passed in an
> >>>> unknown
> >>>>>>>> store name?
> >>>>>>>>
> >>>>>>>>
> >>>>>>>>
> >>>>>>>> -Matthias
> >>>>>>>>
> >>>>>>>>
> >>>>>>>>
> >>>>>>>> On 10/17/18 8:14 PM, vito jeng wrote:
> >>>>>>>>> Just open a PR for further discussion:
> >>>>>>>>> https://github.com/apache/kafka/pull/5814
> >>>>>>>>>
> >>>>>>>>> Any suggestion is welcome.
> >>>>>>>>> Thanks!
> >>>>>>>>>
> >>>>>>>>> ---
> >>>>>>>>> Vito
> >>>>>>>>>
> >>>>>>>>>
> >>>>>>>>> On Thu, Oct 11, 2018 at 12:14 AM vito jeng <v...@is-land.com.tw>
> >>>>>>> wrote:
> >>>>>>>>>
> >>>>>>>>>> Hi John,
> >>>>>>>>>>
> >>>>>>>>>> Thanks for reviewing the KIP.
> >>>>>>>>>>
> >>>>>>>>>>> I didn't follow the addition of a new method to the
> >>>>>>> QueryableStoreType
> >>>>>>>>>>> interface. Can you elaborate why this is necessary to support
> the
> >>>> new
> >>>>>>>>>>> exception types?
> >>>>>>>>>>
> >>>>>>>>>> To support the new exception types, I would check stream state
> in
> >>>> the
> >>>>>>>>>> following classes:
> >>>>>>>>>>   - CompositeReadOnlyKeyValueStore class
> >>>>>>>>>>   - CompositeReadOnlySessionStore class
> >>>>>>>>>>   - CompositeReadOnlyWindowStore class
> >>>>>>>>>>   - DelegatingPeekingKeyValueIterator class
> >>>>>>>>>>
> >>>>>>>>>> It is also necessary to keep backward compatibility. So I plan
> >>>> passing
> >>>>>>>>>> stream
> >>>>>>>>>> instance to QueryableStoreType instance during
> KafkaStreams#store()
> >>>>>>>>>> invoked.
> >>>>>>>>>> It looks a most simple way, I think.
> >>>>>>>>>>
> >>>>>>>>>> It is why I add a new method to the QueryableStoreType
> interface. I
> >>>>>>> can
> >>>>>>>>>> understand
> >>>>>>>>>> that we should try to avoid adding the public api method.
> However,
> >>>> at
> >>>>>>> the
> >>>>>>>>>> moment
> >>>>>>>>>> I have no better ideas.
> >>>>>>>>>>
> >>>>>>>>>> Any thoughts?
> >>>>>>>>>>
> >>>>>>>>>>
> >>>>>>>>>>> Also, looking over your KIP again, it seems valuable to
> introduce
> >>>>>>>>>>> "retriable store exception" and "fatal store exception" marker
> >>>>>>> interfaces
> >>>>>>>>>>> that the various exceptions can mix in. It would be nice from a
> >>>>>>> usability
> >>>>>>>>>>> perspective to be able to just log and retry on any "retriable"
> >>>>>>> exception
> >>>>>>>>>>> and log and shutdown on any fatal exception.
> >>>>>>>>>>
> >>>>>>>>>> I agree that this is valuable to the user.
> >>>>>>>>>> I'll update the KIP.
> >>>>>>>>>>
> >>>>>>>>>>
> >>>>>>>>>> Thanks
> >>>>>>>>>>
> >>>>>>>>>>
> >>>>>>>>>> ---
> >>>>>>>>>> Vito
> >>>>>>>>>>
> >>>>>>>>>>
> >>>>>>>>>> On Tue, Oct 9, 2018 at 2:30 AM John Roesler <j...@confluent.io>
> >>>>>>> wrote:
> >>>>>>>>>>
> >>>>>>>>>>> Hi Vito,
> >>>>>>>>>>>
> >>>>>>>>>>> I'm glad to hear you're well again!
> >>>>>>>>>>>
> >>>>>>>>>>> I didn't follow the addition of a new method to the
> >>>>>>> QueryableStoreType
> >>>>>>>>>>> interface. Can you elaborate why this is necessary to support
> the
> >>>> new
> >>>>>>>>>>> exception types?
> >>>>>>>>>>>
> >>>>>>>>>>> Also, looking over your KIP again, it seems valuable to
> introduce
> >>>>>>>>>>> "retriable store exception" and "fatal store exception" marker
> >>>>>>> interfaces
> >>>>>>>>>>> that the various exceptions can mix in. It would be nice from a
> >>>>>>> usability
> >>>>>>>>>>> perspective to be able to just log and retry on any "retriable"
> >>>>>>> exception
> >>>>>>>>>>> and log and shutdown on any fatal exception.
> >>>>>>>>>>>
> >>>>>>>>>>> Thanks,
> >>>>>>>>>>> -John
> >>>>>>>>>>>
> >>>>>>>>>>> On Fri, Oct 5, 2018 at 11:47 AM Guozhang Wang <
> wangg...@gmail.com
> >>>>>
> >>>>>>> wrote:
> >>>>>>>>>>>
> >>>>>>>>>>>> Thanks for the explanation, that makes sense.
> >>>>>>>>>>>>
> >>>>>>>>>>>>
> >>>>>>>>>>>> Guozhang
> >>>>>>>>>>>>
> >>>>>>>>>>>>
> >>>>>>>>>>>> On Mon, Jun 25, 2018 at 2:28 PM, Matthias J. Sax <
> >>>>>>> matth...@confluent.io
> >>>>>>>>>>>>
> >>>>>>>>>>>> wrote:
> >>>>>>>>>>>>
> >>>>>>>>>>>>> The scenario I had I mind was, that KS is started in one
> thread
> >>>>>>> while
> >>>>>>>>>>> a
> >>>>>>>>>>>>> second thread has a reference to the object to issue queries.
> >>>>>>>>>>>>>
> >>>>>>>>>>>>> If a query is issue before the "main thread" started KS, and
> the
> >>>>>>>>>>> "query
> >>>>>>>>>>>>> thread" knows that it will eventually get started, it can
> >>>> retry. On
> >>>>>>>>>>> the
> >>>>>>>>>>>>> other hand, if KS is in state PENDING_SHUTDOWN or DEAD, it is
> >>>>>>>>>>> impossible
> >>>>>>>>>>>>> to issue any query against it now or in the future and thus
> the
> >>>>>>> error
> >>>>>>>>>>> is
> >>>>>>>>>>>>> not retryable.
> >>>>>>>>>>>>>
> >>>>>>>>>>>>>
> >>>>>>>>>>>>> -Matthias
> >>>>>>>>>>>>>
> >>>>>>>>>>>>> On 6/25/18 10:15 AM, Guozhang Wang wrote:
> >>>>>>>>>>>>>> I'm wondering if StreamThreadNotStarted could be merged into
> >>>>>>>>>>>>>> StreamThreadNotRunning, because I think users' handling
> logic
> >>>> for
> >>>>>>>>>>> the
> >>>>>>>>>>>>> third
> >>>>>>>>>>>>>> case would be likely the same as the second. Do you have
> some
> >>>>>>>>>>> scenarios
> >>>>>>>>>>>>>> where users may want to handle them differently?
> >>>>>>>>>>>>>>
> >>>>>>>>>>>>>> Guozhang
> >>>>>>>>>>>>>>
> >>>>>>>>>>>>>> On Sun, Jun 24, 2018 at 5:25 PM, Matthias J. Sax <
> >>>>>>>>>>>> matth...@confluent.io>
> >>>>>>>>>>>>>> wrote:
> >>>>>>>>>>>>>>
> >>>>>>>>>>>>>>> Sorry to hear! Get well soon!
> >>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>> It's not a big deal if the KIP stalls a little bit. Feel
> free
> >>>> to
> >>>>>>>>>>> pick
> >>>>>>>>>>>> it
> >>>>>>>>>>>>>>> up again when you find time.
> >>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>>> Is `StreamThreadNotRunningException` really an retryable
> >>>>>>> error?
> >>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>> When KafkaStream state is REBALANCING, I think it is a
> >>>>>>> retryable
> >>>>>>>>>>>>> error.
> >>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>> StreamThreadStateStoreProvider#stores() will throw
> >>>>>>>>>>>>>>>>> StreamThreadNotRunningException when StreamThread state
> is
> >>>> not
> >>>>>>>>>>>>>>> RUNNING. The
> >>>>>>>>>>>>>>>>> user can retry until KafkaStream state is RUNNING.
> >>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>> I see. If this is the intention, than I would suggest to
> have
> >>>> two
> >>>>>>>>>>> (or
> >>>>>>>>>>>>>>> maybe three) different exceptions:
> >>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>  - StreamThreadRebalancingException (retryable)
> >>>>>>>>>>>>>>>  - StreamThreadNotRunning (not retryable -- thrown if in
> state
> >>>>>>>>>>>>>>> PENDING_SHUTDOWN or DEAD
> >>>>>>>>>>>>>>>  - maybe StreamThreadNotStarted (for state CREATED)
> >>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>> The last one is tricky and could also be merged into one of
> >>>> the
> >>>>>>>>>>> first
> >>>>>>>>>>>>>>> two, depending if you want to argue that it's retryable or
> >>>> not.
> >>>>>>>>>>> (Just
> >>>>>>>>>>>>>>> food for though -- not sure what others think.)
> >>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>> -Matthias
> >>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>> On 6/22/18 8:06 AM, vito jeng wrote:
> >>>>>>>>>>>>>>>> Matthias,
> >>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>> Thank you for your assistance.
> >>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>> what is the status of this KIP?
> >>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>> Unfortunately, there is no further progress.
> >>>>>>>>>>>>>>>> About seven weeks ago, I was injured in sports. I had a
> >>>> broken
> >>>>>>>>>>> wrist
> >>>>>>>>>>>> on
> >>>>>>>>>>>>>>>> my left wrist.
> >>>>>>>>>>>>>>>> Many jobs are affected, including this KIP and
> >>>> implementation.
> >>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>> I just re-read it, and have a couple of follow up
> comments.
> >>>> Why
> >>>>>>>>>>> do
> >>>>>>>>>>>> we
> >>>>>>>>>>>>>>>>> discuss the internal exceptions you want to add? Also,
> do we
> >>>>>>>>>>> really
> >>>>>>>>>>>>> need
> >>>>>>>>>>>>>>>>> them? Can't we just throw the correct exception directly
> >>>>>>> instead
> >>>>>>>>>>> of
> >>>>>>>>>>>>>>>>> wrapping it later?
> >>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>> I think you may be right. As I say in the previous:
> >>>>>>>>>>>>>>>> "The original idea is that we can distinguish different
> state
> >>>>>>>>>>> store
> >>>>>>>>>>>>>>>> exception for different handling. But to be honest, I am
> not
> >>>>>>> quite
> >>>>>>>>>>>> sure
> >>>>>>>>>>>>>>>> this is necessary. Maybe have some change during
> >>>>>>> implementation."
> >>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>> During the implementation, I also feel we maybe not need
> >>>> wrapper
> >>>>>>>>>>> it.
> >>>>>>>>>>>>>>>> We can just throw the correctly directly.
> >>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>> Is `StreamThreadNotRunningException` really an retryable
> >>>> error?
> >>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>> When KafkaStream state is REBALANCING, I think it is a
> >>>> retryable
> >>>>>>>>>>>> error.
> >>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>> StreamThreadStateStoreProvider#stores() will throw
> >>>>>>>>>>>>>>>> StreamThreadNotRunningException when StreamThread state is
> >>>> not
> >>>>>>>>>>>>> RUNNING.
> >>>>>>>>>>>>>>> The
> >>>>>>>>>>>>>>>> user can retry until KafkaStream state is RUNNING.
> >>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>> When would we throw an `StateStoreEmptyException`? The
> >>>>>>> semantics
> >>>>>>>>>>> is
> >>>>>>>>>>>>>>>> unclear to me atm.
> >>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>> When the state is RUNNING, is
> `StateStoreClosedException` a
> >>>>>>>>>>>> retryable
> >>>>>>>>>>>>>>>> error?
> >>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>> These two comments will be answered in another mail.
> >>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>> ---
> >>>>>>>>>>>>>>>> Vito
> >>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>> On Mon, Jun 11, 2018 at 8:12 AM, Matthias J. Sax <
> >>>>>>>>>>>>> matth...@confluent.io>
> >>>>>>>>>>>>>>>> wrote:
> >>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>> Vito,
> >>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>> what is the status of this KIP?
> >>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>> I just re-read it, and have a couple of follow up
> comments.
> >>>> Why
> >>>>>>>>>>> do
> >>>>>>>>>>>> we
> >>>>>>>>>>>>>>>>> discuss the internal exceptions you want to add? Also,
> do we
> >>>>>>>>>>> really
> >>>>>>>>>>>>> need
> >>>>>>>>>>>>>>>>> them? Can't we just throw the correct exception directly
> >>>>>>> instead
> >>>>>>>>>>> of
> >>>>>>>>>>>>>>>>> wrapping it later?
> >>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>> When would we throw an `StateStoreEmptyException`? The
> >>>>>>> semantics
> >>>>>>>>>>> is
> >>>>>>>>>>>>>>>>> unclear to me atm.
> >>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>> Is `StreamThreadNotRunningException` really an retryable
> >>>> error?
> >>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>> When the state is RUNNING, is
> `StateStoreClosedException` a
> >>>>>>>>>>>> retryable
> >>>>>>>>>>>>>>>>> error?
> >>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>> One more nits: ReadOnlyWindowStore got a new method
> #fetch(K
> >>>>>>> key,
> >>>>>>>>>>>> long
> >>>>>>>>>>>>>>>>> time); that should be added
> >>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>> Overall I like the KIP but some details are still
> unclear.
> >>>>>>> Maybe
> >>>>>>>>>>> it
> >>>>>>>>>>>>>>>>> might help if you open an PR in parallel?
> >>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>> -Matthias
> >>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>> On 4/24/18 8:18 AM, vito jeng wrote:
> >>>>>>>>>>>>>>>>>> Hi, Guozhang,
> >>>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>>> Thanks for the comment!
> >>>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>>> Hi, Bill,
> >>>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>>> I'll try to make some update to make the KIP better.
> >>>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>>> Thanks for the comment!
> >>>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>>> ---
> >>>>>>>>>>>>>>>>>> Vito
> >>>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>>> On Sat, Apr 21, 2018 at 5:40 AM, Bill Bejeck <
> >>>>>>> bbej...@gmail.com
> >>>>>>>>>>>>
> >>>>>>>>>>>>>>> wrote:
> >>>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>>>> Hi Vito,
> >>>>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>>>> Thanks for the KIP, overall it's a +1 from me.
> >>>>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>>>> At this point, the only thing I would change is
> possibly
> >>>>>>>>>>> removing
> >>>>>>>>>>>>> the
> >>>>>>>>>>>>>>>>>>> listing of all methods called by the user and the
> listing
> >>>> of
> >>>>>>>>>>> all
> >>>>>>>>>>>>> store
> >>>>>>>>>>>>>>>>>>> types and focus on what states result in which
> exceptions
> >>>>>>>>>>> thrown
> >>>>>>>>>>>> to
> >>>>>>>>>>>>>>> the
> >>>>>>>>>>>>>>>>>>> user.
> >>>>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>>>> Thanks,
> >>>>>>>>>>>>>>>>>>> Bill
> >>>>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>>>> On Fri, Apr 20, 2018 at 2:10 PM, Guozhang Wang <
> >>>>>>>>>>>> wangg...@gmail.com>
> >>>>>>>>>>>>>>>>> wrote:
> >>>>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>>>>> Thanks for the KIP Vito!
> >>>>>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>>>>> I made a pass over the wiki and it looks great to me.
> >>>> I'm +1
> >>>>>>>>>>> on
> >>>>>>>>>>>> the
> >>>>>>>>>>>>>>>>> KIP.
> >>>>>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>>>>> About the base class InvalidStateStoreException
> itself,
> >>>> I'd
> >>>>>>>>>>>>> actually
> >>>>>>>>>>>>>>>>>>>> suggest we do not deprecate it but still expose it as
> >>>> part
> >>>>>>> of
> >>>>>>>>>>> the
> >>>>>>>>>>>>>>>>> public
> >>>>>>>>>>>>>>>>>>>> API, for people who do not want to handle these cases
> >>>>>>>>>>> differently
> >>>>>>>>>>>>> (if
> >>>>>>>>>>>>>>>>> we
> >>>>>>>>>>>>>>>>>>>> deprecate it then we are enforcing them to capture all
> >>>> three
> >>>>>>>>>>>>>>> exceptions
> >>>>>>>>>>>>>>>>>>>> one-by-one).
> >>>>>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>>>>> Guozhang
> >>>>>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>>>>> On Fri, Apr 20, 2018 at 9:14 AM, John Roesler <
> >>>>>>>>>>> j...@confluent.io
> >>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>> wrote:
> >>>>>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>>>>>> Hi Vito,
> >>>>>>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>>>>>> Thanks for the KIP!
> >>>>>>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>>>>>> I think it's much nicer to give callers different
> >>>>>>> exceptions
> >>>>>>>>>>> to
> >>>>>>>>>>>>> tell
> >>>>>>>>>>>>>>>>>>> them
> >>>>>>>>>>>>>>>>>>>>> whether the state store got migrated, whether it's
> still
> >>>>>>>>>>>>>>> initializing,
> >>>>>>>>>>>>>>>>>>> or
> >>>>>>>>>>>>>>>>>>>>> whether there's some unrecoverable error.
> >>>>>>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>>>>>> In the KIP, it's typically not necessary to discuss
> >>>>>>>>>>>>> non-user-facing
> >>>>>>>>>>>>>>>>>>>> details
> >>>>>>>>>>>>>>>>>>>>> such as what exceptions we will throw internally. The
> >>>> KIP
> >>>>>>> is
> >>>>>>>>>>>>>>> primarily
> >>>>>>>>>>>>>>>>>>> to
> >>>>>>>>>>>>>>>>>>>>> discuss public interface changes.
> >>>>>>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>>>>>> You might consider simply removing all the internal
> >>>> details
> >>>>>>>>>>> from
> >>>>>>>>>>>>> the
> >>>>>>>>>>>>>>>>>>> KIP,
> >>>>>>>>>>>>>>>>>>>>> which will have the dual advantage that it makes the
> KIP
> >>>>>>>>>>> smaller
> >>>>>>>>>>>>> and
> >>>>>>>>>>>>>>>>>>>> easier
> >>>>>>>>>>>>>>>>>>>>> to agree on, as well as giving you more freedom in
> the
> >>>>>>>>>>> internal
> >>>>>>>>>>>>>>>>> details
> >>>>>>>>>>>>>>>>>>>>> when it comes to implementation.
> >>>>>>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>>>>>> I like your decision to have your refined exceptions
> >>>> extend
> >>>>>>>>>>>>>>>>>>>>> InvalidStateStoreException to ensure backward
> >>>>>>> compatibility.
> >>>>>>>>>>>> Since
> >>>>>>>>>>>>>>> we
> >>>>>>>>>>>>>>>>>>>> want
> >>>>>>>>>>>>>>>>>>>>> to encourage callers to catch the more specific
> >>>> exceptions,
> >>>>>>>>>>> and
> >>>>>>>>>>>> we
> >>>>>>>>>>>>>>>>>>> don't
> >>>>>>>>>>>>>>>>>>>>> expect to ever throw a raw InvalidStateStoreException
> >>>>>>>>>>> anymore,
> >>>>>>>>>>>> you
> >>>>>>>>>>>>>>>>>>> might
> >>>>>>>>>>>>>>>>>>>>> consider adding the @Deprecated annotation to
> >>>>>>>>>>>>>>>>>>> InvalidStateStoreException.
> >>>>>>>>>>>>>>>>>>>>> This will gently encourage callers to migrate to the
> new
> >>>>>>>>>>>> exception
> >>>>>>>>>>>>>>> and
> >>>>>>>>>>>>>>>>>>>> open
> >>>>>>>>>>>>>>>>>>>>> the possibility of removing
> InvalidStateStoreException
> >>>>>>>>>>> entirely
> >>>>>>>>>>>>> in a
> >>>>>>>>>>>>>>>>>>>> future
> >>>>>>>>>>>>>>>>>>>>> release.
> >>>>>>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>>>>>> Thanks,
> >>>>>>>>>>>>>>>>>>>>> -John
> >>>>>>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>>>>>> On Thu, Apr 19, 2018 at 8:58 AM, Matthias J. Sax <
> >>>>>>>>>>>>>>>>>>> matth...@confluent.io>
> >>>>>>>>>>>>>>>>>>>>> wrote:
> >>>>>>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>>>>>>> Thanks for clarification! That makes sense to me.
> >>>>>>>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>>>>>>> Can you update the KIP to make those suggestions
> >>>> explicit?
> >>>>>>>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>>>>>>> -Matthias
> >>>>>>>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>>>>>>> On 4/18/18 2:19 PM, vito jeng wrote:
> >>>>>>>>>>>>>>>>>>>>>>> Matthias,
> >>>>>>>>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>>>>>>>> Thanks for the feedback!
> >>>>>>>>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>>>>>>>>> It's up to you to keep the details part in the
> KIP or
> >>>>>>> not.
> >>>>>>>>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>>>>>>>> Got it!
> >>>>>>>>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>>>>>>>>> The (incomplete) question was, if we need
> >>>>>>>>>>>>>>>>>>> `StateStoreFailException`
> >>>>>>>>>>>>>>>>>>>> or
> >>>>>>>>>>>>>>>>>>>>>>>> if existing `InvalidStateStoreException` could be
> >>>> used?
> >>>>>>> Do
> >>>>>>>>>>>> you
> >>>>>>>>>>>>>>>>>>>> suggest
> >>>>>>>>>>>>>>>>>>>>>>>> that `InvalidStateStoreException` is not thrown at
> >>>> all
> >>>>>>>>>>>> anymore,
> >>>>>>>>>>>>>>>>>>> but
> >>>>>>>>>>>>>>>>>>>>> only
> >>>>>>>>>>>>>>>>>>>>>>>> the new sub-classes (just to get a better
> >>>>>>> understanding).
> >>>>>>>>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>>>>>>>> Yes. I suggest that `InvalidStateStoreException` is
> >>>> not
> >>>>>>>>>>> thrown
> >>>>>>>>>>>>> at
> >>>>>>>>>>>>>>>>>>> all
> >>>>>>>>>>>>>>>>>>>>>>> anymore,
> >>>>>>>>>>>>>>>>>>>>>>> but only new sub-classes.
> >>>>>>>>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>>>>>>>>> Not sure what this sentence means:
> >>>>>>>>>>>>>>>>>>>>>>>>> The internal exception will be wrapped as
> category
> >>>>>>>>>>> exception
> >>>>>>>>>>>>>>>>>>>> finally.
> >>>>>>>>>>>>>>>>>>>>>>>> Can you elaborate?
> >>>>>>>>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>>>>>>>> For example,
> `StreamThreadStateStoreProvider#stores()`
> >>>>>>> will
> >>>>>>>>>>>>> throw
> >>>>>>>>>>>>>>>>>>>>>>> `StreamThreadNotRunningException`(internal
> exception).
> >>>>>>>>>>>>>>>>>>>>>>> And then the internal exception will be wrapped as
> >>>>>>>>>>>>>>>>>>>>>>> `StateStoreRetryableException` or
> >>>>>>> `StateStoreFailException`
> >>>>>>>>>>>>> during
> >>>>>>>>>>>>>>>>>>>> the
> >>>>>>>>>>>>>>>>>>>>>>> `KafkaStreams.store()` and throw to the user.
> >>>>>>>>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>>>>>>>>> Can you explain the purpose of the "internal
> >>>>>>> exceptions".
> >>>>>>>>>>>> It's
> >>>>>>>>>>>>>>>>>>>> unclear
> >>>>>>>>>>>>>>>>>>>>>>> to me atm why they are introduced.
> >>>>>>>>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>>>>>>>> Hmmm...the purpose of the "internal exceptions" is
> to
> >>>>>>>>>>>>> distinguish
> >>>>>>>>>>>>>>>>>>>>> between
> >>>>>>>>>>>>>>>>>>>>>>> the different kinds of InvalidStateStoreException.
> >>>>>>>>>>>>>>>>>>>>>>> The original idea is that we can distinguish
> different
> >>>>>>>>>>> state
> >>>>>>>>>>>>> store
> >>>>>>>>>>>>>>>>>>>>>>> exception for
> >>>>>>>>>>>>>>>>>>>>>>> different handling.
> >>>>>>>>>>>>>>>>>>>>>>> But to be honest, I am not quite sure this is
> >>>> necessary.
> >>>>>>>>>>> Maybe
> >>>>>>>>>>>>>>> have
> >>>>>>>>>>>>>>>>>>>>>>> some change during implementation.
> >>>>>>>>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>>>>>>>> Does it make sense?
> >>>>>>>>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>>>>>>>> ---
> >>>>>>>>>>>>>>>>>>>>>>> Vito
> >>>>>>>>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>>>>>>>> On Mon, Apr 16, 2018 at 5:59 PM, Matthias J. Sax <
> >>>>>>>>>>>>>>>>>>>>> matth...@confluent.io>
> >>>>>>>>>>>>>>>>>>>>>>> wrote:
> >>>>>>>>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>>>>>>>>> Thanks for the update Vito!
> >>>>>>>>>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>>>>>>>>> It's up to you to keep the details part in the
> KIP or
> >>>>>>> not.
> >>>>>>>>>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>>>>>>>>> The (incomplete) question was, if we need
> >>>>>>>>>>>>>>>>>>> `StateStoreFailException`
> >>>>>>>>>>>>>>>>>>>> or
> >>>>>>>>>>>>>>>>>>>>>>>> if existing `InvalidStateStoreException` could be
> >>>> used?
> >>>>>>> Do
> >>>>>>>>>>>> you
> >>>>>>>>>>>>>>>>>>>> suggest
> >>>>>>>>>>>>>>>>>>>>>>>> that `InvalidStateStoreException` is not thrown at
> >>>> all
> >>>>>>>>>>>> anymore,
> >>>>>>>>>>>>>>>>>>> but
> >>>>>>>>>>>>>>>>>>>>> only
> >>>>>>>>>>>>>>>>>>>>>>>> the new sub-classes (just to get a better
> >>>>>>> understanding).
> >>>>>>>>>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>>>>>>>>> Not sure what this sentence means:
> >>>>>>>>>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>>>>>>>>>> The internal exception will be wrapped as
> category
> >>>>>>>>>>> exception
> >>>>>>>>>>>>>>>>>>>> finally.
> >>>>>>>>>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>>>>>>>>> Can you elaborate?
> >>>>>>>>>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>>>>>>>>> Can you explain the purpose of the "internal
> >>>>>>> exceptions".
> >>>>>>>>>>>> It's
> >>>>>>>>>>>>>>>>>>>> unclear
> >>>>>>>>>>>>>>>>>>>>>>>> to me atm why they are introduced.
> >>>>>>>>>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>>>>>>>>> -Matthias
> >>>>>>>>>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>>>>>>>>> On 4/10/18 12:33 AM, vito jeng wrote:
> >>>>>>>>>>>>>>>>>>>>>>>>> Matthias,
> >>>>>>>>>>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>>>>>>>>>> Thanks for the review.
> >>>>>>>>>>>>>>>>>>>>>>>>> I reply separately in the following sections.
> >>>>>>>>>>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>>>>>>>>>> ---
> >>>>>>>>>>>>>>>>>>>>>>>>> Vito
> >>>>>>>>>>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>>>>>>>>>> On Sun, Apr 8, 2018 at 1:30 PM, Matthias J. Sax <
> >>>>>>>>>>>>>>>>>>>>> matth...@confluent.io
> >>>>>>>>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>>>>>>>>>> wrote:
> >>>>>>>>>>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>>>>>>>>>>> Thanks for updating the KIP and sorry for the
> long
> >>>>>>>>>>> pause...
> >>>>>>>>>>>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>>>>>>>>>>> Seems you did a very thorough investigation of
> the
> >>>>>>> code.
> >>>>>>>>>>>> It's
> >>>>>>>>>>>>>>>>>>>> useful
> >>>>>>>>>>>>>>>>>>>>>> to
> >>>>>>>>>>>>>>>>>>>>>>>>>> understand what user facing interfaces are
> >>>> affected.
> >>>>>>>>>>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>>>>>>>>>> (Some parts might be even too detailed for a
> KIP.)
> >>>>>>>>>>>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>>>>>>>>>> I also think too detailed. Especially the section
> >>>>>>>>>>> `Changes
> >>>>>>>>>>>> in
> >>>>>>>>>>>>>>>>>>> call
> >>>>>>>>>>>>>>>>>>>>>>>> trace`.
> >>>>>>>>>>>>>>>>>>>>>>>>> Do you think it should be removed?
> >>>>>>>>>>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>>>>>>>>>>> To summarize my current understanding of your
> KIP,
> >>>> the
> >>>>>>>>>>> main
> >>>>>>>>>>>>>>>>>>> change
> >>>>>>>>>>>>>>>>>>>>> is
> >>>>>>>>>>>>>>>>>>>>>> to
> >>>>>>>>>>>>>>>>>>>>>>>>>> introduce new exceptions that extend
> >>>>>>>>>>>>>>>>>>> `InvalidStateStoreException`.
> >>>>>>>>>>>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>>>>>>>>>> yep. Keep compatibility in this KIP is important
> >>>>>>> things.
> >>>>>>>>>>>>>>>>>>>>>>>>> I think the best way is that all new exceptions
> >>>> extend
> >>>>>>>>>>> from
> >>>>>>>>>>>>>>>>>>>>>>>>> `InvalidStateStoreException`.
> >>>>>>>>>>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>>>>>>>>>>> Some questions:
> >>>>>>>>>>>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>>>>>>>>>>>  - Why do we need ```? Could
> >>>>>>>>>>> `InvalidStateStoreException`
> >>>>>>>>>>>> be
> >>>>>>>>>>>>>>>>>>> used
> >>>>>>>>>>>>>>>>>>>>> for
> >>>>>>>>>>>>>>>>>>>>>>>>>> this purpose?
> >>>>>>>>>>>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>>>>>>>>>> Does this question miss some word?
> >>>>>>>>>>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>>>>>>>>>>>  - What the superclass of
> >>>>>>>>>>> `StateStoreStreamThreadNotRunni
> >>>>>>>>>>>>>>>>>>>>> ngException`
> >>>>>>>>>>>>>>>>>>>>>>>>>> is? Should it be `InvalidStateStoreException` or
> >>>>>>>>>>>>>>>>>>>>>>>> `StateStoreFailException`
> >>>>>>>>>>>>>>>>>>>>>>>>>> ?
> >>>>>>>>>>>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>>>>>>>>>>>  - Is `StateStoreClosed` a fatal or retryable
> >>>>>>> exception
> >>>>>>>>>>> ?
> >>>>>>>>>>>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>>>>>>>>>> I apologize for not well written parts. I tried
> to
> >>>>>>> modify
> >>>>>>>>>>>> some
> >>>>>>>>>>>>>>>>>>> code
> >>>>>>>>>>>>>>>>>>>>> in
> >>>>>>>>>>>>>>>>>>>>>>>> the
> >>>>>>>>>>>>>>>>>>>>>>>>> recent period and modify the KIP.
> >>>>>>>>>>>>>>>>>>>>>>>>> The modification is now complete. Please look
> again.
> >>>>>>>>>>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>>>>>>>>>>> -Matthias
> >>>>>>>>>>>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>>>>>>>>>>> On 2/21/18 5:15 PM, vito jeng wrote:
> >>>>>>>>>>>>>>>>>>>>>>>>>>> Matthias,
> >>>>>>>>>>>>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>>>>>>>>>>>> Sorry for not response these days.
> >>>>>>>>>>>>>>>>>>>>>>>>>>> I just finished it. Please have a look. :)
> >>>>>>>>>>>>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>>>>>>>>>>>> ---
> >>>>>>>>>>>>>>>>>>>>>>>>>>> Vito
> >>>>>>>>>>>>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>>>>>>>>>>>> On Wed, Feb 14, 2018 at 5:45 AM, Matthias J.
> Sax <
> >>>>>>>>>>>>>>>>>>>>>>>> matth...@confluent.io>
> >>>>>>>>>>>>>>>>>>>>>>>>>>> wrote:
> >>>>>>>>>>>>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>>>>>>>>>>>>> Is there any update on this KIP?
> >>>>>>>>>>>>>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>>>>>>>>>>>>> -Matthias
> >>>>>>>>>>>>>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>>>>>>>>>>>>> On 1/3/18 12:59 AM, vito jeng wrote:
> >>>>>>>>>>>>>>>>>>>>>>>>>>>>> Matthias,
> >>>>>>>>>>>>>>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>>>>>>>>>>>>>> Thank you for your response.
> >>>>>>>>>>>>>>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>>>>>>>>>>>>>> I think you are right. We need to look at the
> >>>> state
> >>>>>>>>>>> both
> >>>>>>>>>>>>> of
> >>>>>>>>>>>>>>>>>>>>>>>>>>>>> KafkaStreams and StreamThread.
> >>>>>>>>>>>>>>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>>>>>>>>>>>>>> After further understanding of KafkaStreams
> >>>> thread
> >>>>>>>>>>> and
> >>>>>>>>>>>>> state
> >>>>>>>>>>>>>>>>>>>>> store,
> >>>>>>>>>>>>>>>>>>>>>>>>>>>>> I am currently rewriting the KIP.
> >>>>>>>>>>>>>>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>>>>>>>>>>>>>> ---
> >>>>>>>>>>>>>>>>>>>>>>>>>>>>> Vito
> >>>>>>>>>>>>>>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>>>>>>>>>>>>>> On Fri, Dec 29, 2017 at 4:32 AM, Matthias J.
> >>>> Sax <
> >>>>>>>>>>>>>>>>>>>>>>>>>> matth...@confluent.io>
> >>>>>>>>>>>>>>>>>>>>>>>>>>>>> wrote:
> >>>>>>>>>>>>>>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>>>>>>>>>>>>>>> Vito,
> >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>>>>>>>>>>>>>>> Sorry for this late reply.
> >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>>>>>>>>>>>>>>> There can be two cases:
> >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>  - either a store got migrated way and
> thus, is
> >>>>>>> not
> >>>>>>>>>>>>> hosted
> >>>>>>>>>>>>>>>>>>> an
> >>>>>>>>>>>>>>>>>>>>> the
> >>>>>>>>>>>>>>>>>>>>>>>>>>>>>> application instance anymore,
> >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>  - or, a store is hosted but the instance
> is in
> >>>>>>>>>>> state
> >>>>>>>>>>>>>>>>>>>> rebalance
> >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>>>>>>>>>>>>>>> For the first case, users need to rediscover
> >>>> the
> >>>>>>>>>>> store.
> >>>>>>>>>>>>> For
> >>>>>>>>>>>>>>>>>>>> the
> >>>>>>>>>>>>>>>>>>>>>>>> second
> >>>>>>>>>>>>>>>>>>>>>>>>>>>>>> case, they need to wait until rebalance is
> >>>>>>> finished.
> >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>>>>>>>>>>>>>>> If KafkaStreams is in state ERROR,
> >>>>>>>>>>> PENDING_SHUTDOWN, or
> >>>>>>>>>>>>>>>>>>>>>> NOT_RUNNING,
> >>>>>>>>>>>>>>>>>>>>>>>>>>>>>> uses cannot query at all and thus they
> cannot
> >>>>>>>>>>>> rediscover
> >>>>>>>>>>>>> or
> >>>>>>>>>>>>>>>>>>>>> retry.
> >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>>>>>>>>>>>>>>> Does this make sense?
> >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>>>>>>>>>>>>>>> -Matthias
> >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>>>>>>>>>>>>>>> On 12/20/17 12:54 AM, vito jeng wrote:
> >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> Matthias,
> >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> I try to clarify some concept.
> >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> When streams state is REBALANCING, it means
> >>>> the
> >>>>>>>>>>> user
> >>>>>>>>>>>> can
> >>>>>>>>>>>>>>>>>>> just
> >>>>>>>>>>>>>>>>>>>>>> plain
> >>>>>>>>>>>>>>>>>>>>>>>>>>>>>> retry.
> >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> When streams state is ERROR or
> >>>> PENDING_SHUTDOWN
> >>>>>>> or
> >>>>>>>>>>>>>>>>>>>> NOT_RUNNING,
> >>>>>>>>>>>>>>>>>>>>>> it
> >>>>>>>>>>>>>>>>>>>>>>>>>>>> means
> >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> state store migrated to another instance,
> the
> >>>>>>> user
> >>>>>>>>>>>> needs
> >>>>>>>>>>>>>>> to
> >>>>>>>>>>>>>>>>>>>>>>>>>> rediscover
> >>>>>>>>>>>>>>>>>>>>>>>>>>>>>> the
> >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> store.
> >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> Is my understanding correct?
> >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> ---
> >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> Vito
> >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> On Sun, Nov 5, 2017 at 12:30 AM, Matthias
> J.
> >>>> Sax
> >>>>>>> <
> >>>>>>>>>>>>>>>>>>>>>>>>>>>> matth...@confluent.io>
> >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> wrote:
> >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> Thanks for the KIP Vito!
> >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> I agree with what Guozhang said. The
> original
> >>>>>>>>>>> idea of
> >>>>>>>>>>>>> the
> >>>>>>>>>>>>>>>>>>>> Jira
> >>>>>>>>>>>>>>>>>>>>>>>> was,
> >>>>>>>>>>>>>>>>>>>>>>>>>> to
> >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> give different exceptions for different
> >>>>>>> "recovery"
> >>>>>>>>>>>>>>>>>>>> strategies
> >>>>>>>>>>>>>>>>>>>>> to
> >>>>>>>>>>>>>>>>>>>>>>>> the
> >>>>>>>>>>>>>>>>>>>>>>>>>>>>>> user.
> >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> For example, if a store is currently
> >>>> recreated,
> >>>>>>> a
> >>>>>>>>>>>> user
> >>>>>>>>>>>>>>>>>>> just
> >>>>>>>>>>>>>>>>>>>>> need
> >>>>>>>>>>>>>>>>>>>>>>>> to
> >>>>>>>>>>>>>>>>>>>>>>>>>>>> wait
> >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> and can query the store later. On the
> other
> >>>>>>> hand,
> >>>>>>>>>>> if
> >>>>>>>>>>>> a
> >>>>>>>>>>>>>>>>>>> store
> >>>>>>>>>>>>>>>>>>>>> go
> >>>>>>>>>>>>>>>>>>>>>>>>>>>> migrated
> >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> to another instance, a user needs to
> >>>> rediscover
> >>>>>>>>>>> the
> >>>>>>>>>>>>> store
> >>>>>>>>>>>>>>>>>>>>>> instead
> >>>>>>>>>>>>>>>>>>>>>>>>>> of a
> >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> "plain retry".
> >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> Fatal errors might be a third category.
> >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> Not sure if there is something else?
> >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> Anyway, the KIP should contain a section
> that
> >>>>>>>>>>> talks
> >>>>>>>>>>>>> about
> >>>>>>>>>>>>>>>>>>>> this
> >>>>>>>>>>>>>>>>>>>>>>>> ideas
> >>>>>>>>>>>>>>>>>>>>>>>>>>>> and
> >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> reasoning.
> >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> -Matthias
> >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> On 11/3/17 11:26 PM, Guozhang Wang wrote:
> >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> Thanks for writing up the KIP.
> >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> Vito, Matthias: one thing that I wanted
> to
> >>>>>>> figure
> >>>>>>>>>>>> out
> >>>>>>>>>>>>>>>>>>> first
> >>>>>>>>>>>>>>>>>>>>> is
> >>>>>>>>>>>>>>>>>>>>>>>> what
> >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> categories of errors we want to notify
> the
> >>>>>>>>>>> users, if
> >>>>>>>>>>>>> we
> >>>>>>>>>>>>>>>>>>>> only
> >>>>>>>>>>>>>>>>>>>>>>>> wants
> >>>>>>>>>>>>>>>>>>>>>>>>>> to
> >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> distinguish fatal v.s. retriable then
> >>>> probably
> >>>>>>> we
> >>>>>>>>>>>>> should
> >>>>>>>>>>>>>>>>>>>>> rename
> >>>>>>>>>>>>>>>>>>>>>>>> the
> >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> proposed StateStoreMigratedException /
> >>>>>>>>>>>>>>>>>>>>>> StateStoreClosedException
> >>>>>>>>>>>>>>>>>>>>>>>>>>>>>> classes.
> >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> And then from there we should list what
> are
> >>>> the
> >>>>>>>>>>>>> possible
> >>>>>>>>>>>>>>>>>>>>>> internal
> >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> exceptions ever thrown in those APIs in
> the
> >>>>>>> call
> >>>>>>>>>>>>> trace,
> >>>>>>>>>>>>>>>>>>> and
> >>>>>>>>>>>>>>>>>>>>>> which
> >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> exceptions should be wrapped to what
> others,
> >>>>>>> and
> >>>>>>>>>>>> which
> >>>>>>>>>>>>>>>>>>> ones
> >>>>>>>>>>>>>>>>>>>>>>>> should
> >>>>>>>>>>>>>>>>>>>>>>>>>> be
> >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> handled without re-throwing, and which
> ones
> >>>>>>>>>>> should
> >>>>>>>>>>>> not
> >>>>>>>>>>>>>>> be
> >>>>>>>>>>>>>>>>>>>>>> wrapped
> >>>>>>>>>>>>>>>>>>>>>>>>>> at
> >>>>>>>>>>>>>>>>>>>>>>>>>>>>>> all
> >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> but directly thrown to user's face.
> >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> Guozhang
> >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> On Wed, Nov 1, 2017 at 11:09 PM, vito
> jeng <
> >>>>>>>>>>>>>>>>>>>>>> v...@is-land.com.tw>
> >>>>>>>>>>>>>>>>>>>>>>>>>>>>>> wrote:
> >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> Hi,
> >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> I'd like to start discuss KIP-216:
> >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> https://cwiki.apache.org/
> >>>>>>>>>>>>> confluence/display/KAFKA/KIP-
> >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
> >>>>>>> 216%3A+IQ+should+throw+different+exceptions+for+
> >>>>>>>>>>>>>>>>>>>>>>>> different+errors
> >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> Please have a look.
> >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> Thanks!
> >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> ---
> >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> Vito
> >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>>>>> --
> >>>>>>>>>>>>>>>>>>>> -- Guozhang
> >>>>>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>
> >>>>>>>>>>>>>>
> >>>>>>>>>>>>>
> >>>>>>>>>>>>>
> >>>>>>>>>>>>
> >>>>>>>>>>>>
> >>>>>>>>>>>> --
> >>>>>>>>>>>> -- Guozhang
> >>>>>>>>>>>>
> >>>>>>>>>>>
> >>>>>>>>>>
> >>>>>>>>>
> >>>>>>>>
> >>>>>>>
> >>>>>>>
> >>>>>
> >>>>
> >>>>
> >>
> >
>
>

Reply via email to