IGNITE-443 Moved CacheConflictResolver interfaces to Ignite.
Project: http://git-wip-us.apache.org/repos/asf/incubator-ignite/repo Commit: http://git-wip-us.apache.org/repos/asf/incubator-ignite/commit/9426a745 Tree: http://git-wip-us.apache.org/repos/asf/incubator-ignite/tree/9426a745 Diff: http://git-wip-us.apache.org/repos/asf/incubator-ignite/diff/9426a745 Branch: refs/heads/ignite-443 Commit: 9426a745e70ecde9acfaefaec2e1eb215421f2f5 Parents: 540304d Author: nikolay_tikhonov <ntikho...@gridgain.com> Authored: Wed Mar 11 12:43:03 2015 +0300 Committer: nikolay_tikhonov <ntikho...@gridgain.com> Committed: Wed Mar 11 13:09:02 2015 +0300 ---------------------------------------------------------------------- .../configuration/CacheConfiguration.java | 62 ++++++++++++++++++++ .../processors/cache/GridCacheProcessor.java | 8 +++ 2 files changed, 70 insertions(+) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/9426a745/modules/core/src/main/java/org/apache/ignite/configuration/CacheConfiguration.java ---------------------------------------------------------------------- diff --git a/modules/core/src/main/java/org/apache/ignite/configuration/CacheConfiguration.java b/modules/core/src/main/java/org/apache/ignite/configuration/CacheConfiguration.java index 224176f..89496e2 100644 --- a/modules/core/src/main/java/org/apache/ignite/configuration/CacheConfiguration.java +++ b/modules/core/src/main/java/org/apache/ignite/configuration/CacheConfiguration.java @@ -30,6 +30,8 @@ import org.jetbrains.annotations.*; import javax.cache.configuration.*; import java.util.*; +import static org.apache.ignite.cache.CacheConflictResolverMode.*; + /** * This class defines grid cache configuration. This configuration is passed to * grid via {@link IgniteConfiguration#getCacheConfiguration()} method. It defines all configuration @@ -160,6 +162,9 @@ public class CacheConfiguration<K, V> extends MutableConfiguration<K, V> { /** Default value for 'readFromBackup' flag. */ public static final boolean DFLT_READ_FROM_BACKUP = true; + /** Default data center replication receiver cache conflict resolver mode. */ + public static final CacheConflictResolverMode DFLT_CONFLICT_RSLVR_MODE = AUTO; + /** Cache name. */ private String name; @@ -319,6 +324,12 @@ public class CacheConfiguration<K, V> extends MutableConfiguration<K, V> { /** Collection of type metadata. */ private Collection<CacheTypeMetadata> typeMeta; + /** Receiver cache conflict resolver mode. */ + private CacheConflictResolverMode conflictRslvrMode = DFLT_CONFLICT_RSLVR_MODE; + + /** Receiver cache conflict resolver. */ + private CacheConflictResolver conflictRslvr; + /** Empty constructor (all values are initialized to their defaults). */ public CacheConfiguration() { /* No-op. */ @@ -349,6 +360,8 @@ public class CacheConfiguration<K, V> extends MutableConfiguration<K, V> { cacheLoaderFactory = cc.getCacheLoaderFactory(); cacheMode = cc.getCacheMode(); cacheWriterFactory = cc.getCacheWriterFactory(); + conflictRslvr = cc.getConflictResolver(); + conflictRslvrMode = cc.getConflictResolverMode(); dfltLockTimeout = cc.getDefaultLockTimeout(); dfltQryTimeout = cc.getDefaultQueryTimeout(); distro = cc.getDistributionMode(); @@ -1620,6 +1633,55 @@ public class CacheConfiguration<K, V> extends MutableConfiguration<K, V> { this.readFromBackup = readFromBackup; } + /** + * Gets conflict resolver mode. See {@link CacheConflictResolverMode} for more information. + * <p> + * Defaults to {@link #DFLT_CONFLICT_RSLVR_MODE}. + * + * @return Conflict resolution mode. + */ + public CacheConflictResolverMode getConflictResolverMode() { + return conflictRslvrMode; + } + + /** + * Sets conflict resolver mode. See {@link #getConflictResolverMode()} for + * more information. + * + * @param conflictRslvrMode Conflict resolver mode. + */ + public void setConflictResolverMode(CacheConflictResolverMode conflictRslvrMode) { + this.conflictRslvrMode = conflictRslvrMode; + } + + /** + * Gets conflict resolver. + * <p> + * For {@link CacheConflictResolverMode#AUTO} mode this parameter can be {@code null} and in + * this case new entry will always overwrite the old one. + * <p> + * For {@link CacheConflictResolverMode#ALWAYS} mode this parameter is mandatory. + * <p> + * Default value is {@code null}. + * + * @return Conflict resolver. + */ + @Nullable public CacheConflictResolver getConflictResolver() { + return conflictRslvr; + } + + /** + * Sets conflict resolver. See {@link #getConflictResolver()} for more + * information. + * <p> + * Defaults to {@code null}. + * + * @param conflictRslvr Conflict resolver. + */ + public void setConflictResolver(CacheConflictResolver conflictRslvr) { + this.conflictRslvr = conflictRslvr; + } + /** {@inheritDoc} */ @Override public String toString() { return S.toString(CacheConfiguration.class, this); http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/9426a745/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheProcessor.java ---------------------------------------------------------------------- diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheProcessor.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheProcessor.java index 13fc5cf..7f945da 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheProcessor.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheProcessor.java @@ -56,6 +56,7 @@ import java.util.*; import static org.apache.ignite.IgniteSystemProperties.*; import static org.apache.ignite.cache.CacheAtomicityMode.*; +import static org.apache.ignite.cache.CacheConflictResolverMode.*; import static org.apache.ignite.configuration.CacheConfiguration.*; import static org.apache.ignite.cache.CacheDistributionMode.*; import static org.apache.ignite.cache.CacheMode.*; @@ -442,6 +443,12 @@ public class GridCacheProcessor extends GridProcessorAdapter { if (cc.getAtomicityMode() == ATOMIC) assertParameter(cc.getTransactionManagerLookupClassName() == null, "transaction manager can not be used with ATOMIC cache"); + + assertParameter(cc.getConflictResolverMode() != null, "cc.getConflictResolverMode() != null"); + + if (cc.getConflictResolverMode() != AUTO && cc.getConflictResolver() == null) + throw new IgniteException("Conflict resolver must be not null with " + cc.getConflictResolverMode() + + " resolving policy"); } /** @@ -477,6 +484,7 @@ public class GridCacheProcessor extends GridProcessorAdapter { prepare(cfg, cfg.getAffinityMapper(), false); prepare(cfg, cfg.getEvictionFilter(), false); prepare(cfg, cfg.getInterceptor(), false); + prepare(cfg, cfg.getConflictResolver(), false); for (Object obj : objs) prepare(cfg, obj, false);