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 > >>>>> > >>>> > >>> > >> > > > >