This is an automated email from the ASF dual-hosted git repository.
nizhikov 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 8701974 IGNITE-12224: SQL query & SQL query history system views.
(#7059)
8701974 is described below
commit 870197465da29ce66f333845845a536f9300c72e
Author: Nikolay <[email protected]>
AuthorDate: Tue Nov 19 21:14:46 2019 +0300
IGNITE-12224: SQL query & SQL query history system views. (#7059)
---
.../internal/jdbc2/JdbcMetadataSelfTest.java | 6 +-
.../thin/JdbcThinAffinityAwarenessSelfTest.java | 4 +-
...cThinAffinityAwarenessTransactionsSelfTest.java | 4 +-
.../ignite/jdbc/thin/JdbcThinMetadataSelfTest.java | 73 +++++++--------
.../SystemViewRowAttributeWalkerGenerator.java | 4 +
.../walker/SqlQueryHistoryViewWalker.java | 59 ++++++++++++
.../systemview/walker/SqlQueryViewWalker.java | 58 ++++++++++++
.../continuous/GridContinuousProcessor.java | 2 +-
.../processors/query/GridRunningQueryInfo.java | 11 ++-
...{QueryHistoryMetrics.java => QueryHistory.java} | 22 ++---
...HistoryMetricsKey.java => QueryHistoryKey.java} | 6 +-
.../processors/query/QueryHistoryTracker.java | 42 ++++-----
.../processors/query/RunningQueryManager.java | 35 ++++++-
.../spi/systemview/view/SqlQueryHistoryView.java | 85 +++++++++++++++++
.../ignite/spi/systemview/view/SqlQueryView.java | 79 ++++++++++++++++
.../processors/query/h2/IgniteH2Indexing.java | 14 ++-
.../processors/query/h2/SchemaManager.java | 6 +-
.../sys/view/SqlSystemViewQueryHistoryMetrics.java | 92 -------------------
.../h2/sys/view/SqlSystemViewRunningQueries.java | 101 ---------------------
.../cache/metric/SqlViewExporterSpiTest.java | 16 ++--
.../processors/query/SqlQueryHistorySelfTest.java | 16 ++--
.../processors/query/SqlSystemViewsSelfTest.java | 10 +-
22 files changed, 436 insertions(+), 309 deletions(-)
diff --git
a/modules/clients/src/test/java/org/apache/ignite/internal/jdbc2/JdbcMetadataSelfTest.java
b/modules/clients/src/test/java/org/apache/ignite/internal/jdbc2/JdbcMetadataSelfTest.java
index f13c6e3..ba690c5 100755
---
a/modules/clients/src/test/java/org/apache/ignite/internal/jdbc2/JdbcMetadataSelfTest.java
+++
b/modules/clients/src/test/java/org/apache/ignite/internal/jdbc2/JdbcMetadataSelfTest.java
@@ -324,8 +324,8 @@ public class JdbcMetadataSelfTest extends
GridCommonAbstractTest {
"CACHE_GROUPS",
"INDEXES",
"LOCAL_CACHE_GROUPS_IO",
- "LOCAL_SQL_QUERY_HISTORY",
- "LOCAL_SQL_RUNNING_QUERIES",
+ "SQL_QUERIES_HISTORY",
+ "SQL_QUERIES",
"SCAN_QUERIES",
"NODES",
"NODE_ATTRIBUTES",
@@ -339,7 +339,7 @@ public class JdbcMetadataSelfTest extends
GridCommonAbstractTest {
"VIEWS",
"TABLE_COLUMNS",
"VIEW_COLUMNS",
- "QUERY_CONTINUOUS"
+ "CONTINUOUS_QUERIES"
));
Set<String> actViews = new HashSet<>();
diff --git
a/modules/clients/src/test/java/org/apache/ignite/jdbc/thin/JdbcThinAffinityAwarenessSelfTest.java
b/modules/clients/src/test/java/org/apache/ignite/jdbc/thin/JdbcThinAffinityAwarenessSelfTest.java
index 3102f48..22e5d0d 100644
---
a/modules/clients/src/test/java/org/apache/ignite/jdbc/thin/JdbcThinAffinityAwarenessSelfTest.java
+++
b/modules/clients/src/test/java/org/apache/ignite/jdbc/thin/JdbcThinAffinityAwarenessSelfTest.java
@@ -43,7 +43,7 @@ import org.apache.ignite.configuration.IgniteConfiguration;
import org.apache.ignite.internal.jdbc.thin.AffinityCache;
import org.apache.ignite.internal.jdbc.thin.JdbcThinPartitionResultDescriptor;
import org.apache.ignite.internal.jdbc.thin.QualifiedSQLQuery;
-import org.apache.ignite.internal.processors.query.QueryHistoryMetrics;
+import org.apache.ignite.internal.processors.query.QueryHistory;
import org.apache.ignite.internal.processors.query.h2.IgniteH2Indexing;
import org.apache.ignite.internal.sql.optimizer.affinity.PartitionResult;
import org.apache.ignite.internal.util.GridBoundedLinkedHashMap;
@@ -716,7 +716,7 @@ public class JdbcThinAffinityAwarenessSelfTest extends
JdbcThinAbstractSelfTest
int nonEmptyMetricsCntr = 0;
int qryExecutionsCntr = 0;
for (int i = 0; i < NODES_CNT; i++) {
- Collection<QueryHistoryMetrics> metrics =
((IgniteH2Indexing)grid(i).context().query().getIndexing())
+ Collection<QueryHistory> metrics =
((IgniteH2Indexing)grid(i).context().query().getIndexing())
.runningQueryManager().queryHistoryMetrics().values();
if (!metrics.isEmpty()) {
diff --git
a/modules/clients/src/test/java/org/apache/ignite/jdbc/thin/JdbcThinAffinityAwarenessTransactionsSelfTest.java
b/modules/clients/src/test/java/org/apache/ignite/jdbc/thin/JdbcThinAffinityAwarenessTransactionsSelfTest.java
index 98c5705..dae87ed 100644
---
a/modules/clients/src/test/java/org/apache/ignite/jdbc/thin/JdbcThinAffinityAwarenessTransactionsSelfTest.java
+++
b/modules/clients/src/test/java/org/apache/ignite/jdbc/thin/JdbcThinAffinityAwarenessTransactionsSelfTest.java
@@ -29,7 +29,7 @@ import org.apache.ignite.configuration.CacheConfiguration;
import org.apache.ignite.configuration.IgniteConfiguration;
import org.apache.ignite.internal.binary.BinaryMarshaller;
import org.apache.ignite.internal.processors.query.NestedTxMode;
-import org.apache.ignite.internal.processors.query.QueryHistoryMetrics;
+import org.apache.ignite.internal.processors.query.QueryHistory;
import org.apache.ignite.internal.processors.query.h2.IgniteH2Indexing;
import org.apache.ignite.internal.util.typedef.internal.U;
import org.apache.ignite.testframework.GridStringLogger;
@@ -244,7 +244,7 @@ public class JdbcThinAffinityAwarenessTransactionsSelfTest
extends JdbcThinAbstr
int qryExecutionsCntr = 0;
for (int i = 0; i < NODES_CNT; i++) {
- Collection<QueryHistoryMetrics> metrics =
((IgniteH2Indexing)grid(i).context().query().getIndexing())
+ Collection<QueryHistory> metrics =
((IgniteH2Indexing)grid(i).context().query().getIndexing())
.runningQueryManager().queryHistoryMetrics().values();
if (!metrics.isEmpty()) {
diff --git
a/modules/clients/src/test/java/org/apache/ignite/jdbc/thin/JdbcThinMetadataSelfTest.java
b/modules/clients/src/test/java/org/apache/ignite/jdbc/thin/JdbcThinMetadataSelfTest.java
index 0b5e3d2..2caf3c6 100644
---
a/modules/clients/src/test/java/org/apache/ignite/jdbc/thin/JdbcThinMetadataSelfTest.java
+++
b/modules/clients/src/test/java/org/apache/ignite/jdbc/thin/JdbcThinMetadataSelfTest.java
@@ -333,14 +333,14 @@ public class JdbcThinMetadataSelfTest extends
JdbcThinAbstractSelfTest {
"SYS.CACHE_GROUPS",
"SYS.CACHES",
"SYS.TASKS",
- "SYS.LOCAL_SQL_QUERY_HISTORY",
+ "SYS.SQL_QUERIES_HISTORY",
"SYS.NODES",
"SYS.SCHEMAS",
"SYS.NODE_METRICS",
"SYS.BASELINE_NODES",
"SYS.INDEXES",
"SYS.LOCAL_CACHE_GROUPS_IO",
- "SYS.LOCAL_SQL_RUNNING_QUERIES",
+ "SYS.SQL_QUERIES",
"SYS.SCAN_QUERIES",
"SYS.NODE_ATTRIBUTES",
"SYS.TABLES",
@@ -349,7 +349,7 @@ public class JdbcThinMetadataSelfTest extends
JdbcThinAbstractSelfTest {
"SYS.VIEWS",
"SYS.TABLE_COLUMNS",
"SYS.VIEW_COLUMNS",
- "SYS.QUERY_CONTINUOUS"
+ "SYS.CONTINUOUS_QUERIES"
))
);
}
@@ -641,20 +641,21 @@ public class JdbcThinMetadataSelfTest extends
JdbcThinAbstractSelfTest {
"SYS.LOCAL_CACHE_GROUPS_IO.CACHE_GROUP_NAME.null.2147483647",
"SYS.LOCAL_CACHE_GROUPS_IO.PHYSICAL_READS.null.19",
"SYS.LOCAL_CACHE_GROUPS_IO.LOGICAL_READS.null.19",
- "SYS.LOCAL_SQL_QUERY_HISTORY.SCHEMA_NAME.null.2147483647",
- "SYS.LOCAL_SQL_QUERY_HISTORY.SQL.null.2147483647",
- "SYS.LOCAL_SQL_QUERY_HISTORY.LOCAL.null.1",
- "SYS.LOCAL_SQL_QUERY_HISTORY.EXECUTIONS.null.19",
- "SYS.LOCAL_SQL_QUERY_HISTORY.FAILURES.null.19",
- "SYS.LOCAL_SQL_QUERY_HISTORY.DURATION_MIN.null.19",
- "SYS.LOCAL_SQL_QUERY_HISTORY.DURATION_MAX.null.19",
- "SYS.LOCAL_SQL_QUERY_HISTORY.LAST_START_TIME.null.26.6",
- "SYS.LOCAL_SQL_RUNNING_QUERIES.QUERY_ID.null.2147483647",
- "SYS.LOCAL_SQL_RUNNING_QUERIES.SQL.null.2147483647",
- "SYS.LOCAL_SQL_RUNNING_QUERIES.SCHEMA_NAME.null.2147483647",
- "SYS.LOCAL_SQL_RUNNING_QUERIES.LOCAL.null.1",
- "SYS.LOCAL_SQL_RUNNING_QUERIES.START_TIME.null.26.6",
- "SYS.LOCAL_SQL_RUNNING_QUERIES.DURATION.null.19",
+ "SYS.SQL_QUERIES_HISTORY.SCHEMA_NAME.null.2147483647",
+ "SYS.SQL_QUERIES_HISTORY.SQL.null.2147483647",
+ "SYS.SQL_QUERIES_HISTORY.LOCAL.null.1",
+ "SYS.SQL_QUERIES_HISTORY.EXECUTIONS.null.19",
+ "SYS.SQL_QUERIES_HISTORY.FAILURES.null.19",
+ "SYS.SQL_QUERIES_HISTORY.DURATION_MIN.null.19",
+ "SYS.SQL_QUERIES_HISTORY.DURATION_MAX.null.19",
+ "SYS.SQL_QUERIES_HISTORY.LAST_START_TIME.null.26.6",
+ "SYS.SQL_QUERIES.QUERY_ID.null.2147483647",
+ "SYS.SQL_QUERIES.SQL.null.2147483647",
+ "SYS.SQL_QUERIES.SCHEMA_NAME.null.2147483647",
+ "SYS.SQL_QUERIES.LOCAL.null.1",
+ "SYS.SQL_QUERIES.START_TIME.null.26.6",
+ "SYS.SQL_QUERIES.DURATION.null.19",
+ "SYS.SQL_QUERIES.ORIGIN_NODE_ID.null.2147483647",
"SYS.SCAN_QUERIES.START_TIME.null.19",
"SYS.SCAN_QUERIES.TRANSFORMER.null.2147483647",
"SYS.SCAN_QUERIES.LOCAL.null.1",
@@ -832,25 +833,25 @@ public class JdbcThinMetadataSelfTest extends
JdbcThinAbstractSelfTest {
"SYS.VIEW_COLUMNS.DEFAULT_VALUE.null.2147483647",
"SYS.VIEW_COLUMNS.SCALE.null.10",
"SYS.VIEW_COLUMNS.VIEW_NAME.null.2147483647",
- "SYS.QUERY_CONTINUOUS.NOTIFY_EXISTING.null.1",
- "SYS.QUERY_CONTINUOUS.OLD_VALUE_REQUIRED.null.1",
- "SYS.QUERY_CONTINUOUS.KEEP_BINARY.null.1",
- "SYS.QUERY_CONTINUOUS.IS_MESSAGING.null.1",
- "SYS.QUERY_CONTINUOUS.AUTO_UNSUBSCRIBE.null.1",
- "SYS.QUERY_CONTINUOUS.LAST_SEND_TIME.null.19",
-
"SYS.QUERY_CONTINUOUS.LOCAL_TRANSFORMED_LISTENER.null.2147483647",
- "SYS.QUERY_CONTINUOUS.TOPIC.null.2147483647",
- "SYS.QUERY_CONTINUOUS.BUFFER_SIZE.null.10",
- "SYS.QUERY_CONTINUOUS.REMOTE_TRANSFORMER.null.2147483647",
- "SYS.QUERY_CONTINUOUS.DELAYED_REGISTER.null.1",
- "SYS.QUERY_CONTINUOUS.IS_QUERY.null.1",
- "SYS.QUERY_CONTINUOUS.NODE_ID.null.2147483647",
- "SYS.QUERY_CONTINUOUS.INTERVAL.null.19",
- "SYS.QUERY_CONTINUOUS.IS_EVENTS.null.1",
- "SYS.QUERY_CONTINUOUS.ROUTINE_ID.null.2147483647",
- "SYS.QUERY_CONTINUOUS.REMOTE_FILTER.null.2147483647",
- "SYS.QUERY_CONTINUOUS.CACHE_NAME.null.2147483647",
- "SYS.QUERY_CONTINUOUS.LOCAL_LISTENER.null.2147483647"
+ "SYS.CONTINUOUS_QUERIES.NOTIFY_EXISTING.null.1",
+ "SYS.CONTINUOUS_QUERIES.OLD_VALUE_REQUIRED.null.1",
+ "SYS.CONTINUOUS_QUERIES.KEEP_BINARY.null.1",
+ "SYS.CONTINUOUS_QUERIES.IS_MESSAGING.null.1",
+ "SYS.CONTINUOUS_QUERIES.AUTO_UNSUBSCRIBE.null.1",
+ "SYS.CONTINUOUS_QUERIES.LAST_SEND_TIME.null.19",
+
"SYS.CONTINUOUS_QUERIES.LOCAL_TRANSFORMED_LISTENER.null.2147483647",
+ "SYS.CONTINUOUS_QUERIES.TOPIC.null.2147483647",
+ "SYS.CONTINUOUS_QUERIES.BUFFER_SIZE.null.10",
+ "SYS.CONTINUOUS_QUERIES.REMOTE_TRANSFORMER.null.2147483647",
+ "SYS.CONTINUOUS_QUERIES.DELAYED_REGISTER.null.1",
+ "SYS.CONTINUOUS_QUERIES.IS_QUERY.null.1",
+ "SYS.CONTINUOUS_QUERIES.NODE_ID.null.2147483647",
+ "SYS.CONTINUOUS_QUERIES.INTERVAL.null.19",
+ "SYS.CONTINUOUS_QUERIES.IS_EVENTS.null.1",
+ "SYS.CONTINUOUS_QUERIES.ROUTINE_ID.null.2147483647",
+ "SYS.CONTINUOUS_QUERIES.REMOTE_FILTER.null.2147483647",
+ "SYS.CONTINUOUS_QUERIES.CACHE_NAME.null.2147483647",
+ "SYS.CONTINUOUS_QUERIES.LOCAL_LISTENER.null.2147483647"
));
Assert.assertEquals(expectedCols, actualSystemCols);
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 a04bada..1178a26 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
@@ -44,6 +44,8 @@ import
org.apache.ignite.spi.systemview.view.ContinuousQueryView;
import org.apache.ignite.spi.systemview.view.ScanQueryView;
import org.apache.ignite.spi.systemview.view.ServiceView;
import org.apache.ignite.spi.systemview.view.SqlIndexView;
+import org.apache.ignite.spi.systemview.view.SqlQueryHistoryView;
+import org.apache.ignite.spi.systemview.view.SqlQueryView;
import org.apache.ignite.spi.systemview.view.SqlSchemaView;
import org.apache.ignite.spi.systemview.view.SqlTableColumnView;
import org.apache.ignite.spi.systemview.view.SqlTableView;
@@ -90,6 +92,8 @@ public class SystemViewRowAttributeWalkerGenerator {
gen.generateAndWrite(ContinuousQueryView.class, DFLT_SRC_DIR);
gen.generateAndWrite(ClusterNodeView.class, DFLT_SRC_DIR);
gen.generateAndWrite(ScanQueryView.class, DFLT_SRC_DIR);
+ gen.generateAndWrite(SqlQueryView.class, DFLT_SRC_DIR);
+ gen.generateAndWrite(SqlQueryHistoryView.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/walker/SqlQueryHistoryViewWalker.java
b/modules/core/src/main/java/org/apache/ignite/internal/managers/systemview/walker/SqlQueryHistoryViewWalker.java
new file mode 100644
index 0000000..38c99b3
--- /dev/null
+++
b/modules/core/src/main/java/org/apache/ignite/internal/managers/systemview/walker/SqlQueryHistoryViewWalker.java
@@ -0,0 +1,59 @@
+/*
+ * 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 java.util.Date;
+import org.apache.ignite.spi.systemview.view.SqlQueryHistoryView;
+import org.apache.ignite.spi.systemview.view.SystemViewRowAttributeWalker;
+
+/**
+ * Generated by {@code
org.apache.ignite.codegen.SystemViewRowAttributeWalkerGenerator}.
+ * {@link SqlQueryHistoryView} attributes walker.
+ *
+ * @see SqlQueryHistoryView
+ */
+public class SqlQueryHistoryViewWalker implements
SystemViewRowAttributeWalker<SqlQueryHistoryView> {
+ /** {@inheritDoc} */
+ @Override public void visitAll(AttributeVisitor v) {
+ v.accept(0, "schemaName", String.class);
+ v.accept(1, "sql", String.class);
+ v.accept(2, "local", boolean.class);
+ v.accept(3, "executions", long.class);
+ v.accept(4, "failures", long.class);
+ v.accept(5, "durationMin", long.class);
+ v.accept(6, "durationMax", long.class);
+ v.accept(7, "lastStartTime", Date.class);
+ }
+
+ /** {@inheritDoc} */
+ @Override public void visitAll(SqlQueryHistoryView row,
AttributeWithValueVisitor v) {
+ v.accept(0, "schemaName", String.class, row.schemaName());
+ v.accept(1, "sql", String.class, row.sql());
+ v.acceptBoolean(2, "local", row.local());
+ v.acceptLong(3, "executions", row.executions());
+ v.acceptLong(4, "failures", row.failures());
+ v.acceptLong(5, "durationMin", row.durationMin());
+ v.acceptLong(6, "durationMax", row.durationMax());
+ v.accept(7, "lastStartTime", Date.class, row.lastStartTime());
+ }
+
+ /** {@inheritDoc} */
+ @Override public int count() {
+ return 8;
+ }
+}
diff --git
a/modules/core/src/main/java/org/apache/ignite/internal/managers/systemview/walker/SqlQueryViewWalker.java
b/modules/core/src/main/java/org/apache/ignite/internal/managers/systemview/walker/SqlQueryViewWalker.java
new file mode 100644
index 0000000..c7f08bf
--- /dev/null
+++
b/modules/core/src/main/java/org/apache/ignite/internal/managers/systemview/walker/SqlQueryViewWalker.java
@@ -0,0 +1,58 @@
+/*
+ * 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 java.util.Date;
+import java.util.UUID;
+import org.apache.ignite.spi.systemview.view.SqlQueryView;
+import org.apache.ignite.spi.systemview.view.SystemViewRowAttributeWalker;
+
+/**
+ * Generated by {@code
org.apache.ignite.codegen.SystemViewRowAttributeWalkerGenerator}.
+ * {@link SqlQueryView} attributes walker.
+ *
+ * @see SqlQueryView
+ */
+public class SqlQueryViewWalker implements
SystemViewRowAttributeWalker<SqlQueryView> {
+ /** {@inheritDoc} */
+ @Override public void visitAll(AttributeVisitor v) {
+ v.accept(0, "queryId", String.class);
+ v.accept(1, "sql", String.class);
+ v.accept(2, "originNodeId", UUID.class);
+ v.accept(3, "startTime", Date.class);
+ v.accept(4, "duration", long.class);
+ v.accept(5, "local", boolean.class);
+ v.accept(6, "schemaName", String.class);
+ }
+
+ /** {@inheritDoc} */
+ @Override public void visitAll(SqlQueryView row, AttributeWithValueVisitor
v) {
+ v.accept(0, "queryId", String.class, row.queryId());
+ v.accept(1, "sql", String.class, row.sql());
+ v.accept(2, "originNodeId", UUID.class, row.originNodeId());
+ v.accept(3, "startTime", Date.class, row.startTime());
+ v.acceptLong(4, "duration", row.duration());
+ v.acceptBoolean(5, "local", row.local());
+ v.accept(6, "schemaName", String.class, row.schemaName());
+ }
+
+ /** {@inheritDoc} */
+ @Override public int count() {
+ return 7;
+ }
+}
diff --git
a/modules/core/src/main/java/org/apache/ignite/internal/processors/continuous/GridContinuousProcessor.java
b/modules/core/src/main/java/org/apache/ignite/internal/processors/continuous/GridContinuousProcessor.java
index 36d2b22..f6396ca 100644
---
a/modules/core/src/main/java/org/apache/ignite/internal/processors/continuous/GridContinuousProcessor.java
+++
b/modules/core/src/main/java/org/apache/ignite/internal/processors/continuous/GridContinuousProcessor.java
@@ -115,7 +115,7 @@ import static
org.apache.ignite.internal.processors.metric.impl.MetricUtils.metr
*/
public class GridContinuousProcessor extends GridProcessorAdapter {
/** */
- public static final String CQ_SYS_VIEW = metricName("query", "continuous");
+ public static final String CQ_SYS_VIEW = metricName("continuous",
"queries");
/** */
public static final String CQ_SYS_VIEW_DESC = "Continuous queries";
diff --git
a/modules/core/src/main/java/org/apache/ignite/internal/processors/query/GridRunningQueryInfo.java
b/modules/core/src/main/java/org/apache/ignite/internal/processors/query/GridRunningQueryInfo.java
index 09b40d1..8948b98 100644
---
a/modules/core/src/main/java/org/apache/ignite/internal/processors/query/GridRunningQueryInfo.java
+++
b/modules/core/src/main/java/org/apache/ignite/internal/processors/query/GridRunningQueryInfo.java
@@ -64,7 +64,7 @@ public class GridRunningQueryInfo {
* @param loc Local query flag.
*/
public GridRunningQueryInfo(
- Long id,
+ long id,
UUID nodeId,
String qry,
GridCacheQueryType qryType,
@@ -86,7 +86,7 @@ public class GridRunningQueryInfo {
/**
* @return Query ID.
*/
- public Long id() {
+ public long id() {
return id;
}
@@ -162,4 +162,11 @@ public class GridRunningQueryInfo {
public boolean local() {
return loc;
}
+
+ /**
+ * @return Originating node ID.
+ */
+ public UUID nodeId() {
+ return nodeId;
+ }
}
diff --git
a/modules/core/src/main/java/org/apache/ignite/internal/processors/query/QueryHistoryMetrics.java
b/modules/core/src/main/java/org/apache/ignite/internal/processors/query/QueryHistory.java
similarity index 87%
rename from
modules/core/src/main/java/org/apache/ignite/internal/processors/query/QueryHistoryMetrics.java
rename to
modules/core/src/main/java/org/apache/ignite/internal/processors/query/QueryHistory.java
index 1d494ac..1e5ec3f 100644
---
a/modules/core/src/main/java/org/apache/ignite/internal/processors/query/QueryHistoryMetrics.java
+++
b/modules/core/src/main/java/org/apache/ignite/internal/processors/query/QueryHistory.java
@@ -27,16 +27,16 @@ import org.jsr166.ConcurrentLinkedDeque8;
/**
* Query history metrics.
*/
-public class QueryHistoryMetrics {
+public class QueryHistory {
/** Link to internal node in eviction deque. */
@GridToStringExclude
- private final
AtomicReference<ConcurrentLinkedDeque8.Node<QueryHistoryMetrics>> linkRef;
+ private final AtomicReference<ConcurrentLinkedDeque8.Node<QueryHistory>>
linkRef;
/** Query history metrics immutable wrapper. */
private volatile QueryHistoryMetricsValue val;
/** Query history metrics group key. */
- private final QueryHistoryMetricsKey key;
+ private final QueryHistoryKey key;
/**
* Constructor with metrics.
@@ -48,8 +48,8 @@ public class QueryHistoryMetrics {
* @param duration Duration of query execution.
* @param failed {@code True} query executed unsuccessfully {@code false}
otherwise.
*/
- public QueryHistoryMetrics(String qry, String schema, boolean loc, long
startTime, long duration, boolean failed) {
- key = new QueryHistoryMetricsKey(qry, schema, loc);
+ public QueryHistory(String qry, String schema, boolean loc, long
startTime, long duration, boolean failed) {
+ key = new QueryHistoryKey(qry, schema, loc);
long failures = failed ? 1 : 0;
@@ -61,7 +61,7 @@ public class QueryHistoryMetrics {
/**
* @return Metrics group key.
*/
- public QueryHistoryMetricsKey key() {
+ public QueryHistoryKey key() {
return key;
}
@@ -71,7 +71,7 @@ public class QueryHistoryMetrics {
* @param m Other metrics to take into account.
* @return Aggregated metrics.
*/
- public QueryHistoryMetrics aggregateWithNew(QueryHistoryMetrics m) {
+ public QueryHistory aggregateWithNew(QueryHistory m) {
val = new QueryHistoryMetricsValue(
val.execs() + m.executions(),
val.failures() + m.failures(),
@@ -151,7 +151,7 @@ public class QueryHistoryMetrics {
/**
* @return Link to internal node in eviction deque.
*/
- @Nullable public ConcurrentLinkedDeque8.Node<QueryHistoryMetrics> link() {
+ @Nullable public ConcurrentLinkedDeque8.Node<QueryHistory> link() {
return linkRef.get();
}
@@ -162,13 +162,13 @@ public class QueryHistoryMetrics {
* @param updatedLink New link which should be set.
* @return {@code true} If link has been updated.
*/
- public boolean
replaceLink(ConcurrentLinkedDeque8.Node<QueryHistoryMetrics> expLink,
- ConcurrentLinkedDeque8.Node<QueryHistoryMetrics> updatedLink) {
+ public boolean replaceLink(ConcurrentLinkedDeque8.Node<QueryHistory>
expLink,
+ ConcurrentLinkedDeque8.Node<QueryHistory> updatedLink) {
return linkRef.compareAndSet(expLink, updatedLink);
}
/** {@inheritDoc} */
@Override public String toString() {
- return S.toString(QueryHistoryMetrics.class, this);
+ return S.toString(QueryHistory.class, this);
}
}
diff --git
a/modules/core/src/main/java/org/apache/ignite/internal/processors/query/QueryHistoryMetricsKey.java
b/modules/core/src/main/java/org/apache/ignite/internal/processors/query/QueryHistoryKey.java
similarity index 92%
rename from
modules/core/src/main/java/org/apache/ignite/internal/processors/query/QueryHistoryMetricsKey.java
rename to
modules/core/src/main/java/org/apache/ignite/internal/processors/query/QueryHistoryKey.java
index 890c574..7052ff7 100644
---
a/modules/core/src/main/java/org/apache/ignite/internal/processors/query/QueryHistoryMetricsKey.java
+++
b/modules/core/src/main/java/org/apache/ignite/internal/processors/query/QueryHistoryKey.java
@@ -23,7 +23,7 @@ import org.apache.ignite.internal.util.typedef.F;
/**
* Immutable query metrics key used to group metrics.
*/
-public class QueryHistoryMetricsKey {
+public class QueryHistoryKey {
/** Textual query representation. */
private final String qry;
@@ -43,7 +43,7 @@ public class QueryHistoryMetricsKey {
* @param schema Schema.
* @param loc Local flag of execution query.
*/
- public QueryHistoryMetricsKey(String qry, String schema, boolean loc) {
+ public QueryHistoryKey(String qry, String schema, boolean loc) {
assert qry != null;
assert schema != null;
@@ -88,7 +88,7 @@ public class QueryHistoryMetricsKey {
if (o == null || getClass() != o.getClass())
return false;
- QueryHistoryMetricsKey key = (QueryHistoryMetricsKey)o;
+ QueryHistoryKey key = (QueryHistoryKey)o;
return F.eq(qry, key.qry) && F.eq(schema, key.schema) && F.eq(loc,
key.loc);
}
diff --git
a/modules/core/src/main/java/org/apache/ignite/internal/processors/query/QueryHistoryTracker.java
b/modules/core/src/main/java/org/apache/ignite/internal/processors/query/QueryHistoryTracker.java
index a8bf796..3bb2b26 100644
---
a/modules/core/src/main/java/org/apache/ignite/internal/processors/query/QueryHistoryTracker.java
+++
b/modules/core/src/main/java/org/apache/ignite/internal/processors/query/QueryHistoryTracker.java
@@ -19,21 +19,21 @@
package org.apache.ignite.internal.processors.query;
import java.util.Collections;
-import java.util.HashMap;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
import org.apache.ignite.configuration.IgniteConfiguration;
import org.jsr166.ConcurrentLinkedDeque8;
+import org.jsr166.ConcurrentLinkedDeque8.Node;
/**
*
*/
class QueryHistoryTracker {
- /** Query metrics. */
- private final ConcurrentHashMap<QueryHistoryMetricsKey,
QueryHistoryMetrics> qryMetrics;
+ /** Query history. */
+ private final ConcurrentHashMap<QueryHistoryKey, QueryHistory> qryHist;
/** Queue. */
- private final ConcurrentLinkedDeque8<QueryHistoryMetrics> evictionQueue =
new ConcurrentLinkedDeque8<>();
+ private final ConcurrentLinkedDeque8<QueryHistory> evictionQueue = new
ConcurrentLinkedDeque8<>();
/** History size. */
private final int histSz;
@@ -44,13 +44,13 @@ class QueryHistoryTracker {
QueryHistoryTracker(int histSz) {
this.histSz = histSz;
- qryMetrics = histSz > 0 ? new ConcurrentHashMap<>(histSz) : null;
+ qryHist = histSz > 0 ? new ConcurrentHashMap<>(histSz) : null;
}
/**
* @param failed {@code True} if query execution failed.
*/
- void collectMetrics(GridRunningQueryInfo runningQryInfo, boolean failed) {
+ void collectHistory(GridRunningQueryInfo runningQryInfo, boolean failed) {
if (histSz <= 0)
return;
@@ -60,11 +60,11 @@ class QueryHistoryTracker {
long startTime = runningQryInfo.startTime();
long duration = System.currentTimeMillis() - startTime;
- QueryHistoryMetrics m = new QueryHistoryMetrics(qry, schema, loc,
startTime, duration, failed);
+ QueryHistory hist = new QueryHistory(qry, schema, loc, startTime,
duration, failed);
- QueryHistoryMetrics mergedMetrics = qryMetrics.merge(m.key(), m,
QueryHistoryMetrics::aggregateWithNew);
+ QueryHistory mergedHist = qryHist.merge(hist.key(), hist,
QueryHistory::aggregateWithNew);
- if (touch(mergedMetrics) && qryMetrics.size() > histSz)
+ if (touch(mergedHist) && qryHist.size() > histSz)
shrink();
}
@@ -72,8 +72,8 @@ class QueryHistoryTracker {
* @param entry Entry Which was updated
* @return {@code true} In case entry is new and has been added, {@code
false} otherwise.
*/
- private boolean touch(QueryHistoryMetrics entry) {
- ConcurrentLinkedDeque8.Node<QueryHistoryMetrics> node = entry.link();
+ private boolean touch(QueryHistory entry) {
+ Node<QueryHistory> node = entry.link();
// Entry has not been enqueued yet.
if (node == null) {
@@ -97,7 +97,7 @@ class QueryHistoryTracker {
}
else if (removeLink(node)) {
// Move node to tail.
- ConcurrentLinkedDeque8.Node<QueryHistoryMetrics> newNode =
evictionQueue.offerLastx(entry);
+ Node<QueryHistory> newNode = evictionQueue.offerLastx(entry);
if (!entry.replaceLink(node, newNode)) {
// Was concurrently added, need to clear it from queue.
@@ -114,37 +114,37 @@ class QueryHistoryTracker {
*/
private void shrink() {
while (true) {
- QueryHistoryMetrics entry = evictionQueue.poll();
+ QueryHistory entry = evictionQueue.poll();
if (entry == null)
return;
- // Metrics has been changed if we can't remove metric entry.
+ // History has been changed if we can't remove history entry.
// In this case eviction queue already offered by the entry and we
don't put it back. Just try to do new
// attempt to remove oldest entry.
- if (qryMetrics.remove(entry.key(), entry))
+ if (qryHist.remove(entry.key(), entry))
return;
}
}
/**
- * @param node Node wchi should be unlinked from eviction queue.
+ * @param node Node which should be unlinked from eviction queue.
* @return {@code true} If node was unlinked.
*/
- private boolean
removeLink(ConcurrentLinkedDeque8.Node<QueryHistoryMetrics> node) {
+ private boolean removeLink(Node<QueryHistory> node) {
return evictionQueue.unlinkx(node);
}
/**
- * Gets SQL query history. Size of history could be configured via {@link
- * IgniteConfiguration#setSqlQueryHistorySize(int)}
+ * Gets SQL query history. Size of history could be configured via
+ * {@link IgniteConfiguration#setSqlQueryHistorySize(int)}.
*
* @return SQL queries history aggregated by query text, schema and local
flag.
*/
- Map<QueryHistoryMetricsKey, QueryHistoryMetrics> queryHistoryMetrics() {
+ Map<QueryHistoryKey, QueryHistory> queryHistory() {
if (histSz <= 0)
return Collections.emptyMap();
- return new HashMap<>(qryMetrics);
+ return qryHist;
}
}
diff --git
a/modules/core/src/main/java/org/apache/ignite/internal/processors/query/RunningQueryManager.java
b/modules/core/src/main/java/org/apache/ignite/internal/processors/query/RunningQueryManager.java
index ebb2701..ef09627 100644
---
a/modules/core/src/main/java/org/apache/ignite/internal/processors/query/RunningQueryManager.java
+++
b/modules/core/src/main/java/org/apache/ignite/internal/processors/query/RunningQueryManager.java
@@ -31,15 +31,30 @@ import org.apache.ignite.configuration.IgniteConfiguration;
import org.apache.ignite.internal.GridKernalContext;
import org.apache.ignite.internal.processors.cache.query.GridCacheQueryType;
import org.apache.ignite.internal.util.typedef.internal.S;
+import org.apache.ignite.spi.systemview.view.SqlQueryHistoryView;
+import org.apache.ignite.spi.systemview.view.SqlQueryView;
import org.jetbrains.annotations.Nullable;
import static
org.apache.ignite.internal.processors.cache.query.GridCacheQueryType.SQL;
import static
org.apache.ignite.internal.processors.cache.query.GridCacheQueryType.SQL_FIELDS;
+import static
org.apache.ignite.internal.processors.metric.impl.MetricUtils.metricName;
/**
* Keep information about all running queries.
*/
public class RunningQueryManager {
+ /** */
+ public static final String SQL_QRY_VIEW = metricName("sql", "queries");
+
+ /** */
+ public static final String SQL_QRY_VIEW_DESC = "Running SQL queries.";
+
+ /** */
+ public static final String SQL_QRY_HIST_VIEW = metricName("sql",
"queries", "history");
+
+ /** */
+ public static final String SQL_QRY_HIST_VIEW_DESC = "SQL queries history.";
+
/** Keep registered user queries. */
private final ConcurrentMap<Long, GridRunningQueryInfo> runs = new
ConcurrentHashMap<>();
@@ -66,6 +81,16 @@ public class RunningQueryManager {
histSz = ctx.config().getSqlQueryHistorySize();
qryHistTracker = new QueryHistoryTracker(histSz);
+
+ ctx.systemView().registerView(SQL_QRY_VIEW, SQL_QRY_VIEW_DESC,
+ SqlQueryView.class,
+ runs.values(),
+ SqlQueryView::new);
+
+ ctx.systemView().registerView(SQL_QRY_HIST_VIEW,
SQL_QRY_HIST_VIEW_DESC,
+ SqlQueryHistoryView.class,
+ qryHistTracker.queryHistory().values(),
+ SqlQueryHistoryView::new);
}
/**
@@ -80,7 +105,7 @@ public class RunningQueryManager {
*/
public Long register(String qry, GridCacheQueryType qryType, String
schemaName, boolean loc,
@Nullable GridQueryCancel cancel) {
- Long qryId = qryIdGen.incrementAndGet();
+ long qryId = qryIdGen.incrementAndGet();
GridRunningQueryInfo run = new GridRunningQueryInfo(
qryId,
@@ -116,7 +141,7 @@ public class RunningQueryManager {
if (qry != null && isSqlQuery(qry)) {
qry.runningFuture().onDone();
- qryHistTracker.collectMetrics(qry, failed);
+ qryHistTracker.collectHistory(qry, failed);
}
}
@@ -203,8 +228,8 @@ public class RunningQueryManager {
*
* @return Queries history statistics aggregated by query text, schema and
local flag.
*/
- public Map<QueryHistoryMetricsKey, QueryHistoryMetrics>
queryHistoryMetrics() {
- return qryHistTracker.queryHistoryMetrics();
+ public Map<QueryHistoryKey, QueryHistory> queryHistoryMetrics() {
+ return qryHistTracker.queryHistory();
}
/**
@@ -217,7 +242,7 @@ public class RunningQueryManager {
}
/**
- * Reset query history metrics.
+ * Reset query history.
*/
public void resetQueryHistoryMetrics() {
qryHistTracker = new QueryHistoryTracker(histSz);
diff --git
a/modules/core/src/main/java/org/apache/ignite/spi/systemview/view/SqlQueryHistoryView.java
b/modules/core/src/main/java/org/apache/ignite/spi/systemview/view/SqlQueryHistoryView.java
new file mode 100644
index 0000000..588e148
--- /dev/null
+++
b/modules/core/src/main/java/org/apache/ignite/spi/systemview/view/SqlQueryHistoryView.java
@@ -0,0 +1,85 @@
+/*
+ * 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 java.util.Date;
+import org.apache.ignite.internal.managers.systemview.walker.Order;
+import org.apache.ignite.internal.processors.query.QueryHistory;
+
+/**
+ * SQL query history representation for a {@link SystemView}.
+ */
+public class SqlQueryHistoryView {
+ /** Query history item. */
+ private final QueryHistory qry;
+
+ /**
+ * @param qry Query history item.
+ */
+ public SqlQueryHistoryView(QueryHistory qry) {
+ this.qry = qry;
+ }
+
+ /** @return Schema name. */
+ @Order
+ public String schemaName() {
+ return qry.schema();
+ }
+
+ /** @return Query text. */
+ @Order(1)
+ public String sql() {
+ return qry.query();
+ }
+
+ /** @return {@code True} if query local. */
+ @Order(2)
+ public boolean local() {
+ return qry.local();
+ }
+
+ /** @return Number of executions of the query. */
+ @Order(3)
+ public long executions() {
+ return qry.executions();
+ }
+
+ /** @return Number of failed execution of the query. */
+ @Order(4)
+ public long failures() {
+ return qry.failures();
+ }
+
+ /** @return Minimal query duration. */
+ @Order(5)
+ public long durationMin() {
+ return qry.minimumTime();
+ }
+
+ /** @return Maximum query duration. */
+ @Order(6)
+ public long durationMax() {
+ return qry.maximumTime();
+ }
+
+ /** @return Last start time. */
+ @Order(7)
+ public Date lastStartTime() {
+ return new Date(qry.lastStartTime());
+ }
+}
diff --git
a/modules/core/src/main/java/org/apache/ignite/spi/systemview/view/SqlQueryView.java
b/modules/core/src/main/java/org/apache/ignite/spi/systemview/view/SqlQueryView.java
new file mode 100644
index 0000000..ece63f8
--- /dev/null
+++
b/modules/core/src/main/java/org/apache/ignite/spi/systemview/view/SqlQueryView.java
@@ -0,0 +1,79 @@
+/*
+ * 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 java.util.Date;
+import java.util.UUID;
+import org.apache.ignite.internal.managers.systemview.walker.Order;
+import org.apache.ignite.internal.processors.query.GridRunningQueryInfo;
+import org.apache.ignite.internal.util.typedef.internal.U;
+
+/**
+ * SQL query representation for a {@link SystemView}.
+ */
+public class SqlQueryView {
+ /** Query. */
+ private final GridRunningQueryInfo qry;
+
+ /**
+ * @param qry Query.
+ */
+ public SqlQueryView(GridRunningQueryInfo qry) {
+ this.qry = qry;
+ }
+
+ /** @return Origin query node. */
+ @Order(2)
+ public UUID originNodeId() {
+ return qry.nodeId();
+ }
+
+ /** @return Query ID. */
+ @Order
+ public String queryId() {
+ return qry.globalQueryId();
+ }
+
+ /** @return Query text. */
+ @Order(1)
+ public String sql() {
+ return qry.query();
+ }
+
+ /** @return Schema name. */
+ public String schemaName() {
+ return qry.schemaName();
+ }
+
+ /** @return Query start time. */
+ @Order(3)
+ public Date startTime() {
+ return new Date(qry.startTime());
+ }
+
+ /** @return Query duration. */
+ @Order(4)
+ public long duration() {
+ return U.currentTimeMillis() - qry.startTime();
+ }
+
+ /** @return {@code True} if query is local. */
+ public boolean local() {
+ return qry.local();
+ }
+}
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 0e3a0e8..63b39e6 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
@@ -53,14 +53,16 @@ import org.apache.ignite.events.EventType;
import org.apache.ignite.internal.GridKernalContext;
import org.apache.ignite.internal.GridTopic;
import org.apache.ignite.internal.IgniteInternalFuture;
-import
org.apache.ignite.internal.cluster.ClusterTopologyServerNotFoundException;
import org.apache.ignite.internal.cluster.ClusterReadOnlyModeCheckedException;
+import
org.apache.ignite.internal.cluster.ClusterTopologyServerNotFoundException;
import org.apache.ignite.internal.managers.IgniteMBeansManager;
import org.apache.ignite.internal.managers.communication.GridMessageListener;
import org.apache.ignite.internal.managers.eventstorage.GridLocalEventListener;
-import
org.apache.ignite.internal.managers.systemview.walker.SqlTableColumnViewWalker;
import
org.apache.ignite.internal.managers.systemview.walker.SqlIndexViewWalker;
+import
org.apache.ignite.internal.managers.systemview.walker.SqlQueryHistoryViewWalker;
+import
org.apache.ignite.internal.managers.systemview.walker.SqlQueryViewWalker;
import
org.apache.ignite.internal.managers.systemview.walker.SqlSchemaViewWalker;
+import
org.apache.ignite.internal.managers.systemview.walker.SqlTableColumnViewWalker;
import
org.apache.ignite.internal.managers.systemview.walker.SqlTableViewWalker;
import
org.apache.ignite.internal.managers.systemview.walker.SqlViewColumnViewWalker;
import org.apache.ignite.internal.managers.systemview.walker.SqlViewViewWalker;
@@ -99,8 +101,8 @@ import
org.apache.ignite.internal.processors.cache.query.RegisteredQueryCursor;
import
org.apache.ignite.internal.processors.cache.transactions.IgniteTxAdapter;
import org.apache.ignite.internal.processors.cache.tree.CacheDataTree;
import org.apache.ignite.internal.processors.odbc.SqlStateCode;
-import org.apache.ignite.internal.processors.query.ColumnInformation;
import org.apache.ignite.internal.processors.odbc.jdbc.JdbcParameterMeta;
+import org.apache.ignite.internal.processors.query.ColumnInformation;
import org.apache.ignite.internal.processors.query.EnlistOperation;
import
org.apache.ignite.internal.processors.query.GridQueryCacheObjectsIterator;
import org.apache.ignite.internal.processors.query.GridQueryCancel;
@@ -183,9 +185,11 @@ import
org.apache.ignite.plugin.security.SecurityPermission;
import org.apache.ignite.resources.LoggerResource;
import org.apache.ignite.spi.indexing.IndexingQueryFilter;
import org.apache.ignite.spi.indexing.IndexingQueryFilterImpl;
-import org.apache.ignite.spi.systemview.view.SqlTableColumnView;
import org.apache.ignite.spi.systemview.view.SqlIndexView;
+import org.apache.ignite.spi.systemview.view.SqlQueryHistoryView;
+import org.apache.ignite.spi.systemview.view.SqlQueryView;
import org.apache.ignite.spi.systemview.view.SqlSchemaView;
+import org.apache.ignite.spi.systemview.view.SqlTableColumnView;
import org.apache.ignite.spi.systemview.view.SqlTableView;
import org.apache.ignite.spi.systemview.view.SqlViewColumnView;
import org.apache.ignite.spi.systemview.view.SqlViewView;
@@ -2070,6 +2074,8 @@ public class IgniteH2Indexing implements
GridQueryIndexing {
ctx.systemView().registerWalker(SqlIndexView.class, new
SqlIndexViewWalker());
ctx.systemView().registerWalker(SqlTableColumnView.class, new
SqlTableColumnViewWalker());
ctx.systemView().registerWalker(SqlViewColumnView.class, new
SqlViewColumnViewWalker());
+ ctx.systemView().registerWalker(SqlQueryView.class, new
SqlQueryViewWalker());
+ ctx.systemView().registerWalker(SqlQueryHistoryView.class, new
SqlQueryHistoryViewWalker());
partReservationMgr = new PartitionReservationManager(ctx);
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 59120d0..a641fe0 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
@@ -55,15 +55,13 @@ import
org.apache.ignite.internal.processors.query.h2.sys.view.SqlSystemViewBase
import
org.apache.ignite.internal.processors.query.h2.sys.view.SqlSystemViewCacheGroupsIOStatistics;
import
org.apache.ignite.internal.processors.query.h2.sys.view.SqlSystemViewNodeAttributes;
import
org.apache.ignite.internal.processors.query.h2.sys.view.SqlSystemViewNodeMetrics;
-import
org.apache.ignite.internal.processors.query.h2.sys.view.SqlSystemViewQueryHistoryMetrics;
-import
org.apache.ignite.internal.processors.query.h2.sys.view.SqlSystemViewRunningQueries;
import
org.apache.ignite.internal.processors.query.schema.SchemaIndexCacheVisitor;
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.SqlTableColumnView;
import org.apache.ignite.spi.systemview.view.SqlIndexView;
import org.apache.ignite.spi.systemview.view.SqlSchemaView;
+import org.apache.ignite.spi.systemview.view.SqlTableColumnView;
import org.apache.ignite.spi.systemview.view.SqlTableView;
import org.apache.ignite.spi.systemview.view.SqlViewColumnView;
import org.apache.ignite.spi.systemview.view.SqlViewView;
@@ -258,8 +256,6 @@ public class SchemaManager {
views.add(new SqlSystemViewBaselineNodes(ctx));
views.add(new SqlSystemViewNodeMetrics(ctx));
views.add(new SqlSystemViewCacheGroupsIOStatistics(ctx));
- views.add(new SqlSystemViewRunningQueries(ctx));
- views.add(new SqlSystemViewQueryHistoryMetrics(ctx));
return views;
}
diff --git
a/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/sys/view/SqlSystemViewQueryHistoryMetrics.java
b/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/sys/view/SqlSystemViewQueryHistoryMetrics.java
deleted file mode 100644
index 98d84f4..0000000
---
a/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/sys/view/SqlSystemViewQueryHistoryMetrics.java
+++ /dev/null
@@ -1,92 +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.query.h2.sys.view;
-
-import java.util.ArrayList;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Map;
-import org.apache.ignite.internal.GridKernalContext;
-import org.apache.ignite.internal.processors.query.QueryHistoryMetrics;
-import org.apache.ignite.internal.processors.query.QueryHistoryMetricsKey;
-import org.apache.ignite.internal.processors.query.h2.IgniteH2Indexing;
-import org.h2.engine.Session;
-import org.h2.result.Row;
-import org.h2.result.SearchRow;
-import org.h2.value.Value;
-
-/**
- * View that contains query history statistics on local node.
- */
-public class SqlSystemViewQueryHistoryMetrics extends
SqlAbstractLocalSystemView {
-
- /**
- * Creates view with columns.
- *
- * @param ctx kernal context.
- */
- public SqlSystemViewQueryHistoryMetrics(GridKernalContext ctx) {
- super("LOCAL_SQL_QUERY_HISTORY", "Ignite SQL query history metrics",
ctx,
- newColumn("SCHEMA_NAME"),
- newColumn("SQL"),
- newColumn("LOCAL", Value.BOOLEAN),
- newColumn("EXECUTIONS", Value.LONG),
- newColumn("FAILURES", Value.LONG),
- newColumn("DURATION_MIN", Value.LONG),
- newColumn("DURATION_MAX", Value.LONG),
- newColumn("LAST_START_TIME", Value.TIMESTAMP)
- );
-
- }
-
- /** {@inheritDoc} */
- @Override public Iterator<Row> getRows(Session ses, SearchRow first,
SearchRow last) {
- Map<QueryHistoryMetricsKey, QueryHistoryMetrics> qryHistMetrics =
-
((IgniteH2Indexing)ctx.query().getIndexing()).runningQueryManager().queryHistoryMetrics();
-
- List<Row> rows = new ArrayList<>();
-
- qryHistMetrics.values().forEach(m -> {
- Object[] data = new Object[] {
- m.schema(),
- m.query(),
- m.local(),
- m.executions(),
- m.failures(),
- m.minimumTime(),
- m.maximumTime(),
- valueTimestampFromMillis(m.lastStartTime()),
- };
-
- rows.add(createRow(ses, data));
- });
-
- return rows.iterator();
- }
-
- /** {@inheritDoc} */
- @Override public boolean canGetRowCount() {
- return true;
- }
-
- /** {@inheritDoc} */
- @Override public long getRowCount() {
- return
((IgniteH2Indexing)ctx.query().getIndexing()).runningQueryManager().queryHistoryMetrics().size();
- }
-}
diff --git
a/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/sys/view/SqlSystemViewRunningQueries.java
b/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/sys/view/SqlSystemViewRunningQueries.java
deleted file mode 100644
index d692be9..0000000
---
a/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/sys/view/SqlSystemViewRunningQueries.java
+++ /dev/null
@@ -1,101 +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.query.h2.sys.view;
-
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.Iterator;
-import java.util.List;
-import org.apache.ignite.internal.GridKernalContext;
-import org.apache.ignite.internal.processors.query.GridRunningQueryInfo;
-import org.apache.ignite.internal.processors.query.h2.IgniteH2Indexing;
-import org.h2.engine.Session;
-import org.h2.result.Row;
-import org.h2.result.SearchRow;
-import org.h2.value.Value;
-
-/**
- * System view: running queries
- */
-public class SqlSystemViewRunningQueries extends SqlAbstractLocalSystemView {
- /**
- * @param ctx Grid context.
- */
- public SqlSystemViewRunningQueries(GridKernalContext ctx) {
- super("LOCAL_SQL_RUNNING_QUERIES", "Running queries", ctx, new
String[] {"QUERY_ID"},
- newColumn("QUERY_ID"),
- newColumn("SQL"),
- newColumn("SCHEMA_NAME"),
- newColumn("LOCAL", Value.BOOLEAN),
- newColumn("START_TIME", Value.TIMESTAMP),
- newColumn("DURATION", Value.LONG)
- );
- }
-
- /** {@inheritDoc} */
- @Override public Iterator<Row> getRows(Session ses, SearchRow first,
SearchRow last) {
- SqlSystemViewColumnCondition qryIdCond =
conditionForColumn("QUERY_ID", first, last);
-
- List<GridRunningQueryInfo> runningSqlQueries =
((IgniteH2Indexing)ctx.query().getIndexing()).runningSqlQueries();
-
- if (qryIdCond.isEquality()) {
- String qryId = qryIdCond.valueForEquality().getString();
-
- runningSqlQueries = runningSqlQueries.stream()
- .filter((r) -> r.globalQueryId().equals(qryId))
- .findFirst()
- .map(Collections::singletonList)
- .orElse(Collections.emptyList());
- }
-
- if (runningSqlQueries.isEmpty())
- return Collections.emptyIterator();
-
- long now = System.currentTimeMillis();
-
- List<Row> rows = new ArrayList<>(runningSqlQueries.size());
-
- for (GridRunningQueryInfo info : runningSqlQueries) {
- long duration = now - info.startTime();
-
- rows.add(
- createRow(ses,
- info.globalQueryId(),
- info.query(),
- info.schemaName(),
- info.local(),
- valueTimestampFromMillis(info.startTime()),
- duration
- )
- );
- }
-
- return rows.iterator();
- }
-
- /** {@inheritDoc} */
- @Override public boolean canGetRowCount() {
- return true;
- }
-
- /** {@inheritDoc} */
- @Override public long getRowCount() {
- return
((IgniteH2Indexing)ctx.query().getIndexing()).runningSqlQueries().size();
- }
-}
diff --git
a/modules/indexing/src/test/java/org/apache/ignite/internal/processors/cache/metric/SqlViewExporterSpiTest.java
b/modules/indexing/src/test/java/org/apache/ignite/internal/processors/cache/metric/SqlViewExporterSpiTest.java
index 9dec659..bd64a7b 100644
---
a/modules/indexing/src/test/java/org/apache/ignite/internal/processors/cache/metric/SqlViewExporterSpiTest.java
+++
b/modules/indexing/src/test/java/org/apache/ignite/internal/processors/cache/metric/SqlViewExporterSpiTest.java
@@ -397,14 +397,14 @@ public class SqlViewExporterSpiTest extends
AbstractExporterSpiTest {
"CACHE_GROUPS",
"CACHES",
"TASKS",
- "LOCAL_SQL_QUERY_HISTORY",
+ "SQL_QUERIES_HISTORY",
"NODES",
"SCHEMAS",
"NODE_METRICS",
"BASELINE_NODES",
"INDEXES",
"LOCAL_CACHE_GROUPS_IO",
- "LOCAL_SQL_RUNNING_QUERIES",
+ "SQL_QUERIES",
"SCAN_QUERIES",
"NODE_ATTRIBUTES",
"TABLES",
@@ -413,7 +413,7 @@ public class SqlViewExporterSpiTest extends
AbstractExporterSpiTest {
"TABLE_COLUMNS",
"VIEW_COLUMNS",
"TRANSACTIONS",
- "QUERY_CONTINUOUS"
+ "CONTINUOUS_QUERIES"
));
Set<String> actViews = new HashSet<>();
@@ -528,8 +528,8 @@ public class SqlViewExporterSpiTest extends
AbstractExporterSpiTest {
public void testContinuousQuery() throws Exception {
IgniteCache<Integer, Integer> cache = ignite0.createCache("cache-1");
- assertTrue(execute(ignite0, "SELECT * FROM
SYS.QUERY_CONTINUOUS").isEmpty());
- assertTrue(execute(ignite1, "SELECT * FROM
SYS.QUERY_CONTINUOUS").isEmpty());
+ assertTrue(execute(ignite0, "SELECT * FROM
SYS.CONTINUOUS_QUERIES").isEmpty());
+ assertTrue(execute(ignite1, "SELECT * FROM
SYS.CONTINUOUS_QUERIES").isEmpty());
try (QueryCursor qry = cache.query(new ContinuousQuery<>()
.setInitialQuery(new ScanQuery<>())
@@ -547,8 +547,8 @@ public class SqlViewExporterSpiTest extends
AbstractExporterSpiTest {
checkContinuouQueryView(ignite1, false);
}
- assertTrue(execute(ignite0, "SELECT * FROM
SYS.QUERY_CONTINUOUS").isEmpty());
- assertTrue(execute(ignite1, "SELECT * FROM
SYS.QUERY_CONTINUOUS").isEmpty());
+ assertTrue(execute(ignite0, "SELECT * FROM
SYS.CONTINUOUS_QUERIES").isEmpty());
+ assertTrue(execute(ignite1, "SELECT * FROM
SYS.CONTINUOUS_QUERIES").isEmpty());
}
/** */
@@ -563,7 +563,7 @@ public class SqlViewExporterSpiTest extends
AbstractExporterSpiTest {
" REMOTE_FILTER, " +
" LOCAL_TRANSFORMED_LISTENER, " +
" REMOTE_TRANSFORMER " +
- "FROM SYS.QUERY_CONTINUOUS");
+ "FROM SYS.CONTINUOUS_QUERIES");
assertEquals(1, qrys.size());
diff --git
a/modules/indexing/src/test/java/org/apache/ignite/internal/processors/query/SqlQueryHistorySelfTest.java
b/modules/indexing/src/test/java/org/apache/ignite/internal/processors/query/SqlQueryHistorySelfTest.java
index 5c10d68..a4327d6 100644
---
a/modules/indexing/src/test/java/org/apache/ignite/internal/processors/query/SqlQueryHistorySelfTest.java
+++
b/modules/indexing/src/test/java/org/apache/ignite/internal/processors/query/SqlQueryHistorySelfTest.java
@@ -200,12 +200,12 @@ public class SqlQueryHistorySelfTest extends
GridCommonAbstractTest {
// Check that collected metrics contains correct items: metrics for
last N queries.
- Collection<QueryHistoryMetrics> metrics =
((IgniteH2Indexing)queryNode().context().query().getIndexing())
+ Collection<QueryHistory> metrics =
((IgniteH2Indexing)queryNode().context().query().getIndexing())
.runningQueryManager().queryHistoryMetrics().values();
assertEquals(QUERY_HISTORY_SIZE, metrics.size());
- Set<String> qries =
metrics.stream().map(QueryHistoryMetrics::query).collect(Collectors.toSet());
+ Set<String> qries =
metrics.stream().map(QueryHistory::query).collect(Collectors.toSet());
for (int i = 0; i < cmds.size(); i++)
assertTrue(qries.contains(cmds.get(QUERY_HISTORY_SIZE - 1 - i)));
@@ -291,12 +291,12 @@ public class SqlQueryHistorySelfTest extends
GridCommonAbstractTest {
checkMetrics(QUERY_HISTORY_SIZE, i, 1, 0, false);
// Check that collected metrics contains correct items: metrics for
last N queries.
- Collection<QueryHistoryMetrics> metrics =
((IgniteH2Indexing)queryNode().context().query().getIndexing())
+ Collection<QueryHistory> metrics =
((IgniteH2Indexing)queryNode().context().query().getIndexing())
.runningQueryManager().queryHistoryMetrics().values();
assertEquals(QUERY_HISTORY_SIZE, metrics.size());
- Set<String> qries =
metrics.stream().map(QueryHistoryMetrics::query).collect(Collectors.toSet());
+ Set<String> qries =
metrics.stream().map(QueryHistory::query).collect(Collectors.toSet());
assertTrue(qries.contains("SELECT \"A\".\"STRING\"._KEY,
\"A\".\"STRING\"._VAL from String"));
assertTrue(qries.contains("select * from String limit 2"));
@@ -423,7 +423,7 @@ public class SqlQueryHistorySelfTest extends
GridCommonAbstractTest {
private void checkMetrics(int sz, int idx, int execs, int failures,
boolean first) {
- Collection<QueryHistoryMetrics> metrics =
((IgniteH2Indexing)queryNode().context().query().getIndexing())
+ Collection<QueryHistory> metrics =
((IgniteH2Indexing)queryNode().context().query().getIndexing())
.runningQueryManager().queryHistoryMetrics().values();
assertNotNull(metrics);
@@ -432,7 +432,7 @@ public class SqlQueryHistorySelfTest extends
GridCommonAbstractTest {
if (sz == 0)
return;
- QueryHistoryMetrics m = new ArrayList<>(metrics).get(idx);
+ QueryHistory m = new ArrayList<>(metrics).get(idx);
info("Metrics: " + m);
@@ -564,7 +564,7 @@ public class SqlQueryHistorySelfTest extends
GridCommonAbstractTest {
*/
private void waitingFor(final String cond, final int exp) throws
IgniteInterruptedCheckedException {
GridTestUtils.waitForCondition(() -> {
- Collection<QueryHistoryMetrics> metrics =
((IgniteH2Indexing)queryNode().context().query().getIndexing())
+ Collection<QueryHistory> metrics =
((IgniteH2Indexing)queryNode().context().query().getIndexing())
.runningQueryManager().queryHistoryMetrics().values();
switch (cond) {
@@ -574,7 +574,7 @@ public class SqlQueryHistorySelfTest extends
GridCommonAbstractTest {
case "executions":
int executions = 0;
- for (QueryHistoryMetrics m : metrics)
+ for (QueryHistory m : metrics)
executions += m.executions();
return executions == exp;
diff --git
a/modules/indexing/src/test/java/org/apache/ignite/internal/processors/query/SqlSystemViewsSelfTest.java
b/modules/indexing/src/test/java/org/apache/ignite/internal/processors/query/SqlSystemViewsSelfTest.java
index ae992be..e762d9f 100644
---
a/modules/indexing/src/test/java/org/apache/ignite/internal/processors/query/SqlSystemViewsSelfTest.java
+++
b/modules/indexing/src/test/java/org/apache/ignite/internal/processors/query/SqlSystemViewsSelfTest.java
@@ -409,7 +409,7 @@ public class SqlSystemViewsSelfTest extends
AbstractIndexingCommonTest {
"Exception calling user-defined function");
String sqlHist = "SELECT SCHEMA_NAME, SQL, LOCAL, EXECUTIONS,
FAILURES, DURATION_MIN, DURATION_MAX, LAST_START_TIME " +
- "FROM " + systemSchemaName() + ".LOCAL_SQL_QUERY_HISTORY ORDER BY
LAST_START_TIME";
+ "FROM " + systemSchemaName() + ".SQL_QUERIES_HISTORY ORDER BY
LAST_START_TIME";
cache.query(new SqlFieldsQuery(sqlHist).setLocal(true)).getAll();
cache.query(new SqlFieldsQuery(sqlHist).setLocal(true)).getAll();
@@ -469,7 +469,7 @@ public class SqlSystemViewsSelfTest extends
AbstractIndexingCommonTest {
cache.put(100,"200");
String sql = "SELECT SQL, QUERY_ID, SCHEMA_NAME, LOCAL, START_TIME,
DURATION FROM " +
- systemSchemaName() + ".LOCAL_SQL_RUNNING_QUERIES";
+ systemSchemaName() + ".SQL_QUERIES";
FieldsQueryCursor notClosedFieldQryCursor = cache.query(new
SqlFieldsQuery(sql).setLocal(true));
@@ -536,15 +536,15 @@ public class SqlSystemViewsSelfTest extends
AbstractIndexingCommonTest {
notClosedQryCursor.close();
- sql = "SELECT SQL, QUERY_ID FROM " + systemSchemaName() +
".LOCAL_SQL_RUNNING_QUERIES WHERE QUERY_ID='" + qryPrefix + "7'";
+ sql = "SELECT SQL, QUERY_ID FROM " + systemSchemaName() +
".SQL_QUERIES WHERE QUERY_ID='" + qryPrefix + "7'";
assertEquals(qryPrefix + "7", ((List<?>)cache.query(new
SqlFieldsQuery(sql)).getAll().get(0)).get(1));
- sql = "SELECT SQL FROM " + systemSchemaName() +
".LOCAL_SQL_RUNNING_QUERIES WHERE DURATION > 100000";
+ sql = "SELECT SQL FROM " + systemSchemaName() + ".SQL_QUERIES WHERE
DURATION > 100000";
assertTrue(cache.query(new SqlFieldsQuery(sql)).getAll().isEmpty());
- sql = "SELECT SQL FROM " + systemSchemaName() +
".LOCAL_SQL_RUNNING_QUERIES WHERE QUERY_ID='UNKNOWN'";
+ sql = "SELECT SQL FROM " + systemSchemaName() + ".SQL_QUERIES WHERE
QUERY_ID='UNKNOWN'";
assertTrue(cache.query(new SqlFieldsQuery(sql)).getAll().isEmpty());
}