Vladimir, I think we should make the same changes to the .NET API.

On Tue, Jan 25, 2022 at 5:17 PM Vladimir Steshin <vlads...@gmail.com> wrote:

>      Similar question about .NET. I'm doing the sub-ticket with metrics
> of the platform services. Should we return proxy every tome by
> /IServices.GerServiceProxy()/ and probably deprecate
> /IServices.GetService()/. Same problems with variate the behavior of
> /GerServiceProxy()/ and statistics corruption (if enabled) with
> /GetService()/.
>
> 24.01.2022 22:27, Valentin Kulichenko пишет:
> > 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