Hi Sam,

Thanks for your replay, after removing the “unless=java.version.8” I can do a 
proper build using java8 that works on the java8 jvm.

But this raise another question, is the plan officially release two versions of 
Cassandra, one for Java8 and one for Java11?

/Tommy

On tis, 2019-06-11 at 11:48 +0100, Sam Tunnicliffe wrote:




On 11 Jun 2019, at 10:04, Tommy Stendahl 
<tommy.stend...@ericsson.com<mailto:tommy.stend...@ericsson.com>> wrote:

Hi,

I can't find a way to build 4.0 artifacts so I can run Cassandra using Java8. 
Building the artifacts ("ant artifacts" or "ant mvn-install") requires building 
with Java11 but since CASSANDRA-15108 the result is not Java8 compatible 
anymore, is this intentional or was this done by mistake?



This was unintentional, it looks like we just missed removing the 
“unless=java.version.8” from the artifacts & _artifacts-init targets in 
build.xml.
I’ve tested that with those removed, it’s just a matter of having the 
appropriate target jdk specified in $JAVA_HOME (and using -Duse.jdk11=true or 
$CASSANDRA_USE_JDK11=true if building with jdk11).

We’ll fix this in trunk, but in the meantime removing those conditions should 
unblock you.

Thanks,
Sam




I also tried to change this back and force Java11 to build Java8 compatible 
code but it seams that there are some  changes in the ByetBuffer implementation 
in Java11 that breaks when execution in a Java8 jvm, when I started Cassandra 
it throws a NoSuchMethodError when trying to open the sstables.

2019-05-28T16:20:24.506+0200 [SSTableBatchOpen:4] ERROR 
o.a.c.i.s.format.SSTableReader$2:576 run Corrupt sstable 
/var/lib/cassandra/data/system/sstable_activity-5a1ff267ace03f128563cfae6103c65e/mc-2202-big=[CompressionInfo.db,
 TOC.txt, Statistics.db, Summary.db, Index.db, Data.db, Filter.db, 
Digest.crc32]; skipping table
org.apache.cassandra.io.sstable.CorruptSSTableException: Corrupted: 
/var/lib/cassandra/data/system/sstable_activity-5a1ff267ace03f128563cfae6103c65e/mc-2202-big-Statistics.db
       at 
org.apache.cassandra.io.sstable.format.SSTableReader.open(SSTableReader.java:504)
       at 
org.apache.cassandra.io.sstable.format.SSTableReader.open(SSTableReader.java:375)
       at 
org.apache.cassandra.io.sstable.format.SSTableReader$2.run(SSTableReader.java:571)
       at 
java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
       at java.util.concurrent.FutureTask.run(FutureTask.java:266)
       at 
java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
       at 
java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
       at 
io.netty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:30)
       at java.lang.Thread.run(Thread.java:748)
Caused by: java.lang.NoSuchMethodError: 
java.nio.ByteBuffer.position(I)Ljava/nio/ByteBuffer;
       at 
org.apache.cassandra.utils.memory.BufferPool.allocateDirectAligned(BufferPool.java:528)
       at 
org.apache.cassandra.utils.memory.BufferPool.access$600(BufferPool.java:46)
       at 
org.apache.cassandra.utils.memory.BufferPool$GlobalPool.allocateMoreChunks(BufferPool.java:279)
       at 
org.apache.cassandra.utils.memory.BufferPool$GlobalPool.get(BufferPool.java:248)
       at 
org.apache.cassandra.utils.memory.BufferPool$LocalPool.addChunkFromGlobalPool(BufferPool.java:354)
       at 
org.apache.cassandra.utils.memory.BufferPool$LocalPool.get(BufferPool.java:397)
       at 
org.apache.cassandra.utils.memory.BufferPool.maybeTakeFromPool(BufferPool.java:143)
       at 
org.apache.cassandra.utils.memory.BufferPool.takeFromPool(BufferPool.java:115)
       at org.apache.cassandra.utils.memory.BufferPool.get(BufferPool.java:94)
       at 
org.apache.cassandra.io.util.BufferManagingRebufferer.<init>(BufferManagingRebufferer.java:45)
       at 
org.apache.cassandra.io.util.BufferManagingRebufferer$Unaligned.<init>(BufferManagingRebufferer.java:117)
       at 
org.apache.cassandra.io.util.SimpleChunkReader.instantiateRebufferer(SimpleChunkReader.java:60)
       at 
org.apache.cassandra.io.util.RandomAccessReader.open(RandomAccessReader.java:319)
       at 
org.apache.cassandra.io.sstable.metadata.MetadataSerializer.deserialize(MetadataSerializer.java:126)
       at 
org.apache.cassandra.io.sstable.format.SSTableReader.open(SSTableReader.java:500)
       ... 8 common frames omitted

The reason for this is that some methods in the ByteBuffer implementation in 
Java11 returns a Bytebuffer but in Java8 and before they returned a Buffer. I 
found a bit of information on Stackoverflow 
(https://stackoverflow.com/questions/48693695/java-nio-buffer-not-loading-clear-method-on-runtime)
 so there seams to be a way to fix this even if the resulting code looks ugly 
to me.

My question is, are we intentionally giving up Java8 comparability in 4.0 or do 
we still want to support Java8?

Regards,
Tommy




---------------------------------------------------------------------
To unsubscribe, e-mail: 
dev-unsubscr...@cassandra.apache.org<mailto:dev-unsubscr...@cassandra.apache.org>
For additional commands, e-mail: 
dev-h...@cassandra.apache.org<mailto:dev-h...@cassandra.apache.org>


Reply via email to