Bumping this thread. If there are no other comments, I'll restart a vote in the next couple of weeks.
Thanks, Mickael On Thu, Apr 25, 2024 at 3:28 PM Mickael Maison <mickael.mai...@gmail.com> wrote: > > Hi Greg, > > Thanks for taking a close look at the KIP. > > 1/2) I understand your concern about leaking resources. I've played a > bit more with the code and I think we should be able to handle the > closing of the metrics internally rather than delegating it to the > user code. I built a small PoC inspired by your MonitorablePlugin > class example and that looked fine. I think we can even keep that > class internal. I updated the KIP accordingly. > > 3) An earlier version of the proposal used connector and task contexts > to allow them to retrieve their PluginMetrics instance. In a previous > comment Chris suggested switching to implementing Monitorable for > consistency. I think both approaches have pros and cons. I agree with > you that implementing Monitorable with cause compatibility issues with > older Connect runtimes. For that reason, I'm leaning towards > reintroducing the context mechanism. However we would still have this > issue with Converters/Transformations/Predicates. I think it's > typically a bit less problematic with these plugins but it's worth > considering the different approaches. If we can't agree on an approach > we can exclude Connect from this proposal and revisit it at a later > point. > > 4) If this KIP is accepted, I plan to follow up with another KIP to > make MirrorMaker use this mechanism instead of the custom metrics > logic it currently uses. > > Thanks, > Mickael > > > > > On Wed, Apr 24, 2024 at 9:03 PM Mickael Maison <mickael.mai...@gmail.com> > wrote: > > > > Hi Matthias, > > > > I'm not sure making the Monitorable interface Closeable really solves the > > issue. > > Ultimately you need to understand the lifecycle of a plugin to > > determine when it make sense to close it and which part of the code is > > responsible for doing it. I'd rather have this described properly in > > the interface of the plugin itself than it being a side effect of > > implementing Monitorable. > > > > Looking at Streams, as far as I can tell the only pluggable interfaces > > that are Closeable today are the Serdes. It seems Streams can accept > > Serdes instances created by the user [0]. In that case, I think it's > > probably best to ignore Streams in this KIP. Nothing should prevent > > Streams for adopting it, in a way that makes sense for Streams, in a > > future KIP if needed. > > > > 0: > > https://github.com/apache/kafka/blob/trunk/streams/examples/src/main/java/org/apache/kafka/streams/examples/wordcount/WordCountDemo.java#L84 > > > > Thanks, > > Mickael > > > > > > > > > > > > On Fri, Feb 9, 2024 at 1:15 AM Greg Harris <greg.har...@aiven.io.invalid> > > wrote: > > > > > > Hi Mickael, > > > > > > Thanks for the KIP, this looks like a great change! > > > > > > 1. I see that one of my concerns was already discussed, and appears to > > > have been concluded with: > > > > > > > I considered Chris' idea of automatically removing metrics but decided > > > > to leave that responsibility to the plugins. > > > > > > After chasing resource leaks for the last few years, I've internalized > > > that preventing leaks through careful implementation is always > > > inadequate, and that leaks need to be prevented by design. > > > If a leak is possible in a design, then we should count on it > > > happening somewhere as a certainty, and should be prepared for the > > > behavior afterwards. > > > > > > Chris already brought up one of the negative behaviors: Connect > > > plugins which are cancelled may keep their metrics open past the point > > > that a replacement plugin is instantiated. > > > This will have the effect of showing incorrect metrics, which is > > > harmful and confusing for operators. > > > If you are constantly skeptical of the accuracy of your metrics, and > > > there is no "source of truth" to verify against, then what use are the > > > metrics? > > > > > > I think that managing the lifecycle of the PluginMetrics on the > > > framework side would be acceptable if we had an internal class like > > > the following, to keep a reference to the metrics adjacent to the > > > plugin: > > > class MonitorablePlugin<T> implements Supplier<T>, Closeable { > > > MonitorablePlugin(T plugin, PluginMetrics metrics); > > > } > > > I already believe that we need similar wrapper classes in Connect [1] > > > to manage classloader swapping & exception safety, and this simpler > > > interface could be applied to non-connect call-sites that don't need > > > to swap the classloader. > > > > > > 2. Your "MyInterceptor" class doesn't have a "metrics" field, and > > > doesn't perform a null-check on the field in close(). > > > Keeping the PluginMetrics as an non-final instance variable in every > > > plugin implementation is another burden on the plugin implementations, > > > as they will need to perform null checks in-case the metrics are never > > > initialized, such as in a test environment. > > > It also shows that without the Closeable interface, plugins may not > > > need the PluginMetrics object after the initial setup if they only > > > have a fixed set of sensors that need to be made instance fields. > > > > > > 3. I realized when writing the above that this implicitly sets a > > > minimum framework version for plugins, as the Monitorable interface > > > must exist in order to be able to load the plugin classes. This is a > > > test which confirms that behavior: [2] [3] > > > There's no way for plugins to at-runtime disable plugin metrics when > > > put in an environment without support for them, which was one of the > > > features which was incorporated in KIP-610: [4] which meaningfully > > > changes the control flow of the connector. > > > > > > 4. For plugins which themselves use AbstractConfig (nearly all of > > > them) and use the getConfiguredInstance methods to instantiate plugins > > > of their own (e.g. MirrorMaker2 [5]), could these plugins also use > > > PluginMetrics from the framework, with a small change to the > > > signatures or class hierarchy? > > > > > > Thanks so much! > > > Greg > > > > > > [1] https://issues.apache.org/jira/browse/KAFKA-14670 > > > [2] > > > https://github.com/apache/kafka/blob/116bc000c8c6533552321fe1d395629c2aa00bd9/connect/runtime/src/test/resources/test-plugins/bad-packaging/test/plugins/MissingSuperclassConverter.java#L28-L30 > > > [3] > > > https://github.com/apache/kafka/blob/116bc000c8c6533552321fe1d395629c2aa00bd9/connect/runtime/src/test/java/org/apache/kafka/connect/runtime/isolation/PluginsTest.java#L233-L239 > > > [4] > > > https://cwiki.apache.org/confluence/display/KAFKA/KIP-610%3A+Error+Reporting+in+Sink+Connectors > > > [5] > > > https://github.com/apache/kafka/blob/116bc000c8c6533552321fe1d395629c2aa00bd9/connect/mirror/src/main/java/org/apache/kafka/connect/mirror/MirrorCheckpointConfig.java#L114 > > > > > > On Thu, Feb 8, 2024 at 11:49 AM Matthias J. Sax <mj...@apache.org> wrote: > > > > > > > > Still need to digest the KIP, but one thing coming to mind: > > > > > > > > Instead of requiring existing interfaces to implement `Closable`, would > > > > it make sense to make `Monitorable extends Closable` to sidestep this > > > > issue? > > > > > > > > > > > > -Matthias > > > > > > > > On 1/25/24 9:03 AM, Mickael Maison wrote: > > > > > Hi Luke, > > > > > > > > > > The reason vary for each plugin, I've added details to most plugins in > > > > > the table. > > > > > The plugins without an explanation are all from Streams. I admit I > > > > > don't know these interfaces enough to decide if it makes sense making > > > > > them closeable and instrumenting them. It would be nice to get some > > > > > input from Streams contributors to know. > > > > > > > > > > Thanks, > > > > > Mickael > > > > > > > > > > On Thu, Jan 25, 2024 at 5:50 PM Mickael Maison > > > > > <mickael.mai...@gmail.com> wrote: > > > > >> > > > > >> Hi Tom, > > > > >> > > > > >> Thanks for taking a look at the KIP! > > > > >> > > > > >> 1. Yes I considered several names (see the previous messages in the > > > > >> discussion). KIP-608, which this KIP superseeds, used "monitor()" for > > > > >> the method name. I find "withMetrics()" to be nicer due to the way > > > > >> the > > > > >> method should be used. That said, I'm not attached to the name so if > > > > >> more people prefer "monitor()", or can come up with a better name, > > > > >> I'm > > > > >> happy to make the change. I updated the javadoc to clarify the usage > > > > >> and mention when to close the PluginMetrics instance. > > > > >> > > > > >> 2. Yes I added a note to the PluginMetrics interface > > > > >> > > > > >> 3. I used this exception to follow the behavior of > > > > >> Metrics.addMetric() > > > > >> which throws IllegalArgumentException if a metric with the same name > > > > >> already exist. > > > > >> > > > > >> 4. I added details to the javadoc > > > > >> > > > > >> Thanks, > > > > >> Mickael > > > > >> > > > > >> > > > > >> On Thu, Jan 25, 2024 at 10:32 AM Luke Chen <show...@gmail.com> wrote: > > > > >>> > > > > >>> Hi Mickael, > > > > >>> > > > > >>> Thanks for the KIP. > > > > >>> The motivation and solution makes sense to me. > > > > >>> > > > > >>> Just one question: > > > > >>> If we could extend `closable` for Converter plugin, why don't we do > > > > >>> that > > > > >>> for the "Unsupported Plugins" without close method? > > > > >>> I don't say we must do that in this KIP, but maybe you could add > > > > >>> the reason > > > > >>> in the "rejected alternatives". > > > > >>> > > > > >>> Thanks. > > > > >>> Luke > > > > >>> > > > > >>> On Thu, Jan 25, 2024 at 3:46 PM Slathia p <slat...@votecgroup.com> > > > > >>> wrote: > > > > >>> > > > > >>>> Hi Team, > > > > >>>> > > > > >>>> > > > > >>>> > > > > >>>> Greetings, > > > > >>>> > > > > >>>> > > > > >>>> > > > > >>>> Apologies for the delay in reply as I was down with flu. > > > > >>>> > > > > >>>> > > > > >>>> > > > > >>>> We actually reached out to you for IT/ SAP/ Oracle/ Infor / > > > > >>>> Microsoft > > > > >>>> “VOTEC IT SERVICE PARTNERSHIP” “IT SERVICE OUTSOURCING” “ > > > > >>>> “PARTNER SERVICE > > > > >>>> SUBCONTRACTING” > > > > >>>> > > > > >>>> > > > > >>>> > > > > >>>> We have very attractive newly introduce reasonably price PARTNER IT > > > > >>>> SERVICE ODC SUBCONTRACTING MODEL in USA, Philippines, India and > > > > >>>> Singapore > > > > >>>> etc with White Label Model. > > > > >>>> > > > > >>>> > > > > >>>> > > > > >>>> Our LOW COST IT SERVICE ODC MODEL eliminate the cost of expensive > > > > >>>> employee > > > > >>>> payroll, Help partner to get profit more than 50% on each > > > > >>>> project.. ..We > > > > >>>> really mean it. > > > > >>>> > > > > >>>> > > > > >>>> > > > > >>>> We are already working with platinum partner like NTT DATA, NEC > > > > >>>> Singapore, > > > > >>>> Deloitte, Hitachi consulting. ACCENTURE, Abeam Singapore etc. > > > > >>>> > > > > >>>> > > > > >>>> > > > > >>>> Are u keen to understand VOTEC IT SERVICE MODEL PARTNERSHIP > > > > >>>> offerings? > > > > >>>> > > > > >>>> > > > > >>>> > > > > >>>> Let us know your availability this week OR Next week?? We can > > > > >>>> arrange > > > > >>>> discussion with Partner Manager. > > > > >>>>> On 01/25/2024 9:56 AM +08 Tom Bentley <tbent...@redhat.com> wrote: > > > > >>>>> > > > > >>>>> > > > > >>>>> Hi Mickael, > > > > >>>>> > > > > >>>>> Thanks for the KIP! I can tell a lot of thought went into this. I > > > > >>>>> have a > > > > >>>>> few comments, but they're all pretty trivial and aimed at making > > > > >>>>> the > > > > >>>>> correct use of this API clearer to implementors. > > > > >>>>> > > > > >>>>> 1. Configurable and Reconfigurable both use a verb in the > > > > >>>>> imperative mood > > > > >>>>> for their method name. Monitorable doesn't, which initially > > > > >>>>> seemed a bit > > > > >>>>> inconsistent to me, but I think your intention is to allow > > > > >>>>> plugins to > > > > >>>>> merely retain a reference to the PluginMetrics, and allow > > > > >>>>> registering > > > > >>>>> metrics at any later point? If that's the case you could add > > > > >>>>> something > > > > >>>> like > > > > >>>>> "Plugins can register and unregister metrics using the given > > > > >>>> PluginMetrics > > > > >>>>> at any point in their lifecycle prior to their close method being > > > > >>>>> called" > > > > >>>>> to the javadoc to make clear how this can be used. > > > > >>>>> 2. I assume PluginMetrics will be thread-safe? We should document > > > > >>>>> that as > > > > >>>>> part of the contract. > > > > >>>>> 3. I don't think IAE is quite right for duplicate metrics. In > > > > >>>>> this case > > > > >>>> the > > > > >>>>> arguments themselves are fine, it's the current state of the > > > > >>>> PluginMetrics > > > > >>>>> which causes the problem. If the earlier point about plugins being > > > > >>>> allowed > > > > >>>>> to register and unregister metrics at any point is correct then > > > > >>>>> this > > > > >>>>> exception could be thrown after configuration time. That being > > > > >>>>> the case I > > > > >>>>> think a new exception type might be clearer. > > > > >>>>> 4. You define some semantics for PluginMetrics.close(): It might > > > > >>>>> be a > > > > >>>> good > > > > >>>>> idea to override the inherited method and add that as javadoc. > > > > >>>>> 5. You say "It will be the responsibility of the plugin that > > > > >>>>> creates > > > > >>>>> metrics to call close() of the PluginMetrics instance they were > > > > >>>>> given to > > > > >>>>> remove their metrics." But you don't provide any guidance to > > > > >>>>> users about > > > > >>>>> when they need to do this. I guess that they should be doing this > > > > >>>>> in > > > > >>>> their > > > > >>>>> plugin's close method (and that's why you're only adding > > > > >>>>> Monitorable to > > > > >>>>> plugins which implement Closeable and AutoCloseable), but if > > > > >>>>> that's the > > > > >>>>> case then let's say so in the Javadoc. > > > > >>>>> > > > > >>>>> Thanks again, > > > > >>>>> > > > > >>>>> Tom > > > > >>>>> > > > > >>>>> On Wed, 13 Dec 2023 at 06:09, Mickael Maison > > > > >>>>> <mickael.mai...@gmail.com> > > > > >>>>> wrote: > > > > >>>>> > > > > >>>>>> Hi, > > > > >>>>>> > > > > >>>>>> I've not received any feedback since I updated the KIP. > > > > >>>>>> I'll wait a few more days and if there's no further feedback I'll > > > > >>>> start a > > > > >>>>>> vote. > > > > >>>>>> > > > > >>>>>> Thanks, > > > > >>>>>> Mickael > > > > >>>>>> > > > > >>>>>> On Tue, Nov 7, 2023 at 6:29 PM Mickael Maison < > > > > >>>> mickael.mai...@gmail.com> > > > > >>>>>> wrote: > > > > >>>>>>> > > > > >>>>>>> Hi, > > > > >>>>>>> > > > > >>>>>>> A bit later than initially planned I finally restarted looking > > > > >>>>>>> at > > > > >>>> this > > > > >>>>>> KIP. > > > > >>>>>>> > > > > >>>>>>> I made a few significant changes to the proposed APIs. > > > > >>>>>>> I considered Chris' idea of automatically removing metrics but > > > > >>>> decided > > > > >>>>>>> to leave that responsibility to the plugins. All plugins that > > > > >>>>>>> will > > > > >>>>>>> support this feature have close/stop methods and will need to > > > > >>>>>>> close > > > > >>>>>>> their PluginMetrics instance. This simplifies the required > > > > >>>>>>> changes a > > > > >>>>>>> lot and I think it's not a big ask on users implementing > > > > >>>>>>> plugins. > > > > >>>>>>> > > > > >>>>>>> Thanks, > > > > >>>>>>> Mickael > > > > >>>>>>> > > > > >>>>>>> On Tue, May 30, 2023 at 11:32 AM Mickael Maison > > > > >>>>>>> <mickael.mai...@gmail.com> wrote: > > > > >>>>>>>> > > > > >>>>>>>> Hi Jorge, > > > > >>>>>>>> > > > > >>>>>>>> There are a few issues with the current proposal. Once 3.5 is > > > > >>>>>>>> out, > > > > >>>> I > > > > >>>>>>>> plan to start looking at this again. > > > > >>>>>>>> > > > > >>>>>>>> Thanks, > > > > >>>>>>>> Mickael > > > > >>>>>>>> > > > > >>>>>>>> On Mon, May 15, 2023 at 3:19 PM Jorge Esteban Quilcate Otoya > > > > >>>>>>>> <quilcate.jo...@gmail.com> wrote: > > > > >>>>>>>>> > > > > >>>>>>>>> Hi Mickael, > > > > >>>>>>>>> > > > > >>>>>>>>> Just to check the status of this KIP as it looks very useful. > > > > >>>>>>>>> I > > > > >>>> can > > > > >>>>>> see how > > > > >>>>>>>>> new Tiered Storage interfaces and plugins may benefit from > > > > >>>>>>>>> this. > > > > >>>>>>>>> > > > > >>>>>>>>> Cheers, > > > > >>>>>>>>> Jorge. > > > > >>>>>>>>> > > > > >>>>>>>>> On Mon, 6 Feb 2023 at 23:00, Chris Egerton > > > > >>>> <chr...@aiven.io.invalid> > > > > >>>>>> wrote: > > > > >>>>>>>>> > > > > >>>>>>>>>> Hi Mickael, > > > > >>>>>>>>>> > > > > >>>>>>>>>> I agree that adding a getter method for Monitorable isn't > > > > >>>> great. A > > > > >>>>>> few > > > > >>>>>>>>>> alternatives come to mind: > > > > >>>>>>>>>> > > > > >>>>>>>>>> 1. Introduce a new ConfiguredInstance<T> (name subject to > > > > >>>> change) > > > > >>>>>> interface > > > > >>>>>>>>>> that wraps an instance of type T, but also contains a getter > > > > >>>>>> method for any > > > > >>>>>>>>>> PluginMetrics instances that the plugin was instantiated with > > > > >>>>>> (which may > > > > >>>>>>>>>> return null either if no PluginMetrics instance could be > > > > >>>> created > > > > >>>>>> for the > > > > >>>>>>>>>> plugin, or if it did not implement the Monitorable > > > > >>>>>>>>>> interface). > > > > >>>>>> This can be > > > > >>>>>>>>>> the return type of the new > > > > >>>> AbstractConfig::getConfiguredInstance > > > > >>>>>> variants. > > > > >>>>>>>>>> It would give us room to move forward with other > > > > >>>>>> plugin-for-your-plugin > > > > >>>>>>>>>> style interfaces without cluttering things up with getter > > > > >>>> methods. > > > > >>>>>> We could > > > > >>>>>>>>>> even add a close method to this interface which would handle > > > > >>>>>> cleanup of all > > > > >>>>>>>>>> extra resources allocated for the plugin by the runtime, and > > > > >>>> even > > > > >>>>>> possibly > > > > >>>>>>>>>> the plugin itself. > > > > >>>>>>>>>> > > > > >>>>>>>>>> 2. Break out the instantiation logic into two separate steps. > > > > >>>> The > > > > >>>>>> first > > > > >>>>>>>>>> step, creating a PluginMetrics instance, can be either > > > > >>>>>>>>>> private > > > > >>>> or > > > > >>>>>> public > > > > >>>>>>>>>> API. The second step, providing that PluginMetrics instance > > > > >>>>>>>>>> to > > > > >>>> a > > > > >>>>>>>>>> newly-created object, can be achieved with a small tweak of > > > > >>>>>>>>>> the > > > > >>>>>> proposed > > > > >>>>>>>>>> new methods for the AbstractConfig class; instead of > > > > >>>>>>>>>> accepting > > > > >>>> a > > > > >>>>>> Metrics > > > > >>>>>>>>>> instance, they would now accept a PluginMetrics instance. For > > > > >>>> the > > > > >>>>>> first > > > > >>>>>>>>>> step, we might even introduce a new CloseablePluginMetrics > > > > >>>>>> interface which > > > > >>>>>>>>>> would be the return type of whatever method we use to create > > > > >>>> the > > > > >>>>>>>>>> PluginMetrics instance. We can track that > > > > >>>> CloseablePluginMetrics > > > > >>>>>> instance > > > > >>>>>>>>>> in tandem with the plugin it applies to, and close it when > > > > >>>> we're > > > > >>>>>> done with > > > > >>>>>>>>>> the plugin. > > > > >>>>>>>>>> > > > > >>>>>>>>>> I know that this adds some complexity to the API design and > > > > >>>> some > > > > >>>>>>>>>> bookkeeping responsibilities for our implementation, but I > > > > >>>> can't > > > > >>>>>> shake the > > > > >>>>>>>>>> feeling that if we don't feel comfortable taking on the > > > > >>>>>> responsibility to > > > > >>>>>>>>>> clean up these resources ourselves, it's not really fair to > > > > >>>>>>>>>> ask > > > > >>>>>> users to > > > > >>>>>>>>>> handle it for us instead. And with the case of Connect, > > > > >>>> sometimes > > > > >>>>>> Connector > > > > >>>>>>>>>> or Task instances that are scheduled for shutdown block for a > > > > >>>>>> while, at > > > > >>>>>>>>>> which point we abandon them and bring up new instances in > > > > >>>>>>>>>> their > > > > >>>>>> place; it'd > > > > >>>>>>>>>> be nice to have a way to forcibly clear out all the metrics > > > > >>>>>> allocated by > > > > >>>>>>>>>> that Connector or Task instance before bringing up a new one, > > > > >>>> in > > > > >>>>>> order to > > > > >>>>>>>>>> prevent issues due to naming conflicts. > > > > >>>>>>>>>> > > > > >>>>>>>>>> Regardless, and whether or not it ends up being relevant to > > > > >>>> this > > > > >>>>>> KIP, I'd > > > > >>>>>>>>>> love to see a new Converter::close method. It's irked me for > > > > >>>> quite > > > > >>>>>> a while > > > > >>>>>>>>>> that we don't have one already. > > > > >>>>>>>>>> > > > > >>>>>>>>>> Cheers, > > > > >>>>>>>>>> > > > > >>>>>>>>>> Chris > > > > >>>>>>>>>> > > > > >>>>>>>>>> On Mon, Feb 6, 2023 at 1:50 PM Mickael Maison < > > > > >>>>>> mickael.mai...@gmail.com> > > > > >>>>>>>>>> wrote: > > > > >>>>>>>>>> > > > > >>>>>>>>>>> Hi Chris, > > > > >>>>>>>>>>> > > > > >>>>>>>>>>> I envisioned plugins to be responsible for closing the > > > > >>>>>> PluginMetrics > > > > >>>>>>>>>>> instance. This is mostly important for Connect connector > > > > >>>> plugins > > > > >>>>>> as > > > > >>>>>>>>>>> they can be closed while the runtime keeps running (and > > > > >>>> keeps its > > > > >>>>>>>>>>> Metrics instance). As far as I can tell, other plugins > > > > >>>>>>>>>>> should > > > > >>>>>> only be > > > > >>>>>>>>>>> closed when their runtime closes, so we should not be > > > > >>>>>>>>>>> leaking > > > > >>>>>> metrics > > > > >>>>>>>>>>> even if those don't explicitly call close(). > > > > >>>>>>>>>>> > > > > >>>>>>>>>>> For Connect plugin, as you said, it would be nice to > > > > >>>>>> automatically > > > > >>>>>>>>>>> close their associated PluginMetrics rather than relying on > > > > >>>> user > > > > >>>>>>>>>>> logic. The issue is that with the current API there's no way > > > > >>>> to > > > > >>>>>>>>>>> retrieve the PluginMetrics instance once it's passed to the > > > > >>>>>> plugin. > > > > >>>>>>>>>>> I'm not super keen on having a getter method on the > > > > >>>> Monitorable > > > > >>>>>>>>>>> interface and tracking PluginMetrics instances associated > > > > >>>> with > > > > >>>>>> each > > > > >>>>>>>>>>> plugin would require a lot of changes. I just noticed > > > > >>>> Converter > > > > >>>>>> does > > > > >>>>>>>>>>> not have a close() method so it's problematic for that type > > > > >>>> of > > > > >>>>>> plugin. > > > > >>>>>>>>>>> The other Connect plugins all have close() or stop() > > > > >>>> methods. I > > > > >>>>>> wonder > > > > >>>>>>>>>>> if the simplest is to make Converter extend Closeable. WDYT? > > > > >>>>>>>>>>> > > > > >>>>>>>>>>> Thanks, > > > > >>>>>>>>>>> Mickael > > > > >>>>>>>>>>> > > > > >>>>>>>>>>> On Mon, Feb 6, 2023 at 6:39 PM Mickael Maison < > > > > >>>>>> mickael.mai...@gmail.com> > > > > >>>>>>>>>>> wrote: > > > > >>>>>>>>>>>> > > > > >>>>>>>>>>>> Hi Yash, > > > > >>>>>>>>>>>> > > > > >>>>>>>>>>>> I added a sentence to the sensor() method mentioning the > > > > >>>>>> sensor name > > > > >>>>>>>>>>>> must only be unique per plugin. Regarding having getters > > > > >>>> for > > > > >>>>>> sensors > > > > >>>>>>>>>>>> and metrics I considered this not strictly necessary as I > > > > >>>>>> expect the > > > > >>>>>>>>>>>> metrics logic in most plugins to be relatively simple. If > > > > >>>> you > > > > >>>>>> have a > > > > >>>>>>>>>>>> use case that would benefit from these methods, let me > > > > >>>> know I > > > > >>>>>> will > > > > >>>>>>>>>>>> reconsider. > > > > >>>>>>>>>>>> > > > > >>>>>>>>>>>> Thanks, > > > > >>>>>>>>>>>> Mickael > > > > >>>>>>>>>>>> > > > > >>>>>>>>>>>> > > > > >>>>>>>>>>>> On Fri, Feb 3, 2023 at 9:16 AM Yash Mayya < > > > > >>>>>> yash.ma...@gmail.com> > > > > >>>>>>>>>> wrote: > > > > >>>>>>>>>>>>> > > > > >>>>>>>>>>>>> Hi Mickael, > > > > >>>>>>>>>>>>> > > > > >>>>>>>>>>>>> Thanks for the updates. > > > > >>>>>>>>>>>>> > > > > >>>>>>>>>>>>>> the PluginMetrics implementation will append a > > > > >>>>>>>>>>>>>> suffix to sensor names to unique identify > > > > >>>>>>>>>>>>>> the plugin (based on the class name and tags). > > > > >>>>>>>>>>>>> > > > > >>>>>>>>>>>>> Can we call this out explicitly in the KIP, since it is > > > > >>>>>> important to > > > > >>>>>>>>>>> avoid > > > > >>>>>>>>>>>>> clashes in sensor naming? Also, should we allow plugins > > > > >>>> to > > > > >>>>>> retrieve > > > > >>>>>>>>>>> sensors > > > > >>>>>>>>>>>>> from `PluginMetrics` if we can check / verify that they > > > > >>>> own > > > > >>>>>> the > > > > >>>>>>>>>> sensor > > > > >>>>>>>>>>>>> (based on the suffix)? > > > > >>>>>>>>>>>>> > > > > >>>>>>>>>>>>> Other than the above minor points, this looks good to me > > > > >>>> now! > > > > >>>>>>>>>>>>> > > > > >>>>>>>>>>>>> Thanks, > > > > >>>>>>>>>>>>> Yash > > > > >>>>>>>>>>>>> > > > > >>>>>>>>>>>>> On Fri, Feb 3, 2023 at 2:29 AM Chris Egerton > > > > >>>>>> <chr...@aiven.io.invalid > > > > >>>>>>>>>>> > > > > >>>>>>>>>>>>> wrote: > > > > >>>>>>>>>>>>> > > > > >>>>>>>>>>>>>> Hi Mickael, > > > > >>>>>>>>>>>>>> > > > > >>>>>>>>>>>>>> This is looking great. I have one small question left > > > > >>>> but > > > > >>>>>> I do not > > > > >>>>>>>>>>> consider > > > > >>>>>>>>>>>>>> it a blocker. > > > > >>>>>>>>>>>>>> > > > > >>>>>>>>>>>>>> What is the intended use case for > > > > >>>> PluginMetrics::close? To > > > > >>>>>> me at > > > > >>>>>>>>>>> least, it > > > > >>>>>>>>>>>>>> implies that plugin developers will be responsible for > > > > >>>>>> invoking > > > > >>>>>>>>>> that > > > > >>>>>>>>>>> method > > > > >>>>>>>>>>>>>> themselves in order to clean up metrics that they've > > > > >>>>>> created, but > > > > >>>>>>>>>>> wouldn't > > > > >>>>>>>>>>>>>> we want the runtime (i.e., KafkaProducer class, Connect > > > > >>>>>> framework, > > > > >>>>>>>>>>> etc.) to > > > > >>>>>>>>>>>>>> handle that automatically when the resource that the > > > > >>>>>> plugin applies > > > > >>>>>>>>>>> to is > > > > >>>>>>>>>>>>>> closed? > > > > >>>>>>>>>>>>>> > > > > >>>>>>>>>>>>>> Cheers, > > > > >>>>>>>>>>>>>> > > > > >>>>>>>>>>>>>> Chris > > > > >>>>>>>>>>>>>> > > > > >>>>>>>>>>>>>> On Thu, Jan 26, 2023 at 10:22 AM Mickael Maison < > > > > >>>>>>>>>>> mickael.mai...@gmail.com> > > > > >>>>>>>>>>>>>> wrote: > > > > >>>>>>>>>>>>>> > > > > >>>>>>>>>>>>>>> Hi Yash, > > > > >>>>>>>>>>>>>>> > > > > >>>>>>>>>>>>>>> 1) To avoid conflicts with other sensors, the > > > > >>>>>> PluginMetrics > > > > >>>>>>>>>>>>>>> implementation will append a suffix to sensor names > > > > >>>> to > > > > >>>>>> unique > > > > >>>>>>>>>>> identify > > > > >>>>>>>>>>>>>>> the plugin (based on the class name and tags). Also I > > > > >>>>>> changed the > > > > >>>>>>>>>>>>>>> semantics of the sensor() method to only create > > > > >>>> sensors > > > > >>>>>>>>>>> (originally it > > > > >>>>>>>>>>>>>>> was get or create). If a sensor with the same name > > > > >>>>>> already > > > > >>>>>>>>>> exists, > > > > >>>>>>>>>>> the > > > > >>>>>>>>>>>>>>> method will throw. > > > > >>>>>>>>>>>>>>> 2) Tags will be automatically added to metrics and > > > > >>>>>> sensors to > > > > >>>>>>>>>>> unique > > > > >>>>>>>>>>>>>>> identify the plugin. For Connect plugins, the > > > > >>>> connector > > > > >>>>>> name, > > > > >>>>>>>>>> task > > > > >>>>>>>>>>> id > > > > >>>>>>>>>>>>>>> and alias can be added if available. The class > > > > >>>>>> implementing > > > > >>>>>>>>>>>>>>> PluginMetrics will be similar to ConnectMetrics, as > > > > >>>> in > > > > >>>>>> it will > > > > >>>>>>>>>>> provide > > > > >>>>>>>>>>>>>>> a simplified API wrapping Metrics. I'm planning to > > > > >>>> use > > > > >>>>>>>>>>> PluginMetrics > > > > >>>>>>>>>>>>>>> for Connect plugin too and should not need to > > > > >>>> interact > > > > >>>>>> with > > > > >>>>>>>>>>>>>>> ConnectMetrics. > > > > >>>>>>>>>>>>>>> 3) Right, I fixed the last rejected alternative. > > > > >>>>>>>>>>>>>>> > > > > >>>>>>>>>>>>>>> Thanks, > > > > >>>>>>>>>>>>>>> Mickael > > > > >>>>>>>>>>>>>>> > > > > >>>>>>>>>>>>>>> On Thu, Jan 26, 2023 at 4:04 PM Mickael Maison < > > > > >>>>>>>>>>> mickael.mai...@gmail.com > > > > >>>>>>>>>>>>>>> > > > > >>>>>>>>>>>>>>> wrote: > > > > >>>>>>>>>>>>>>>> > > > > >>>>>>>>>>>>>>>> Hi Federico, > > > > >>>>>>>>>>>>>>>> > > > > >>>>>>>>>>>>>>>> - The metricName() method does not register > > > > >>>> anything, > > > > >>>>>> it just > > > > >>>>>>>>>>> builds a > > > > >>>>>>>>>>>>>>>> MetricName instance which is just a container > > > > >>>> holding > > > > >>>>>> a name, > > > > >>>>>>>>>>> group, > > > > >>>>>>>>>>>>>>>> description and tags for a metric. Each time it is > > > > >>>>>> called, it > > > > >>>>>>>>>>> returns > > > > >>>>>>>>>>>>>>>> a new instance. If called with the same arguments, > > > > >>>> the > > > > >>>>>> returned > > > > >>>>>>>>>>> value > > > > >>>>>>>>>>>>>>>> will be equal. > > > > >>>>>>>>>>>>>>>> - Initially I just copied the API of Metrics. I > > > > >>>> made > > > > >>>>>> some small > > > > >>>>>>>>>>>>>>>> changes so the metric and sensor methods are a bit > > > > >>>>>> more similar > > > > >>>>>>>>>>>>>>>> - Good catch! I fixed the example. > > > > >>>>>>>>>>>>>>>> > > > > >>>>>>>>>>>>>>>> Thanks, > > > > >>>>>>>>>>>>>>>> Mickael > > > > >>>>>>>>>>>>>>>> > > > > >>>>>>>>>>>>>>>> > > > > >>>>>>>>>>>>>>>> On Thu, Jan 26, 2023 at 3:54 PM Mickael Maison < > > > > >>>>>>>>>>>>>> mickael.mai...@gmail.com> > > > > >>>>>>>>>>>>>>> wrote: > > > > >>>>>>>>>>>>>>>>> > > > > >>>>>>>>>>>>>>>>> Hi Chris, > > > > >>>>>>>>>>>>>>>>> > > > > >>>>>>>>>>>>>>>>> 1) I updated the KIP to only mention the > > > > >>>> interface. > > > > >>>>>>>>>>>>>>>>> 2) This was a mistake. I've added > > > > >>>> ReplicationPolicy > > > > >>>>>> to the > > > > >>>>>>>>>>> list of > > > > >>>>>>>>>>>>>>> plugins. > > > > >>>>>>>>>>>>>>>>> > > > > >>>>>>>>>>>>>>>>> Thanks, > > > > >>>>>>>>>>>>>>>>> Mickael > > > > >>>>>>>>>>>>>>>>> > > > > >>>>>>>>>>>>>>>>> On Tue, Jan 24, 2023 at 11:16 AM Yash Mayya < > > > > >>>>>>>>>>> yash.ma...@gmail.com> > > > > >>>>>>>>>>>>>>> wrote: > > > > >>>>>>>>>>>>>>>>>> > > > > >>>>>>>>>>>>>>>>>> Hi Mickael, > > > > >>>>>>>>>>>>>>>>>> > > > > >>>>>>>>>>>>>>>>>> Thanks for the updated KIP, this is looking > > > > >>>> really > > > > >>>>>> good! I > > > > >>>>>>>>>>> had a > > > > >>>>>>>>>>>>>>> couple > > > > >>>>>>>>>>>>>>>>>> more questions - > > > > >>>>>>>>>>>>>>>>>> > > > > >>>>>>>>>>>>>>>>>> 1) Sensor names need to be unique across all > > > > >>>>>> groups for a > > > > >>>>>>>>>>> `Metrics` > > > > >>>>>>>>>>>>>>>>>> instance. How are we planning to avoid naming > > > > >>>>>> clashes (both > > > > >>>>>>>>>>> between > > > > >>>>>>>>>>>>>>>>>> different plugins as well as with pre-defined > > > > >>>>>> sensors)? > > > > >>>>>>>>>>>>>>>>>> > > > > >>>>>>>>>>>>>>>>>> 2) Connect has a `ConnectMetrics` wrapper > > > > >>>> around > > > > >>>>>> `Metrics` > > > > >>>>>>>>>>> via > > > > >>>>>>>>>>>>>> which > > > > >>>>>>>>>>>>>>>>>> rebalance / worker / connector / task metrics > > > > >>>> are > > > > >>>>>> recorded. > > > > >>>>>>>>>>> Could > > > > >>>>>>>>>>>>>> you > > > > >>>>>>>>>>>>>>>>>> please elaborate in the KIP how the plugin > > > > >>>> metrics > > > > >>>>>> for > > > > >>>>>>>>>>> connectors / > > > > >>>>>>>>>>>>>>> tasks > > > > >>>>>>>>>>>>>>>>>> will inter-operate with this? > > > > >>>>>>>>>>>>>>>>>> > > > > >>>>>>>>>>>>>>>>>> Another minor point is that the third rejected > > > > >>>>>> alternative > > > > >>>>>>>>>>> appears > > > > >>>>>>>>>>>>>>> to be an > > > > >>>>>>>>>>>>>>>>>> incomplete sentence? > > > > >>>>>>>>>>>>>>>>>> > > > > >>>>>>>>>>>>>>>>>> Thanks, > > > > >>>>>>>>>>>>>>>>>> Yash > > > > >>>>>>>>>>>>>>>>>> > > > > >>>>>>>>>>>>>>>>>> On Fri, Jan 13, 2023 at 10:56 PM Mickael > > > > >>>> Maison < > > > > >>>>>>>>>>>>>>> mickael.mai...@gmail.com> > > > > >>>>>>>>>>>>>>>>>> wrote: > > > > >>>>>>>>>>>>>>>>>> > > > > >>>>>>>>>>>>>>>>>>> Hi, > > > > >>>>>>>>>>>>>>>>>>> > > > > >>>>>>>>>>>>>>>>>>> I've updated the KIP based on the feedback. > > > > >>>>>>>>>>>>>>>>>>> > > > > >>>>>>>>>>>>>>>>>>> Now instead of receiving a Metrics instance, > > > > >>>>>> plugins get > > > > >>>>>>>>>>> access > > > > >>>>>>>>>>>>>> to > > > > >>>>>>>>>>>>>>>>>>> PluginMetrics that exposes a much smaller > > > > >>>> API. > > > > >>>>>> I've > > > > >>>>>>>>>>> removed the > > > > >>>>>>>>>>>>>>>>>>> special handling for connectors and tasks and > > > > >>>>>> they must > > > > >>>>>>>>>> now > > > > >>>>>>>>>>>>>>> implement > > > > >>>>>>>>>>>>>>>>>>> the Monitorable interface as well to use this > > > > >>>>>> feature. > > > > >>>>>>>>>>> Finally > > > > >>>>>>>>>>>>>> the > > > > >>>>>>>>>>>>>>>>>>> goal is to allow all plugins (apart from > > > > >>>> metrics > > > > >>>>>>>>>>> reporters) to > > > > >>>>>>>>>>>>>> use > > > > >>>>>>>>>>>>>>>>>>> this feature. I've listed them all (there are > > > > >>>>>> over 30 > > > > >>>>>>>>>>> pluggable > > > > >>>>>>>>>>>>>>> APIs) > > > > >>>>>>>>>>>>>>>>>>> but I've not added the list in the KIP. The > > > > >>>>>> reason is > > > > >>>>>>>>>> that > > > > >>>>>>>>>>> new > > > > >>>>>>>>>>>>>>> plugins > > > > >>>>>>>>>>>>>>>>>>> could be added in the future and instead I'll > > > > >>>>>> focus on > > > > >>>>>>>>>>> adding > > > > >>>>>>>>>>>>>>> support > > > > >>>>>>>>>>>>>>>>>>> in all the place that instantiate classes. > > > > >>>>>>>>>>>>>>>>>>> > > > > >>>>>>>>>>>>>>>>>>> Thanks, > > > > >>>>>>>>>>>>>>>>>>> Mickael > > > > >>>>>>>>>>>>>>>>>>> > > > > >>>>>>>>>>>>>>>>>>> On Tue, Jan 10, 2023 at 7:00 PM Mickael > > > > >>>> Maison < > > > > >>>>>>>>>>>>>>> mickael.mai...@gmail.com> > > > > >>>>>>>>>>>>>>>>>>> wrote: > > > > >>>>>>>>>>>>>>>>>>>> > > > > >>>>>>>>>>>>>>>>>>>> Hi Chris/Yash, > > > > >>>>>>>>>>>>>>>>>>>> > > > > >>>>>>>>>>>>>>>>>>>> Thanks for taking a look and providing > > > > >>>>>> feedback. > > > > >>>>>>>>>>>>>>>>>>>> > > > > >>>>>>>>>>>>>>>>>>>> 1) Yes you're right, when using > > > > >>>> incompatible > > > > >>>>>> version, > > > > >>>>>>>>>>> metrics() > > > > >>>>>>>>>>>>>>> would > > > > >>>>>>>>>>>>>>>>>>>> trigger NoSuchMethodError. I thought using > > > > >>>> the > > > > >>>>>> context > > > > >>>>>>>>>>> to pass > > > > >>>>>>>>>>>>>>> the > > > > >>>>>>>>>>>>>>>>>>>> Metrics object would be more idiomatic for > > > > >>>>>> Connect but > > > > >>>>>>>>>>> maybe > > > > >>>>>>>>>>>>>>>>>>>> implementing Monitorable would be simpler. > > > > >>>> It > > > > >>>>>> would > > > > >>>>>>>>>> also > > > > >>>>>>>>>>> allow > > > > >>>>>>>>>>>>>>> other > > > > >>>>>>>>>>>>>>>>>>>> Connect plugins (transformations, > > > > >>>> converters, > > > > >>>>>> etc) to > > > > >>>>>>>>>>> register > > > > >>>>>>>>>>>>>>>>>>>> metrics. So I'll make that change. > > > > >>>>>>>>>>>>>>>>>>>> > > > > >>>>>>>>>>>>>>>>>>>> 2) As mentioned in the rejected > > > > >>>> alternatives, I > > > > >>>>>>>>>>> considered > > > > >>>>>>>>>>>>>>> having a > > > > >>>>>>>>>>>>>>>>>>>> PluginMetrics class/interface with a > > > > >>>> limited > > > > >>>>>> API. But > > > > >>>>>>>>>>> since > > > > >>>>>>>>>>>>>>> Metrics is > > > > >>>>>>>>>>>>>>>>>>>> part of the public API, I thought it would > > > > >>>> be > > > > >>>>>> simpler > > > > >>>>>>>>>> to > > > > >>>>>>>>>>> reuse > > > > >>>>>>>>>>>>>>> it. > > > > >>>>>>>>>>>>>>>>>>>> That said you bring interesting points so I > > > > >>>>>> took > > > > >>>>>>>>>> another > > > > >>>>>>>>>>> look > > > > >>>>>>>>>>>>>>> today. > > > > >>>>>>>>>>>>>>>>>>>> It's true that the Metrics API is pretty > > > > >>>>>> complex and > > > > >>>>>>>>>> most > > > > >>>>>>>>>>>>>>> methods are > > > > >>>>>>>>>>>>>>>>>>>> useless for plugin authors. I'd expect most > > > > >>>>>> use cases > > > > >>>>>>>>>>> only need > > > > >>>>>>>>>>>>>>> one > > > > >>>>>>>>>>>>>>>>>>>> addMetric and one sensor methods. Rather > > > > >>>> than > > > > >>>>>>>>>> subclassing > > > > >>>>>>>>>>>>>>> Metrics, I > > > > >>>>>>>>>>>>>>>>>>>> think a delegate/forwarding pattern might > > > > >>>> work > > > > >>>>>> well > > > > >>>>>>>>>>> here. A > > > > >>>>>>>>>>>>>>>>>>>> PluginMetric class would forward its > > > > >>>> method to > > > > >>>>>> the > > > > >>>>>>>>>>> Metrics > > > > >>>>>>>>>>>>>>> instance > > > > >>>>>>>>>>>>>>>>>>>> and could perform some basic validations > > > > >>>> such > > > > >>>>>> as only > > > > >>>>>>>>>>> letting > > > > >>>>>>>>>>>>>>> plugins > > > > >>>>>>>>>>>>>>>>>>>> delete metrics they created, or > > > > >>>> automatically > > > > >>>>>> injecting > > > > >>>>>>>>>>> tags > > > > >>>>>>>>>>>>>>> with the > > > > >>>>>>>>>>>>>>>>>>>> class name for example. > > > > >>>>>>>>>>>>>>>>>>>> > > > > >>>>>>>>>>>>>>>>>>>> 3) Between the clients, brokers, streams > > > > >>>> and > > > > >>>>>> connect, > > > > >>>>>>>>>>> Kafka has > > > > >>>>>>>>>>>>>>> quite > > > > >>>>>>>>>>>>>>>>>>>> a lot! In practice I think registering > > > > >>>> metrics > > > > >>>>>> should > > > > >>>>>>>>>> be > > > > >>>>>>>>>>>>>>> beneficial > > > > >>>>>>>>>>>>>>>>>>>> for all plugins, I think the only exception > > > > >>>>>> would be > > > > >>>>>>>>>>> metrics > > > > >>>>>>>>>>>>>>> reporters > > > > >>>>>>>>>>>>>>>>>>>> (which are instantiated before the Metrics > > > > >>>>>> object). > > > > >>>>>>>>>> I'll > > > > >>>>>>>>>>> try to > > > > >>>>>>>>>>>>>>> build > > > > >>>>>>>>>>>>>>>>>>>> a list of all plugin types and add that to > > > > >>>> the > > > > >>>>>> KIP. > > > > >>>>>>>>>>>>>>>>>>>> > > > > >>>>>>>>>>>>>>>>>>>> Thanks, > > > > >>>>>>>>>>>>>>>>>>>> Mickael > > > > >>>>>>>>>>>>>>>>>>>> > > > > >>>>>>>>>>>>>>>>>>>> > > > > >>>>>>>>>>>>>>>>>>>> > > > > >>>>>>>>>>>>>>>>>>>> On Tue, Dec 27, 2022 at 4:54 PM Chris > > > > >>>> Egerton > > > > >>>>>>>>>>>>>>> <chr...@aiven.io.invalid> > > > > >>>>>>>>>>>>>>>>>>> wrote: > > > > >>>>>>>>>>>>>>>>>>>>> > > > > >>>>>>>>>>>>>>>>>>>>> Hi Yash, > > > > >>>>>>>>>>>>>>>>>>>>> > > > > >>>>>>>>>>>>>>>>>>>>> Yes, a default no-op is exactly what I > > > > >>>> had > > > > >>>>>> in mind > > > > >>>>>>>>>>> should the > > > > >>>>>>>>>>>>>>>>>>> Connector and > > > > >>>>>>>>>>>>>>>>>>>>> Task classes implement the Monitorable > > > > >>>>>> interface. > > > > >>>>>>>>>>>>>>>>>>>>> > > > > >>>>>>>>>>>>>>>>>>>>> Cheers, > > > > >>>>>>>>>>>>>>>>>>>>> > > > > >>>>>>>>>>>>>>>>>>>>> Chris > > > > >>>>>>>>>>>>>>>>>>>>> > > > > >>>>>>>>>>>>>>>>>>>>> On Tue, Dec 20, 2022 at 2:46 AM Yash > > > > >>>> Mayya < > > > > >>>>>>>>>>>>>>> yash.ma...@gmail.com> > > > > >>>>>>>>>>>>>>>>>>> wrote: > > > > >>>>>>>>>>>>>>>>>>>>> > > > > >>>>>>>>>>>>>>>>>>>>>> Hi Mickael, > > > > >>>>>>>>>>>>>>>>>>>>>> > > > > >>>>>>>>>>>>>>>>>>>>>> Thanks for creating this KIP, this > > > > >>>> will be > > > > >>>>>> a super > > > > >>>>>>>>>>> useful > > > > >>>>>>>>>>>>>>> feature to > > > > >>>>>>>>>>>>>>>>>>>>>> enhance existing connectors in the > > > > >>>> Kafka > > > > >>>>>> Connect > > > > >>>>>>>>>>> ecosystem. > > > > >>>>>>>>>>>>>>>>>>>>>> > > > > >>>>>>>>>>>>>>>>>>>>>> I have some similar concerns to the > > > > >>>> ones > > > > >>>>>> that Chris > > > > >>>>>>>>>>> has > > > > >>>>>>>>>>>>>>> outlined > > > > >>>>>>>>>>>>>>>>>>> above, > > > > >>>>>>>>>>>>>>>>>>>>>> especially with regard to directly > > > > >>>> exposing > > > > >>>>>>>>>> Connect's > > > > >>>>>>>>>>>>>>> Metrics object > > > > >>>>>>>>>>>>>>>>>>> to > > > > >>>>>>>>>>>>>>>>>>>>>> plugins. I believe it would be a lot > > > > >>>>>> friendlier to > > > > >>>>>>>>>>>>>>> developers if we > > > > >>>>>>>>>>>>>>>>>>> instead > > > > >>>>>>>>>>>>>>>>>>>>>> exposed wrapper methods in the context > > > > >>>>>> classes - > > > > >>>>>>>>>>> such as > > > > >>>>>>>>>>>>>> one > > > > >>>>>>>>>>>>>>> for > > > > >>>>>>>>>>>>>>>>>>>>>> registering a new metric, one for > > > > >>>>>> recording metric > > > > >>>>>>>>>>> values > > > > >>>>>>>>>>>>>>> and so on. > > > > >>>>>>>>>>>>>>>>>>> This > > > > >>>>>>>>>>>>>>>>>>>>>> would also have the added benefit of > > > > >>>>>> minimizing the > > > > >>>>>>>>>>> surface > > > > >>>>>>>>>>>>>>> area for > > > > >>>>>>>>>>>>>>>>>>>>>> potential misuse by custom plugins. > > > > >>>>>>>>>>>>>>>>>>>>>> > > > > >>>>>>>>>>>>>>>>>>>>>>> for connectors and tasks they should > > > > >>>>>> handle the > > > > >>>>>>>>>>>>>>>>>>>>>>> metrics() method returning null when > > > > >>>>>> deployed on > > > > >>>>>>>>>>>>>>>>>>>>>>> an older runtime. > > > > >>>>>>>>>>>>>>>>>>>>>> > > > > >>>>>>>>>>>>>>>>>>>>>> I believe this won't be the case, and > > > > >>>>>> instead > > > > >>>>>>>>>>> they'll need > > > > >>>>>>>>>>>>>>> to handle > > > > >>>>>>>>>>>>>>>>>>> a > > > > >>>>>>>>>>>>>>>>>>>>>> `NoSuchMethodError` right? This is > > > > >>>> similar > > > > >>>>>> to > > > > >>>>>>>>>>> previous KIPs > > > > >>>>>>>>>>>>>>> that > > > > >>>>>>>>>>>>>>>>>>> added > > > > >>>>>>>>>>>>>>>>>>>>>> methods to connector context classes > > > > >>>> and > > > > >>>>>> will arise > > > > >>>>>>>>>>> due to > > > > >>>>>>>>>>>>>> an > > > > >>>>>>>>>>>>>>>>>>>>>> incompatibility between the > > > > >>>> `connect-api` > > > > >>>>>>>>>> dependency > > > > >>>>>>>>>>> that a > > > > >>>>>>>>>>>>>>> plugin > > > > >>>>>>>>>>>>>>>>>>> will be > > > > >>>>>>>>>>>>>>>>>>>>>> compiled against versus what it will > > > > >>>>>> actually get > > > > >>>>>>>>>> at > > > > >>>>>>>>>>>>>> runtime. > > > > >>>>>>>>>>>>>>>>>>>>>> > > > > >>>>>>>>>>>>>>>>>>>>>> Hi Chris, > > > > >>>>>>>>>>>>>>>>>>>>>> > > > > >>>>>>>>>>>>>>>>>>>>>>> WDYT about having the Connector and > > > > >>>> Task > > > > >>>>>> classes > > > > >>>>>>>>>>>>>>>>>>>>>>> implement the Monitorable interface, > > > > >>>>>> both for > > > > >>>>>>>>>>>>>>>>>>>>>>> consistency's sake, and to prevent > > > > >>>>>> classloading > > > > >>>>>>>>>>>>>>>>>>>>>>> headaches? > > > > >>>>>>>>>>>>>>>>>>>>>> > > > > >>>>>>>>>>>>>>>>>>>>>> Are you suggesting that the framework > > > > >>>>>> should > > > > >>>>>>>>>>> configure > > > > >>>>>>>>>>>>>>> connectors / > > > > >>>>>>>>>>>>>>>>>>> tasks > > > > >>>>>>>>>>>>>>>>>>>>>> with a Metrics instance during their > > > > >>>>>> startup rather > > > > >>>>>>>>>>> than > > > > >>>>>>>>>>>>>> the > > > > >>>>>>>>>>>>>>>>>>> connector / > > > > >>>>>>>>>>>>>>>>>>>>>> task asking the framework to provide > > > > >>>> one? > > > > >>>>>> In this > > > > >>>>>>>>>>> case, I'm > > > > >>>>>>>>>>>>>>> guessing > > > > >>>>>>>>>>>>>>>>>>> you're > > > > >>>>>>>>>>>>>>>>>>>>>> envisioning a default no-op > > > > >>>> implementation > > > > >>>>>> for the > > > > >>>>>>>>>>> metrics > > > > >>>>>>>>>>>>>>>>>>> configuration > > > > >>>>>>>>>>>>>>>>>>>>>> method rather than the framework > > > > >>>> having to > > > > >>>>>> handle > > > > >>>>>>>>>>> the case > > > > >>>>>>>>>>>>>>> where the > > > > >>>>>>>>>>>>>>>>>>>>>> connector was compiled against an older > > > > >>>>>> version of > > > > >>>>>>>>>>> Connect > > > > >>>>>>>>>>>>>>> right? > > > > >>>>>>>>>>>>>>>>>>>>>> > > > > >>>>>>>>>>>>>>>>>>>>>> Thanks, > > > > >>>>>>>>>>>>>>>>>>>>>> Yash > > > > >>>>>>>>>>>>>>>>>>>>>> > > > > >>>>>>>>>>>>>>>>>>>>>> On Wed, Nov 30, 2022 at 1:38 AM Chris > > > > >>>>>> Egerton > > > > >>>>>>>>>>>>>>>>>>> <chr...@aiven.io.invalid> > > > > >>>>>>>>>>>>>>>>>>>>>> wrote: > > > > >>>>>>>>>>>>>>>>>>>>>> > > > > >>>>>>>>>>>>>>>>>>>>>>> Hi Mickael, > > > > >>>>>>>>>>>>>>>>>>>>>>> > > > > >>>>>>>>>>>>>>>>>>>>>>> Thanks for the KIP! This seems > > > > >>>>>> especially useful > > > > >>>>>>>>>> to > > > > >>>>>>>>>>>>>> reduce > > > > >>>>>>>>>>>>>>> the > > > > >>>>>>>>>>>>>>>>>>>>>>> implementation cost and divergence in > > > > >>>>>> behavior > > > > >>>>>>>>>> for > > > > >>>>>>>>>>>>>>> connectors that > > > > >>>>>>>>>>>>>>>>>>> choose > > > > >>>>>>>>>>>>>>>>>>>>>>> to publish their own metrics. > > > > >>>>>>>>>>>>>>>>>>>>>>> > > > > >>>>>>>>>>>>>>>>>>>>>>> My initial thoughts: > > > > >>>>>>>>>>>>>>>>>>>>>>> > > > > >>>>>>>>>>>>>>>>>>>>>>> 1. Are you certain that the default > > > > >>>>>>>>>> implementation > > > > >>>>>>>>>>> of the > > > > >>>>>>>>>>>>>>> "metrics" > > > > >>>>>>>>>>>>>>>>>>>>>> method > > > > >>>>>>>>>>>>>>>>>>>>>>> for the various connector/task > > > > >>>> context > > > > >>>>>> classes > > > > >>>>>>>>>>> will be > > > > >>>>>>>>>>>>>>> used on > > > > >>>>>>>>>>>>>>>>>>> older > > > > >>>>>>>>>>>>>>>>>>>>>>> versions of the Connect runtime? My > > > > >>>>>> understanding > > > > >>>>>>>>>>> was > > > > >>>>>>>>>>>>>> that > > > > >>>>>>>>>>>>>>> a > > > > >>>>>>>>>>>>>>>>>>>>>>> NoSuchMethodError (or some similar > > > > >>>>>> classloading > > > > >>>>>>>>>>>>>> exception) > > > > >>>>>>>>>>>>>>> would be > > > > >>>>>>>>>>>>>>>>>>>>>> thrown > > > > >>>>>>>>>>>>>>>>>>>>>>> in that case. If that turns out to be > > > > >>>>>> true, WDYT > > > > >>>>>>>>>>> about > > > > >>>>>>>>>>>>>>> having the > > > > >>>>>>>>>>>>>>>>>>>>>> Connector > > > > >>>>>>>>>>>>>>>>>>>>>>> and Task classes implement the > > > > >>>>>> Monitorable > > > > >>>>>>>>>>> interface, > > > > >>>>>>>>>>>>>> both > > > > >>>>>>>>>>>>>>> for > > > > >>>>>>>>>>>>>>>>>>>>>>> consistency's sake, and to prevent > > > > >>>>>> classloading > > > > >>>>>>>>>>>>>> headaches? > > > > >>>>>>>>>>>>>>>>>>>>>>> > > > > >>>>>>>>>>>>>>>>>>>>>>> 2. Although I agree that > > > > >>>> administrators > > > > >>>>>> should be > > > > >>>>>>>>>>> careful > > > > >>>>>>>>>>>>>>> about > > > > >>>>>>>>>>>>>>>>>>> which > > > > >>>>>>>>>>>>>>>>>>>>>>> plugins they run on their clients, > > > > >>>>>> Connect > > > > >>>>>>>>>>> clusters, > > > > >>>>>>>>>>>>>> etc., > > > > >>>>>>>>>>>>>>> I > > > > >>>>>>>>>>>>>>>>>>> wonder if > > > > >>>>>>>>>>>>>>>>>>>>>>> there might still be value in > > > > >>>> wrapping > > > > >>>>>> the > > > > >>>>>>>>>> Metrics > > > > >>>>>>>>>>> class > > > > >>>>>>>>>>>>>>> behind a > > > > >>>>>>>>>>>>>>>>>>> new > > > > >>>>>>>>>>>>>>>>>>>>>>> interface, for a few reasons: > > > > >>>>>>>>>>>>>>>>>>>>>>> > > > > >>>>>>>>>>>>>>>>>>>>>>> a. Developers and administrators > > > > >>>> may > > > > >>>>>> still make > > > > >>>>>>>>>>>>>>> mistakes, and if > > > > >>>>>>>>>>>>>>>>>>> we can > > > > >>>>>>>>>>>>>>>>>>>>>>> reduce the blast radius by preventing > > > > >>>>>> plugins > > > > >>>>>>>>>>> from, e.g., > > > > >>>>>>>>>>>>>>> closing > > > > >>>>>>>>>>>>>>>>>>> the > > > > >>>>>>>>>>>>>>>>>>>>>>> Metrics instance we give them, it > > > > >>>> may be > > > > >>>>>> worth > > > > >>>>>>>>>> it. > > > > >>>>>>>>>>> This > > > > >>>>>>>>>>>>>>> could also > > > > >>>>>>>>>>>>>>>>>>> be > > > > >>>>>>>>>>>>>>>>>>>>>>> accomplished by forbidding plugins > > > > >>>> from > > > > >>>>>> invoking > > > > >>>>>>>>>>> these > > > > >>>>>>>>>>>>>>> methods, and > > > > >>>>>>>>>>>>>>>>>>>>>> giving > > > > >>>>>>>>>>>>>>>>>>>>>>> them a subclass of Metrics that > > > > >>>> throws > > > > >>>>>>>>>>>>>>>>>>> UnsupportedOperationException from > > > > >>>>>>>>>>>>>>>>>>>>>>> these methods. > > > > >>>>>>>>>>>>>>>>>>>>>>> > > > > >>>>>>>>>>>>>>>>>>>>>>> b. If we don't know of any > > > > >>>> reasonable > > > > >>>>>> use cases > > > > >>>>>>>>>>> for > > > > >>>>>>>>>>>>>>> closing the > > > > >>>>>>>>>>>>>>>>>>>>>> instance, > > > > >>>>>>>>>>>>>>>>>>>>>>> adding new reporters, removing > > > > >>>> metrics, > > > > >>>>>> etc., it > > > > >>>>>>>>>>> can make > > > > >>>>>>>>>>>>>>> the API > > > > >>>>>>>>>>>>>>>>>>> cleaner > > > > >>>>>>>>>>>>>>>>>>>>>>> and easier for developers to grok if > > > > >>>>>> they don't > > > > >>>>>>>>>>> even have > > > > >>>>>>>>>>>>>>> the > > > > >>>>>>>>>>>>>>>>>>> option to > > > > >>>>>>>>>>>>>>>>>>>>>> do > > > > >>>>>>>>>>>>>>>>>>>>>>> any of those things. > > > > >>>>>>>>>>>>>>>>>>>>>>> > > > > >>>>>>>>>>>>>>>>>>>>>>> c. Interoperability between plugins > > > > >>>>>> that > > > > >>>>>>>>>>> implement > > > > >>>>>>>>>>>>>>> Monitorable > > > > >>>>>>>>>>>>>>>>>>> and > > > > >>>>>>>>>>>>>>>>>>>>>> their > > > > >>>>>>>>>>>>>>>>>>>>>>> runtime becomes complicated. For > > > > >>>>>> example, a > > > > >>>>>>>>>>> connector may > > > > >>>>>>>>>>>>>>> be built > > > > >>>>>>>>>>>>>>>>>>>>>> against > > > > >>>>>>>>>>>>>>>>>>>>>>> a version of Kafka that introduces > > > > >>>> new > > > > >>>>>> methods > > > > >>>>>>>>>> for > > > > >>>>>>>>>>> the > > > > >>>>>>>>>>>>>>> Metrics > > > > >>>>>>>>>>>>>>>>>>> class, > > > > >>>>>>>>>>>>>>>>>>>>>> which > > > > >>>>>>>>>>>>>>>>>>>>>>> introduces risks of incompatibility > > > > >>>> if > > > > >>>>>> its > > > > >>>>>>>>>>> developer > > > > >>>>>>>>>>>>>>> chooses to > > > > >>>>>>>>>>>>>>>>>>> take > > > > >>>>>>>>>>>>>>>>>>>>>>> advantage of these methods without > > > > >>>>>> realizing that > > > > >>>>>>>>>>> they > > > > >>>>>>>>>>>>>>> will not be > > > > >>>>>>>>>>>>>>>>>>>>>>> available on Connect runtimes built > > > > >>>>>> against an > > > > >>>>>>>>>>> older > > > > >>>>>>>>>>>>>>> version of > > > > >>>>>>>>>>>>>>>>>>> Kafka. > > > > >>>>>>>>>>>>>>>>>>>>>> With > > > > >>>>>>>>>>>>>>>>>>>>>>> a wrapper interface, we at least > > > > >>>> have a > > > > >>>>>> chance to > > > > >>>>>>>>>>> isolate > > > > >>>>>>>>>>>>>>> these > > > > >>>>>>>>>>>>>>>>>>> issues so > > > > >>>>>>>>>>>>>>>>>>>>>>> that the Metrics class can be > > > > >>>> expanded > > > > >>>>>> without > > > > >>>>>>>>>>> adding > > > > >>>>>>>>>>>>>>> footguns for > > > > >>>>>>>>>>>>>>>>>>>>>> plugins > > > > >>>>>>>>>>>>>>>>>>>>>>> that implement Monitorable, and to > > > > >>>> call > > > > >>>>>> out > > > > >>>>>>>>>>> potential > > > > >>>>>>>>>>>>>>> compatibility > > > > >>>>>>>>>>>>>>>>>>>>>>> problems in documentation more > > > > >>>> clearly > > > > >>>>>> if/when we > > > > >>>>>>>>>>> do > > > > >>>>>>>>>>>>>>> expand the > > > > >>>>>>>>>>>>>>>>>>> wrapper > > > > >>>>>>>>>>>>>>>>>>>>>>> interface. > > > > >>>>>>>>>>>>>>>>>>>>>>> > > > > >>>>>>>>>>>>>>>>>>>>>>> 3. It'd be nice to see a list of > > > > >>>> exactly > > > > >>>>>> which > > > > >>>>>>>>>>> plugins > > > > >>>>>>>>>>>>>>> will be > > > > >>>>>>>>>>>>>>>>>>> able to > > > > >>>>>>>>>>>>>>>>>>>>>> take > > > > >>>>>>>>>>>>>>>>>>>>>>> advantage of the new Monitorable > > > > >>>>>> interface. > > > > >>>>>>>>>>>>>>>>>>>>>>> > > > > >>>>>>>>>>>>>>>>>>>>>>> Looking forward to your thoughts! > > > > >>>>>>>>>>>>>>>>>>>>>>> > > > > >>>>>>>>>>>>>>>>>>>>>>> Cheers, > > > > >>>>>>>>>>>>>>>>>>>>>>> > > > > >>>>>>>>>>>>>>>>>>>>>>> Chris > > > > >>>>>>>>>>>>>>>>>>>>>>> > > > > >>>>>>>>>>>>>>>>>>>>>>> On Mon, Nov 7, 2022 at 11:42 AM > > > > >>>> Mickael > > > > >>>>>> Maison < > > > > >>>>>>>>>>>>>>>>>>> mickael.mai...@gmail.com > > > > >>>>>>>>>>>>>>>>>>>>>>> > > > > >>>>>>>>>>>>>>>>>>>>>>> wrote: > > > > >>>>>>>>>>>>>>>>>>>>>>> > > > > >>>>>>>>>>>>>>>>>>>>>>>> Hi, > > > > >>>>>>>>>>>>>>>>>>>>>>>> > > > > >>>>>>>>>>>>>>>>>>>>>>>> I have opened KIP-877 to make it > > > > >>>> easy > > > > >>>>>> for > > > > >>>>>>>>>>> plugins and > > > > >>>>>>>>>>>>>>> connectors > > > > >>>>>>>>>>>>>>>>>>> to > > > > >>>>>>>>>>>>>>>>>>>>>>>> register their own metrics: > > > > >>>>>>>>>>>>>>>>>>>>>>>> > > > > >>>>>>>>>>>>>>>>>>>>>>>> > > > > >>>>>>>>>>>>>>>>>>>>>>> > > > > >>>>>>>>>>>>>>>>>>>>>> > > > > >>>>>>>>>>>>>>>>>>> > > > > >>>>>>>>>>>>>>> > > > > >>>>>>>>>>>>>> > > > > >>>>>>>>>>> > > > > >>>>>>>>>> > > > > >>>>>> > > > > >>>> https://eu01.z.antigena.com/l/9lWv8kbU9CKs2LajwgfKF~yMNQVM7rWRxYmYVNrHU_2nQbisTiXYZdowNfQ-NcgF1uai2lk-sv6hJASnbdr_gqVwyVae_~y-~oq5yQFgO_-IHD3UGDn3lsIyauAG2tG6giPJH-9yCYg3Hwe26sm7nep258qB6SNXRwpaVxbU3SaVTybfLQVvTn_uUlHKMhmVnpnc1dUnusK6x4j8JPPQQ1Ce~rrg-nsSLouHHMf0ewmpsFNy4BcbMaqHd4Y > > > > >>>>>>>>>>>>>>>>>>>>>>>> > > > > >>>>>>>>>>>>>>>>>>>>>>>> Let me know if you have any > > > > >>>> feedback or > > > > >>>>>>>>>>> suggestions. > > > > >>>>>>>>>>>>>>>>>>>>>>>> > > > > >>>>>>>>>>>>>>>>>>>>>>>> Thanks, > > > > >>>>>>>>>>>>>>>>>>>>>>>> Mickael > > > > >>>>>>>>>>>>>>>>>>>>>>>> > > > > >>>>>>>>>>>>>>>>>>>>>>>> > > > > >>>>>>>>>>>>>>>>>>>>>>> > > > > >>>>>>>>>>>>>>>>>>>>>> > > > > >>>>>>>>>>>>>>>>>>> > > > > >>>>>>>>>>>>>>> > > > > >>>>>>>>>>>>>> > > > > >>>>>>>>>>> > > > > >>>>>>>>>> > > > > >>>>>> > > > > >>>>>> > > > > >>>> > > > > >>>> > > > > > > > >