[
https://issues.apache.org/jira/browse/IGNITE-23314?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Vladislav Pyatkov updated IGNITE-23314:
---------------------------------------
Description:
h3. Motivation
The main reason is to avoid contention on the hybrid clock. The algorithm does
not require checking if the replica is primary in the hybrid timestamp. We did
this to rollback fast
a transaction in case the primary replica is changed just in time when the
request is transported through the network.
{noformat}
hybridClock:nowLong-:java.lang.Exception:
at
org.apache.ignite.internal.util.IgniteUtils.dumpStack(IgniteUtils.java:682)
at
org.apache.ignite.internal.hlc.HybridClockImpl.nowLong(HybridClockImpl.java:76)
at
org.apache.ignite.internal.hlc.HybridClockImpl.now(HybridClockImpl.java:108)
at
org.apache.ignite.internal.hlc.ClockServiceImpl.now(ClockServiceImpl.java:43)
at
org.apache.ignite.internal.table.distributed.replicator.PartitionReplicaListener.ensureReplicaIsPrimary(PartitionReplicaListener.java:3535)
at
org.apache.ignite.internal.table.distributed.replicator.PartitionReplicaListener.lambda$invoke$1(PartitionReplicaListener.java:470)
at
org.apache.ignite.internal.tracing.Instrumentation.measure(Instrumentation.java:259)
at
org.apache.ignite.internal.table.distributed.replicator.PartitionReplicaListener.invoke(PartitionReplicaListener.java:470)
at
org.apache.ignite.internal.replicator.ReplicaImpl.processRequest(ReplicaImpl.java:154)
at
org.apache.ignite.internal.replicator.ReplicaManager.handleReplicaRequest(ReplicaManager.java:451)
at
org.apache.ignite.internal.replicator.ReplicaManager.onReplicaMessageReceived(ReplicaManager.java:382)
at
org.apache.ignite.internal.network.DefaultMessagingService.sendToSelf(DefaultMessagingService.java:390)
at
org.apache.ignite.internal.network.DefaultMessagingService.invoke0(DefaultMessagingService.java:318)
at
org.apache.ignite.internal.network.DefaultMessagingService.invoke(DefaultMessagingService.java:247)
at
org.apache.ignite.internal.network.wrapper.JumpToExecutorByConsistentIdAfterSend.invoke(JumpToExecutorByConsistentIdAfterSend.java:97)
at
org.apache.ignite.internal.network.MessagingService.invoke(MessagingService.java:198)
at
org.apache.ignite.internal.replicator.ReplicaService.sendToReplica(ReplicaService.java:140)
at
org.apache.ignite.internal.replicator.ReplicaService.invoke(ReplicaService.java:275)
at
org.apache.ignite.internal.table.distributed.storage.InternalTableImpl.lambda$evaluateReadOnlyPrimaryNode$19(InternalTableImpl.java:770)
at
java.base/java.util.concurrent.CompletableFuture.uniComposeStage(CompletableFuture.java:1106)
at
java.base/java.util.concurrent.CompletableFuture.thenCompose(CompletableFuture.java:2241)
at
org.apache.ignite.internal.table.distributed.storage.InternalTableImpl.evaluateReadOnlyPrimaryNode(InternalTableImpl.java:761)
at
org.apache.ignite.internal.table.distributed.storage.InternalTableImpl.get(InternalTableImpl.java:857)
at
org.apache.ignite.internal.table.KeyValueBinaryViewImpl.lambda$getAsync$1(KeyValueBinaryViewImpl.java:120)
at
org.apache.ignite.internal.table.AbstractTableView.lambda$withSchemaSync$2(AbstractTableView.java:143)
at
java.base/java.util.concurrent.CompletableFuture.uniComposeStage(CompletableFuture.java:1106)
at
java.base/java.util.concurrent.CompletableFuture.thenCompose(CompletableFuture.java:2241)
at
org.apache.ignite.internal.table.AbstractTableView.withSchemaSync(AbstractTableView.java:143)
at
org.apache.ignite.internal.table.AbstractTableView.withSchemaSync(AbstractTableView.java:134)
at
org.apache.ignite.internal.table.AbstractTableView.doOperation(AbstractTableView.java:112)
at
org.apache.ignite.internal.table.KeyValueBinaryViewImpl.getAsync(KeyValueBinaryViewImpl.java:117)
at
org.apache.ignite.internal.table.KeyValueBinaryViewImpl.get(KeyValueBinaryViewImpl.java:104)
at
org.apache.ignite.internal.table.KeyValueBinaryViewImpl.get(KeyValueBinaryViewImpl.java:74)
at
org.apache.ignite.internal.table.PublicApiThreadingKeyValueView.lambda$get$0(PublicApiThreadingKeyValueView.java:57)
at
org.apache.ignite.internal.thread.PublicApiThreading.executeWithRole(PublicApiThreading.java:144)
at
org.apache.ignite.internal.thread.PublicApiThreading.execUserSyncOperation(PublicApiThreading.java:102)
at
org.apache.ignite.internal.table.PublicApiThreadingViewBase.executeSyncOp(PublicApiThreadingViewBase.java:107)
at
org.apache.ignite.internal.table.PublicApiThreadingKeyValueView.get(PublicApiThreadingKeyValueView.java:57)
at
org.apache.ignite.internal.restart.RestartProofKeyValueView.lambda$get$0(RestartProofKeyValueView.java:58)
at
org.apache.ignite.internal.restart.RestartProofApiObject.lambda$attached$0(RestartProofApiObject.java:46)
at
org.apache.ignite.internal.restart.IgniteAttachmentLock.attached(IgniteAttachmentLock.java:59)
at
org.apache.ignite.internal.restart.RestartProofApiObject.attached(RestartProofApiObject.java:46)
at
org.apache.ignite.internal.restart.RestartProofKeyValueView.get(RestartProofKeyValueView.java:58)
at
org.apache.ignite.internal.benchmark.SelectBenchmark.kvGet(SelectBenchmark.java:175)
at
org.apache.ignite.internal.benchmark.jmh_generated.SelectBenchmark_kvGet_jmhTest.kvGet_avgt_jmhStub(SelectBenchmark_kvGet_jmhTest.java:238)
at
org.apache.ignite.internal.benchmark.jmh_generated.SelectBenchmark_kvGet_jmhTest.kvGet_AverageTime(SelectBenchmark_kvGet_jmhTest.java:177)
at jdk.internal.reflect.GeneratedMethodAccessor20.invoke(Unknown Source)
at
java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.base/java.lang.reflect.Method.invoke(Method.java:566)
at
org.openjdk.jmh.runner.BenchmarkHandler$BenchmarkTask.call(BenchmarkHandler.java:527)
at
org.openjdk.jmh.runner.BenchmarkHandler$BenchmarkTask.call(BenchmarkHandler.java:504)
at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264)
at
java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:515)
at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264)
at
java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128)
at
java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628)
at java.base/java.lang.Thread.run(Thread.java:829)
4 for readonly direct (probably may scip in embedded)
{noformat}
h3. Definition of done
Use not-contentioned (HybridClockSyncImpl#currentTime) method to deterine an
astronomical timestamp when the replica request is getting.
was:
h3. Motivation
The main reason is to avoid contention on the hybrid clock. The algorithm does
not require checking if the replica is primary in the hybrid timestamp. We did
this to rollback fast
a transaction in case the primary replica is changed just in time when the
request is transported through the network.
h3. Definition of done
Use not-contentioned (HybridClockSyncImpl#currentTime) method to deterine an
astronomical timestamp when the replica request is getting.
> PartitionReplicaListener#ensureReplicaIsPrimary does not require to use
> hybrid timestamp
> ----------------------------------------------------------------------------------------
>
> Key: IGNITE-23314
> URL: https://issues.apache.org/jira/browse/IGNITE-23314
> Project: Ignite
> Issue Type: Improvement
> Reporter: Vladislav Pyatkov
> Priority: Major
> Labels: ignite-3
>
> h3. Motivation
> The main reason is to avoid contention on the hybrid clock. The algorithm
> does not require checking if the replica is primary in the hybrid timestamp.
> We did this to rollback fast
> a transaction in case the primary replica is changed just in time when the
> request is transported through the network.
> {noformat}
> hybridClock:nowLong-:java.lang.Exception:
> at
> org.apache.ignite.internal.util.IgniteUtils.dumpStack(IgniteUtils.java:682)
> at
> org.apache.ignite.internal.hlc.HybridClockImpl.nowLong(HybridClockImpl.java:76)
> at
> org.apache.ignite.internal.hlc.HybridClockImpl.now(HybridClockImpl.java:108)
> at
> org.apache.ignite.internal.hlc.ClockServiceImpl.now(ClockServiceImpl.java:43)
> at
> org.apache.ignite.internal.table.distributed.replicator.PartitionReplicaListener.ensureReplicaIsPrimary(PartitionReplicaListener.java:3535)
> at
> org.apache.ignite.internal.table.distributed.replicator.PartitionReplicaListener.lambda$invoke$1(PartitionReplicaListener.java:470)
> at
> org.apache.ignite.internal.tracing.Instrumentation.measure(Instrumentation.java:259)
> at
> org.apache.ignite.internal.table.distributed.replicator.PartitionReplicaListener.invoke(PartitionReplicaListener.java:470)
> at
> org.apache.ignite.internal.replicator.ReplicaImpl.processRequest(ReplicaImpl.java:154)
> at
> org.apache.ignite.internal.replicator.ReplicaManager.handleReplicaRequest(ReplicaManager.java:451)
> at
> org.apache.ignite.internal.replicator.ReplicaManager.onReplicaMessageReceived(ReplicaManager.java:382)
> at
> org.apache.ignite.internal.network.DefaultMessagingService.sendToSelf(DefaultMessagingService.java:390)
> at
> org.apache.ignite.internal.network.DefaultMessagingService.invoke0(DefaultMessagingService.java:318)
> at
> org.apache.ignite.internal.network.DefaultMessagingService.invoke(DefaultMessagingService.java:247)
> at
> org.apache.ignite.internal.network.wrapper.JumpToExecutorByConsistentIdAfterSend.invoke(JumpToExecutorByConsistentIdAfterSend.java:97)
> at
> org.apache.ignite.internal.network.MessagingService.invoke(MessagingService.java:198)
> at
> org.apache.ignite.internal.replicator.ReplicaService.sendToReplica(ReplicaService.java:140)
> at
> org.apache.ignite.internal.replicator.ReplicaService.invoke(ReplicaService.java:275)
> at
> org.apache.ignite.internal.table.distributed.storage.InternalTableImpl.lambda$evaluateReadOnlyPrimaryNode$19(InternalTableImpl.java:770)
> at
> java.base/java.util.concurrent.CompletableFuture.uniComposeStage(CompletableFuture.java:1106)
> at
> java.base/java.util.concurrent.CompletableFuture.thenCompose(CompletableFuture.java:2241)
> at
> org.apache.ignite.internal.table.distributed.storage.InternalTableImpl.evaluateReadOnlyPrimaryNode(InternalTableImpl.java:761)
> at
> org.apache.ignite.internal.table.distributed.storage.InternalTableImpl.get(InternalTableImpl.java:857)
> at
> org.apache.ignite.internal.table.KeyValueBinaryViewImpl.lambda$getAsync$1(KeyValueBinaryViewImpl.java:120)
> at
> org.apache.ignite.internal.table.AbstractTableView.lambda$withSchemaSync$2(AbstractTableView.java:143)
> at
> java.base/java.util.concurrent.CompletableFuture.uniComposeStage(CompletableFuture.java:1106)
> at
> java.base/java.util.concurrent.CompletableFuture.thenCompose(CompletableFuture.java:2241)
> at
> org.apache.ignite.internal.table.AbstractTableView.withSchemaSync(AbstractTableView.java:143)
> at
> org.apache.ignite.internal.table.AbstractTableView.withSchemaSync(AbstractTableView.java:134)
> at
> org.apache.ignite.internal.table.AbstractTableView.doOperation(AbstractTableView.java:112)
> at
> org.apache.ignite.internal.table.KeyValueBinaryViewImpl.getAsync(KeyValueBinaryViewImpl.java:117)
> at
> org.apache.ignite.internal.table.KeyValueBinaryViewImpl.get(KeyValueBinaryViewImpl.java:104)
> at
> org.apache.ignite.internal.table.KeyValueBinaryViewImpl.get(KeyValueBinaryViewImpl.java:74)
> at
> org.apache.ignite.internal.table.PublicApiThreadingKeyValueView.lambda$get$0(PublicApiThreadingKeyValueView.java:57)
> at
> org.apache.ignite.internal.thread.PublicApiThreading.executeWithRole(PublicApiThreading.java:144)
> at
> org.apache.ignite.internal.thread.PublicApiThreading.execUserSyncOperation(PublicApiThreading.java:102)
> at
> org.apache.ignite.internal.table.PublicApiThreadingViewBase.executeSyncOp(PublicApiThreadingViewBase.java:107)
> at
> org.apache.ignite.internal.table.PublicApiThreadingKeyValueView.get(PublicApiThreadingKeyValueView.java:57)
> at
> org.apache.ignite.internal.restart.RestartProofKeyValueView.lambda$get$0(RestartProofKeyValueView.java:58)
> at
> org.apache.ignite.internal.restart.RestartProofApiObject.lambda$attached$0(RestartProofApiObject.java:46)
> at
> org.apache.ignite.internal.restart.IgniteAttachmentLock.attached(IgniteAttachmentLock.java:59)
> at
> org.apache.ignite.internal.restart.RestartProofApiObject.attached(RestartProofApiObject.java:46)
> at
> org.apache.ignite.internal.restart.RestartProofKeyValueView.get(RestartProofKeyValueView.java:58)
> at
> org.apache.ignite.internal.benchmark.SelectBenchmark.kvGet(SelectBenchmark.java:175)
> at
> org.apache.ignite.internal.benchmark.jmh_generated.SelectBenchmark_kvGet_jmhTest.kvGet_avgt_jmhStub(SelectBenchmark_kvGet_jmhTest.java:238)
> at
> org.apache.ignite.internal.benchmark.jmh_generated.SelectBenchmark_kvGet_jmhTest.kvGet_AverageTime(SelectBenchmark_kvGet_jmhTest.java:177)
> at jdk.internal.reflect.GeneratedMethodAccessor20.invoke(Unknown Source)
> at
> java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
> at java.base/java.lang.reflect.Method.invoke(Method.java:566)
> at
> org.openjdk.jmh.runner.BenchmarkHandler$BenchmarkTask.call(BenchmarkHandler.java:527)
> at
> org.openjdk.jmh.runner.BenchmarkHandler$BenchmarkTask.call(BenchmarkHandler.java:504)
> at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264)
> at
> java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:515)
> at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264)
> at
> java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128)
> at
> java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628)
> at java.base/java.lang.Thread.run(Thread.java:829)
> 4 for readonly direct (probably may scip in embedded)
> {noformat}
> h3. Definition of done
> Use not-contentioned (HybridClockSyncImpl#currentTime) method to deterine an
> astronomical timestamp when the replica request is getting.
--
This message was sent by Atlassian Jira
(v8.20.10#820010)