IGNITE-6219 - IgniteCache#loadCache executes local load in caller thread (cherry picked from commit e5f45fd)
(cherry picked from commit 2a6658e) Project: http://git-wip-us.apache.org/repos/asf/ignite/repo Commit: http://git-wip-us.apache.org/repos/asf/ignite/commit/ae9c6d60 Tree: http://git-wip-us.apache.org/repos/asf/ignite/tree/ae9c6d60 Diff: http://git-wip-us.apache.org/repos/asf/ignite/diff/ae9c6d60 Branch: refs/heads/ignite-2.1.5-p1 Commit: ae9c6d603d04a46b4603d97d7db986bb33801228 Parents: 25e4706 Author: Dmitriy Govorukhin <[email protected]> Authored: Fri Sep 22 15:33:37 2017 +0300 Committer: Dmitriy Govorukhin <[email protected]> Committed: Fri Sep 22 15:33:37 2017 +0300 ---------------------------------------------------------------------- .../apache/ignite/IgniteSystemProperties.java | 10 +++++++++ .../processors/task/GridTaskWorker.java | 22 +++++++++++++++++++- .../resources/META-INF/classnames.properties | 2 ++ 3 files changed, 33 insertions(+), 1 deletion(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/ignite/blob/ae9c6d60/modules/core/src/main/java/org/apache/ignite/IgniteSystemProperties.java ---------------------------------------------------------------------- diff --git a/modules/core/src/main/java/org/apache/ignite/IgniteSystemProperties.java b/modules/core/src/main/java/org/apache/ignite/IgniteSystemProperties.java index ec79026..9992b0b 100644 --- a/modules/core/src/main/java/org/apache/ignite/IgniteSystemProperties.java +++ b/modules/core/src/main/java/org/apache/ignite/IgniteSystemProperties.java @@ -24,6 +24,7 @@ import java.util.Map; import java.util.Properties; import javax.net.ssl.HostnameVerifier; import org.apache.ignite.cluster.ClusterGroup; +import org.apache.ignite.configuration.PersistentStoreConfiguration; import org.apache.ignite.internal.marshaller.optimized.OptimizedMarshaller; import org.apache.ignite.lang.IgnitePredicate; import org.jetbrains.annotations.Nullable; @@ -706,6 +707,11 @@ public final class IgniteSystemProperties { public static final String IGNITE_ENABLE_FORCIBLE_NODE_KILL = "IGNITE_ENABLE_FORCIBLE_NODE_KILL"; /** + * If this property is set, then Ignite will use Async File IO factory by default. + */ + public static final String IGNITE_USE_ASYNC_FILE_IO_FACTORY = "IGNITE_USE_ASYNC_FILE_IO_FACTORY"; + + /** * Tasks stealing will be started if tasks queue size per data-streamer thread exceeds this threshold. * <p> * Default value is {@code 4}. @@ -721,6 +727,10 @@ public final class IgniteSystemProperties { */ public static final String IGNITE_WAL_LOG_TX_RECORDS = "IGNITE_WAL_LOG_TX_RECORDS"; + /** If this property is set, {@link PersistentStoreConfiguration#writeThrottlingEnabled} will be overridden to true + * independent of initial value in configuration. */ + public static final String IGNITE_OVERRIDE_WRITE_THROTTLING_ENABLED = "IGNITE_OVERRIDE_WRITE_THROTTLING_ENABLED"; + /** * Enforces singleton. */ http://git-wip-us.apache.org/repos/asf/ignite/blob/ae9c6d60/modules/core/src/main/java/org/apache/ignite/internal/processors/task/GridTaskWorker.java ---------------------------------------------------------------------- diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/task/GridTaskWorker.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/task/GridTaskWorker.java index 74fe57d..b94a427 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/processors/task/GridTaskWorker.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/task/GridTaskWorker.java @@ -574,7 +574,7 @@ class GridTaskWorker<T, R> extends GridWorker implements GridTimeoutObject { if (F.isEmpty(jobs)) return; - Collection<GridJobResultImpl> jobResList = new ArrayList<>(jobs.size()); + List<GridJobResultImpl> jobResList = new ArrayList<>(jobs.size()); Collection<ComputeJobSibling> sibs = new ArrayList<>(jobs.size()); @@ -632,6 +632,26 @@ class GridTaskWorker<T, R> extends GridWorker implements GridTimeoutObject { // Set mapped flag. ses.onMapped(); + // Move local jobs to the end of the list, because + // they will be invoked in current thread that will hold other + // jobs. + int jobResSize = jobResList.size(); + + if (jobResSize > 1) { + UUID locId = ctx.discovery().localNode().id(); + + for (int i = 0; i < jobResSize; i++) { + UUID jobNodeId = jobResList.get(i).getNode().id(); + + if (jobNodeId.equals(locId) && i < jobResSize - 1) { + Collections.swap(jobResList, i, jobResSize - 1); + + jobResSize--; + i--; + } + } + } + // Send out all remote mappedJobs. for (GridJobResultImpl res : jobResList) { evtLsnr.onJobSend(this, res.getSibling()); http://git-wip-us.apache.org/repos/asf/ignite/blob/ae9c6d60/modules/core/src/main/resources/META-INF/classnames.properties ---------------------------------------------------------------------- diff --git a/modules/core/src/main/resources/META-INF/classnames.properties b/modules/core/src/main/resources/META-INF/classnames.properties index e64363d..fd60bd4 100644 --- a/modules/core/src/main/resources/META-INF/classnames.properties +++ b/modules/core/src/main/resources/META-INF/classnames.properties @@ -2098,3 +2098,5 @@ org.apache.ignite.transactions.TransactionTimeoutException org.apache.ignite.util.AttributeNodeFilter org.apache.ignite.internal.processors.cache.persistence.file.AsyncFileIO org.apache.ignite.internal.processors.cache.persistence.file.AsyncFileIOFactory +org.apache.ignite.internal.processors.cache.persistence.file.AsyncFileIO +org.apache.ignite.internal.processors.cache.persistence.file.AsyncFileIOFactory
