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
>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>> 
>>>>>>>>>>>> 
>>>>>>>>>> 
>>>>>>>>>> 
>>>>>>>>> 
>>>>>>>> 
>>>>> 
>>>>> 
>>> 
>>> 
> 

Reply via email to