Thanks, looks good to me!

> On Mar 19, 2024, at 10:19 AM, Abe Ratnofsky <a...@aber.io> wrote:
> 
> Here's where ClassLoader names were introduced in JDK9: 
> https://bugs.java.com/bugdatabase/view_bug?bug_id=6479237
> 
> And where Jacoco introduced support for the exclclassloader agent option: 
> https://github.com/jacoco/jacoco/commit/b8ee4efe9c2ba93485fe5d9e25340113efc2390b
> 
> My understanding is that names only exist to improve error messages 
> (ClassCastException specifically), and other diagnostic features like 
> Jacoco's exclusions. I am not aware of any behavior-impacting reasons to name 
> a ClassLoader, or anything this would break by adding ClassLoader names, but 
> I'm testing my changes now and will report back. Naming is done just by 
> overriding ClassLoader.getName: 
> https://docs.oracle.com/javase/9/docs/api/java/lang/ClassLoader.html#getName--
> 
>> On Mar 18, 2024, at 3:48 PM, David Capwell <dcapw...@apple.com> wrote:
>> 
>> Are there any side effects to naming ClassLoaders?  How do we do this?
>> 
>> I am +1 to the idea but don’t know enough to know what negatives could 
>> happen.
>> 
>>> On Mar 17, 2024, at 7:25 AM, Josh McKenzie <jmcken...@apache.org> wrote:
>>> 
>>> +1 from me
>>> 
>>>> If classloaders are appropriately named in the current versions of 
>>>> Cassandra, we should be able to test upgrade paths to that version without 
>>>> updating the older branches or building new jvm-dtest JARs for them.
>>> Pretty sure Caleb was wrestling w/something recently that might have 
>>> benefited from being able to differentiate which ClassLoader was sad; in 
>>> general this seems like it'd be a big help to debugging startup / env 
>>> issues, assuming it doesn't break anything. :)
>>> 
>>> On Fri, Mar 15, 2024, at 4:41 PM, Abe Ratnofsky wrote:
>>>> Hey folks,
>>>> 
>>>> I'm working on gathering coverage data across all of our test suites. The 
>>>> jvm-dtest-upgrade suite is currently unfriendly to Jacoco: it uses classes 
>>>> from multiple versions of Cassandra but with the same class names, so 
>>>> Jacoco's analysis fails due to "Can't add different class with same 
>>>> name"[1]. We need a way to exclude alternate-version classes from Jacoco's 
>>>> analysis, so we can get coverage for the current version of Cassandra.
>>>> 
>>>> Jacoco supports exclusion of classes based on class name or classloader 
>>>> name, but the class names are frequently usually identical across 
>>>> Cassandra versions. The jvm-dtest framework doesn't name classloaders, so 
>>>> we can't use that either.
>>>> 
>>>> I'd like to propose that we name the jvm-dtest InstanceClassLoader 
>>>> instances so that some can be excluded from Jacoco's analysis. Instances 
>>>> that create new InstanceClassLoaders should be able to provide an 
>>>> immutable name in the constructor. InstanceClassLoader names should 
>>>> indicate whether they're for the current version of Cassandra (where 
>>>> coverage should be collected) or an alternate version. If classloaders are 
>>>> appropriately named in the current versions of Cassandra, we should be 
>>>> able to test upgrade paths to that version without updating the older 
>>>> branches or building new jvm-dtest JARs for them.
>>>> 
>>>> Any objections or alternate approaches?
>>>> 
>>>> --
>>>> Abe
>>>> 
>>>> [1]: More specifically: Jacoco uses class IDs to map the analysis data 
>>>> that's produced during text execution to .class files. I'm configuring the 
>>>> Jacoco agent's classdumpdir to ensure that the classes loaded during 
>>>> execution are the same classes that are analyzed during report generation, 
>>>> as is recommended. When we build the alternate version JARs for 
>>>> jvm-dtest-upgrade, we end up with multiple classes with the same name but 
>>>> different IDs.
>> 
> 

Reply via email to