This is an automated email from the ASF dual-hosted git repository.

alexpl pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/ignite.git


The following commit(s) were added to refs/heads/master by this push:
     new 386ac3133df IGNITE-17344 Move "metrics" SQL system view to 
GridSystemViewManager - Fixes #10150.
386ac3133df is described below

commit 386ac3133df9f7505a557119a22086711bd2887a
Author: Aleksey Plekhanov <plehanov.a...@gmail.com>
AuthorDate: Mon Jul 11 18:08:32 2022 +0300

    IGNITE-17344 Move "metrics" SQL system view to GridSystemViewManager - 
Fixes #10150.
    
    Signed-off-by: Aleksey Plekhanov <plehanov.a...@gmail.com>
---
 .../integration/SystemViewsIntegrationTest.java    |  6 ++
 .../SystemViewRowAttributeWalkerGenerator.java     |  2 +
 .../managers/systemview/GridSystemViewManager.java |  2 +-
 .../SystemViewInnerCollectionsAdapter.java         | 11 ++-
 .../systemview/walker/MetricsViewWalker.java       | 48 +++++++++++
 .../ignite/spi/systemview/view/MetricsView.java    | 60 +++++++++++++
 .../systemview/FiltrableSystemViewLocal.java       |  2 +-
 .../managers/systemview/SqlViewExporterSpi.java    |  8 +-
 .../managers/systemview/SystemViewLocal.java       |  7 +-
 .../metric/sql/MetricRegistryLocalSystemView.java  | 99 ----------------------
 .../metric/sql/SqlViewMetricExporterSpi.java       | 22 ++---
 .../processors/query/h2/SchemaManager.java         | 16 ++--
 .../query/h2/sys/view/SqlSystemView.java           |  7 --
 13 files changed, 148 insertions(+), 142 deletions(-)

diff --git 
a/modules/calcite/src/test/java/org/apache/ignite/internal/processors/query/calcite/integration/SystemViewsIntegrationTest.java
 
b/modules/calcite/src/test/java/org/apache/ignite/internal/processors/query/calcite/integration/SystemViewsIntegrationTest.java
index ef58f0263db..58f5989f661 100644
--- 
a/modules/calcite/src/test/java/org/apache/ignite/internal/processors/query/calcite/integration/SystemViewsIntegrationTest.java
+++ 
b/modules/calcite/src/test/java/org/apache/ignite/internal/processors/query/calcite/integration/SystemViewsIntegrationTest.java
@@ -54,6 +54,12 @@ public class SystemViewsIntegrationTest extends 
AbstractBasicIntegrationTest {
             .returns(new 
Date(client.localNode().metrics().getNodeStartTime()));
     }
 
+    /** */
+    @Test
+    public void testMetricsView() {
+        assertQuery("SELECT value FROM sys.metrics WHERE name = 
'cluster.TotalClientNodes'").returns("1").check();
+    }
+
     /** */
     @Test
     public void testFiltrableView() {
diff --git 
a/modules/codegen/src/main/java/org/apache/ignite/codegen/SystemViewRowAttributeWalkerGenerator.java
 
b/modules/codegen/src/main/java/org/apache/ignite/codegen/SystemViewRowAttributeWalkerGenerator.java
index 8f5b0bfa390..98fb664843c 100644
--- 
a/modules/codegen/src/main/java/org/apache/ignite/codegen/SystemViewRowAttributeWalkerGenerator.java
+++ 
b/modules/codegen/src/main/java/org/apache/ignite/codegen/SystemViewRowAttributeWalkerGenerator.java
@@ -53,6 +53,7 @@ import org.apache.ignite.spi.systemview.view.ComputeJobView;
 import org.apache.ignite.spi.systemview.view.ComputeTaskView;
 import org.apache.ignite.spi.systemview.view.ContinuousQueryView;
 import org.apache.ignite.spi.systemview.view.MetastorageView;
+import org.apache.ignite.spi.systemview.view.MetricsView;
 import org.apache.ignite.spi.systemview.view.NodeAttributeView;
 import org.apache.ignite.spi.systemview.view.NodeMetricsView;
 import org.apache.ignite.spi.systemview.view.PagesListView;
@@ -143,6 +144,7 @@ public class SystemViewRowAttributeWalkerGenerator {
         gen.generateAndWrite(NodeMetricsView.class, DFLT_SRC_DIR);
         gen.generateAndWrite(CacheGroupIoView.class, DFLT_SRC_DIR);
         gen.generateAndWrite(SnapshotView.class, DFLT_SRC_DIR);
+        gen.generateAndWrite(MetricsView.class, DFLT_SRC_DIR);
 
         gen.generateAndWrite(SqlSchemaView.class, INDEXING_SRC_DIR);
         gen.generateAndWrite(SqlTableView.class, INDEXING_SRC_DIR);
diff --git 
a/modules/core/src/main/java/org/apache/ignite/internal/managers/systemview/GridSystemViewManager.java
 
b/modules/core/src/main/java/org/apache/ignite/internal/managers/systemview/GridSystemViewManager.java
index b47491ea4e2..f63bc53ab8e 100644
--- 
a/modules/core/src/main/java/org/apache/ignite/internal/managers/systemview/GridSystemViewManager.java
+++ 
b/modules/core/src/main/java/org/apache/ignite/internal/managers/systemview/GridSystemViewManager.java
@@ -125,7 +125,7 @@ public class GridSystemViewManager extends 
GridManagerAdapter<SystemViewExporter
      * @param <D> Collection data type.
      */
     public <C, R, D> void registerInnerCollectionView(String name, String 
desc, SystemViewRowAttributeWalker<R> walker,
-        Iterable<C> container, Function<C, Collection<D>> dataExtractor, 
BiFunction<C, D, R> rowFunc) {
+        Iterable<C> container, Function<C, Iterable<D>> dataExtractor, 
BiFunction<C, D, R> rowFunc) {
         registerView0(name, new SystemViewInnerCollectionsAdapter<>(name,
             desc,
             walker,
diff --git 
a/modules/core/src/main/java/org/apache/ignite/internal/managers/systemview/SystemViewInnerCollectionsAdapter.java
 
b/modules/core/src/main/java/org/apache/ignite/internal/managers/systemview/SystemViewInnerCollectionsAdapter.java
index 326a1d0f752..e2d8e63a3e6 100644
--- 
a/modules/core/src/main/java/org/apache/ignite/internal/managers/systemview/SystemViewInnerCollectionsAdapter.java
+++ 
b/modules/core/src/main/java/org/apache/ignite/internal/managers/systemview/SystemViewInnerCollectionsAdapter.java
@@ -37,7 +37,7 @@ public class SystemViewInnerCollectionsAdapter<C, R, D> 
extends AbstractSystemVi
     private final Iterable<C> containers;
 
     /** Function to extract collection of the data from container. */
-    private final Function<C, Collection<D>> dataExtractor;
+    private final Function<C, Iterable<D>> dataExtractor;
 
     /** Row function. */
     private final BiFunction<C, D, R> rowFunc;
@@ -53,7 +53,7 @@ public class SystemViewInnerCollectionsAdapter<C, R, D> 
extends AbstractSystemVi
     public SystemViewInnerCollectionsAdapter(String name, String desc,
         SystemViewRowAttributeWalker<R> walker,
         Iterable<C> containers,
-        Function<C, Collection<D>> dataExtractor,
+        Function<C, Iterable<D>> dataExtractor,
         BiFunction<C, D, R> rowFunc) {
         super(name, desc, walker);
 
@@ -66,8 +66,11 @@ public class SystemViewInnerCollectionsAdapter<C, R, D> 
extends AbstractSystemVi
     @Override public int size() {
         int sz = 0;
 
-        for (C c : containers)
-            sz += dataExtractor.apply(c).size();
+        for (C c : containers) {
+            Iterable<D> data = dataExtractor.apply(c);
+
+            sz += data instanceof Collection ? ((Collection<D>)data).size() : 
F.size(data.iterator());
+        }
 
         return sz;
     }
diff --git 
a/modules/core/src/main/java/org/apache/ignite/internal/managers/systemview/walker/MetricsViewWalker.java
 
b/modules/core/src/main/java/org/apache/ignite/internal/managers/systemview/walker/MetricsViewWalker.java
new file mode 100644
index 00000000000..883286ad63e
--- /dev/null
+++ 
b/modules/core/src/main/java/org/apache/ignite/internal/managers/systemview/walker/MetricsViewWalker.java
@@ -0,0 +1,48 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.ignite.internal.managers.systemview.walker;
+
+import org.apache.ignite.spi.systemview.view.MetricsView;
+import org.apache.ignite.spi.systemview.view.SystemViewRowAttributeWalker;
+
+/**
+ * Generated by {@code 
org.apache.ignite.codegen.SystemViewRowAttributeWalkerGenerator}.
+ * {@link MetricsView} attributes walker.
+ * 
+ * @see MetricsView
+ */
+public class MetricsViewWalker implements 
SystemViewRowAttributeWalker<MetricsView> {
+    /** {@inheritDoc} */
+    @Override public void visitAll(AttributeVisitor v) {
+        v.accept(0, "name", String.class);
+        v.accept(1, "value", String.class);
+        v.accept(2, "description", String.class);
+    }
+
+    /** {@inheritDoc} */
+    @Override public void visitAll(MetricsView row, AttributeWithValueVisitor 
v) {
+        v.accept(0, "name", String.class, row.name());
+        v.accept(1, "value", String.class, row.value());
+        v.accept(2, "description", String.class, row.description());
+    }
+
+    /** {@inheritDoc} */
+    @Override public int count() {
+        return 3;
+    }
+}
diff --git 
a/modules/core/src/main/java/org/apache/ignite/spi/systemview/view/MetricsView.java
 
b/modules/core/src/main/java/org/apache/ignite/spi/systemview/view/MetricsView.java
new file mode 100644
index 00000000000..39830758f9c
--- /dev/null
+++ 
b/modules/core/src/main/java/org/apache/ignite/spi/systemview/view/MetricsView.java
@@ -0,0 +1,60 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.ignite.spi.systemview.view;
+
+import org.apache.ignite.internal.managers.systemview.walker.Order;
+import org.apache.ignite.spi.metric.Metric;
+
+/**
+ * Metrics representation for a {@link SystemView}.
+ */
+public class MetricsView {
+    /** Metric. */
+    private final Metric metric;
+
+    /**
+     * @param metric Metric.
+     */
+    public MetricsView(Metric metric) {
+        this.metric = metric;
+    }
+
+    /**
+     * @return Metric name.
+     */
+    @Order
+    public String name() {
+        return metric.name();
+    }
+
+    /**
+     * @return Metric value.
+     */
+    @Order(1)
+    public String value() {
+        return metric.getAsString();
+    }
+
+    /**
+     * @return Metric description.
+     */
+    @Order(2)
+    public String description() {
+        return metric.description();
+    }
+}
diff --git 
a/modules/indexing/src/main/java/org/apache/ignite/internal/managers/systemview/FiltrableSystemViewLocal.java
 
b/modules/indexing/src/main/java/org/apache/ignite/internal/managers/systemview/FiltrableSystemViewLocal.java
index ba7f2d08354..91d6a0366bc 100644
--- 
a/modules/indexing/src/main/java/org/apache/ignite/internal/managers/systemview/FiltrableSystemViewLocal.java
+++ 
b/modules/indexing/src/main/java/org/apache/ignite/internal/managers/systemview/FiltrableSystemViewLocal.java
@@ -35,7 +35,7 @@ import org.h2.result.SearchRow;
 /**
  * Filtrable SQL system view to export {@link SystemView} data.
  */
-class FiltrableSystemViewLocal<R> extends SystemViewLocal<R> {
+public class FiltrableSystemViewLocal<R> extends SystemViewLocal<R> {
     /** View attribute names. */
     private final String[] attributeNames;
 
diff --git 
a/modules/indexing/src/main/java/org/apache/ignite/internal/managers/systemview/SqlViewExporterSpi.java
 
b/modules/indexing/src/main/java/org/apache/ignite/internal/managers/systemview/SqlViewExporterSpi.java
index 921b0c114d5..09b61e45564 100644
--- 
a/modules/indexing/src/main/java/org/apache/ignite/internal/managers/systemview/SqlViewExporterSpi.java
+++ 
b/modules/indexing/src/main/java/org/apache/ignite/internal/managers/systemview/SqlViewExporterSpi.java
@@ -23,7 +23,6 @@ import 
org.apache.ignite.internal.processors.query.h2.IgniteH2Indexing;
 import org.apache.ignite.internal.processors.query.h2.SchemaManager;
 import org.apache.ignite.spi.IgniteSpiContext;
 import org.apache.ignite.spi.IgniteSpiException;
-import org.apache.ignite.spi.systemview.view.FiltrableSystemView;
 import org.apache.ignite.spi.systemview.view.SystemView;
 
 import static 
org.apache.ignite.internal.processors.query.QueryUtils.SCHEMA_SYS;
@@ -59,11 +58,6 @@ class SqlViewExporterSpi extends 
AbstractSystemViewExporterSpi {
         if (log.isDebugEnabled())
             log.debug("Found new system view [name=" + sysView.name() + ']');
 
-        GridKernalContext ctx = ((IgniteEx)ignite()).context();
-
-        SystemViewLocal<?> view = sysView instanceof FiltrableSystemView ?
-            new FiltrableSystemViewLocal<>(ctx, sysView) : new 
SystemViewLocal<>(ctx, sysView);
-
-        mgr.createSystemView(SCHEMA_SYS, view);
+        mgr.createSystemView(SCHEMA_SYS, sysView);
     }
 }
diff --git 
a/modules/indexing/src/main/java/org/apache/ignite/internal/managers/systemview/SystemViewLocal.java
 
b/modules/indexing/src/main/java/org/apache/ignite/internal/managers/systemview/SystemViewLocal.java
index 21bd6880770..8350a81e29f 100644
--- 
a/modules/indexing/src/main/java/org/apache/ignite/internal/managers/systemview/SystemViewLocal.java
+++ 
b/modules/indexing/src/main/java/org/apache/ignite/internal/managers/systemview/SystemViewLocal.java
@@ -58,7 +58,7 @@ import static 
org.apache.ignite.internal.processors.metric.impl.MetricUtils.toSq
 /**
  * SQL system view to export {@link SystemView} data.
  */
-class SystemViewLocal<R> extends SqlAbstractLocalSystemView {
+public class SystemViewLocal<R> extends SqlAbstractLocalSystemView {
     /** */
     private static final Map<Class<?>, Function<Object, ? extends Value>> 
CLS_TO_VAL = new HashMap<>();
 
@@ -238,9 +238,4 @@ class SystemViewLocal<R> extends SqlAbstractLocalSystemView 
{
     @Override public boolean canGetRowCount() {
         return true;
     }
-
-    /** {@inheritDoc} */
-    @Override public @Nullable SystemView<?> getSystemView() {
-        return sysView;
-    }
 }
diff --git 
a/modules/indexing/src/main/java/org/apache/ignite/internal/processors/metric/sql/MetricRegistryLocalSystemView.java
 
b/modules/indexing/src/main/java/org/apache/ignite/internal/processors/metric/sql/MetricRegistryLocalSystemView.java
deleted file mode 100644
index b458cb795cf..00000000000
--- 
a/modules/indexing/src/main/java/org/apache/ignite/internal/processors/metric/sql/MetricRegistryLocalSystemView.java
+++ /dev/null
@@ -1,99 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.ignite.internal.processors.metric.sql;
-
-import java.util.Collections;
-import java.util.Iterator;
-import org.apache.ignite.internal.GridKernalContext;
-import 
org.apache.ignite.internal.processors.query.h2.sys.view.SqlAbstractLocalSystemView;
-import org.apache.ignite.spi.metric.Metric;
-import org.apache.ignite.spi.metric.ReadOnlyMetricManager;
-import org.apache.ignite.spi.metric.ReadOnlyMetricRegistry;
-import org.apache.ignite.spi.systemview.view.SystemView;
-import org.h2.engine.Session;
-import org.h2.result.Row;
-import org.h2.result.SearchRow;
-import org.h2.value.Value;
-import org.jetbrains.annotations.Nullable;
-
-/**
- * Sql view for exporting metrics.
- */
-class MetricRegistryLocalSystemView extends SqlAbstractLocalSystemView {
-    /** Metric registry. */
-    private ReadOnlyMetricManager mreg;
-
-    /**
-     * @param ctx Context.
-     * @param mreg Metric registry.
-     */
-    MetricRegistryLocalSystemView(GridKernalContext ctx, ReadOnlyMetricManager 
mreg) {
-        super(SqlViewMetricExporterSpi.SYS_VIEW_NAME, "Ignite metrics",
-            ctx,
-            newColumn("NAME", Value.STRING),
-            newColumn("VALUE", Value.STRING),
-            newColumn("DESCRIPTION", Value.STRING));
-
-        this.mreg = mreg;
-    }
-
-    /** {@inheritDoc} */
-    @Override public Iterator<Row> getRows(Session ses, SearchRow first, 
SearchRow last) {
-        return new Iterator<Row>() {
-            /** */
-            private Iterator<ReadOnlyMetricRegistry> grps = mreg.iterator();
-
-            /** */
-            private Iterator<Metric> curr = Collections.emptyIterator();
-
-            /** */
-            private boolean advance() {
-                while (grps.hasNext()) {
-                    ReadOnlyMetricRegistry mreg = grps.next();
-
-                    curr = mreg.iterator();
-
-                    if (curr.hasNext())
-                        return true;
-                }
-
-                return false;
-            }
-
-            /** {@inheritDoc} */
-            @Override public boolean hasNext() {
-                if (curr.hasNext())
-                    return true;
-
-                return advance();
-            }
-
-            /** {@inheritDoc} */
-            @Override public Row next() {
-                Metric m = curr.next();
-
-                return createRow(ses, m.name(), m.getAsString(), 
m.description());
-            }
-        };
-    }
-
-    /** {@inheritDoc} */
-    @Override public @Nullable SystemView<?> getSystemView() {
-        return null;
-    }
-}
diff --git 
a/modules/indexing/src/main/java/org/apache/ignite/internal/processors/metric/sql/SqlViewMetricExporterSpi.java
 
b/modules/indexing/src/main/java/org/apache/ignite/internal/processors/metric/sql/SqlViewMetricExporterSpi.java
index ec98c0c5e51..50145c572ac 100644
--- 
a/modules/indexing/src/main/java/org/apache/ignite/internal/processors/metric/sql/SqlViewMetricExporterSpi.java
+++ 
b/modules/indexing/src/main/java/org/apache/ignite/internal/processors/metric/sql/SqlViewMetricExporterSpi.java
@@ -20,24 +20,22 @@ package org.apache.ignite.internal.processors.metric.sql;
 import java.util.function.Predicate;
 import org.apache.ignite.internal.GridKernalContext;
 import org.apache.ignite.internal.IgniteEx;
-import org.apache.ignite.internal.processors.query.h2.IgniteH2Indexing;
-import org.apache.ignite.internal.processors.query.h2.SchemaManager;
+import org.apache.ignite.internal.managers.systemview.walker.MetricsViewWalker;
 import org.apache.ignite.spi.IgniteSpiAdapter;
 import org.apache.ignite.spi.IgniteSpiContext;
 import org.apache.ignite.spi.IgniteSpiException;
 import org.apache.ignite.spi.metric.MetricExporterSpi;
 import org.apache.ignite.spi.metric.ReadOnlyMetricManager;
 import org.apache.ignite.spi.metric.ReadOnlyMetricRegistry;
+import org.apache.ignite.spi.systemview.view.MetricsView;
 import org.jetbrains.annotations.Nullable;
 
-import static 
org.apache.ignite.internal.processors.query.QueryUtils.SCHEMA_SYS;
-
 /**
  * This SPI implementation exports metrics as SQL views.
  */
 class SqlViewMetricExporterSpi extends IgniteSpiAdapter implements 
MetricExporterSpi {
     /** System view name. */
-    public static final String SYS_VIEW_NAME = "METRICS";
+    public static final String SYS_VIEW_NAME = "metrics";
 
     /** Metric Registry. */
     private ReadOnlyMetricManager mreg;
@@ -46,12 +44,14 @@ class SqlViewMetricExporterSpi extends IgniteSpiAdapter 
implements MetricExporte
     @Override protected void onContextInitialized0(IgniteSpiContext spiCtx) 
throws IgniteSpiException {
         GridKernalContext ctx = ((IgniteEx)ignite()).context();
 
-        if (!(ctx.query().getIndexing() instanceof IgniteH2Indexing))
-            return;
-
-        SchemaManager mgr = 
((IgniteH2Indexing)ctx.query().getIndexing()).schemaManager();
-
-        mgr.createSystemView(SCHEMA_SYS, new 
MetricRegistryLocalSystemView(ctx, mreg));
+        ctx.systemView().registerInnerCollectionView(
+            SYS_VIEW_NAME,
+            "Ignite metrics",
+            new MetricsViewWalker(),
+            mreg,
+            r -> r,
+            (r, m) -> new MetricsView(m)
+        );
 
         if (log.isDebugEnabled())
             log.debug(SYS_VIEW_NAME + " SQL view for metrics created.");
diff --git 
a/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/SchemaManager.java
 
b/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/SchemaManager.java
index 0ba1fd46fe1..217b7d43c2b 100644
--- 
a/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/SchemaManager.java
+++ 
b/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/SchemaManager.java
@@ -40,6 +40,8 @@ import org.apache.ignite.IgniteLogger;
 import org.apache.ignite.IgniteSystemProperties;
 import org.apache.ignite.cache.query.annotations.QuerySqlFunction;
 import org.apache.ignite.internal.GridKernalContext;
+import org.apache.ignite.internal.managers.systemview.FiltrableSystemViewLocal;
+import org.apache.ignite.internal.managers.systemview.SystemViewLocal;
 import 
org.apache.ignite.internal.managers.systemview.walker.SqlIndexViewWalker;
 import 
org.apache.ignite.internal.managers.systemview.walker.SqlSchemaViewWalker;
 import 
org.apache.ignite.internal.managers.systemview.walker.SqlTableColumnViewWalker;
@@ -70,6 +72,7 @@ import 
org.apache.ignite.internal.processors.query.schema.SchemaIndexCacheVisito
 import org.apache.ignite.internal.util.GridConcurrentHashSet;
 import org.apache.ignite.internal.util.typedef.F;
 import org.apache.ignite.internal.util.typedef.internal.U;
+import org.apache.ignite.spi.systemview.view.FiltrableSystemView;
 import org.apache.ignite.spi.systemview.view.SqlIndexView;
 import org.apache.ignite.spi.systemview.view.SqlSchemaView;
 import org.apache.ignite.spi.systemview.view.SqlTableColumnView;
@@ -236,8 +239,7 @@ public class SchemaManager implements 
GridQuerySchemaManager {
      * @param schema Schema to create view in.
      * @param view System view.
      */
-    public void createSystemView(String schema, SqlSystemView view) {
-
+    public void createSystemView(String schema, SystemView<?> view) {
         boolean disabled = 
IgniteSystemProperties.getBoolean(IgniteSystemProperties.IGNITE_SQL_DISABLE_SYSTEM_VIEWS);
 
         if (disabled) {
@@ -249,19 +251,21 @@ public class SchemaManager implements 
GridQuerySchemaManager {
             return;
         }
 
+        SystemViewLocal<?> sysView = view instanceof FiltrableSystemView ?
+            new FiltrableSystemViewLocal<>(ctx, view) : new 
SystemViewLocal<>(ctx, view);
+
         try {
             synchronized (schemaMux) {
                 createSchema(schema, true);
             }
 
             try (H2PooledConnection c = connMgr.connection(schema)) {
-                SqlSystemTableEngine.registerView(c.connection(), view);
+                SqlSystemTableEngine.registerView(c.connection(), sysView);
 
-                systemViews.add(view);
+                systemViews.add(sysView);
             }
 
-            if (view.getSystemView() != null) // Skip pure H2-indexing views.
-                lsnr.onSystemViewCreated(schema, view.getSystemView());
+            lsnr.onSystemViewCreated(schema, view);
         }
         catch (IgniteCheckedException | SQLException e) {
             throw new IgniteException("Failed to register system view.", e);
diff --git 
a/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/sys/view/SqlSystemView.java
 
b/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/sys/view/SqlSystemView.java
index 5a795c4e5cd..86d249c8697 100644
--- 
a/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/sys/view/SqlSystemView.java
+++ 
b/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/sys/view/SqlSystemView.java
@@ -18,12 +18,10 @@
 package org.apache.ignite.internal.processors.query.h2.sys.view;
 
 import java.util.Iterator;
-import org.apache.ignite.spi.systemview.view.SystemView;
 import org.h2.engine.Session;
 import org.h2.result.Row;
 import org.h2.result.SearchRow;
 import org.h2.table.Column;
-import org.jetbrains.annotations.Nullable;
 
 /**
  * SQL system view.
@@ -84,9 +82,4 @@ public interface SqlSystemView {
      * @return {@code True} if view is distributed.
      */
     public boolean isDistributed();
-
-    /**
-     * @return Underlying system view. Or {@code null} if SQL view 
implementation is not based on system view.
-     */
-    public @Nullable SystemView<?> getSystemView();
 }

Reply via email to