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);

Reply via email to