hu6360567 opened a new issue, #35905:
URL: https://github.com/apache/arrow/issues/35905

   ### Describe the bug, including details regarding any error messages, 
version, and platform.
   
   I was wrapping JDBC to ARROW for python scripts, then the life scoped 
`RootAllocator` raised `java.lang.IllegalStateException: 
java.lang.IllegalStateException: Allocator[ROOT] closed with outstanding 
buffers allocated`, while the exactly same code in Java works as excepted.
   Here is the snippet to reproduce error:
   ```python
   import jpype.imports
   from jpype.types import *
   
   jpype.startJVM("-Darrow.memory.debug.allocator=true", 
"-Dorg.slf4j.simpleLogger.defaultLogLevel=trace",
                  classpath=["classpath/*"])
   
   import java
   import org
   import pyarrow.jvm
   
   if __name__ == "__main__":
       java.lang.Class.forName("org.mariadb.jdbc.Driver")
   
       connection = java.sql.DriverManager.getConnection(
           "jdbc:mariadb://127.0.0.1:3306/db_test",
           "root", "passwd")
   
       pStmt = connection.prepareStatement("SELECT * FROM test_table LIMIT 
10000")
       pStmt.execute()
   
       rs = pStmt.getResultSet()
   
       total = 0
   
       with org.apache.arrow.memory.RootAllocator() as allocator:
           with 
org.apache.arrow.adapter.jdbc.JdbcToArrow.sqlToArrowVectorIterator(rs, 
allocator) as it:
               while it.hasNext():
                   with it.next() as rb:
                       # should we wrap the following code with a 
contextmanager to make it immediately delete when it goes out of scope
                       record_batch = pyarrow.jvm.record_batch(rb)
                       total += record_batch.num_rows
                       print(total)
                       # record_batch is still referenced by python, unwarp the 
following line works as expected.
                       # del record_batch
   ```
   The output is:
   ```logs
   ...
   [main] INFO org.apache.arrow.memory.BaseAllocator - Debug mode enabled.
   [main] INFO org.apache.arrow.memory.DefaultAllocationManagerOption - 
allocation manager type not specified, using netty as the default type
   [main] INFO org.apache.arrow.memory.CheckAllocator - Using 
DefaultAllocationManager at 
memory-netty-12.0.0.jar!/org/apache/arrow/memory/DefaultAllocationManagerFactory.class
   [main] DEBUG io.netty.util.internal.logging.InternalLoggerFactory - Using 
SLF4J as the default logging framework
   [main] DEBUG io.netty.util.ResourceLeakDetector - 
-Dio.netty.leakDetection.level: simple
   [main] DEBUG io.netty.util.ResourceLeakDetector - 
-Dio.netty.leakDetection.targetRecords: 4
   [main] DEBUG io.netty.util.internal.PlatformDependent0 - 
-Dio.netty.noUnsafe: false
   [main] DEBUG io.netty.util.internal.PlatformDependent0 - Java version: 11
   [main] DEBUG io.netty.util.internal.PlatformDependent0 - 
sun.misc.Unsafe.theUnsafe: available
   [main] DEBUG io.netty.util.internal.PlatformDependent0 - 
sun.misc.Unsafe.copyMemory: available
   [main] DEBUG io.netty.util.internal.PlatformDependent0 - 
sun.misc.Unsafe.storeFence: available
   [main] DEBUG io.netty.util.internal.PlatformDependent0 - 
java.nio.Buffer.address: available
   [main] DEBUG io.netty.util.internal.PlatformDependent0 - direct buffer 
constructor: unavailable
   java.lang.UnsupportedOperationException: Reflective setAccessible(true) 
disabled
        at 
io.netty.util.internal.ReflectionUtil.trySetAccessible(ReflectionUtil.java:31)
        at 
io.netty.util.internal.PlatformDependent0$5.run(PlatformDependent0.java:288)
        at java.base/java.security.AccessController.doPrivileged(Native Method)
        at 
io.netty.util.internal.PlatformDependent0.<clinit>(PlatformDependent0.java:282)
        at 
io.netty.util.internal.PlatformDependent.isAndroid(PlatformDependent.java:333)
        at 
io.netty.util.internal.PlatformDependent.<clinit>(PlatformDependent.java:88)
        at 
io.netty.buffer.PooledByteBufAllocator.<clinit>(PooledByteBufAllocator.java:116)
        at 
io.netty.buffer.PooledByteBufAllocatorL.<init>(PooledByteBufAllocatorL.java:49)
        at 
org.apache.arrow.memory.NettyAllocationManager.<clinit>(NettyAllocationManager.java:51)
        at 
org.apache.arrow.memory.DefaultAllocationManagerFactory.<clinit>(DefaultAllocationManagerFactory.java:26)
        at java.base/java.lang.Class.forName0(Native Method)
        at java.base/java.lang.Class.forName(Class.java:315)
        at 
org.apache.arrow.memory.DefaultAllocationManagerOption.getFactory(DefaultAllocationManagerOption.java:108)
        at 
org.apache.arrow.memory.DefaultAllocationManagerOption.getDefaultAllocationManagerFactory(DefaultAllocationManagerOption.java:98)
        at 
org.apache.arrow.memory.BaseAllocator$Config.getAllocationManagerFactory(BaseAllocator.java:772)
        at 
org.apache.arrow.memory.ImmutableConfig.access$801(ImmutableConfig.java:24)
        at 
org.apache.arrow.memory.ImmutableConfig$InitShim.getAllocationManagerFactory(ImmutableConfig.java:83)
        at 
org.apache.arrow.memory.ImmutableConfig.<init>(ImmutableConfig.java:47)
        at 
org.apache.arrow.memory.ImmutableConfig.<init>(ImmutableConfig.java:24)
        at 
org.apache.arrow.memory.ImmutableConfig$Builder.build(ImmutableConfig.java:485)
        at org.apache.arrow.memory.BaseAllocator.<clinit>(BaseAllocator.java:61)
        at java.base/java.lang.Class.forName0(Native Method)
        at java.base/java.lang.Class.forName(Class.java:398)
        at org.jpype.pkg.JPypePackage.getObject(Unknown Source)
   [main] DEBUG io.netty.util.internal.PlatformDependent0 - 
java.nio.Bits.unaligned: available, true
   [main] DEBUG io.netty.util.internal.PlatformDependent0 - 
jdk.internal.misc.Unsafe.allocateUninitializedArray(int): unavailable
   java.lang.IllegalAccessException: class 
io.netty.util.internal.PlatformDependent0$7 cannot access class 
jdk.internal.misc.Unsafe (in module java.base) because module java.base does 
not export jdk.internal.misc to unnamed module @14028087
        at 
java.base/jdk.internal.reflect.Reflection.newIllegalAccessException(Reflection.java:361)
        at 
java.base/java.lang.reflect.AccessibleObject.checkAccess(AccessibleObject.java:591)
        at java.base/java.lang.reflect.Method.invoke(Method.java:558)
        at 
io.netty.util.internal.PlatformDependent0$7.run(PlatformDependent0.java:410)
        at java.base/java.security.AccessController.doPrivileged(Native Method)
        at 
io.netty.util.internal.PlatformDependent0.<clinit>(PlatformDependent0.java:401)
        at 
io.netty.util.internal.PlatformDependent.isAndroid(PlatformDependent.java:333)
        at 
io.netty.util.internal.PlatformDependent.<clinit>(PlatformDependent.java:88)
        at 
io.netty.buffer.PooledByteBufAllocator.<clinit>(PooledByteBufAllocator.java:116)
        at 
io.netty.buffer.PooledByteBufAllocatorL.<init>(PooledByteBufAllocatorL.java:49)
        at 
org.apache.arrow.memory.NettyAllocationManager.<clinit>(NettyAllocationManager.java:51)
        at 
org.apache.arrow.memory.DefaultAllocationManagerFactory.<clinit>(DefaultAllocationManagerFactory.java:26)
        at java.base/java.lang.Class.forName0(Native Method)
        at java.base/java.lang.Class.forName(Class.java:315)
        at 
org.apache.arrow.memory.DefaultAllocationManagerOption.getFactory(DefaultAllocationManagerOption.java:108)
        at 
org.apache.arrow.memory.DefaultAllocationManagerOption.getDefaultAllocationManagerFactory(DefaultAllocationManagerOption.java:98)
        at 
org.apache.arrow.memory.BaseAllocator$Config.getAllocationManagerFactory(BaseAllocator.java:772)
        at 
org.apache.arrow.memory.ImmutableConfig.access$801(ImmutableConfig.java:24)
        at 
org.apache.arrow.memory.ImmutableConfig$InitShim.getAllocationManagerFactory(ImmutableConfig.java:83)
        at 
org.apache.arrow.memory.ImmutableConfig.<init>(ImmutableConfig.java:47)
        at 
org.apache.arrow.memory.ImmutableConfig.<init>(ImmutableConfig.java:24)
        at 
org.apache.arrow.memory.ImmutableConfig$Builder.build(ImmutableConfig.java:485)
        at org.apache.arrow.memory.BaseAllocator.<clinit>(BaseAllocator.java:61)
        at java.base/java.lang.Class.forName0(Native Method)
        at java.base/java.lang.Class.forName(Class.java:398)
        at org.jpype.pkg.JPypePackage.getObject(Unknown Source)
   [main] DEBUG io.netty.util.internal.PlatformDependent0 - 
java.nio.DirectByteBuffer.<init>(long, int): unavailable
   [main] DEBUG io.netty.util.internal.PlatformDependent - sun.misc.Unsafe: 
available
   [main] DEBUG io.netty.util.internal.PlatformDependent - maxDirectMemory: 
4294967296 bytes (maybe)
   [main] DEBUG io.netty.util.internal.PlatformDependent - -Dio.netty.tmpdir: 
/var/folders/j4/s9dpn3612j70kyt4mv1yzmkm0000gp/T (java.io.tmpdir)
   [main] DEBUG io.netty.util.internal.PlatformDependent - -Dio.netty.bitMode: 
64 (sun.arch.data.model)
   [main] DEBUG io.netty.util.internal.PlatformDependent - Platform: MacOS
   [main] DEBUG io.netty.util.internal.PlatformDependent - 
-Dio.netty.maxDirectMemory: -1 bytes
   [main] DEBUG io.netty.util.internal.PlatformDependent - 
-Dio.netty.uninitializedArrayAllocationThreshold: -1
   [main] DEBUG io.netty.util.internal.CleanerJava9 - 
java.nio.ByteBuffer.cleaner(): available
   [main] DEBUG io.netty.util.internal.PlatformDependent - 
-Dio.netty.noPreferDirect: false
   [main] DEBUG io.netty.buffer.PooledByteBufAllocator - 
-Dio.netty.allocator.numHeapArenas: 16
   [main] DEBUG io.netty.buffer.PooledByteBufAllocator - 
-Dio.netty.allocator.numDirectArenas: 16
   [main] DEBUG io.netty.buffer.PooledByteBufAllocator - 
-Dio.netty.allocator.pageSize: 8192
   [main] DEBUG io.netty.buffer.PooledByteBufAllocator - 
-Dio.netty.allocator.maxOrder: 9
   [main] DEBUG io.netty.buffer.PooledByteBufAllocator - 
-Dio.netty.allocator.chunkSize: 4194304
   [main] DEBUG io.netty.buffer.PooledByteBufAllocator - 
-Dio.netty.allocator.smallCacheSize: 256
   [main] DEBUG io.netty.buffer.PooledByteBufAllocator - 
-Dio.netty.allocator.normalCacheSize: 64
   [main] DEBUG io.netty.buffer.PooledByteBufAllocator - 
-Dio.netty.allocator.maxCachedBufferCapacity: 32768
   [main] DEBUG io.netty.buffer.PooledByteBufAllocator - 
-Dio.netty.allocator.cacheTrimInterval: 8192
   [main] DEBUG io.netty.buffer.PooledByteBufAllocator - 
-Dio.netty.allocator.cacheTrimIntervalMillis: 0
   [main] DEBUG io.netty.buffer.PooledByteBufAllocator - 
-Dio.netty.allocator.useCacheForAllThreads: false
   [main] DEBUG io.netty.buffer.PooledByteBufAllocator - 
-Dio.netty.allocator.maxCachedByteBuffersPerChunk: 1023
   [main] DEBUG io.netty.util.internal.InternalThreadLocalMap - 
-Dio.netty.threadLocalMap.stringBuilder.initialSize: 1024
   [main] DEBUG io.netty.util.internal.InternalThreadLocalMap - 
-Dio.netty.threadLocalMap.stringBuilder.maxSize: 4096
   [allocation.logger] TRACE arrow.allocator - Memory Usage: 
   io.netty.buffer.PooledByteBufAllocatorL@3726977f
   [main] DEBUG io.netty.buffer.AbstractByteBuf - 
-Dio.netty.buffer.checkAccessible: true
   [main] DEBUG io.netty.buffer.AbstractByteBuf - 
-Dio.netty.buffer.checkBounds: true
   [main] DEBUG io.netty.util.ResourceLeakDetectorFactory - Loaded default 
ResourceLeakDetector: io.netty.util.ResourceLeakDetector@1807f5a7
   [main] DEBUG org.apache.arrow.memory.rounding.DefaultRoundingPolicy - 
-Dorg.apache.memory.allocator.pageSize: 8192
   [main] DEBUG org.apache.arrow.memory.rounding.DefaultRoundingPolicy - 
-Dorg.apache.memory.allocator.maxOrder: 11
   [main] DEBUG io.netty.util.Recycler - 
-Dio.netty.recycler.maxCapacityPerThread: 4096
   [main] DEBUG io.netty.util.Recycler - -Dio.netty.recycler.ratio: 8
   [main] DEBUG io.netty.util.Recycler - -Dio.netty.recycler.chunkSize: 32
   [main] DEBUG io.netty.util.Recycler - -Dio.netty.recycler.blocking: false
   [main] DEBUG io.netty.util.internal.PlatformDependent - 
org.jctools-core.MpscChunkedArrayQueue: available
   WARNING: An illegal reflective access operation has occurred
   WARNING: Illegal reflective access by 
org.apache.arrow.memory.util.MemoryUtil 
(file:/Users/lvlng/Code/fair-compute/panama/classpath/arrow-memory-core-12.0.0.jar)
 to field java.nio.Buffer.address
   WARNING: Please consider reporting this to the maintainers of 
org.apache.arrow.memory.util.MemoryUtil
   WARNING: Use --illegal-access=warn to enable warnings of further illegal 
reflective access operations
   WARNING: All illegal access operations will be denied in a future release
   [main] DEBUG org.apache.arrow.memory.util.MemoryUtil - Constructor for 
direct buffer found and made accessible
   [main] DEBUG org.apache.arrow.memory.util.MemoryUtil - direct buffer 
constructor: available
   1024
   2048
   3072
   4096
   5120
   6144
   7168
   8192
   9216
   10000
   Traceback (most recent call last):
     File "RootAllocator.java", line 29, in 
org.apache.arrow.memory.RootAllocator.close
   Exception: Java Exception
   
   The above exception was the direct cause of the following exception:
   
   Traceback (most recent call last):
     File "/Users/lvlng/Library/Application 
Support/JetBrains/PyCharm2023.1/scratches/jpype_scratch.py", line 46, in 
<module>
       print(total)
     File 
"/Users/lvlng/miniconda3/envs/panama_dev/lib/python3.8/site-packages/jpype/_jio.py",
 line 55, in __exit__
       raise jex
     File 
"/Users/lvlng/miniconda3/envs/panama_dev/lib/python3.8/site-packages/jpype/_jio.py",
 line 51, in __exit__
       self.close()
   java.lang.IllegalStateException: java.lang.IllegalStateException: 
Allocator[ROOT] closed with outstanding buffers allocated (2).
   Allocator(ROOT) 0/49152/114688/9223372036854775807 (res/actual/peak/limit)
     child allocators: 0
     ledgers: 2
       ledger[120] allocator: ROOT), isOwning: , size: , references: 1, life: 
18336056157133..0, allocatorManager: [, life: ] holds 1 buffers. 
           ArrowBuf[141], address:140681044344832, capacity:32768
        event log for: ArrowBuf[141]
          18336056242655 create()
                 at 
org.apache.arrow.memory.util.HistoricalLog$Event.<init>(HistoricalLog.java:175)
                 at 
org.apache.arrow.memory.util.HistoricalLog.recordEvent(HistoricalLog.java:83)
                 at org.apache.arrow.memory.ArrowBuf.<init>(ArrowBuf.java:97)
                 at 
org.apache.arrow.memory.BufferLedger.newArrowBuf(BufferLedger.java:271)
                 at 
org.apache.arrow.memory.BaseAllocator.bufferWithoutReservation(BaseAllocator.java:339)
                 at 
org.apache.arrow.memory.BaseAllocator.buffer(BaseAllocator.java:315)
                 at 
org.apache.arrow.memory.RootAllocator.buffer(RootAllocator.java:29)
                 at 
org.apache.arrow.memory.BaseAllocator.buffer(BaseAllocator.java:279)
                 at 
org.apache.arrow.memory.RootAllocator.buffer(RootAllocator.java:29)
                 at 
org.apache.arrow.vector.BaseVariableWidthVector.reallocDataBuffer(BaseVariableWidthVector.java:544)
                 at 
org.apache.arrow.vector.BaseVariableWidthVector.handleSafe(BaseVariableWidthVector.java:1278)
                 at 
org.apache.arrow.vector.BaseVariableWidthVector.setSafe(BaseVariableWidthVector.java:1039)
                 at 
org.apache.arrow.adapter.jdbc.consumer.VarCharConsumer$NonNullableVarCharConsumer.consume(VarCharConsumer.java:82)
                 at 
org.apache.arrow.adapter.jdbc.consumer.CompositeJdbcConsumer.consume(CompositeJdbcConsumer.java:46)
                 at 
org.apache.arrow.adapter.jdbc.ArrowVectorIterator.consumeData(ArrowVectorIterator.java:106)
                 at 
org.apache.arrow.adapter.jdbc.ArrowVectorIterator.load(ArrowVectorIterator.java:159)
                 at 
org.apache.arrow.adapter.jdbc.ArrowVectorIterator.next(ArrowVectorIterator.java:177)
   
       ledger[109] allocator: ROOT), isOwning: , size: , references: 1, life: 
18336053574582..0, allocatorManager: [, life: ] holds 3 buffers. 
           ArrowBuf[128], address:140681044189184, capacity:16384
        event log for: ArrowBuf[128]
          18336053853304 create()
                 at 
org.apache.arrow.memory.util.HistoricalLog$Event.<init>(HistoricalLog.java:175)
                 at 
org.apache.arrow.memory.util.HistoricalLog.recordEvent(HistoricalLog.java:83)
                 at org.apache.arrow.memory.ArrowBuf.<init>(ArrowBuf.java:97)
                 at 
org.apache.arrow.memory.BufferLedger.newArrowBuf(BufferLedger.java:271)
                 at 
org.apache.arrow.memory.BaseAllocator.bufferWithoutReservation(BaseAllocator.java:339)
                 at 
org.apache.arrow.memory.BaseAllocator.buffer(BaseAllocator.java:315)
                 at 
org.apache.arrow.memory.RootAllocator.buffer(RootAllocator.java:29)
                 at 
org.apache.arrow.memory.BaseAllocator.buffer(BaseAllocator.java:279)
                 at 
org.apache.arrow.memory.RootAllocator.buffer(RootAllocator.java:29)
                 at 
org.apache.arrow.vector.BaseValueVector.allocFixedDataAndValidityBufs(BaseValueVector.java:192)
                 at 
org.apache.arrow.vector.BaseVariableWidthVector.reallocValidityAndOffsetBuffers(BaseVariableWidthVector.java:585)
                 at 
org.apache.arrow.vector.BaseVariableWidthVector.handleSafe(BaseVariableWidthVector.java:1273)
                 at 
org.apache.arrow.vector.BaseVariableWidthVector.setSafe(BaseVariableWidthVector.java:1039)
                 at 
org.apache.arrow.adapter.jdbc.consumer.VarCharConsumer$NonNullableVarCharConsumer.consume(VarCharConsumer.java:82)
                 at 
org.apache.arrow.adapter.jdbc.consumer.CompositeJdbcConsumer.consume(CompositeJdbcConsumer.java:46)
                 at 
org.apache.arrow.adapter.jdbc.ArrowVectorIterator.consumeData(ArrowVectorIterator.java:106)
                 at 
org.apache.arrow.adapter.jdbc.ArrowVectorIterator.load(ArrowVectorIterator.java:159)
                 at 
org.apache.arrow.adapter.jdbc.ArrowVectorIterator.next(ArrowVectorIterator.java:177)
   
           ArrowBuf[129], address:140681044189184, capacity:15880
        event log for: ArrowBuf[129]
          18336054028211 create()
                 at 
org.apache.arrow.memory.util.HistoricalLog$Event.<init>(HistoricalLog.java:175)
                 at 
org.apache.arrow.memory.util.HistoricalLog.recordEvent(HistoricalLog.java:83)
                 at org.apache.arrow.memory.ArrowBuf.<init>(ArrowBuf.java:97)
                 at 
org.apache.arrow.memory.BufferLedger.deriveBuffer(BufferLedger.java:228)
                 at org.apache.arrow.memory.ArrowBuf.slice(ArrowBuf.java:206)
                 at 
org.apache.arrow.vector.BaseValueVector.allocFixedDataAndValidityBufs(BaseValueVector.java:200)
                 at 
org.apache.arrow.vector.BaseVariableWidthVector.reallocValidityAndOffsetBuffers(BaseVariableWidthVector.java:585)
                 at 
org.apache.arrow.vector.BaseVariableWidthVector.handleSafe(BaseVariableWidthVector.java:1273)
                 at 
org.apache.arrow.vector.BaseVariableWidthVector.setSafe(BaseVariableWidthVector.java:1039)
                 at 
org.apache.arrow.adapter.jdbc.consumer.VarCharConsumer$NonNullableVarCharConsumer.consume(VarCharConsumer.java:82)
                 at 
org.apache.arrow.adapter.jdbc.consumer.CompositeJdbcConsumer.consume(CompositeJdbcConsumer.java:46)
                 at 
org.apache.arrow.adapter.jdbc.ArrowVectorIterator.consumeData(ArrowVectorIterator.java:106)
                 at 
org.apache.arrow.adapter.jdbc.ArrowVectorIterator.load(ArrowVectorIterator.java:159)
                 at 
org.apache.arrow.adapter.jdbc.ArrowVectorIterator.next(ArrowVectorIterator.java:177)
   
           ArrowBuf[130], address:140681044205064, capacity:504
        event log for: ArrowBuf[130]
          18336054156038 create()
                 at 
org.apache.arrow.memory.util.HistoricalLog$Event.<init>(HistoricalLog.java:175)
                 at 
org.apache.arrow.memory.util.HistoricalLog.recordEvent(HistoricalLog.java:83)
                 at org.apache.arrow.memory.ArrowBuf.<init>(ArrowBuf.java:97)
                 at 
org.apache.arrow.memory.BufferLedger.deriveBuffer(BufferLedger.java:228)
                 at org.apache.arrow.memory.ArrowBuf.slice(ArrowBuf.java:206)
                 at 
org.apache.arrow.vector.BaseValueVector.allocFixedDataAndValidityBufs(BaseValueVector.java:200)
                 at 
org.apache.arrow.vector.BaseVariableWidthVector.reallocValidityAndOffsetBuffers(BaseVariableWidthVector.java:585)
                 at 
org.apache.arrow.vector.BaseVariableWidthVector.handleSafe(BaseVariableWidthVector.java:1273)
                 at 
org.apache.arrow.vector.BaseVariableWidthVector.setSafe(BaseVariableWidthVector.java:1039)
                 at 
org.apache.arrow.adapter.jdbc.consumer.VarCharConsumer$NonNullableVarCharConsumer.consume(VarCharConsumer.java:82)
                 at 
org.apache.arrow.adapter.jdbc.consumer.CompositeJdbcConsumer.consume(CompositeJdbcConsumer.java:46)
                 at 
org.apache.arrow.adapter.jdbc.ArrowVectorIterator.consumeData(ArrowVectorIterator.java:106)
                 at 
org.apache.arrow.adapter.jdbc.ArrowVectorIterator.load(ArrowVectorIterator.java:159)
                 at 
org.apache.arrow.adapter.jdbc.ArrowVectorIterator.next(ArrowVectorIterator.java:177)
   
     reservations: 0
   ```
   
   ### Component(s)
   
   Python


-- 
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: issues-unsubscr...@arrow.apache.org.apache.org

For queries about this service, please contact Infrastructure at:
us...@infra.apache.org

Reply via email to