>> Also I agree with Alexey about introducing public IgniteMonitoring facade
> This is not an issue with the API.
> Just the new feature that doesn’t affects API.

I disagree. It's part of API and it affects user experience.

> Moreover, I create a ticket to fix it, already.

Creating an issue does not solve the problem.

>> Absence of newly created metrics in old MBeans that forces user use
>> exporter SPI while his code base uses old MBeans.
> Why this is issue?

Because it is user experience. As I wrote already user must configure
additional SPI in order to gt just a couple of numbers. It is not good
idea from point of view.

>> Inconsistent MetricRegistry API.
> It’s consistent.

I described concrete problems with API consistency early in this
thread. Jus saying "it's consistent" doesn't make it consistent.

>> Metrics lookups from map instead of using direct reference
>> (performance problem).
> 1. We(You and I) did this choice together to simplify creation of the new 
> metrics.

No. I pointed to this problem.

> 2. This is not public API issue.

But this is issue.

>> Ignoring of statisticsEnabled flag.
> I don’t ignore this flag.

But flag's value is ignored.

> It just doesn’t exists in new framework(because of scope).

I don't understand how this scope was formulated. There is some
feature. It didn't removed. So it should be taken into account during
adding new functionality if it affected.

> I don’t think it’s an issue.

It's just opinion. Form my point of view it is bug.

>> JmxExporterSpi creates beans that doesn't satisfy best MBeans practices.
> Please, clarify your statement.
> What is best MBeans practices you are talking about?

Again. I provided link to the article about it early in this thread.

>> Not finished IGNITE-11927
> How this can be API issue?

As I wrote early in this thread (may be twice) it changes the API significantly.

On Fri, Jan 17, 2020 at 9:24 PM Николай Ижиков <nizhi...@apache.org> wrote:
>
> > Also I agree with Alexey about introducing public IgniteMonitoring facade
>
> This is not an issue with the API.
> Just the new feature that doesn’t affects API.
> Moreover, I create a ticket to fix it, already.
>
> > It's right. But if you add checking of statisticsEnabling property then 
> > test will fail. It's just not good tests.
>
> My changes doesn’t affect any `staticticsEnabled` property.
> I don’ understand your point here.
>
> > Redundant ReadOnlyMetricRegistry.
>
> It’s not redundant.
> It required for exporters and provide read only access to MetricRegistry 
> existing in the node.
>
>
> > MetricExporterSpi that requires ReadOnlyMetricRegistry.
>
> > Absence of newly created metrics in old MBeans that forces user use
> > exporter SPI while his code base uses old MBeans.
>
> Why this is issue?
>
> > Inconsistent MetricRegistry API.
>
> It’s consistent.
>
> > Metrics lookups from map instead of using direct reference
> > (performance problem).
>
> 1. We(You and I) did this choice together to simplify creation of the new 
> metrics.
> 2. This is not public API issue.
>
>
> > Ignoring of statisticsEnabled flag.
>
> I don’t ignore this flag.
> It just doesn’t exists in new framework(because of scope).
> I don’t think it’s an issue.
>
> > JmxExporterSpi creates beans that doesn't satisfy best MBeans practices.
>
> Please, clarify your statement.
> What is best MBeans practices you are talking about?
>
> > Not finished IGNITE-11927
>
>
> How this can be API issue?
>
>
> > 17 янв. 2020 г., в 20:52, Andrey Gura <ag...@apache.org> написал(а):
> >
> >>> All issues Alexey mentioned in starting letter are fixed with my PR [1].
> >>> I don’t think other issues you mentioned are blocker for the release.
> >
> > As I mentioned already IGNITE-11927 is part of IEP-35 and
> > implementation seriously affects API's. Also I agree with Alexey about
> > introducing public IgniteMonitoring facade. So thiss PR doesn't fix
> > all issues.
> >
> >>> I talk about ignored existing functionality.
> >> There is no existing tests that was broken by this contribution.
> >
> > It's right. But if you add checking of statisticsEnabling property
> > then test will fail. It's just not good tests.
> >
> >> If you know the issues with it, feel free to create a ticket I will fix it 
> >> ASAP.
> >
> > I already fix it all in IGNITE-11927
> >
> >>> 1. Moving IEP-35 API's to the internal package.
> >> We should move the product forward and shouldn't hide major contribution 
> >> from the user just because your second guess «I don’t like the API I just 
> >> reviewed and approved».
> >
> > We should move the product forward with with really finished features,
> > not pieces of features.
> >
> >> So I am against this proposal.
> >
> > It is not argument.
> >
> >> But, I’m ready to see your proposal for the API change and discuss them.
> >
> > We can prepare it together. But we can't block release.
> >
> >>> Because IGNITE-11927 doesn't solve all problems
> >> What is *ALL* problems?
> >
> > Redundant ReadOnlyMetricRegistry.
> > MetricExporterSpi that requires ReadOnlyMetricRegistry.
> > Absence of newly created metrics in old MBeans that forces user use
> > exporter SPI while his code base uses old MBeans.
> > Inconsistent MetricRegistry API.
> > Metrics lookups from map instead of using direct reference
> > (performance problem).
> > Ignoring of statisticsEnabled flag.
> > JmxExporterSpi creates beans that doesn't satisfy best MBeans practices.
> > Not finished IGNITE-11927
> >
> > It's enough I believe.
> >
> > On Fri, Jan 17, 2020 at 7:28 PM Николай Ижиков <nizhi...@apache.org> wrote:
> >>
> >> Andrey.
> >>
> >> All issues Alexey mentioned in starting letter are fixed with my PR [1].
> >> I don’t think other issues you mentioned are blocker for the release.
> >>
> >>> I talk about ignored existing functionality.
> >>
> >> There is no existing tests that was broken by this contribution.
> >> If you know the issues with it, feel free to create a ticket I will fix it 
> >> ASAP.
> >>
> >>> 1. Moving IEP-35 API's to the internal package.
> >>
> >> We should move the product forward and shouldn't hide major contribution 
> >> from the user just because your second guess «I don’t like the API I just 
> >> reviewed and approved».
> >> So I am against this proposal.
> >> But, I’m ready to see your proposal for the API change and discuss them.
> >>
> >>> Because IGNITE-11927 doesn't solve all problems
> >>
> >> What is *ALL* problems?
> >> Seems, we never be able to solve *ALL* problems.
> >> But, we should move the product forward.
> >>
> >> As for your steps [1-6].
> >> I’m always following these steps during my contribution.
> >>
> >> [1] https://github.com/apache/ignite/pull/7269
> >>
> >>> 17 янв. 2020 г., в 19:08, Andrey Gura <ag...@apache.org> написал(а):
> >>>
> >>> The discussion is hot and can be endless. So in separate post I want
> >>> propose my solution.
> >>>
> >>> 1. Moving IEP-35 API's to the internal package.
> >>> 2. Create special feature branch B.
> >>> 3. In branch B will be merged IGNITE-11927
> >>> 4. Because IGNITE-11927 doesn't solve all problems we should propose
> >>> solution and implement it in branch B.
> >>> 5. Testing, usability testing, fixing, etc iteratively.
> >>> 6. Merge it to master and in new release branch if needed.
> >>>
> >>> Independent step. There are some problem which should be fixed in 2.8
> >>> before release otherwise we introduce problems with compatibility
> >>> which will haunt us till next major release. I'll create tickets.
> >>>
> >>> On Fri, Jan 17, 2020 at 7:03 PM Andrey Gura <ag...@apache.org> wrote:
> >>>>
> >>>>>> Because it is brand new API and it requires rewrite client code.
> >>>>> We doesn’t break backward compatibility.
> >>>>> The message is - this interface would be remove in the next major 
> >>>>> release.
> >>>>
> >>>> We don't know anything about development processes our users. I can
> >>>> admit that process could require that deprecated methods/APIs are not
> >>>> allowed for example.
> >>>>
> >>>>>> ReadOnlyMetricRegistry
> >>>>>> Form user stand point it is very strange interface which don't give me 
> >>>>>> any information about it’s purpose and responsibilities.
> >>>>>> Seems, I should explain proposed changes [1] more clear:
> >>>>
> >>>> I understand this. But I'm not Ignite user, I'm Ignite developer. The
> >>>> key moment in my message *from user stand point*. From my point of
> >>>> view it is very not intuitive solution and this interface is
> >>>> redundant.
> >>>>
> >>>>>> Actually not. We have statisticsEnabled for caches for example. There 
> >>>>>> are other entities with such flag.
> >>>>> They still works as expected.
> >>>>
> >>>> Actually not. I fixed many such issues during IGNITE-11927 
> >>>> implementation.
> >>>>
> >>>>>> Why do you decided do in such way?
> >>>>> Because of the scope.
> >>>>> The ability to disable/enable metrics is the matter of the other ticket.
> >>>>
> >>>> I talk not about ability. I talk about ignored existing functionality.
> >>>> So scope is not case here.
> >>>>
> >>>>>> But they should not be exported by MetricExporterSpi implementations.
> >>>>> Actually, it’s a responsibility of the exporter to decide.
> >>>>> JMX exporter can exports ObjectMetric while OpenCensus exporter can’t.
> >>>>
> >>>> Actually list is not metric at all as I already told.
> >>>>
> >>>> On Fri, Jan 17, 2020 at 5:26 PM Николай Ижиков <nizhi...@apache.org> 
> >>>> wrote:
> >>>>>
> >>>>> Andrey.
> >>>>>
> >>>>>> Because it is brand new API and it requires rewrite client code.
> >>>>>
> >>>>> We doesn’t break backward compatibility.
> >>>>> The message is - this interface would be remove in the next major 
> >>>>> release.
> >>>>>
> >>>>>> ReadOnlyMetricRegistry
> >>>>>> Form user stand point it is very strange interface which don't give me 
> >>>>>> any information about it’s purpose and responsibilities.
> >>>>>
> >>>>> Seems, I should explain proposed changes [1] more clear:
> >>>>>
> >>>>> Each SPI would have a `ReadOnlyMetricManager` which provides access to 
> >>>>> collection of `ReadOnlyMetricRegistry`
> >>>>> which has a collection of `Metric`.
> >>>>>
> >>>>> So we reflects two-level structure we have in the internal API
> >>>>>
> >>>>> GridMetricManager -> Collection[MetricRegistry] -> Collection[Metric]
> >>>>> ReadOnlyMetricManager -> Collection[ReadOnlyMetricRegistry] -> 
> >>>>> Collection[Metric]
> >>>>>
> >>>>>> Actually not. We have statisticsEnabled for caches for example. There 
> >>>>>> are other entities with such flag.
> >>>>>
> >>>>> They still works as expected.
> >>>>>
> >>>>>> Why do you decided do in such way?
> >>>>>
> >>>>> Because of the scope.
> >>>>> The ability to disable/enable metrics is the matter of the other ticket.
> >>>>>
> >>>>>> But they should not be exported by MetricExporterSpi implementations.
> >>>>>
> >>>>> Actually, it’s a responsibility of the exporter to decide.
> >>>>> JMX exporter can exports ObjectMetric while OpenCensus exporter can’t.
> >>>>>
> >>>>> [1] 
> >>>>> https://github.com/apache/ignite/pull/7269/files#diff-0ae5657231fc4c1f650493b02190b81bR25
> >>>>>
> >>>>>> 17 янв. 2020 г., в 16:57, Andrey Gura <ag...@apache.org> написал(а):
> >>>>>>
> >>>>>>> If I’m not missing something, you were one of the active reviewers of 
> >>>>>>> the Metric API.
> >>>>>>
> >>>>>> Yes. But if I'm not missing some thing you were major developer of
> >>>>>> Metric API :) Shit happens. And it happened.
> >>>>>>
> >>>>>>>> The first, I agree with Alexey about deprecation of APIs that are 
> >>>>>>>> still supported and don't offer reasonable substitution.
> >>>>>>> It has - MetricExporterSPI.
> >>>>>>
> >>>>>> There is such concept - backward compatibility. I understand that
> >>>>>> deprecation of some interface doesn't break backward compatibility but
> >>>>>> it leads to question^ what should I use instead of this. And
> >>>>>> MetricExporterSpi is not answer for this question. Because it is brand
> >>>>>> new API and it requires rewrite client code.
> >>>>>>
> >>>>>>>> ReadOnlyMetricRegistry interface is redundant.
> >>>>>>> It’s an interface that exposes internal MetricRegistry  to the 
> >>>>>>> exporters.
> >>>>>>
> >>>>>> No it is not. It's completely artificial thing which allow iterate via
> >>>>>> all metric registries. GridMetricManager implements this interface
> >>>>>> while it is not metric registry. Form user stand point it is very
> >>>>>> strange interface which don't give me any information about it's
> >>>>>> purpose and responsibilities.
> >>>>>>
> >>>>>>>> Exporters expose metrics if they are disabled.
> >>>>>>> We don’t have an ability to disable metrics.
> >>>>>>
> >>>>>> Actually not. We have statisticsEnabled for caches for example. There
> >>>>>> are other entities with such flag.
> >>>>>>
> >>>>>>> And that done, intentionally.
> >>>>>>
> >>>>>> Why do you decided do in such way? Why you ignore existing
> >>>>>> functionality? It affects user expectations and experience.
> >>>>>>
> >>>>>>> You are working on this issue, aren’t you?
> >>>>>>
> >>>>>> Yes? I'm working. Unfortunately we are not synchronized in this
> >>>>>> context and I should redo all metrics related changes in order to
> >>>>>> merge it with my changes. Anyway, my change doesn't solve all problems
> >>>>>> (e.g. it doesn't introduce IgniteMonitoring facade).
> >>>>>>
> >>>>>>> I can fix this issue, by myself.
> >>>>>>
> >>>>>> Unfortunately it will be just fix. In my solution it is redesign. Stop
> >>>>>> fixing issues, let's do things. It requires deeper changes. My changes
> >>>>>> blocks AI 2.8 release because it big enough. So it retargeted on the
> >>>>>> next release. And it is one more reason for moving the changes to the
> >>>>>> internal packages. And it isn't good news for me because I will go
> >>>>>> throughout pan and tiers of merge. But it is right.
> >>>>>>
> >>>>>>> Metrics of type lists are not metric at all.
> >>>>>>
> >>>>>> They are created to deal with backward compatibility.
> >>>>>>
> >>>>>>>> Metrics of type lists are not metric at all.
> >>>>>>> They are created to deal with backward compatibility.
> >>>>>>
> >>>>>> Yes, I know. But they should not be exported by MetricExporterSpi
> >>>>>> implementations.
> >>>>>>
> >>>>>> On Fri, Jan 17, 2020 at 3:37 PM Николай Ижиков <nizhi...@apache.org> 
> >>>>>> wrote:
> >>>>>>>
> >>>>>>> Andrey, thanks for your opinion and your ownest critisism.
> >>>>>>> I can’t wait for your contribution.
> >>>>>>>
> >>>>>>> If I’m not missing something, you were one of the active reviewers of 
> >>>>>>> the Metric API.
> >>>>>>>
> >>>>>>>> The first, I agree with Alexey about deprecation of APIs that are 
> >>>>>>>> still supported and don't offer reasonable substitution.
> >>>>>>>
> >>>>>>> It has - MetricExporterSPI.
> >>>>>>>
> >>>>>>>> The second, from my point of view, we can't recommend 
> >>>>>>>> MetricExporterSpi's because it are still not-production ready.
> >>>>>>>
> >>>>>>> It’s ready.
> >>>>>>>
> >>>>>>>> The third, moving of MetricRegistry to the public API doesn't solve 
> >>>>>>>> the problem because this interface exposes internal Metric interface 
> >>>>>>>> implementations.
> >>>>>>>
> >>>>>>> Not, its’ not.
> >>>>>>> Please, see `org.apache.ignite.spi.metric.LongMetric` and other 
> >>>>>>> public interface.
> >>>>>>>
> >>>>>>>> API of MetricRegistry is inconsistent.
> >>>>>>>
> >>>>>>> MetricRegistry is the internal API.
> >>>>>>> Feel free to create ticket for an issues with it and I will try to 
> >>>>>>> fix it.
> >>>>>>>
> >>>>>>>> ReadOnlyMetricRegistry interface is redundant.
> >>>>>>>
> >>>>>>> It’s an interface that exposes internal MetricRegistry  to the 
> >>>>>>> exporters.
> >>>>>>>
> >>>>>>>> Exporters expose metrics if they are disabled.
> >>>>>>>
> >>>>>>> We don’t have an ability to disable metrics.
> >>>>>>> And that done, intentionally.
> >>>>>>> You are working on this issue, aren’t you?
> >>>>>>> I can fix this issue, by myself.
> >>>>>>>
> >>>>>>>> Metrics of type lists are not metric at all.
> >>>>>>>
> >>>>>>> They are created to deal with backward compatibility.
> >>>>>>>
> >>>>>>>> 17 янв. 2020 г., в 15:09, Andrey Gura <ag...@apache.org> написал(а):
> >>>>>>>>
> >>>>>>>> Hi,
> >>>>>>>>
> >>>>>>>> The first, I agree with Alexey about deprecation of APIs that are
> >>>>>>>> still supported and don't offer reasonable substitution.
> >>>>>>>>
> >>>>>>>> The second, from my point of view, we can't recommend
> >>>>>>>> MetricExporterSpi's because it are still not-production ready. There
> >>>>>>>> are some issues with it and usage of ReadOnlyMetricRegistry interface
> >>>>>>>> just one of them.
> >>>>>>>>
> >>>>>>>> The third, moving of MetricRegistry to the public API doesn't solve
> >>>>>>>> the problem because this interface exposes internal Metric interface
> >>>>>>>> implementations. So your PR is incomplete.
> >>>>>>>> Moreover, API of MetricRegistry is inconsistent. E.g. register(name,
> >>>>>>>> supplier, desc) method returns registered metric for some types and
> >>>>>>>> doesn't for other. register(metric) method is inconsistent in sense 
> >>>>>>>> of
> >>>>>>>> metric naming. ReadOnlyMetricRegistry interface is redundant.
> >>>>>>>> MetricExporterSpi should be revised because it absolutely not
> >>>>>>>> intuitive because it requires ReadOnlyMetricRegistry and it's purpose
> >>>>>>>> is undefined.
> >>>>>>>>
> >>>>>>>> One more point. IEP-35 is still not fully implemented. Some things 
> >>>>>>>> are
> >>>>>>>> not taken into account. Exporters expose metrics if they are 
> >>>>>>>> disabled.
> >>>>>>>> JMX beans exposes values that don't confirm to best practices [1].
> >>>>>>>> Metrics of type lists are not metric at all. Ubiquitous merics lookup
> >>>>>>>> from hash map instead of usage reference for getting metrics values
> >>>>>>>> (it is just performance issue). Also IGNITE-11927 is not implemented
> >>>>>>>> which also changes interfaces significantly.
> >>>>>>>>
> >>>>>>>> Let's just admit that the implementation is immature and must be 
> >>>>>>>> moved
> >>>>>>>> to the internal packages.
> >>>>>>>>
> >>>>>>>> And because we already merged partially implemented IEP to the master
> >>>>>>>> branch we *must move all currently public APIs to the internal API*
> >>>>>>>> while it will not be ready for publication.
> >>>>>>>>
> >>>>>>>> And the last but not least. What is happening indicates a immature
> >>>>>>>> development process which must be revised. I don't want discuss it in
> >>>>>>>> this thread but we must not allow merge of change to the master 
> >>>>>>>> branch
> >>>>>>>> before it will completed, that is we must use feature branches for
> >>>>>>>> full IEP not only for particular tickets. And also we should
> >>>>>>>> reformulate IEP process in order to avoid things like this.
> >>>>>>>>
> >>>>>>>> [1] 
> >>>>>>>> https://www.oracle.com/technetwork/java/javase/tech/best-practices-jsp-136021.html
> >>>>>>>>
> >>>>>>>> On Fri, Jan 17, 2020 at 12:49 PM Николай Ижиков 
> >>>>>>>> <nizhi...@apache.org> wrote:
> >>>>>>>>>
> >>>>>>>>> Alex.
> >>>>>>>>>
> >>>>>>>>> OK, I may leverage your experience and create pure Java API.
> >>>>>>>>> Ticket [1] created.
> >>>>>>>>>
> >>>>>>>>> But, personally, I don’t agree with you.
> >>>>>>>>> Ignite has dozens of the API that theoretically have a usage 
> >>>>>>>>> scenario, but in real-world have 0 custom implementation and usages.
> >>>>>>>>> Moreover, many APIs that were created with the intentions you 
> >>>>>>>>> mentioned is abandoned now and confuses users.
> >>>>>>>>>
> >>>>>>>>> You can just see count of the tests we just mute on the TC.
> >>>>>>>>>
> >>>>>>>>> Can you, please, take a look at the fix regarding puck API issue 
> >>>>>>>>> you mentioned in your first letter [2], [3]
> >>>>>>>>>
> >>>>>>>>> [1] https://issues.apache.org/jira/browse/IGNITE-12553
> >>>>>>>>> [2] https://github.com/apache/ignite/pull/7269
> >>>>>>>>> [3] https://issues.apache.org/jira/browse/IGNITE-12552
> >>>>>>>>>
> >>>>>>>>>
> >>>>>>>>>> 17 янв. 2020 г., в 12:12, Alexey Goncharuk 
> >>>>>>>>>> <alexey.goncha...@gmail.com> написал(а):
> >>>>>>>>>>
> >>>>>>>>>> Nikolay,
> >>>>>>>>>>
> >>>>>>>>>> Why do you think this is a wrong usage pattern? From the top of my 
> >>>>>>>>>> head,
> >>>>>>>>>> here is a few cases of direct metric API usage that I know are 
> >>>>>>>>>> currently
> >>>>>>>>>> being used in production:
> >>>>>>>>>> * A custom task execution scheduling service with load balancing 
> >>>>>>>>>> based on
> >>>>>>>>>> utilization metrics readings from Java code
> >>>>>>>>>> * Cleanup task trigger based on metrics readings
> >>>>>>>>>> * A custom health-check endpoint for an application with an 
> >>>>>>>>>> embedded
> >>>>>>>>>> Ignite node for Kubernetes/Spring Application/etc
> >>>>>>>>>
> >>>>>>>
> >>>>>
> >>
>

Reply via email to