Thanks John.

I think I'm convinced about not collapsing the metrics measuring for
various function calls. Regarding the possible solution I'm a bit inclined
to just distinguish on the metric names directly over on tags: since our
current metrics naming are a tad messed up anyways, fixing them in one shot
as a breaking change sounds reasonable to me.


Guozhang


On Mon, May 6, 2019 at 9:14 AM John Roesler <j...@confluent.io> wrote:

> Thanks all (or range? ;) ) for the discussion. Good points all around.
>
> Although I see the allure of naming the metrics the same as the things
> they're measuring, it seems not to be perfect. Seconding Matthias's latter
> thought, I think it's likely you'd want to measure the method calls
> independently, since the different range variants would have wildly
> different characteristics, which could then lead you to want to orient the
> storage differently to support particular use cases.
>
> Pointing out some structural characteristics (I know you all know this
> stuff, I'm just constructing a table for analysis):
> * Java supports method-name overloading. *Different* methods can have the
> same names, distinguished by arg lists; it doesn't change the fact that
> they are different methods.
> * Metrics does not support metric-name overloading, but metric names do
> have some structure we could exploit, if you consider the tags.
>
> It seems to me that there's actually more domain mismatch if we just have
> one metric named "range", since (e.g., in the SessionStore proposal above)
> the Java API has *four* methods named "range".
>
> Two potential solutions I see:
> * hierarchical metric names: "range-single-key-all-time",
> "range-key-range-all-time", "range-single-key-time-range",
> "range-key-range-time-range", maybe with better names... I'm not the best
> at this stuff. Hopefully, you see the point, though... they all start with
> "range", which provides the association to the method, and all have a
> suffix which identifies the overload being measured.
> * tagged metric names: "range" {"variant": "single-key-all-time"}, "range"
> {"variant": "key-range-all-time"}, "range" {"variant":
> "single-key-time-range"}, "range" {"variant": "key-range-time-range"} . Or
> you could even split the tags up semantically, but my instinct says that
> that would just make it harder to digest the metrics later on.
>
> Just some ideas.
> -John
>
> On Fri, Apr 26, 2019 at 3:51 AM Matthias J. Sax <matth...@confluent.io>
> wrote:
>
> > Thanks for the input Guozhang. I was not aware of those dependencies.
> >
> > It might be good to align this KIP with the metrics cleanup. Not sure
> > atm, if we should use different metric names for different overloads,
> > even if those have the same method name?
> >
> > If we rename all method to `range()` and use the same metric name for
> > all, one could argue that this is still fine, because the metric
> > collects how often a range query is executed (regardless of the range
> > itself).
> >
> > On the other hand, this would basically be a "roll up". It could still
> > be valuable to distinguish between single-key-time-range,
> > key-range-time-range, and all-range queries. Users could still aggregate
> > those later if they are not interested in the details, while it's not
> > possible for user to split a pre-aggregated metric into it's component.
> >
> >
> > Input from others might be helpful here, too.
> >
> >
> > -Matthias
> >
> > On 4/11/19 6:00 PM, Guozhang Wang wrote:
> > > While working at KIP-444 (https://github.com/apache/kafka/pull/6498) I
> > > realized there are a bunch of issues on metric names v.s. function
> names,
> > > e.g. some function named `fetchAll` are actually measure with `fetch`,
> > etc.
> > > So in that KIP I proposed to make the function name aligned with
> metrics
> > > name. So suppose we rename the functions from `fetch` to `range` I'd
> > > suggest we make this change as part of KIP-444 as well. Note that it
> > means
> > > different functions with the same name `range` will be measured under a
> > > single metric then.
> > >
> > > But still for function named `all` it will be measured under a separate
> > > metric named `all`, so I'm just clarifying with you if that's the
> > intention.
> > >
> > >
> > > Guozhang
> > >
> > > On Thu, Apr 11, 2019 at 2:04 PM Matthias J. Sax <matth...@confluent.io
> >
> > > wrote:
> > >
> > >> I did not see a reason to rename `all()` to `range()`. `all()` does
> not
> > >> take any parameters to limit a range and is a good name IMHO. But I am
> > >> not married to keep `all()` and if we think we should rename it, too,
> I
> > >> am fine with it.
> > >>
> > >> Not sure what connection you make to metrics though. Can you
> elaborate?
> > >>
> > >>
> > >> Would be interested to hear others opinions on this, too.
> > >>
> > >>
> > >> -Matthias
> > >>
> > >> On 4/11/19 8:38 AM, Guozhang Wang wrote:
> > >>> I like the renaming, since it also aligns with our metrics cleanup
> > >>> (KIP-444) which touches upon the store level metrics as well.
> > >>>
> > >>> One question: you seems still suggesting to keep "all" with the
> current
> > >>> name (and also using a separate metric for it), what's the difference
> > >>> between this one and other "range" functions?
> > >>>
> > >>>
> > >>> Guozhang
> > >>>
> > >>> On Thu, Apr 11, 2019 at 2:26 AM Matthias J. Sax <
> matth...@confluent.io
> > >
> > >>> wrote:
> > >>>
> > >>>> Thanks for the input.
> > >>>>
> > >>>>>> Just to clarify the naming conflicts is between the newly added
> > >> function
> > >>>>>> and the old functions that we want to deprecate / remove right?
> The
> > >>>>
> > >>>> Yes, the conflict is just fort the existing `fetch()` methods for
> > which
> > >>>> we want to change the return type.
> > >>>>
> > >>>> IMHO, we should not make a breaking change in a minor release. Thus,
> > we
> > >>>> could either only deprecate those fetch methods that return
> > >>>> `WindowStoreIterator` and do a "clean cut" in 3.0.
> > >>>>
> > >>>> Or we, follow the renaming path. No get a clean renaming, we need to
> > >>>> consider all methods that are called "fetch":
> > >>>>
> > >>>> ReadOnlyWindowStore:
> > >>>>
> > >>>>> V fetch(K, long)
> > >>>>> WindowStoreIterator<V> fetch(K, Instant, Instant)
> > >>>>> KeyValueIterator<Windowed<K>, V> fetch(K, K, Instant, Instant)
> > >>>>
> > >>>> WindowStore:
> > >>>>
> > >>>>> WindowStoreIterator<V> fetch(K, long, long)
> > >>>>> WindowStoreIterator<V> fetch(K, Instant, Instant)>
> > >>>> KeyValueIterator<Windowed<K>, V> fetch(K, K, long, long)
> > >>>>> KeyValueIterator<Windowed<K>, V> fetch(K, K, Instant, Instant)
> > >>>>
> > >>>> There is also fetchAll(long, long) and fetchAll(Instant, Instant)
> that
> > >>>> fetch over all keys.
> > >>>>
> > >>>> Maybe we could rename `V fetch(K, long)` to `V get(K, long)` and
> > rename
> > >>>> all `fetch()/fetchAll()` to `range()`? There is actually no reason
> to
> > >>>> have range()/rangeAll().
> > >>>>
> > >>>> If we do this, we might consider to rename methods for SessionStore,
> > >>>> too. There is
> > >>>>
> > >>>>> ReadOnlySessionStore#fetch(K)
> > >>>>> ReadOnlySessionStore#fetch(K, K)
> > >>>>> SessionStore#findSessions(K, long, long)
> > >>>>> SessionStore#findSessions(K, K, long, long)
> > >>>>> SessionStore#fetchSession(K, long, long);
> > >>>>
> > >>>> Consistent renaming might be:
> > >>>>
> > >>>> ReadOnlySessionStore#range(K)
> > >>>> ReadOnlySessionStore#range(K, K)
> > >>>> SessionStore#range(K, long, long)
> > >>>> SessionStore#range(K, K, long, long)
> > >>>> SessionStore#get(K, long, long);
> > >>>>
> > >>>>
> > >>>> Not sure if extensive renaming might have too big of an impact.
> > However,
> > >>>> `range()` and `get()` might actually be better names than `fetch()`,
> > >>>> thus, it might also provide some additional value.
> > >>>>
> > >>>> Thoughts?
> > >>>>
> > >>>>
> > >>>> -Matthias
> > >>>>
> > >>>>
> > >>>> On 3/27/19 10:19 AM, Guozhang Wang wrote:
> > >>>>> Hello Matthias,
> > >>>>>
> > >>>>> Just to clarify the naming conflicts is between the newly added
> > >> function
> > >>>>> and the old functions that we want to deprecate / remove right? The
> > >>>>> existing ones have different signatures with parameters so that
> they
> > >>>> should
> > >>>>> not have conflicts.
> > >>>>>
> > >>>>> I was thinking about just make the change directly without
> > deprecating
> > >>>>> existing ones which would require users of 2.3 to make code changes
> > --
> > >>>> this
> > >>>>> code change looks reasonably straight-forward to me and not much
> > worth
> > >>>>> deferring to later when the deprecated ones are removed.
> > >>>>>
> > >>>>> On the other hand, just deprecating "WindowIterator" without add
> new
> > >>>>> functions seems not very useful for users either since it is only
> > used
> > >> as
> > >>>>> an indicator but users cannot make code changes during this phase
> > >>>> anyways,
> > >>>>> so it is still a `one-cut` deal when we eventually remove the
> > >> deprecated
> > >>>>> ones and add the new one.
> > >>>>>
> > >>>>> Hence I'm slightly inclining to trade compatibility and replace it
> > with
> > >>>> new
> > >>>>> functions in one release, but if people have a good idea of the
> > >> renaming
> > >>>>> approach (I do not have a good one on top of my head :) I can also
> be
> > >>>>> convinced that way.
> > >>>>>
> > >>>>> Guozhang
> > >>>>>
> > >>>>>
> > >>>>> On Mon, Mar 11, 2019 at 10:41 AM Matthias J. Sax <
> > >> matth...@confluent.io>
> > >>>>> wrote:
> > >>>>>
> > >>>>>> I am open to change the return type to
> > >>>>>>
> > >>>>>> KeyValueIterator<Windowed<K>, V>
> > >>>>>>
> > >>>>>> However, this requires to rename
> > >>>>>>
> > >>>>>> #fetch(K key, long startTimestamp, long endTimestamp)
> > >>>>>> #fetch(K key, Instant startTimestamp, Instant endTimestamp)
> > >>>>>>
> > >>>>>> to avoid naming conflicts.
> > >>>>>>
> > >>>>>> What new name would you suggest? The existing methods are called
> > >>>>>> `fetch()`, `fetchAll()`, `all()`, `put()`.
> > >>>>>>
> > >>>>>> While I think it would be good to get fully aligned return types,
> I
> > am
> > >>>>>> not sure how we can get aligned method names (without renaming all
> > of
> > >>>>>> them...)? If we think it's worth to rename all to get this cleaned
> > >> up, I
> > >>>>>> am no opposed.
> > >>>>>>
> > >>>>>>
> > >>>>>> Thoughts?
> > >>>>>>
> > >>>>>>
> > >>>>>> -Matthias
> > >>>>>>
> > >>>>>>
> > >>>>>> On 3/11/19 10:27 AM, Guozhang Wang wrote:
> > >>>>>>> I was thinking about changing the return type even, to
> > >>>>>>> `KeyValueIterator<Windowed<K>, V>` since it is confusing to users
> > >> about
> > >>>>>> the
> > >>>>>>> key typed `Long` (Streams javadoc today did not explain it
> clearly
> > >>>>>> either),
> > >>>>>>> note it is not backward compatible at all.
> > >>>>>>>
> > >>>>>>> Personally I'd prefer to just deprecate the API and new new ones
> > that
> > >>>>>>> return `KeyValueIterator<Windowed<K>, V>` directly, but if most
> > >> people
> > >>>>>> felt
> > >>>>>>> it is too intrusive for compatibility I can be convinced with
> > >>>>>>> `KeyValueIterator<Long, V>` as well.
> > >>>>>>>
> > >>>>>>> Guozhang
> > >>>>>>>
> > >>>>>>> On Mon, Mar 11, 2019 at 10:17 AM Sophie Blee-Goldman <
> > >>>>>> sop...@confluent.io>
> > >>>>>>> wrote:
> > >>>>>>>
> > >>>>>>>> I remember thinking this while working on window stores, am
> > >> definitely
> > >>>>>> for
> > >>>>>>>> it.
> > >>>>>>>>
> > >>>>>>>> On Mon, Mar 11, 2019 at 9:20 AM John Roesler <j...@confluent.io
> >
> > >>>> wrote:
> > >>>>>>>>
> > >>>>>>>>> Sounds great to me. Thanks, Matthias!
> > >>>>>>>>> -John
> > >>>>>>>>>
> > >>>>>>>>> On Sun, Mar 10, 2019 at 11:58 PM Matthias J. Sax <
> > >>>>>> matth...@confluent.io>
> > >>>>>>>>> wrote:
> > >>>>>>>>>
> > >>>>>>>>>> Hi,
> > >>>>>>>>>>
> > >>>>>>>>>> I would like to propose KIP-439 to deprecate interface
> > >>>>>>>>>> `WindowStoreIterator`.
> > >>>>>>>>>>
> > >>>>>>>>>>
> > >>>>>>>>>>
> > >>>>>>>>>
> > >>>>>>>>
> > >>>>>>
> > >>>>
> > >>
> >
> https://cwiki.apache.org/confluence/display/KAFKA/KIP-439%3A+Deprecate+Interface+WindowStoreIterator
> > >>>>>>>>>>
> > >>>>>>>>>> Looking forward to your feedback.
> > >>>>>>>>>>
> > >>>>>>>>>>
> > >>>>>>>>>> -Matthias
> > >>>>>>>>>>
> > >>>>>>>>>>
> > >>>>>>>>>
> > >>>>>>>>
> > >>>>>>>
> > >>>>>>>
> > >>>>>>
> > >>>>>>
> > >>>>>
> > >>>>
> > >>>>
> > >>>
> > >>
> > >>
> > >
> >
> >
>


-- 
-- Guozhang

Reply via email to