[ 
https://issues.apache.org/jira/browse/IGNITE-23513?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Nikolay Izhikov updated IGNITE-23513:
-------------------------------------
    Fix Version/s: 2.17

> 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
>            Assignee: Sergey Korotkov
>            Priority: Minor
>              Labels: ise
>             Fix For: 2.17
>
>          Time Spent: 50m
>  Remaining Estimate: 0h
>
> BinaryObjectExImpl::toString shouldn't try to generate large strings for 
> large arrays and respect the IGNITE_TO_STRING_COLLECTION_LIMIT property.
> **
> Not doing so in worst case can cause say the *java.lang.OutOfMemoryError: 
> Requested array size exceeds VM limit* 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)

Reply via email to