Hi Maksim, Which patch are you referring to?
-Val On Mon, Jan 24, 2022 at 10:36 AM Maksim Timonin <timoninma...@apache.org> wrote: > Hi guys, > > > If we already agreed to deprecate the service() method, then I'm ok with > the change > > As I can see in the previous discussion that Vladimir mentioned [1], there > was a proposal for deprecating by Vladimir and Denis Mekhanikov, but there > wasn't a final decision. So I tried to see the `#service()` from a > different angle and tried to be a user's advocate. But I found only a > few weak arguments for remaining this functionality, and also nobody > supported them :) So, if there are no objections let's finally deprecate > it. > > > But I think we should do both fixes together and also clearly document > that using service() can lead to incorrect metrics > > Did I correctly understand that: we need to revert the previous patch, > update it with the deprecation, and submit it again to master? > > > > On Sun, Jan 23, 2022 at 3:51 AM Valentin Kulichenko < > valentin.kuliche...@gmail.com> wrote: > > > 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 > > > >>>>>>>>>> > > > >>>>>>>>>> > > >