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