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