beryllw opened a new issue, #1419:
URL: https://github.com/apache/fluss/issues/1419

   ### Search before asking
   
   - [x] I searched in the [issues](https://github.com/alibaba/fluss/issues) 
and found nothing similar.
   
   
   ### Fluss version
   
   0.7.0 (latest release)
   
   ### Please describe the bug 🐞
   
   The explanation for this is given in 
https://github.com/apache/felix/pull/114 :
   
   > Java 9 introduces overridden methods with covariant return types for the 
following methods in java.nio.ByteBuffer:
   > ```
   > position​(int newPosition)
   > limit​(int newLimit)
   > flip​()
   > clear​()
   > mark​()
   > reset​()
   > rewind​()
   > ```
   > In Java 9 they all now return ByteBuffer, whereas the methods they 
override return Buffer,
   resulting in exceptions like this when executing on Java 8 and lower:
   java.lang.NoSuchMethodError: java.nio.ByteBuffer.limit(I)Ljava/nio/ByteBuffer
   > This is because the generated byte code includes the static return type of 
the method, which is not found on Java 8 and lower because the overloaded 
methods with covariant return types don't exist (the issue appears even with 
source and target 8 or lower in compilation parameters).
   The solution is to cast ByteBuffer instances to Buffer before calling the 
method.
   
   
   Steps to Reproduce:
   1. Compile Fluss with JDK 9+.(Or use fluss website [Fluss Flink 1.18 
client](https://repo1.maven.org/maven2/com/alibaba/fluss/fluss-flink-1.18/0.7.0/fluss-flink-1.18-0.7.0.jar))
   2. Use the compiled Fluss client jar in Flink 1.18 with JDK 8.
   ```
   Caused by: java.lang.NoSuchMethodError: 
java.nio.ByteBuffer.limit(I)Ljava/nio/ByteBuffer;
           at 
com.alibaba.fluss.utils.ByteBufferReadableChannel.read(ByteBufferReadableChannel.java:56)
 ~[ads-realtime-feature-test-1.0-SNAPSHOT.jar:?]
           at 
com.alibaba.fluss.shaded.arrow.org.apache.arrow.vector.ipc.ReadChannel.readFully(ReadChannel.java:60)
 ~[ads-realtime-feature-test-1.0-SNAPSHOT.jar:?]
           at 
com.alibaba.fluss.shaded.arrow.org.apache.arrow.vector.ipc.message.MessageSerializer.readMessage(MessageSerializer.java:683)
 ~[ads-realtime-feature-test-1.0-SNAPSHOT.jar:?]
           at 
com.alibaba.fluss.shaded.arrow.org.apache.arrow.vector.ipc.message.MessageSerializer.deserializeRecordBatch(MessageSerializer.java:355)
 ~[ads-realtime-feature-test-1.0-SNAPSHOT.jar:?]
           at 
com.alibaba.fluss.utils.ArrowUtils.createArrowReader(ArrowUtils.java:159) 
~[ads-realtime-feature-test-1.0-SNAPSHOT.jar:?]
           at 
com.alibaba.fluss.record.DefaultLogRecordBatch.columnRecordIterator(DefaultLogRecordBatch.java:330)
 ~[ads-realtime-feature-test-1.0-SNAPSHOT.jar:?]
           at 
com.alibaba.fluss.record.DefaultLogRecordBatch.records(DefaultLogRecordBatch.java:244)
 ~[ads-realtime-feature-test-1.0-SNAPSHOT.jar:?]
           at 
com.alibaba.fluss.client.table.scanner.log.CompletedFetch.nextFetchedRecord(CompletedFetch.java:219)
 ~[ads-realtime-feature-test-1.0-SNAPSHOT.jar:?]
           at 
com.alibaba.fluss.client.table.scanner.log.CompletedFetch.fetchRecords(CompletedFetch.java:169)
 ~[ads-realtime-feature-test-1.0-SNAPSHOT.jar:?]
           at 
com.alibaba.fluss.client.table.scanner.log.LogFetchCollector.fetchRecords(LogFetchCollector.java:159)
 ~[ads-realtime-feature-test-1.0-SNAPSHOT.jar:?]
           at 
com.alibaba.fluss.client.table.scanner.log.LogFetchCollector.collectFetch(LogFetchCollector.java:117)
 ~[ads-realtime-feature-test-1.0-SNAPSHOT.jar:?]
           at 
com.alibaba.fluss.client.table.scanner.log.LogFetcher.collectFetch(LogFetcher.java:162)
 ~[ads-realtime-feature-test-1.0-SNAPSHOT.jar:?]
           at 
com.alibaba.fluss.client.table.scanner.log.LogScannerImpl.pollForFetches(LogScannerImpl.java:233)
 ~[ads-realtime-feature-test-1.0-SNAPSHOT.jar:?]
           at 
com.alibaba.fluss.client.table.scanner.log.LogScannerImpl.poll(LogScannerImpl.java:143)
 ~[ads-realtime-feature-test-1.0-SNAPSHOT.jar:?]
           at 
com.alibaba.fluss.flink.source.reader.FlinkSourceSplitReader.fetch(FlinkSourceSplitReader.java:164)
 ~[ads-realtime-feature-test-1.0-SNAPSHOT.jar:?]
           at 
org.apache.flink.connector.base.source.reader.fetcher.FetchTask.run(FetchTask.java:58)
 ~[ads-realtime-feature-test-1.0-SNAPSHOT.jar:?]
           at 
org.apache.flink.connector.base.source.reader.fetcher.SplitFetcher.runOnce(SplitFetcher.java:165)
 ~[ads-realtime-feature-test-1.0-SNAPSHOT.jar:?]
           at 
org.apache.flink.connector.base.source.reader.fetcher.SplitFetcher.run(SplitFetcher.java:117)
 ~[ads-realtime-feature-test-1.0-SNAPSHOT.jar:?]
           at 
java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511) 
~[?:1.8.0_202]
           at java.util.concurrent.FutureTask.run(FutureTask.java:266) 
~[?:1.8.0_202]
           at 
java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) 
~[?:1.8.0_202]
           at 
java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) 
~[?:1.8.0_202]
           ... 1 more
   ```
   
   ### Solution
   
   > The solution is to cast ByteBuffer instances to Buffer before calling the 
method.
   
   ### Are you willing to submit a PR?
   
   - [x] I'm willing to submit a PR!


-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: [email protected]

For queries about this service, please contact Infrastructure at:
[email protected]

Reply via email to