[
https://issues.apache.org/jira/browse/IGNITE-16751?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Alexander Lapin updated IGNITE-16751:
-------------------------------------
Description:
{code:java}
org.apache.ignite.internal.configuration.storage.StorageException: Exception
when closing a Meta Storage cursor at
org.apache.ignite.internal.configuration.storage.DistributedConfigurationStorage.readAllLatest(DistributedConfigurationStorage.java:144)
at
org.apache.ignite.internal.configuration.ConfigurationChanger.getLatest(ConfigurationChanger.java:384)
at
org.apache.ignite.internal.configuration.direct.DirectPropertyProxy.value(DirectPropertyProxy.java:65)
at
org.apache.ignite.internal.table.distributed.TableManager.directTableIds(TableManager.java:1110)
at
java.base/java.util.concurrent.CompletableFuture$AsyncSupply.run(CompletableFuture.java:1700)
at
java.base/java.util.concurrent.CompletableFuture$AsyncSupply.exec(CompletableFuture.java:1692)
at java.base/java.util.concurrent.ForkJoinTask.doExec(ForkJoinTask.java:290)
at
java.base/java.util.concurrent.ForkJoinPool$WorkQueue.topLevelExec(ForkJoinPool.java:1020)
at java.base/java.util.concurrent.ForkJoinPool.scan(ForkJoinPool.java:1656)
at
java.base/java.util.concurrent.ForkJoinPool.runWorker(ForkJoinPool.java:1594)
at
java.base/java.util.concurrent.ForkJoinWorkerThread.run(ForkJoinWorkerThread.java:177)
Caused by: class org.apache.ignite.lang.IgniteInternalException: class
org.apache.ignite.lang.IgniteInternalException:
java.util.concurrent.TimeoutException
at
org.apache.ignite.internal.metastorage.MetaStorageManager$CursorWrapper$InnerIterator.hasNext(MetaStorageManager.java:1047)
at
org.apache.ignite.internal.configuration.storage.DistributedConfigurationStorage.readAllLatest(DistributedConfigurationStorage.java:124)
... 10 more
Caused by: java.util.concurrent.ExecutionException: class
org.apache.ignite.lang.IgniteInternalException:
java.util.concurrent.TimeoutException
at
java.base/java.util.concurrent.CompletableFuture.reportGet(CompletableFuture.java:395)
at
java.base/java.util.concurrent.CompletableFuture.get(CompletableFuture.java:1999)
at
org.apache.ignite.internal.metastorage.MetaStorageManager$CursorWrapper$InnerIterator.hasNext(MetaStorageManager.java:1045)
... 11 more {code}
h4. Update 1
Seems that the reason for such exceptions and unexpected behaviour is that
Timeout expcetion could be both wrapped with
ExecutionException/CompltetionException and thrown as is. So in addition to
considering TimeoutException as recoverable with corresponding retrial we
should also treat ExecutionException/CompltetionException with TimeoutException
cause the same way.
{code:java}
private boolean recoverable(Throwable t) {
return t instanceof TimeoutException || t.getCause() instanceof
IOException;
} {code}
might be changes with
{code:java}
private boolean recoverable(Throwable t) {
return t instanceof TimeoutException ||
((t instanceof ExecutionException || t instanceof
CompletionException) && t.getCause()
instanceof TimeoutException || t.getCause() instanceof
IOException);
} {code}
was:
{code:java}
org.apache.ignite.internal.configuration.storage.StorageException: Exception
when closing a Meta Storage cursor at
org.apache.ignite.internal.configuration.storage.DistributedConfigurationStorage.readAllLatest(DistributedConfigurationStorage.java:144)
at
org.apache.ignite.internal.configuration.ConfigurationChanger.getLatest(ConfigurationChanger.java:384)
at
org.apache.ignite.internal.configuration.direct.DirectPropertyProxy.value(DirectPropertyProxy.java:65)
at
org.apache.ignite.internal.table.distributed.TableManager.directTableIds(TableManager.java:1110)
at
java.base/java.util.concurrent.CompletableFuture$AsyncSupply.run(CompletableFuture.java:1700)
at
java.base/java.util.concurrent.CompletableFuture$AsyncSupply.exec(CompletableFuture.java:1692)
at java.base/java.util.concurrent.ForkJoinTask.doExec(ForkJoinTask.java:290)
at
java.base/java.util.concurrent.ForkJoinPool$WorkQueue.topLevelExec(ForkJoinPool.java:1020)
at java.base/java.util.concurrent.ForkJoinPool.scan(ForkJoinPool.java:1656)
at
java.base/java.util.concurrent.ForkJoinPool.runWorker(ForkJoinPool.java:1594)
at
java.base/java.util.concurrent.ForkJoinWorkerThread.run(ForkJoinWorkerThread.java:177)
Caused by: class org.apache.ignite.lang.IgniteInternalException: class
org.apache.ignite.lang.IgniteInternalException:
java.util.concurrent.TimeoutException
at
org.apache.ignite.internal.metastorage.MetaStorageManager$CursorWrapper$InnerIterator.hasNext(MetaStorageManager.java:1047)
at
org.apache.ignite.internal.configuration.storage.DistributedConfigurationStorage.readAllLatest(DistributedConfigurationStorage.java:124)
... 10 more
Caused by: java.util.concurrent.ExecutionException: class
org.apache.ignite.lang.IgniteInternalException:
java.util.concurrent.TimeoutException
at
java.base/java.util.concurrent.CompletableFuture.reportGet(CompletableFuture.java:395)
at
java.base/java.util.concurrent.CompletableFuture.get(CompletableFuture.java:1999)
at
org.apache.ignite.internal.metastorage.MetaStorageManager$CursorWrapper$InnerIterator.hasNext(MetaStorageManager.java:1045)
... 11 more {code}
> ItColocationTest#colocationOneColumn sometimes fails with StorageException:
> Exception when closing a Meta Storage cursor
> ------------------------------------------------------------------------------------------------------------------------
>
> Key: IGNITE-16751
> URL: https://issues.apache.org/jira/browse/IGNITE-16751
> Project: Ignite
> Issue Type: Bug
> Reporter: Alexander Lapin
> Assignee: Alexander Lapin
> Priority: Major
> Labels: ignite-3
>
> {code:java}
> org.apache.ignite.internal.configuration.storage.StorageException: Exception
> when closing a Meta Storage cursor at
> org.apache.ignite.internal.configuration.storage.DistributedConfigurationStorage.readAllLatest(DistributedConfigurationStorage.java:144)
> at
> org.apache.ignite.internal.configuration.ConfigurationChanger.getLatest(ConfigurationChanger.java:384)
> at
> org.apache.ignite.internal.configuration.direct.DirectPropertyProxy.value(DirectPropertyProxy.java:65)
> at
> org.apache.ignite.internal.table.distributed.TableManager.directTableIds(TableManager.java:1110)
> at
> java.base/java.util.concurrent.CompletableFuture$AsyncSupply.run(CompletableFuture.java:1700)
> at
> java.base/java.util.concurrent.CompletableFuture$AsyncSupply.exec(CompletableFuture.java:1692)
> at
> java.base/java.util.concurrent.ForkJoinTask.doExec(ForkJoinTask.java:290)
> at
> java.base/java.util.concurrent.ForkJoinPool$WorkQueue.topLevelExec(ForkJoinPool.java:1020)
> at
> java.base/java.util.concurrent.ForkJoinPool.scan(ForkJoinPool.java:1656)
> at
> java.base/java.util.concurrent.ForkJoinPool.runWorker(ForkJoinPool.java:1594)
> at
> java.base/java.util.concurrent.ForkJoinWorkerThread.run(ForkJoinWorkerThread.java:177)
> Caused by: class org.apache.ignite.lang.IgniteInternalException: class
> org.apache.ignite.lang.IgniteInternalException:
> java.util.concurrent.TimeoutException
> at
> org.apache.ignite.internal.metastorage.MetaStorageManager$CursorWrapper$InnerIterator.hasNext(MetaStorageManager.java:1047)
> at
> org.apache.ignite.internal.configuration.storage.DistributedConfigurationStorage.readAllLatest(DistributedConfigurationStorage.java:124)
> ... 10 more
> Caused by: java.util.concurrent.ExecutionException: class
> org.apache.ignite.lang.IgniteInternalException:
> java.util.concurrent.TimeoutException
> at
> java.base/java.util.concurrent.CompletableFuture.reportGet(CompletableFuture.java:395)
> at
> java.base/java.util.concurrent.CompletableFuture.get(CompletableFuture.java:1999)
> at
> org.apache.ignite.internal.metastorage.MetaStorageManager$CursorWrapper$InnerIterator.hasNext(MetaStorageManager.java:1045)
> ... 11 more {code}
> h4. Update 1
> Seems that the reason for such exceptions and unexpected behaviour is that
> Timeout expcetion could be both wrapped with
> ExecutionException/CompltetionException and thrown as is. So in addition to
> considering TimeoutException as recoverable with corresponding retrial we
> should also treat ExecutionException/CompltetionException with
> TimeoutException cause the same way.
>
> {code:java}
> private boolean recoverable(Throwable t) {
> return t instanceof TimeoutException || t.getCause() instanceof
> IOException;
> } {code}
> might be changes with
> {code:java}
> private boolean recoverable(Throwable t) {
> return t instanceof TimeoutException ||
> ((t instanceof ExecutionException || t instanceof
> CompletionException) && t.getCause()
> instanceof TimeoutException || t.getCause()
> instanceof IOException);
> } {code}
>
--
This message was sent by Atlassian Jira
(v8.20.1#820001)