Vladimir,

Agreed. My point is that the actual issue we want to fix is broken metrics.
Thus, we should have a single ticket/patch *about the broken metrics* that
incorporates all required changes, as well as relevant documentation
updates.

I don't think we need a vote. I will also change mine to +1 in the existing
thread.

-Val

On Mon, Jan 24, 2022 at 11:23 AM Vladimir Steshin <vlads...@gmail.com>
wrote:

>      Sure. This is a simple change. These 2 fixes could go together. And
> the doc already has notes of service statistics traits. Ok, might be
> even better.
>
>      I'm not sure whether we need extra voting for deprecating
> 'service()' and, as earlier and making 'serviceProxy()' return proxy
> every time. Several active contributors have said their 'yes' for both
> in the thread.
>
> Several active contributors have already said their 'yes'.
>
> 23.01.2022 03:50, Valentin Kulichenko пишет:
> > If we already agreed to deprecate the service() method, then I'm ok with
> > the change. But I think we should do both fixes together and also clearly
> > document that using service() can lead to incorrect metrics.
> >
> > -Val
> >
> > On Fri, Jan 21, 2022 at 1:13 AM Vladimir Steshin <vlads...@gmail.com>
> wrote:
> >
> >>       Valentin, there are 2 notable issues:
> >>
> >> 1) Variate behavior of `/serviceProxy()/` depending on user setting. It
> >> can return both proxy and reference.
> >>
> >> 2) Service metrics are corrupted by invocations through `/service()/`.
> >>
> >>
> >>       How we can fix:
> >>
> >> 1) Just return proxy every time.
> >>
> >> 2) Deprecate `/service()/`. We've already discussed that here: [1].
> >> Please see my previous message in the thread.
> >>
> >>
> >>
> >> [1] https://www.mail-archive.com/dev@ignite.apache.org/msg44062.html
> >>
> >>
> >> On 20.01.2022 22:48, Valentin Kulichenko wrote:
> >>> So the proposed change will not actually fix the issue with metrics,
> >>> because it's still possible to get a local instance via the service()
> >>> method. At the same time, the change removes an existing performance
> >>> optimization.
> >>>
> >>> Let's figure out how to fix the actual problem. If the *only* way to
> have
> >>> metrics is to have a proxy, then this should be the only way to
> interact
> >>> with a service. In that case, we need to do something with the
> service()
> >>> method (deprecate it?). Or probably there are other ways to fix
> metrics?
> >>>
> >>> -Val
> >>>
> >>> On Thu, Jan 20, 2022 at 3:32 AM Vladimir Steshin<vlads...@gmail.com>
> >> wrote:
> >>>>     Yes. Invocations from direct reference are not measured. This
> method
> >>>> in the javadoc:
> >>>>
> >>>>
> >>>> /* <b>NOTE:</b> Statistics are collected only with service proxies
> >>>> obtaining by methods like/
> >>>>
> >>>> /* {@link IgniteServices#serviceProxy(String, Class, boolean)} and
> won't
> >>>> work for direct reference of local/
> >>>>
> >>>> /* services which you can get by, for example, {@link
> >>>> IgniteServices#service(String)}./
> >>>>
> >>>>
> >>>> On 20.01.2022 00:20, Valentin Kulichenko wrote:
> >>>>> BTW, there is also the service() method that can only return an
> >> instance
> >>>>> and never returns a proxy. Does it corrupt the metrics as well?
> >>>>>
> >>>>> -Val
> >>>>>
> >>>>> On Wed, Jan 19, 2022 at 1:09 PM Valentin Kulichenko <
> >>>>> valentin.kuliche...@gmail.com> wrote:
> >>>>>
> >>>>>> Maxim,
> >>>>>>
> >>>>>> The reason I'm asking is that I don't really understand how client
> >> side
> >>>>>> mechanics affect server side metrics (number of executions and their
> >>>>>> durations). I feel that we might be fixing a wrong problem.
> >>>>>>
> >>>>>> Could you elaborate on why we count metrics incorrectly when
> >>>>>> the serviceProxy() returns an instance of a local service instead of
> >> an
> >>>>>> actual proxy?
> >>>>>>
> >>>>>> -Val
> >>>>>>
> >>>>>> On Tue, Jan 18, 2022 at 11:32 PM Maksim Timonin<
> >> timoninma...@apache.org
> >>>>>> wrote:
> >>>>>>
> >>>>>>> Hi, guys!
> >>>>>>>
> >>>>>>>> this is not a good idea to change the behavior of serviceProxy()
> >>>>>>> depending on statistics
> >>>>>>>
> >>>>>>> I think that the patch doesn't change the behavior of
> >> `serviceProxy()`.
> >>>>>>> This method promises a proxy and it actually returns it. The fact
> >> that
> >>>>>>> `serviceProxy()` can return non-proxy objects is an internal Ignite
> >>>>>>> optimization, and users should not rely on this, there is a
> separate
> >>>>>>> method
> >>>>>>> `service()` for that.
> >>>>>>>
> >>>>>>>> What are the metrics that are being affected by this?
> >>>>>>> Only service metrics, that calculates duration of service
> execution.
> >>>> Check
> >>>>>>> this ticket [1]
> >>>>>>>
> >>>>>>> [1]https://issues.apache.org/jira/browse/IGNITE-12464
> >>>>>>>
> >>>>>>>
> >>>>>>> On Wed, Jan 19, 2022 at 1:22 AM Valentin Kulichenko <
> >>>>>>> valentin.kuliche...@gmail.com> wrote:
> >>>>>>>
> >>>>>>>> What are the metrics that are being affected by this?
> >>>>>>>>
> >>>>>>>> -Val
> >>>>>>>>
> >>>>>>>> On Tue, Jan 18, 2022 at 3:31 AM Вячеслав Коптилин <
> >>>>>>>> slava.kopti...@gmail.com>
> >>>>>>>> wrote:
> >>>>>>>>
> >>>>>>>>> Hello Igniters,
> >>>>>>>>>
> >>>>>>>>> IMHO, this is not a good idea to change the behavior of
> >>>> serviceProxy()
> >>>>>>>>> depending on statistics (enabled/disabled). It seems
> >> counterintuitive
> >>>>>>> to
> >>>>>>>>> me.
> >>>>>>>>> Perhaps, we need to introduce a new method that should always
> >> return
> >>>> a
> >>>>>>>>> proxy to the user service.
> >>>>>>>>>
> >>>>>>>>> Thanks,
> >>>>>>>>> Slava.
> >>>>>>>>>
> >>>>>>>>>
> >>>>>>>>> вт, 28 дек. 2021 г. в 13:57, Pavel Pereslegin<xxt...@gmail.com>:
> >>>>>>>>>
> >>>>>>>>>> Hi!
> >>>>>>>>>>
> >>>>>>>>>> Agree with Maxim.
> >>>>>>>>>>
> >>>>>>>>>> It seems to me quite normal to return a proxy for a local
> instance
> >>>>>>> in
> >>>>>>>>>> the case when the user has explicitly enabled statistics
> >> collection
> >>>>>>> in
> >>>>>>>>>> the service settings. Those. by default, we do not change the
> >>>>>>> behavior
> >>>>>>>>>> and if the collection of metrics is not needed, a local instance
> >>>>>>> will
> >>>>>>>>>> be returned. And I also think the javadoc should be changed to
> >>>>>>> reflect
> >>>>>>>>>> the new behavior.
> >>>>>>>>>>
> >>>>>>>>>> So, I'm for 1 + 3.
> >>>>>>>>>>
> >>>>>>>>>> вт, 28 дек. 2021 г. в 10:51, Maksim Timonin <
> >>>>>>> timoninma...@apache.org>:
> >>>>>>>>>>> Hi!
> >>>>>>>>>>>
> >>>>>>>>>>> I agree that users shouldn't expect a non-proxy when invoking
> the
> >>>>>>>>>>> `IgniteServices#serviceProxy()` method. I think it's up to
> Ignite
> >>>>>>> to
> >>>>>>>>>> return
> >>>>>>>>>>> a non-proxy instance here as possible optimisation. But users
> >>>>>>> have to
> >>>>>>>>> use
> >>>>>>>>>>> interfaces in any case. There is the `IgniteServices#service()`
> >>>>>>>> method
> >>>>>>>>>> for
> >>>>>>>>>>> explicit return of local instances.
> >>>>>>>>>>>
> >>>>>>>>>>> With enabling of metrics we can break users that explicitly
> >>>>>>>>>>> use `#serviceProxy` (proxy!), and then explicitly cast it to an
> >>>>>>>>>>> implementation class. In this case such users will get a
> runtime
> >>>>>>>>>> exception.
> >>>>>>>>>>> I think we can write a good javadoc for
> >>>>>>>>>>> `ServiceConfiguration#setEnableMetrics()`, it should mention
> that
> >>>>>>> it
> >>>>>>>>>> works
> >>>>>>>>>>> only with proxy, and it doesn't collect metrics with non-proxy
> >>>>>>> usages
> >>>>>>>>>> with
> >>>>>>>>>>> `IgniteService#service()`.
> >>>>>>>>>>>
> >>>>>>>>>>> So, I propose to proceed with two solutions - 1 and 3: fix docs
> >>>>>>> for
> >>>>>>>>>>> `#serviceProxy()` and provide detailed javadocs
> >>>>>>>>>>> for `ServiceConfiguration#setEnableMetrics()`.
> >>>>>>>>>>>
> >>>>>>>>>>> If some users will enable metrics (even with such docs!) and
> will
> >>>>>>> be
> >>>>>>>>>> using
> >>>>>>>>>>> casting proxy(!) to an implementation, then they will get a
> >>>>>>> runtime
> >>>>>>>>>>> exception. But I believe that it is an obvious failure, and it
> >>>>>>> should
> >>>>>>>>> be
> >>>>>>>>>>> fixed on the user side.
> >>>>>>>>>>>
> >>>>>>>>>>>
> >>>>>>>>>>>
> >>>>>>>>>>>
> >>>>>>>>>>>
> >>>>>>>>>>> On Mon, Dec 27, 2021 at 10:26 PM Vladimir Steshin <
> >>>>>>>> vlads...@gmail.com>
> >>>>>>>>>>> wrote:
> >>>>>>>>>>>
> >>>>>>>>>>>> Hi, Igniters.
> >>>>>>>>>>>>
> >>>>>>>>>>>>
> >>>>>>>>>>>> I'd like to suggest modifying
> >>>>>>> `/IgniteServices.serviceProxy(String
> >>>>>>>>>> name,
> >>>>>>>>>>>> Class<? super T> svcItf, boolean sticky)/` so that it may
> return
> >>>>>>>>> proxy
> >>>>>>>>>>>> even for local service. Motivation: service metrics [1]. To
> >>>>>>> measure
> >>>>>>>>>>>> method call we need to wrap service somehow. Also, the method
> >>>>>>> name
> >>>>>>>>> says
> >>>>>>>>>>>> `proxy`. For local one we return direct instance. Misleading.
> >>>>>>>>>>>>
> >>>>>>>>>>>>
> >>>>>>>>>>>> Solutions:
> >>>>>>>>>>>>
> >>>>>>>>>>>> 1) Let’s return a proxy (`/GridServiceProxy/`) once we need.
> >>>>>>> Let’s
> >>>>>>>>>>>> change the javadoc to say `@return Proxy over service’. Simply
> >>>>>>>> works.
> >>>>>>>>>>>> Pros: invocation like `/MyServiceImpl svc =
> >>>>>>>> serviceProxy(«myservice»,
> >>>>>>>>>>>> MyService.class)`/ would fail. Wierd usage to me. But
> possible.
> >>>>>>>>>>>>
> >>>>>>>>>>>> 2) Introduce a new method with forced-proxy flag
> >>>>>>>>>>>> like`IgniteSerives.serviceProxy(…, boolead focedProxy)`. And
> >>>>>>> add a
> >>>>>>>>>>>> warning to other service-obtain methods like: «`/You enabled
> >>>>>>>> service
> >>>>>>>>>>>> metrics but it doesn’t work for local service instanse. Use
> >>>>>>>>>> forced-proxy
> >>>>>>>>>>>> serviceProxy(…, boolean forcedProxy)/` Pros: we’ve already
> have
> >>>>>>>> about
> >>>>>>>>>>>> 5-6 methods to get services in `/IgniteServices/`. I doubt we
> >>>>>>> need
> >>>>>>>>> one
> >>>>>>>>>>>> more.
> >>>>>>>>>>>>
> >>>>>>>>>>>> 3) Fix the documentation so that it tells the service metrics
> >>>>>>> would
> >>>>>>>>>> work
> >>>>>>>>>>>> only with proxy. Pros: service metrics just won’t work for
> local
> >>>>>>>>>>>> services. Suddenly.
> >>>>>>>>>>>>
> >>>>>>>>>>>>
> >>>>>>>>>>>> My vote is for #1: let's use a proxy. WDYT?
> >>>>>>>>>>>>
> >>>>>>>>>>>>
> >>>>>>>>>>>> [1]https://issues.apache.org/jira/browse/IGNITE-12464
> >>>>>>>>>>>>
> >>>>>>>>>>>>
>

Reply via email to