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

Attachment: signature.asc
Description: OpenPGP digital signature

Reply via email to