[
https://issues.apache.org/jira/browse/IGNITE-23513?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Sergey Korotkov updated IGNITE-23513:
-------------------------------------
Description:
It's needed to not generate large strings for large arrays.
In worst case not doing so can cause the OOM errors during the logging of some
another exception. If such an OOM occur the information of real problem will be
lost and not logged.
For example:
{noformat}
[2024-10-24T11:35:44,402][ERROR][client-connector-#149%jdbc_thin_blob_test.JdbcThinBlobTest.test_jdbc_thin_blob.mode.blob.bias.False.blob_size.1073741824.server_heap.12.insert_heap.6.select_heap.6.ignite_version.ignite-dev%][
ClientListenerNioListener] Failed to process client request
[req=JdbcQueryExecuteRequest [schemaName=PUBLIC, pageSize=1024, maxRows=0,
sqlQry=INSERT INTO query(id, blob) VALUES(?, ?), args=Object[] [1, [-29, -127,
20, 60, 106
, 13, -121, -72, 5, 60, -59, 22, -16, 0, 97, 91, -18, -91, -104, 35, -122, -66,
-17, -46, -1, -20, -117, 104, -31, -8, 15, 25, 12, -62, 5, -84, -15, 97, 2, 19,
-85, 106, -35, 37, 68, 108, -56, 25, 6, 63, -95, 37, -74, -33, 8,
24, -38, 52, 67, 111, 48, -46, 48, -100, -31, -105, 15, 123, 86, -48, -86, 7,
-118, 125, -67, -102, 79, 125, 62, -89, -23, 16, 65, -82, -57, 25, 13, 57, 57,
-122, -111, 63, -128, 28, -90, -41, 14, -12, -9, -36, -91... and 10
73741724 more]], stmtType=ANY_STATEMENT_TYPE, autoCommit=true,
partResReq=false, explicitTimeout=false, txId=0, super=JdbcRequest [type=2,
reqId=2]], msg=Requested array size exceeds VM limit]
java.lang.OutOfMemoryError: Requested array size exceeds VM limit
at java.base/java.util.Arrays.copyOf(Arrays.java:3745) ~[?:?]
at
java.base/java.lang.AbstractStringBuilder.ensureCapacityInternal(AbstractStringBuilder.java:172)
~[?:?]
at
java.base/java.lang.AbstractStringBuilder.append(AbstractStringBuilder.java:538)
~[?:?]
at java.base/java.lang.StringBuilder.append(StringBuilder.java:178)
~[?:?]
at java.base/java.util.Arrays.toString(Arrays.java:4991) ~[?:?]
at
org.apache.ignite.internal.binary.BinaryObjectExImpl.appendValue(BinaryObjectExImpl.java:272)
~[classes/:?]
at
org.apache.ignite.internal.binary.BinaryObjectExImpl.toString(BinaryObjectExImpl.java:237)
~[classes/:?]
at
org.apache.ignite.internal.binary.BinaryObjectExImpl.toString(BinaryObjectExImpl.java:189)
~[classes/:?]
at
org.apache.ignite.internal.binary.BinaryObjectImpl.toString(BinaryObjectImpl.java:1019)
~[classes/:?]
at java.base/java.lang.String.valueOf(String.java:2951) ~[?:?]
at
org.apache.ignite.internal.util.GridStringBuilder.a(GridStringBuilder.java:102)
~[classes/:?]
at
org.apache.ignite.internal.util.tostring.SBLimitedLength.a(SBLimitedLength.java:100)
~[classes/:?]
at
org.apache.ignite.internal.util.tostring.GridToStringBuilder.toString(GridToStringBuilder.java:910)
~[classes/:?]
at
org.apache.ignite.internal.util.tostring.GridToStringBuilder.toStringImpl0(GridToStringBuilder.java:1121)
~[classes/:?]
at
org.apache.ignite.internal.util.tostring.GridToStringBuilder.toStringImpl(GridToStringBuilder.java:1055)
~[classes/:?]
at
org.apache.ignite.internal.util.tostring.GridToStringBuilder.toString(GridToStringBuilder.java:816)
~[classes/:?]
at
org.apache.ignite.internal.util.tostring.GridToStringBuilder.toString(GridToStringBuilder.java:784)
~[classes/:?]
at
org.apache.ignite.internal.processors.cache.distributed.dht.atomic.GridDhtAtomicSingleUpdateRequest.toString(GridDhtAtomicSingleUpdateRequest.java:495)
~[classes/:?]
at java.base/java.lang.String.valueOf(String.java:2951) ~[?:?]
at
java.base/java.lang.invoke.DirectMethodHandle$Holder.invokeStatic(DirectMethodHandle$Holder)
~[?:?]
at
java.base/java.lang.invoke.LambdaForm$MH/0x0000000840282c40.invoke(LambdaForm$MH)
~[?:?]
at
java.base/java.lang.invoke.LambdaForm$MH/0x00000008404c3c40.invoke(LambdaForm$MH)
~[?:?]
at
java.base/java.lang.invoke.Invokers$Holder.linkToTargetMethod(Invokers$Holder)
~[?:?]
at
org.apache.ignite.internal.processors.cache.GridCacheIoManager.send(GridCacheIoManager.java:1245)
~[classes/:?]
at
org.apache.ignite.internal.processors.cache.distributed.dht.atomic.GridDhtAtomicAbstractUpdateFuture.sendDhtRequests(GridDhtAtomicAbstractUpdateFuture.java:450)
~[classes/:?]
at
org.apache.ignite.internal.processors.cache.distributed.dht.atomic.GridDhtAtomicAbstractUpdateFuture.map(GridDhtAtomicAbstractUpdateFuture.java:410)
~[classes/:?]
at
org.apache.ignite.internal.processors.cache.distributed.dht.atomic.GridDhtAtomicCache.updateAllAsyncInternal0(GridDhtAtomicCache.java:1912)
~[classes/:?]
at
org.apache.ignite.internal.processors.cache.distributed.dht.atomic.GridDhtAtomicCache.updateAllAsyncInternal(GridDhtAtomicCache.java:1680)
~[classes/:?]
at
org.apache.ignite.internal.processors.cache.distributed.dht.atomic.GridNearAtomicAbstractUpdateFuture.sendSingleRequest(GridNearAtomicAbstractUpdateFuture.java:294)
~[classes/:?]
at
org.apache.ignite.internal.processors.cache.distributed.dht.atomic.GridNearAtomicSingleUpdateFuture.map(GridNearAtomicSingleUpdateFuture.java:455)
~[classes/:?]
at
org.apache.ignite.internal.processors.cache.distributed.dht.atomic.GridNearAtomicSingleUpdateFuture.mapOnTopology(GridNearAtomicSingleUpdateFuture.java:415)
~[classes/:?]
at
org.apache.ignite.internal.processors.cache.distributed.dht.atomic.GridNearAtomicAbstractUpdateFuture.map(GridNearAtomicAbstractUpdateFuture.java:243)
~[classes/:?]
{noformat}
was:
It's needed to not generate large strings for large arrays.
In worst case not doing so can cause the OOM errors during the logging of some
another exception. If such an OOM occur the information of real problem will be
lost and not logged.
> Use limited string representation for arrays in BinaryObjectExImpl::toString
> ----------------------------------------------------------------------------
>
> Key: IGNITE-23513
> URL: https://issues.apache.org/jira/browse/IGNITE-23513
> Project: Ignite
> Issue Type: Task
> Reporter: Sergey Korotkov
> Priority: Minor
> Time Spent: 10m
> Remaining Estimate: 0h
>
> It's needed to not generate large strings for large arrays.
> In worst case not doing so can cause the OOM errors during the logging of
> some another exception. If such an OOM occur the information of real problem
> will be lost and not logged.
> For example:
> {noformat}
> [2024-10-24T11:35:44,402][ERROR][client-connector-#149%jdbc_thin_blob_test.JdbcThinBlobTest.test_jdbc_thin_blob.mode.blob.bias.False.blob_size.1073741824.server_heap.12.insert_heap.6.select_heap.6.ignite_version.ignite-dev%][
> ClientListenerNioListener] Failed to process client request
> [req=JdbcQueryExecuteRequest [schemaName=PUBLIC, pageSize=1024, maxRows=0,
> sqlQry=INSERT INTO query(id, blob) VALUES(?, ?), args=Object[] [1, [-29,
> -127, 20, 60, 106
> , 13, -121, -72, 5, 60, -59, 22, -16, 0, 97, 91, -18, -91, -104, 35, -122,
> -66, -17, -46, -1, -20, -117, 104, -31, -8, 15, 25, 12, -62, 5, -84, -15, 97,
> 2, 19, -85, 106, -35, 37, 68, 108, -56, 25, 6, 63, -95, 37, -74, -33, 8,
> 24, -38, 52, 67, 111, 48, -46, 48, -100, -31, -105, 15, 123, 86, -48, -86,
> 7, -118, 125, -67, -102, 79, 125, 62, -89, -23, 16, 65, -82, -57, 25, 13, 57,
> 57, -122, -111, 63, -128, 28, -90, -41, 14, -12, -9, -36, -91... and 10
> 73741724 more]], stmtType=ANY_STATEMENT_TYPE, autoCommit=true,
> partResReq=false, explicitTimeout=false, txId=0, super=JdbcRequest [type=2,
> reqId=2]], msg=Requested array size exceeds VM limit]
> java.lang.OutOfMemoryError: Requested array size exceeds VM limit
> at java.base/java.util.Arrays.copyOf(Arrays.java:3745) ~[?:?]
> at
> java.base/java.lang.AbstractStringBuilder.ensureCapacityInternal(AbstractStringBuilder.java:172)
> ~[?:?]
> at
> java.base/java.lang.AbstractStringBuilder.append(AbstractStringBuilder.java:538)
> ~[?:?]
> at java.base/java.lang.StringBuilder.append(StringBuilder.java:178)
> ~[?:?]
> at java.base/java.util.Arrays.toString(Arrays.java:4991) ~[?:?]
> at
> org.apache.ignite.internal.binary.BinaryObjectExImpl.appendValue(BinaryObjectExImpl.java:272)
> ~[classes/:?]
> at
> org.apache.ignite.internal.binary.BinaryObjectExImpl.toString(BinaryObjectExImpl.java:237)
> ~[classes/:?]
> at
> org.apache.ignite.internal.binary.BinaryObjectExImpl.toString(BinaryObjectExImpl.java:189)
> ~[classes/:?]
> at
> org.apache.ignite.internal.binary.BinaryObjectImpl.toString(BinaryObjectImpl.java:1019)
> ~[classes/:?]
> at java.base/java.lang.String.valueOf(String.java:2951) ~[?:?]
> at
> org.apache.ignite.internal.util.GridStringBuilder.a(GridStringBuilder.java:102)
> ~[classes/:?]
> at
> org.apache.ignite.internal.util.tostring.SBLimitedLength.a(SBLimitedLength.java:100)
> ~[classes/:?]
> at
> org.apache.ignite.internal.util.tostring.GridToStringBuilder.toString(GridToStringBuilder.java:910)
> ~[classes/:?]
> at
> org.apache.ignite.internal.util.tostring.GridToStringBuilder.toStringImpl0(GridToStringBuilder.java:1121)
> ~[classes/:?]
> at
> org.apache.ignite.internal.util.tostring.GridToStringBuilder.toStringImpl(GridToStringBuilder.java:1055)
> ~[classes/:?]
> at
> org.apache.ignite.internal.util.tostring.GridToStringBuilder.toString(GridToStringBuilder.java:816)
> ~[classes/:?]
> at
> org.apache.ignite.internal.util.tostring.GridToStringBuilder.toString(GridToStringBuilder.java:784)
> ~[classes/:?]
> at
> org.apache.ignite.internal.processors.cache.distributed.dht.atomic.GridDhtAtomicSingleUpdateRequest.toString(GridDhtAtomicSingleUpdateRequest.java:495)
> ~[classes/:?]
> at java.base/java.lang.String.valueOf(String.java:2951) ~[?:?]
> at
> java.base/java.lang.invoke.DirectMethodHandle$Holder.invokeStatic(DirectMethodHandle$Holder)
> ~[?:?]
> at
> java.base/java.lang.invoke.LambdaForm$MH/0x0000000840282c40.invoke(LambdaForm$MH)
> ~[?:?]
> at
> java.base/java.lang.invoke.LambdaForm$MH/0x00000008404c3c40.invoke(LambdaForm$MH)
> ~[?:?]
> at
> java.base/java.lang.invoke.Invokers$Holder.linkToTargetMethod(Invokers$Holder)
> ~[?:?]
> at
> org.apache.ignite.internal.processors.cache.GridCacheIoManager.send(GridCacheIoManager.java:1245)
> ~[classes/:?]
> at
> org.apache.ignite.internal.processors.cache.distributed.dht.atomic.GridDhtAtomicAbstractUpdateFuture.sendDhtRequests(GridDhtAtomicAbstractUpdateFuture.java:450)
> ~[classes/:?]
> at
> org.apache.ignite.internal.processors.cache.distributed.dht.atomic.GridDhtAtomicAbstractUpdateFuture.map(GridDhtAtomicAbstractUpdateFuture.java:410)
> ~[classes/:?]
> at
> org.apache.ignite.internal.processors.cache.distributed.dht.atomic.GridDhtAtomicCache.updateAllAsyncInternal0(GridDhtAtomicCache.java:1912)
> ~[classes/:?]
> at
> org.apache.ignite.internal.processors.cache.distributed.dht.atomic.GridDhtAtomicCache.updateAllAsyncInternal(GridDhtAtomicCache.java:1680)
> ~[classes/:?]
> at
> org.apache.ignite.internal.processors.cache.distributed.dht.atomic.GridNearAtomicAbstractUpdateFuture.sendSingleRequest(GridNearAtomicAbstractUpdateFuture.java:294)
> ~[classes/:?]
> at
> org.apache.ignite.internal.processors.cache.distributed.dht.atomic.GridNearAtomicSingleUpdateFuture.map(GridNearAtomicSingleUpdateFuture.java:455)
> ~[classes/:?]
> at
> org.apache.ignite.internal.processors.cache.distributed.dht.atomic.GridNearAtomicSingleUpdateFuture.mapOnTopology(GridNearAtomicSingleUpdateFuture.java:415)
> ~[classes/:?]
> at
> org.apache.ignite.internal.processors.cache.distributed.dht.atomic.GridNearAtomicAbstractUpdateFuture.map(GridNearAtomicAbstractUpdateFuture.java:243)
> ~[classes/:?]
> {noformat}
--
This message was sent by Atlassian Jira
(v8.20.10#820010)