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