You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ignite.apache.org by ag...@apache.org on 2017/10/24 15:16:08 UTC
ignite git commit: IGNITE-6746 Adding persistent system cache
Repository: ignite
Updated Branches:
refs/heads/ignite-6746 [created] 4865cf5b2
IGNITE-6746 Adding persistent system cache
Project: http://git-wip-us.apache.org/repos/asf/ignite/repo
Commit: http://git-wip-us.apache.org/repos/asf/ignite/commit/4865cf5b
Tree: http://git-wip-us.apache.org/repos/asf/ignite/tree/4865cf5b
Diff: http://git-wip-us.apache.org/repos/asf/ignite/diff/4865cf5b
Branch: refs/heads/ignite-6746
Commit: 4865cf5b24c153057e211c65a12257d95778b793
Parents: b51df62
Author: Alexey Goncharuk <al...@gmail.com>
Authored: Tue Oct 24 18:15:54 2017 +0300
Committer: Alexey Goncharuk <al...@gmail.com>
Committed: Tue Oct 24 18:15:54 2017 +0300
----------------------------------------------------------------------
.../org/apache/ignite/internal/IgniteEx.java | 7 +++
.../apache/ignite/internal/IgniteKernal.java | 14 +++++
.../org/apache/ignite/internal/IgnitionEx.java | 20 ++++---
.../processors/cache/GridCacheProcessor.java | 11 +++-
.../processors/cache/GridCacheUtils.java | 18 ++++--
.../IgniteCacheDatabaseSharedManager.java | 59 +++++++++++++++-----
.../processors/igfs/IgfsIgniteMock.java | 7 +++
.../junits/multijvm/IgniteProcessProxy.java | 5 ++
8 files changed, 113 insertions(+), 28 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/ignite/blob/4865cf5b/modules/core/src/main/java/org/apache/ignite/internal/IgniteEx.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/IgniteEx.java b/modules/core/src/main/java/org/apache/ignite/internal/IgniteEx.java
index 53b3e4f..a698cae 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/IgniteEx.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/IgniteEx.java
@@ -44,6 +44,13 @@ public interface IgniteEx extends Ignite {
public <K extends GridCacheUtilityKey, V> IgniteInternalCache<K, V> utilityCache();
/**
+ * Gets utility cache with enabled persistence.
+ *
+ * @return Utility cache.
+ */
+ public <K extends GridCacheUtilityKey, V> IgniteInternalCache<K, V> persistentUtilityCache();
+
+ /**
* Gets the cache instance for the given name if one is configured or
* <tt>null</tt> otherwise returning even non-public caches.
*
http://git-wip-us.apache.org/repos/asf/ignite/blob/4865cf5b/modules/core/src/main/java/org/apache/ignite/internal/IgniteKernal.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/IgniteKernal.java b/modules/core/src/main/java/org/apache/ignite/internal/IgniteKernal.java
index ba42a95..313a8e1 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/IgniteKernal.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/IgniteKernal.java
@@ -3317,6 +3317,20 @@ public class IgniteKernal implements IgniteEx, IgniteMXBean, Externalizable {
}
/** {@inheritDoc} */
+ @Override public <K extends GridCacheUtilityKey, V> IgniteInternalCache<K, V> persistentUtilityCache() {
+ guard();
+
+ try {
+ checkClusterState();
+
+ return ctx.cache().persistentUtilityCache();
+ }
+ finally {
+ unguard();
+ }
+ }
+
+ /** {@inheritDoc} */
@Override public <K, V> IgniteInternalCache<K, V> cachex(String name) {
CU.validateCacheName(name);
http://git-wip-us.apache.org/repos/asf/ignite/blob/4865cf5b/modules/core/src/main/java/org/apache/ignite/internal/IgnitionEx.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/IgnitionEx.java b/modules/core/src/main/java/org/apache/ignite/internal/IgnitionEx.java
index 36257e2..80e49cf 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/IgnitionEx.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/IgnitionEx.java
@@ -69,6 +69,7 @@ import org.apache.ignite.configuration.PersistentStoreConfiguration;
import org.apache.ignite.configuration.TransactionConfiguration;
import org.apache.ignite.internal.binary.BinaryMarshaller;
import org.apache.ignite.internal.managers.communication.GridIoPolicy;
+import org.apache.ignite.internal.processors.cache.persistence.GridCacheDatabaseSharedManager;
import org.apache.ignite.internal.processors.datastructures.DataStructuresProcessor;
import org.apache.ignite.internal.processors.igfs.IgfsThreadFactory;
import org.apache.ignite.internal.processors.igfs.IgfsUtils;
@@ -2222,7 +2223,11 @@ public class IgnitionEx {
public void initializeDefaultCacheConfiguration(IgniteConfiguration cfg) throws IgniteCheckedException {
List<CacheConfiguration> cacheCfgs = new ArrayList<>();
- cacheCfgs.add(utilitySystemCache());
+ cacheCfgs.add(systemCache(CU.UTILITY_CACHE_NAME, GridCacheDatabaseSharedManager.systemDataRegionName()));
+
+ if (CU.isPersistenceEnabled(cfg))
+ cacheCfgs.add(systemCache(CU.PERSISTENT_UTILITY_CACHE_NAME,
+ GridCacheDatabaseSharedManager.systemPersistentDataRegionName()));
if (IgniteComponentType.HADOOP.inClassPath())
cacheCfgs.add(CU.hadoopSystemCache());
@@ -2409,15 +2414,13 @@ public class IgnitionEx {
}
}
- /**
- * Creates utility system cache configuration.
- *
- * @return Utility system cache configuration.
- */
- private static CacheConfiguration utilitySystemCache() {
+ private static CacheConfiguration systemCache(
+ String name,
+ String dataRegionName
+ ) {
CacheConfiguration cache = new CacheConfiguration();
- cache.setName(CU.UTILITY_CACHE_NAME);
+ cache.setName(name);
cache.setCacheMode(REPLICATED);
cache.setAtomicityMode(TRANSACTIONAL);
cache.setRebalanceMode(SYNC);
@@ -2426,6 +2429,7 @@ public class IgnitionEx {
cache.setNodeFilter(CacheConfiguration.ALL_NODES);
cache.setRebalanceOrder(-2); //Prior to user caches.
cache.setCopyOnRead(false);
+ cache.setDataRegionName(dataRegionName);
return cache;
}
http://git-wip-us.apache.org/repos/asf/ignite/blob/4865cf5b/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 021807a..b7660aa 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
@@ -682,7 +682,7 @@ public class GridCacheProcessor extends GridProcessorAdapter {
CacheType cacheType = cacheType(cacheName);
if (cacheType != CacheType.USER && cfg.getDataRegionName() == null)
- cfg.setDataRegionName(sharedCtx.database().systemDateRegionName());
+ cfg.setDataRegionName(GridCacheDatabaseSharedManager.systemDataRegionName());
if (!cacheType.userCache())
stopSeq.addLast(cacheName);
@@ -3259,6 +3259,15 @@ public class GridCacheProcessor extends GridProcessorAdapter {
}
/**
+ * Gets utility cache.
+ *
+ * @return Utility cache.
+ */
+ public <K, V> IgniteInternalCache<K, V> persistentUtilityCache() {
+ return internalCacheEx(CU.PERSISTENT_UTILITY_CACHE_NAME);
+ }
+
+ /**
* @param name Cache name.
* @return Cache.
*/
http://git-wip-us.apache.org/repos/asf/ignite/blob/4865cf5b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheUtils.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheUtils.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheUtils.java
index 26e2254..887ffc5 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheUtils.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheUtils.java
@@ -164,6 +164,9 @@ public class GridCacheUtils {
/** System cache name. */
public static final String UTILITY_CACHE_NAME = "ignite-sys-cache";
+ /** Persistent system cache name. */
+ public static final String PERSISTENT_UTILITY_CACHE_NAME = "ignite-persistent-sys-cache";
+
/** */
public static final String CONTINUOUS_QRY_LOG_CATEGORY = "org.apache.ignite.continuous.query";
@@ -1060,7 +1063,7 @@ public class GridCacheUtils {
* @return {@code True} if this is utility system cache.
*/
public static boolean isUtilityCache(String cacheName) {
- return UTILITY_CACHE_NAME.equals(cacheName);
+ return UTILITY_CACHE_NAME.equals(cacheName) || PERSISTENT_UTILITY_CACHE_NAME.equals(cacheName);
}
/**
@@ -1705,10 +1708,17 @@ public class GridCacheUtils {
* @return {@code true} if persistence is enabled for at least one data region, {@code false} if not.
*/
public static boolean isPersistenceEnabled(IgniteConfiguration cfg) {
- if (cfg.getDataStorageConfiguration() == null)
+ return isPersistenceEnabled(cfg.getDataStorageConfiguration());
+ }
+
+ /**
+ * @return {@code true} if persistence is enabled for at least one data region, {@code false} if not.
+ */
+ public static boolean isPersistenceEnabled(@Nullable DataStorageConfiguration dsCfg) {
+ if (dsCfg == null)
return false;
- DataRegionConfiguration dfltReg = cfg.getDataStorageConfiguration().getDefaultDataRegionConfiguration();
+ DataRegionConfiguration dfltReg = dsCfg.getDefaultDataRegionConfiguration();
if (dfltReg == null)
return false;
@@ -1716,7 +1726,7 @@ public class GridCacheUtils {
if (dfltReg.isPersistenceEnabled())
return true;
- DataRegionConfiguration[] regCfgs = cfg.getDataStorageConfiguration().getDataRegionConfigurations();
+ DataRegionConfiguration[] regCfgs = dsCfg.getDataRegionConfigurations();
if (regCfgs == null)
return false;
http://git-wip-us.apache.org/repos/asf/ignite/blob/4865cf5b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/IgniteCacheDatabaseSharedManager.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/IgniteCacheDatabaseSharedManager.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/IgniteCacheDatabaseSharedManager.java
index 933c195..dda2f79 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/IgniteCacheDatabaseSharedManager.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/IgniteCacheDatabaseSharedManager.java
@@ -57,6 +57,7 @@ import org.apache.ignite.internal.processors.cache.persistence.tree.reuse.ReuseL
import org.apache.ignite.internal.processors.cluster.IgniteChangeGlobalStateSupport;
import org.apache.ignite.internal.util.typedef.F;
import org.apache.ignite.internal.util.typedef.T2;
+import org.apache.ignite.internal.util.typedef.internal.CU;
import org.apache.ignite.internal.util.typedef.internal.LT;
import org.apache.ignite.internal.util.typedef.internal.U;
import org.apache.ignite.lang.IgniteBiTuple;
@@ -75,6 +76,9 @@ public class IgniteCacheDatabaseSharedManager extends GridCacheSharedManagerAdap
/** DataRegionConfiguration name reserved for internal caches. */
static final String SYSTEM_DATA_REGION_NAME = "sysMemPlc";
+ /** DataRegionConfiguration name reserved for internal persisted caches. */
+ static final String SYSTEM_PERSISTENT_DATA_REGION_NAME = "sysPersistedMemPlc";
+
/** Minimum size of memory chunk */
private static final long MIN_PAGE_MEMORY_SIZE = 10 * 1024 * 1024;
@@ -218,36 +222,47 @@ public class IgniteCacheDatabaseSharedManager extends GridCacheSharedManagerAdap
if (dataRegionCfgs != null) {
for (DataRegionConfiguration dataRegionCfg : dataRegionCfgs)
- addDataRegion(memCfg, dataRegionCfg, dataRegionCfg.getName());
+ addDataRegion(memCfg, dataRegionCfg);
}
addDataRegion(
memCfg,
- memCfg.getDefaultDataRegionConfiguration(),
- memCfg.getDefaultDataRegionConfiguration().getName()
+ memCfg.getDefaultDataRegionConfiguration()
);
addDataRegion(
memCfg,
createSystemDataRegion(
+ SYSTEM_DATA_REGION_NAME,
memCfg.getSystemRegionInitialSize(),
- memCfg.getSystemRegionMaxSize()
- ),
- SYSTEM_DATA_REGION_NAME
+ memCfg.getSystemRegionMaxSize(),
+ false
+ )
);
+
+ if (CU.isPersistenceEnabled(memCfg)) {
+ addDataRegion(
+ memCfg,
+ createSystemDataRegion(
+ SYSTEM_PERSISTENT_DATA_REGION_NAME,
+ memCfg.getSystemRegionInitialSize(),
+ memCfg.getSystemRegionMaxSize(),
+ true
+ )
+ );
+ }
}
/**
* @param dataStorageCfg Database config.
* @param dataRegionCfg Data region config.
- * @param dataRegionName Data region name.
* @throws IgniteCheckedException If failed to initialize swap path.
*/
private void addDataRegion(
DataStorageConfiguration dataStorageCfg,
- DataRegionConfiguration dataRegionCfg,
- String dataRegionName
+ DataRegionConfiguration dataRegionCfg
) throws IgniteCheckedException {
+ String dataRegionName = dataRegionCfg.getName();
String dfltMemPlcName = dataStorageCfg.getDefaultDataRegionConfiguration().getName();
if (dfltMemPlcName == null)
@@ -315,15 +330,22 @@ public class IgniteCacheDatabaseSharedManager extends GridCacheSharedManagerAdap
/**
* @param sysCacheInitSize Initial size of PageMemory to be created for system cache.
* @param sysCacheMaxSize Maximum size of PageMemory to be created for system cache.
+ * @param persistenceEnabled {@code true} if persistence should be enabled for this cache.
*
* @return {@link DataRegionConfiguration configuration} of DataRegion for system cache.
*/
- private DataRegionConfiguration createSystemDataRegion(long sysCacheInitSize, long sysCacheMaxSize) {
+ private DataRegionConfiguration createSystemDataRegion(
+ String regionName,
+ long sysCacheInitSize,
+ long sysCacheMaxSize,
+ boolean persistenceEnabled
+ ) {
DataRegionConfiguration res = new DataRegionConfiguration();
- res.setName(SYSTEM_DATA_REGION_NAME);
+ res.setName(regionName);
res.setInitialSize(sysCacheInitSize);
res.setMaxSize(sysCacheMaxSize);
+ res.setPersistenceEnabled(persistenceEnabled);
return res;
}
@@ -507,10 +529,10 @@ public class IgniteCacheDatabaseSharedManager extends GridCacheSharedManagerAdap
"non-empty name.");
if (observedNames.contains(regName))
- throw new IgniteCheckedException("Two MemoryPolicies have the same name: " + regName);
+ throw new IgniteCheckedException("Two DataRegionConfiguration have the same name: " + regName);
- if (SYSTEM_DATA_REGION_NAME.equals(regName))
- throw new IgniteCheckedException("'" + SYSTEM_DATA_REGION_NAME + "' policy name is reserved for internal use.");
+ if (SYSTEM_DATA_REGION_NAME.equals(regName) || SYSTEM_PERSISTENT_DATA_REGION_NAME.equals(regName))
+ throw new IgniteCheckedException("'" + regName + "' data region name is reserved for internal use.");
observedNames.add(regName);
}
@@ -959,11 +981,18 @@ public class IgniteCacheDatabaseSharedManager extends GridCacheSharedManagerAdap
/**
* @return Name of DataRegionConfiguration for internal caches.
*/
- public String systemDateRegionName() {
+ public static String systemDataRegionName() {
return SYSTEM_DATA_REGION_NAME;
}
/**
+ * @return Name of DataRegionConfiguration for internal caches.
+ */
+ public static String systemPersistentDataRegionName() {
+ return SYSTEM_PERSISTENT_DATA_REGION_NAME;
+ }
+
+ /**
* Method for fake (standalone) context initialization. Not to be called in production code
* @param pageSize configured page size
*/
http://git-wip-us.apache.org/repos/asf/ignite/blob/4865cf5b/modules/core/src/test/java/org/apache/ignite/internal/processors/igfs/IgfsIgniteMock.java
----------------------------------------------------------------------
diff --git a/modules/core/src/test/java/org/apache/ignite/internal/processors/igfs/IgfsIgniteMock.java b/modules/core/src/test/java/org/apache/ignite/internal/processors/igfs/IgfsIgniteMock.java
index a0ce285..7bc1401 100644
--- a/modules/core/src/test/java/org/apache/ignite/internal/processors/igfs/IgfsIgniteMock.java
+++ b/modules/core/src/test/java/org/apache/ignite/internal/processors/igfs/IgfsIgniteMock.java
@@ -99,6 +99,13 @@ public class IgfsIgniteMock implements IgniteEx {
}
/** {@inheritDoc} */
+ @Override public <K extends GridCacheUtilityKey, V> IgniteInternalCache<K, V> persistentUtilityCache() {
+ throwUnsupported();
+
+ return null;
+ }
+
+ /** {@inheritDoc} */
@Nullable @Override public <K, V> IgniteInternalCache<K, V> cachex(@Nullable String name) {
throwUnsupported();
http://git-wip-us.apache.org/repos/asf/ignite/blob/4865cf5b/modules/core/src/test/java/org/apache/ignite/testframework/junits/multijvm/IgniteProcessProxy.java
----------------------------------------------------------------------
diff --git a/modules/core/src/test/java/org/apache/ignite/testframework/junits/multijvm/IgniteProcessProxy.java b/modules/core/src/test/java/org/apache/ignite/testframework/junits/multijvm/IgniteProcessProxy.java
index 86a374a..35b123d 100644
--- a/modules/core/src/test/java/org/apache/ignite/testframework/junits/multijvm/IgniteProcessProxy.java
+++ b/modules/core/src/test/java/org/apache/ignite/testframework/junits/multijvm/IgniteProcessProxy.java
@@ -408,6 +408,11 @@ public class IgniteProcessProxy implements IgniteEx {
}
/** {@inheritDoc} */
+ @Override public <K extends GridCacheUtilityKey, V> IgniteInternalCache<K, V> persistentUtilityCache() {
+ throw new UnsupportedOperationException("Operation isn't supported yet.");
+ }
+
+ /** {@inheritDoc} */
@Nullable @Override public <K, V> IgniteInternalCache<K, V> cachex(@Nullable String name) {
throw new UnsupportedOperationException("Operation isn't supported yet.");
}