Repository: ignite Updated Branches: refs/heads/master 8775d2c0e -> 08a87b6c9
ignite-6035 Clear indexes on cache clear/destroy Signed-off-by: Andrey Gura <[email protected]> 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 <[email protected]> Authored: Mon Aug 21 20:04:04 2017 +0300 Committer: Andrey Gura <[email protected]> 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);
