[ 
https://issues.apache.org/jira/browse/CASSANDRA-9608?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15372821#comment-15372821
 ] 

Robert Stupp commented on CASSANDRA-9608:
-----------------------------------------

[~carlosabad], thanks for your effort! I've already created [a 
branch|https://github.com/snazy/cassandra/tree/9608-java9-trunk] and thought I 
left a comment about it in this ticket - apologies for that. I basically found 
the same issues. But I'm a bit opposed to the use of {{ReentrantLock}} since 
there are usually a huge amount of {{AtomicBTreePartition}} instances and each 
{{ReentrantLock}} can potentially create lot of dependent objects - tl;dr it 
potentially introduces a lot of GC pressure. So, what we would need here is an 
exclusive lock, which doesn't need to be fair, that is just good enough - not 
sure whether [my 
approach|https://github.com/snazy/cassandra/commit/c67c532fec9b2b073ecdf70b50b80440fb972f31#diff-7246e27576858f45f3f2678b9be03bfeR105]
 is good enough, though.

Would be glad to have you on board and tackle this ticket!

Many of the tests fail because we evaluate the system property 
{{java.vm.version}} in out agent library [jamm at this 
line|https://github.com/jbellis/jamm/blob/17fe5661d3706ac8bdcc2cc1a1d747efa00157fa/src/org/github/jamm/MemoryLayoutSpecification.java#L190].
 The meaning of the version has changed completely. Before Java 9, it looked 
like {{25.92-b14}} but with Java 9 is looks like {{9-ea+121}} - i.e. the 
agent's code throws a {{StringIndexOutOfBoundsException}}. A viable solution 
(viable workaround is probably a better term, though) could be to let jamm 
produce Java 8 byte code and remove the {{java.vm.version}} check and/or change 
the code in jamm. We use jamm to calculate on-heap usage of objects.

We might have to support both Java 8 and Java 9 (as soon as Java 9 is GA) for 
some period of time - similar to the transition from Java 7 to Java 8, where we 
built C* on Java 7 but kind-of supported Java 8 before actually just C* 3.0 
required Java 8. I think a major version (maybe 5.x?) would be required for 
such a switch. Just want to say, that both the code and the build.xml file need 
to work against Java 8 _and_ 9. (Requiring ant 1.9.7 is not an issue imo.)

> Support Java 9
> --------------
>
>                 Key: CASSANDRA-9608
>                 URL: https://issues.apache.org/jira/browse/CASSANDRA-9608
>             Project: Cassandra
>          Issue Type: Task
>            Reporter: Robert Stupp
>            Priority: Minor
>
> This ticket is intended to group all issues found to support Java 9 in the 
> future.
> From what I've found out so far:
> * Maven dependency {{com.sun:tools:jar:0}} via cobertura cannot be resolved. 
> It can be easily solved using this patch:
> {code}
> -        <dependency groupId="net.sourceforge.cobertura" 
> artifactId="cobertura"/>
> +        <dependency groupId="net.sourceforge.cobertura" 
> artifactId="cobertura">
> +          <exclusion groupId="com.sun" artifactId="tools"/>
> +        </dependency>
> {code}
> * Another issue is that {{sun.misc.Unsafe}} no longer contains the methods 
> {{monitorEnter}} + {{monitorExit}}. These methods are used by 
> {{o.a.c.utils.concurrent.Locks}} which is only used by 
> {{o.a.c.db.AtomicBTreeColumns}}.
> I don't mind to start working on this yet since Java 9 is in a too early 
> development phase.



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)

Reply via email to