Hello, Igniters. * IGNITE-12552: Move ReadOnlyMetricRegistry to public API merged to the master and cherry-picked to the 2.8. So the main issue with the Metric API solved.
* I raised the PR [1] to fix second issue with the new Metric API: absence of the public Java API to get metrics. This PR introduces the following changes: 1. IgniteMetric interface created: it provides Java API to access Ignite metrics created with the new Metric API. ``` public interface IgniteMetric extends Iterable<ReadOnlyMetricRegistry> { @Nullable ReadOnlyMetricRegistry registry(String name); } ``` 2. All deprecation javadocs regarding metrics now reference to the public IgniteMetric instead of internal GridMetricManager: > @deprecated Use {@link IgniteMetric} instead. 3. Tests refactored to use IgniteMetric instead of GridMetricManager when possible. Please, review. [1] https://github.com/apache/ignite/pull/7283 > 21 янв. 2020 г., в 17:51, Николай Ижиков <nizhikov....@gmail.com> написал(а): > > Hello, Igniters. > > Alexey approved my PR [1] regarding fixing public API for metric exporters. > I’m waiting for a bot visa and merge this PR. > > As we discussed, the metrics API will be marked with IgniteExperimental > annotation. > > If anyone has any objection to this plan, please provide your feedback. > > [1] https://github.com/apache/ignite/pull/7269 > >> 21 янв. 2020 г., в 13:45, Николай Ижиков <nizhikov....@gmail.com> написал(а): >> >> Thanks, for the review Alexey. >> >> I will fix your comment and try to implement Monitoring facade, shortly. >> >>> 21 янв. 2020 г., в 13:32, Alexey Goncharuk <alexey.goncha...@gmail.com> >>> написал(а): >>> >>> Nikolay, >>> >>> I left a single comment in the PR about the histogram metric. I think the >>> API looks much cleaner now. >>> >>> I will take care of the @IgniteExperimental annotation. >>> >>> пн, 20 янв. 2020 г. в 20:55, Николай Ижиков <nizhi...@apache.org>: >>> >>>> Alexey. >>>> >>>> PR [1] is waiting for your review. >>>> Please, take a look. >>>> >>>> I think we should do the following before 2.8 release >>>> >>>> * Introduce new @IgniteExperimental annotation as discussed. >>>> * Mark Monitoring API with it. >>>> * merge «[IEP-35] Expose MetricRegistry to the public API» to 2.8 >>>> * merge «[IEP-35] public Java metric API» to 2.8 >>>> >>>> [1] https://github.com/apache/ignite/pull/7269 >>>> >>>>> 20 янв. 2020 г., в 17:09, Alexey Goncharuk <alexey.goncha...@gmail.com> >>>> написал(а): >>>>> >>>>> Nikolay, >>>>> >>>>> Should we wait for both of the tickets given that we agreed that we are >>>>> putting an experimental marker on the new APIs? I'm ok to fix only the >>>>> first one and add the experimental marker so that we do not delay 2.8 >>>>> release. >>>>> >>>>> пн, 20 янв. 2020 г. в 13:32, Николай Ижиков <nizhi...@apache.org>: >>>>> >>>>>> Andrey. >>>>>> >>>>>> Let’s move from the long letters to the code. >>>>>> If you want to change API - please, propose this changes. >>>>>> I think everybody wins if we make our API better. >>>>>> >>>>>> Please, describe proposed changes. >>>>>> It would be great if you have some examples or PR for it. >>>>>> >>>>>> As for this release, I have plans to contribute tickets >>>>>> «[IEP-35] Expose MetricRegistry to the public API» [1] and >>>>>> «[IEP-35] public Java metric API» [2] for it. >>>>>> >>>>>> Any objections on it? >>>>>> >>>>>> [1] https://github.com/apache/ignite/pull/7269 >>>>>> [2] https://issues.apache.org/jira/browse/IGNITE-12553 >>>>>> >>>>>> >>>>>>> 20 янв. 2020 г., в 13:08, Andrey Gura <ag...@apache.org> написал(а): >>>>>>> >>>>>>> It solves problem. >>>>>>> >>>>>>> On Mon, Jan 20, 2020 at 12:09 PM Alexey Goncharuk >>>>>>> <alexey.goncha...@gmail.com> wrote: >>>>>>>> >>>>>>>> After giving it some thought, I agree with Denis - there is nothing >>>>>> wrong >>>>>>>> with exposing the new APIs, we just need to make it clear that we are >>>>>> still >>>>>>>> going to change it. >>>>>>>> >>>>>>>> Should we Introduce something like @IgniteExperimental annotation (I >>>>>>>> believe it has been discussed a dozen of times on the dev-list)? >>>>>>>> >>>>>>>> пт, 17 янв. 2020 г. в 23:28, Nikolay Izhikov <nizhi...@apache.org>: >>>>>>>> >>>>>>>>> +1 to mark feature or whole release as EA. >>>>>>>>> >>>>>>>>> пт, 17 янв. 2020 г., 23:00 Denis Magda <dma...@apache.org>: >>>>>>>>> >>>>>>>>>> Folks, if you don't mind I'll share some thoughts/suggestions as an >>>>>>>>>> observer who was not involved in the feature development. >>>>>>>>>> >>>>>>>>>> It's absolutely 'ok' to deprecate an API that is replaced with a >>>> much >>>>>>>>>> better version. However, we should do this only when the new APIs >>>> are >>>>>>>>>> production-ready. If there are still many limitations or open items >>>>>> then >>>>>>>>>> don't deprecate anything that exists and release the new APIs >>>>>> labeling as >>>>>>>>>> early access. What if release the improvements labeling as EA >>>> instead >>>>>> of >>>>>>>>>> hiding them completely? >>>>>>>>>> >>>>>>>>>> I would also encourage us to put aside emotions, don't blame or >>>> point >>>>>>>>>> fingers. This IEP is a great initiative and you both have already >>>>>> done a >>>>>>>>>> tremendous job by developing, architecting and reviewing changes. >>>>>> Just be >>>>>>>>>> respectful. Nobody is trying to block the feature from being >>>> released. >>>>>>>>>> Everyone would be glad to tap into improvements and start using them >>>>>> in >>>>>>>>>> prod. But if more time is needed for the GA let's reiterate a bit. >>>>>>>>>> >>>>>>>>>> - >>>>>>>>>> Denis >>>>>>>>>> >>>>>>>>>> >>>>>>>>>> On Fri, Jan 17, 2020 at 12: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 >>>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>> >>>>>>>>>>>>> >>>>>>>>>>> >>>>>>>>>>> >>>>>>>>>> >>>>>>>>> >>>>>> >>>>>> >>>> >>>> >> >