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/08/21 17:08:46 UTC
ignite git commit: ignite-6035 Clear indexes on cache clear/destroy
Repository: ignite
Updated Branches:
refs/heads/master 8775d2c0e -> 08a87b6c9
ignite-6035 Clear indexes on cache clear/destroy
Signed-off-by: Andrey Gura <ag...@apache.org>
Project: http://git-wip-us.apache.org/repos/asf/ignite/repo
Commit: http://git-wip-us.apache.org/repos/asf/ignite/commit/08a87b6c
Tree: http://git-wip-us.apache.org/repos/asf/ignite/tree/08a87b6c
Diff: http://git-wip-us.apache.org/repos/asf/ignite/diff/08a87b6c
Branch: refs/heads/master
Commit: 08a87b6c9e1f5546d78b63957171776aa22562bb
Parents: 8775d2c
Author: Dmitriy Govorukhin <dm...@gmail.com>
Authored: Mon Aug 21 20:04:04 2017 +0300
Committer: Andrey Gura <ag...@apache.org>
Committed: Mon Aug 21 20:04:04 2017 +0300
----------------------------------------------------------------------
.../processors/cache/GridCacheProcessor.java | 4 ++--
.../cache/persistence/MetadataStorage.java | 2 +-
.../processors/query/GridQueryIndexing.java | 3 ++-
.../processors/query/GridQueryProcessor.java | 21 ++++++++++++--------
...IgniteClientCacheInitializationFailTest.java | 2 +-
.../IgnitePersistentStoreCacheGroupsTest.java | 4 ++--
.../query/h2/opt/GridH2SpatialIndex.java | 4 ++--
.../internal/processors/query/h2/H2Schema.java | 2 ++
.../processors/query/h2/H2TableDescriptor.java | 3 +--
.../processors/query/h2/IgniteH2Indexing.java | 6 +++++-
.../query/h2/database/H2TreeIndex.java | 16 +++++++--------
.../query/h2/opt/GridH2IndexBase.java | 4 +++-
.../processors/query/h2/opt/GridH2Table.java | 16 +++++++++++++--
13 files changed, 55 insertions(+), 32 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/ignite/blob/08a87b6c/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 bf3ee0d..bd950fa 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
@@ -1016,7 +1016,7 @@ public class GridCacheProcessor extends GridProcessorAdapter {
assert desc != null : cctx.name();
- ctx.query().onCacheStop0(cctx.name());
+ ctx.query().onCacheStop0(cctx.name(), false);
ctx.query().onCacheStart0(cctx, desc.schema());
}
}
@@ -1142,7 +1142,7 @@ public class GridCacheProcessor extends GridProcessorAdapter {
cache.stop();
- ctx.kernalContext().query().onCacheStop(ctx);
+ ctx.kernalContext().query().onCacheStop(ctx, destroy);
if (isNearEnabled(ctx)) {
GridDhtCacheAdapter dht = ctx.near().dht();
http://git-wip-us.apache.org/repos/asf/ignite/blob/08a87b6c/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/MetadataStorage.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/MetadataStorage.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/MetadataStorage.java
index 359e54e..e667807 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/MetadataStorage.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/MetadataStorage.java
@@ -291,7 +291,7 @@ public class MetadataStorage implements MetaStore {
PageUtils.putUnsignedByte(dstPageAddr, dstOff, len);
dstOff++;
- PageHandler.copyMemory(srcPageAddr, dstPageAddr, srcOff, dstOff, len);
+ PageHandler.copyMemory(srcPageAddr, srcOff, dstPageAddr, dstOff, len);
srcOff += len;
dstOff += len;
http://git-wip-us.apache.org/repos/asf/ignite/blob/08a87b6c/modules/core/src/main/java/org/apache/ignite/internal/processors/query/GridQueryIndexing.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/query/GridQueryIndexing.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/query/GridQueryIndexing.java
index 9184327..8eecfc2 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/query/GridQueryIndexing.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/query/GridQueryIndexing.java
@@ -179,9 +179,10 @@ public interface GridQueryIndexing {
* Unregisters cache.
*
* @param cacheName Cache name.
+ * @param destroy Destroy flag.
* @throws IgniteCheckedException If failed to drop cache schema.
*/
- public void unregisterCache(String cacheName) throws IgniteCheckedException;
+ public void unregisterCache(String cacheName, boolean destroy) throws IgniteCheckedException;
/**
* Registers type if it was not known before or updates it otherwise.
http://git-wip-us.apache.org/repos/asf/ignite/blob/08a87b6c/modules/core/src/main/java/org/apache/ignite/internal/processors/query/GridQueryProcessor.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/query/GridQueryProcessor.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/query/GridQueryProcessor.java
index 1d154d3..d5ac8fc 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/query/GridQueryProcessor.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/query/GridQueryProcessor.java
@@ -65,7 +65,6 @@ import org.apache.ignite.internal.processors.cache.DynamicCacheDescriptor;
import org.apache.ignite.internal.processors.cache.GridCacheAdapter;
import org.apache.ignite.internal.processors.cache.GridCacheContext;
import org.apache.ignite.internal.processors.cache.KeyCacheObject;
-import org.apache.ignite.internal.processors.cache.StoredCacheData;
import org.apache.ignite.internal.processors.cache.query.CacheQueryFuture;
import org.apache.ignite.internal.processors.cache.query.CacheQueryType;
import org.apache.ignite.internal.processors.cache.query.GridCacheQueryType;
@@ -836,8 +835,9 @@ public class GridQueryProcessor extends GridProcessorAdapter {
/**
* @param cctx Cache context.
+ * @param destroy Destroy flag.
*/
- public void onCacheStop(GridCacheContext cctx) {
+ public void onCacheStop(GridCacheContext cctx, boolean destroy) {
if (idx == null)
return;
@@ -845,7 +845,7 @@ public class GridQueryProcessor extends GridProcessorAdapter {
return;
try {
- onCacheStop0(cctx.name());
+ onCacheStop0(cctx.name(), destroy);
}
finally {
busyLock.leaveBusy();
@@ -1371,8 +1371,12 @@ public class GridQueryProcessor extends GridProcessorAdapter {
* @param cands Candidates.
* @throws IgniteCheckedException If failed.
*/
- private void registerCache0(String cacheName, String schemaName, GridCacheContext<?, ?> cctx,
- Collection<QueryTypeCandidate> cands) throws IgniteCheckedException {
+ private void registerCache0(
+ String cacheName,
+ String schemaName,
+ GridCacheContext<?, ?> cctx,
+ Collection<QueryTypeCandidate> cands
+ ) throws IgniteCheckedException {
synchronized (stateMux) {
if (idx != null)
idx.registerCache(cacheName, schemaName, cctx);
@@ -1412,7 +1416,7 @@ public class GridQueryProcessor extends GridProcessorAdapter {
cacheNames.add(CU.mask(cacheName));
}
catch (IgniteCheckedException | RuntimeException e) {
- onCacheStop0(cacheName);
+ onCacheStop0(cacheName, true);
throw e;
}
@@ -1424,8 +1428,9 @@ public class GridQueryProcessor extends GridProcessorAdapter {
* Use with {@link #busyLock} where appropriate.
*
* @param cacheName Cache name.
+ * @param destroy Destroy flag.
*/
- public void onCacheStop0(String cacheName) {
+ public void onCacheStop0(String cacheName, boolean destroy) {
if (idx == null)
return;
@@ -1463,7 +1468,7 @@ public class GridQueryProcessor extends GridProcessorAdapter {
// Notify indexing.
try {
- idx.unregisterCache(cacheName);
+ idx.unregisterCache(cacheName, destroy);
}
catch (Exception e) {
U.error(log, "Failed to clear indexing on cache unregister (will ignore): " + cacheName, e);
http://git-wip-us.apache.org/repos/asf/ignite/blob/08a87b6c/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/IgniteClientCacheInitializationFailTest.java
----------------------------------------------------------------------
diff --git a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/IgniteClientCacheInitializationFailTest.java b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/IgniteClientCacheInitializationFailTest.java
index 51a806e..fa6dd70 100644
--- a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/IgniteClientCacheInitializationFailTest.java
+++ b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/IgniteClientCacheInitializationFailTest.java
@@ -291,7 +291,7 @@ public class IgniteClientCacheInitializationFailTest extends GridCommonAbstractT
}
/** {@inheritDoc} */
- @Override public void unregisterCache(String spaceName) throws IgniteCheckedException {
+ @Override public void unregisterCache(String spaceName, boolean destroy) throws IgniteCheckedException {
// No-op
}
http://git-wip-us.apache.org/repos/asf/ignite/blob/08a87b6c/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/persistence/IgnitePersistentStoreCacheGroupsTest.java
----------------------------------------------------------------------
diff --git a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/persistence/IgnitePersistentStoreCacheGroupsTest.java b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/persistence/IgnitePersistentStoreCacheGroupsTest.java
index b39b8cb..dc65177 100644
--- a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/persistence/IgnitePersistentStoreCacheGroupsTest.java
+++ b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/persistence/IgnitePersistentStoreCacheGroupsTest.java
@@ -186,12 +186,12 @@ public class IgnitePersistentStoreCacheGroupsTest extends GridCommonAbstractTest
startGrids(3);
- awaitPartitionMapExchange();
-
node = ignite(0);
node.active(true);
+ awaitPartitionMapExchange();
+
checkPersons(caches, node);
checkPersonsQuery(caches, node);
http://git-wip-us.apache.org/repos/asf/ignite/blob/08a87b6c/modules/geospatial/src/main/java/org/apache/ignite/internal/processors/query/h2/opt/GridH2SpatialIndex.java
----------------------------------------------------------------------
diff --git a/modules/geospatial/src/main/java/org/apache/ignite/internal/processors/query/h2/opt/GridH2SpatialIndex.java b/modules/geospatial/src/main/java/org/apache/ignite/internal/processors/query/h2/opt/GridH2SpatialIndex.java
index d83e860..d1f775e 100644
--- a/modules/geospatial/src/main/java/org/apache/ignite/internal/processors/query/h2/opt/GridH2SpatialIndex.java
+++ b/modules/geospatial/src/main/java/org/apache/ignite/internal/processors/query/h2/opt/GridH2SpatialIndex.java
@@ -249,7 +249,7 @@ public class GridH2SpatialIndex extends GridH2IndexBase implements SpatialIndex
}
/** {@inheritDoc} */
- @Override public void destroy() {
+ @Override public void destroy(boolean rmIndex) {
Lock l = lock.writeLock();
l.lock();
@@ -263,7 +263,7 @@ public class GridH2SpatialIndex extends GridH2IndexBase implements SpatialIndex
l.unlock();
}
- super.destroy();
+ super.destroy(rmIndex);
}
/** {@inheritDoc} */
http://git-wip-us.apache.org/repos/asf/ignite/blob/08a87b6c/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/H2Schema.java
----------------------------------------------------------------------
diff --git a/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/H2Schema.java b/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/H2Schema.java
index deca4b2..9c11099 100644
--- a/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/H2Schema.java
+++ b/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/H2Schema.java
@@ -114,6 +114,7 @@ public class H2Schema {
tbl.onDrop();
tbls.remove(tbl.tableName());
+
typeToTbl.remove(tbl.typeName());
}
@@ -125,6 +126,7 @@ public class H2Schema {
tbl.onDrop();
tbls.clear();
+
typeToTbl.clear();
}
}
http://git-wip-us.apache.org/repos/asf/ignite/blob/08a87b6c/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/H2TableDescriptor.java
----------------------------------------------------------------------
diff --git a/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/H2TableDescriptor.java b/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/H2TableDescriptor.java
index 589f90e..5abfc4b 100644
--- a/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/H2TableDescriptor.java
+++ b/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/H2TableDescriptor.java
@@ -310,9 +310,8 @@ public class H2TableDescriptor implements GridH2SystemIndexFactory {
return idx.createSortedIndex(schema, idxDesc.name(), tbl, false, cols, idxDesc.inlineSize());
}
- else if (idxDesc.type() == QueryIndexType.GEOSPATIAL) {
+ else if (idxDesc.type() == QueryIndexType.GEOSPATIAL)
return H2Utils.createSpatialIndex(tbl, idxDesc.name(), cols.toArray(new IndexColumn[cols.size()]));
- }
throw new IllegalStateException("Index type: " + idxDesc.type());
}
http://git-wip-us.apache.org/repos/asf/ignite/blob/08a87b6c/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/IgniteH2Indexing.java
----------------------------------------------------------------------
diff --git a/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/IgniteH2Indexing.java b/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/IgniteH2Indexing.java
index 6896f18..0f97a4b 100644
--- a/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/IgniteH2Indexing.java
+++ b/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/IgniteH2Indexing.java
@@ -2156,7 +2156,7 @@ public class IgniteH2Indexing implements GridQueryIndexing {
}
/** {@inheritDoc} */
- @Override public void unregisterCache(String cacheName) {
+ @Override public void unregisterCache(String cacheName, boolean destroy) {
String schemaName = schema(cacheName);
boolean dflt = isDefaultSchema(schemaName);
@@ -2176,6 +2176,10 @@ public class IgniteH2Indexing implements GridQueryIndexing {
for (H2TableDescriptor tbl : schema.tables()) {
if (F.eq(tbl.cache().name(), cacheName)) {
try {
+ boolean removeIdx = !ctx.cache().context().database().persistenceEnabled() || destroy;
+
+ tbl.table().setRemoveIndexOnDestroy(removeIdx);
+
dropTable(tbl);
}
catch (IgniteCheckedException e) {
http://git-wip-us.apache.org/repos/asf/ignite/blob/08a87b6c/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/database/H2TreeIndex.java
----------------------------------------------------------------------
diff --git a/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/database/H2TreeIndex.java b/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/database/H2TreeIndex.java
index d186623..de5dc75 100644
--- a/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/database/H2TreeIndex.java
+++ b/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/database/H2TreeIndex.java
@@ -306,17 +306,15 @@ public class H2TreeIndex extends GridH2IndexBase {
}
/** {@inheritDoc} */
- @Override public void destroy() {
+ @Override public void destroy(boolean rmvIndex) {
try {
- if (cctx.affinityNode()) {
- if (!cctx.kernalContext().cache().context().database().persistenceEnabled()) {
- for (int i = 0; i < segments.length; i++) {
- H2Tree tree = segments[i];
+ if (cctx.affinityNode() && rmvIndex) {
+ for (int i = 0; i < segments.length; i++) {
+ H2Tree tree = segments[i];
- tree.destroy();
+ tree.destroy();
- dropMetaPage(tree.getName(), i);
- }
+ dropMetaPage(tree.getName(), i);
}
}
}
@@ -324,7 +322,7 @@ public class H2TreeIndex extends GridH2IndexBase {
throw new IgniteException(e);
}
finally {
- super.destroy();
+ super.destroy(rmvIndex);
}
}
http://git-wip-us.apache.org/repos/asf/ignite/blob/08a87b6c/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/opt/GridH2IndexBase.java
----------------------------------------------------------------------
diff --git a/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/opt/GridH2IndexBase.java b/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/opt/GridH2IndexBase.java
index 5d5fb56..919ff58 100644
--- a/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/opt/GridH2IndexBase.java
+++ b/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/opt/GridH2IndexBase.java
@@ -157,8 +157,10 @@ public abstract class GridH2IndexBase extends BaseIndex {
* Attempts to destroys index and release all the resources.
* We use this method instead of {@link #close(Session)} because that method
* is used by H2 internally.
+ *
+ * @param rmv Flag remove.
*/
- public void destroy() {
+ public void destroy(boolean rmv) {
if (msgLsnr != null)
kernalContext().io().removeMessageListener(msgTopic, msgLsnr);
}
http://git-wip-us.apache.org/repos/asf/ignite/blob/08a87b6c/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/opt/GridH2Table.java
----------------------------------------------------------------------
diff --git a/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/opt/GridH2Table.java b/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/opt/GridH2Table.java
index f76cb5f..107e3bb 100644
--- a/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/opt/GridH2Table.java
+++ b/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/opt/GridH2Table.java
@@ -109,6 +109,9 @@ public class GridH2Table extends TableBase {
/** Identifier as string. */
private final String identifierStr;
+ /** Flag remove index or not when table will be destroyed. */
+ private volatile boolean rmIndex;
+
/**
* Creates table.
*
@@ -319,7 +322,7 @@ public class GridH2Table extends TableBase {
// We have to call destroy here if we are who has removed this index from the table.
if (idx instanceof GridH2IndexBase)
- ((GridH2IndexBase)idx).destroy();
+ ((GridH2IndexBase)idx).destroy(rmIndex);
}
}
@@ -355,13 +358,22 @@ public class GridH2Table extends TableBase {
for (int i = 1, len = idxs.size(); i < len; i++)
if (idxs.get(i) instanceof GridH2IndexBase)
- index(i).destroy();
+ index(i).destroy(rmIndex);
}
finally {
unlock(true);
}
}
+ /**
+ * If flag {@code True}, index will be destroyed when table {@link #destroy()}.
+ *
+ * @param rmIndex Flag indicate remove index on destroy or not.
+ */
+ public void setRemoveIndexOnDestroy(boolean rmIndex){
+ this.rmIndex = rmIndex;
+ }
+
/** {@inheritDoc} */
@Override public void unlock(Session ses) {
Boolean exclusive = sessions.remove(ses);