Repository: incubator-ignite Updated Branches: refs/heads/ignite-sql-tests 54d46a08a -> 47cef36d4
# IGNITE-392 Collect cache query configuration. Project: http://git-wip-us.apache.org/repos/asf/incubator-ignite/repo Commit: http://git-wip-us.apache.org/repos/asf/incubator-ignite/commit/47cef36d Tree: http://git-wip-us.apache.org/repos/asf/incubator-ignite/tree/47cef36d Diff: http://git-wip-us.apache.org/repos/asf/incubator-ignite/diff/47cef36d Branch: refs/heads/ignite-sql-tests Commit: 47cef36d4b9b7b40ccfbbc0c2cb54a94136c45f2 Parents: 54d46a0 Author: AKuznetsov <[email protected]> Authored: Thu Mar 5 13:20:45 2015 +0700 Committer: AKuznetsov <[email protected]> Committed: Thu Mar 5 13:20:45 2015 +0700 ---------------------------------------------------------------------- .../visor/cache/VisorCacheConfiguration.java | 11 ++ .../cache/VisorCacheQueryConfiguration.java | 120 +++++++++++++++++++ .../commands/cache/VisorCacheCommand.scala | 33 +++++ 3 files changed, 164 insertions(+) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/47cef36d/modules/core/src/main/java/org/apache/ignite/internal/visor/cache/VisorCacheConfiguration.java ---------------------------------------------------------------------- diff --git a/modules/core/src/main/java/org/apache/ignite/internal/visor/cache/VisorCacheConfiguration.java b/modules/core/src/main/java/org/apache/ignite/internal/visor/cache/VisorCacheConfiguration.java index 46c675a..34d8838 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/visor/cache/VisorCacheConfiguration.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/visor/cache/VisorCacheConfiguration.java @@ -126,6 +126,9 @@ public class VisorCacheConfiguration implements Serializable { /** Class name of expiry policy factory. */ private String expiryPlcFactory; + /** Query configuration. */ + private VisorCacheQueryConfiguration qryCfg; + /** * @param ignite Grid. * @param ccfg Cache configuration. @@ -163,6 +166,7 @@ public class VisorCacheConfiguration implements Serializable { cfg.nearCfg = VisorCacheNearConfiguration.from(ccfg); cfg.dfltCfg = VisorCacheDefaultConfiguration.from(ccfg); cfg.storeCfg = VisorCacheStoreConfiguration.from(ignite, ccfg); + cfg.qryCfg = VisorCacheQueryConfiguration.from(ccfg); return cfg; } @@ -401,6 +405,13 @@ public class VisorCacheConfiguration implements Serializable { return storeCfg; } + /** + * @return Cache query configuration. + */ + public VisorCacheQueryConfiguration queryConfiguration() { + return qryCfg; + } + /** {@inheritDoc} */ @Override public String toString() { return S.toString(VisorCacheConfiguration.class, this); http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/47cef36d/modules/core/src/main/java/org/apache/ignite/internal/visor/cache/VisorCacheQueryConfiguration.java ---------------------------------------------------------------------- diff --git a/modules/core/src/main/java/org/apache/ignite/internal/visor/cache/VisorCacheQueryConfiguration.java b/modules/core/src/main/java/org/apache/ignite/internal/visor/cache/VisorCacheQueryConfiguration.java new file mode 100644 index 0000000..d7fbce3 --- /dev/null +++ b/modules/core/src/main/java/org/apache/ignite/internal/visor/cache/VisorCacheQueryConfiguration.java @@ -0,0 +1,120 @@ +/* + * 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. + */ + +/* @java.file.header */ + +/* _________ _____ __________________ _____ + * __ ____/___________(_)______ /__ ____/______ ____(_)_______ + * _ / __ __ ___/__ / _ __ / _ / __ _ __ `/__ / __ __ \ + * / /_/ / _ / _ / / /_/ / / /_/ / / /_/ / _ / _ / / / + * \____/ /_/ /_/ \_,__/ \____/ \__,_/ /_/ /_/ /_/ + */ + +package org.apache.ignite.internal.visor.cache; + +import org.apache.ignite.configuration.*; +import org.apache.ignite.internal.util.typedef.internal.*; + +import java.io.*; + +/** + * Data transfer object for cache query configuration data. + */ +public class VisorCacheQueryConfiguration implements Serializable { + /** */ + private static final long serialVersionUID = 0L; + + /** */ + private String[] sqlFuncClss; + + /** */ + private long longQryWarnTimeout; + + /** */ + private boolean sqlEscapeAll; + + /** */ + private String[] indexedTypes; + + /** */ + private int sqlOnheapRowCacheSize; + + /** + * @param clss Classes to compact. + */ + private static String[] compactClasses(Class<?>[] clss) { + int len = clss.length; + + String[] res = new String[len]; + + for (int i = 0; i < len; i++) + res[i] = U.compact(clss[i].getName()); + + return res; + } + + /** + * @param ccfg Cache configuration. + * @return Fill data transfer object with cache query configuration data. + */ + public static VisorCacheQueryConfiguration from(CacheConfiguration ccfg) { + VisorCacheQueryConfiguration cfg = null; + + cfg.sqlFuncClss = compactClasses(ccfg.getSqlFunctionClasses()); + cfg.longQryWarnTimeout = ccfg.getLongQueryWarningTimeout(); + cfg.sqlEscapeAll = ccfg.isSqlEscapeAll(); + cfg.indexedTypes = compactClasses(ccfg.getIndexedTypes()); + cfg.sqlOnheapRowCacheSize = ccfg.getSqlOnheapRowCacheSize(); + + return cfg; + } + + /** + * @return Classes names with SQL functions. + */ + public String[] sqlFunctionClasses() { + return sqlFuncClss; + } + + /** + * @return Timeout in milliseconds after which long query warning will be printed. + */ + public long longQueryWarningTimeout() { + return longQryWarnTimeout; + } + + /** + * @return {@code true} if SQL engine generate SQL statements with escaped names. + */ + public boolean sqlEscapeAll() { + return sqlEscapeAll; + } + + /** + * @return Array of key and value classes names to be indexed. + */ + public String[] indexedTypes() { + return indexedTypes; + } + + /** + * @return Number of SQL rows which will be cached onheap to avoid deserialization on each SQL index access. + */ + public int sqlOnheapRowCacheSize() { + return sqlOnheapRowCacheSize; + } +} http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/47cef36d/modules/visor-console/src/main/scala/org/apache/ignite/visor/commands/cache/VisorCacheCommand.scala ---------------------------------------------------------------------- diff --git a/modules/visor-console/src/main/scala/org/apache/ignite/visor/commands/cache/VisorCacheCommand.scala b/modules/visor-console/src/main/scala/org/apache/ignite/visor/commands/cache/VisorCacheCommand.scala index 819b180..c015fb8 100644 --- a/modules/visor-console/src/main/scala/org/apache/ignite/visor/commands/cache/VisorCacheCommand.scala +++ b/modules/visor-console/src/main/scala/org/apache/ignite/visor/commands/cache/VisorCacheCommand.scala @@ -780,6 +780,7 @@ object VisorCacheCommand { val evictCfg = cfg.evictConfiguration() val defaultCfg = cfg.defaultConfiguration() val storeCfg = cfg.storeConfiguration() + val queryCfg = cfg.queryConfiguration() val cacheT = VisorTextTable() @@ -864,8 +865,40 @@ object VisorCacheCommand { cacheT += ("Writer Factory Class Name", safe(cfg.writerFactory())) cacheT += ("Expiry Policy Factory Class Name", safe(cfg.expiryPolicyFactory())) + cacheT +=("Query Execution Time Threshold", queryCfg.longQueryWarningTimeout()) + cacheT +=("Query Escaped Names", bool2Str(queryCfg.sqlEscapeAll())) + cacheT +=("Query Onheap Cache Size", queryCfg.sqlOnheapRowCacheSize()) + println(title) cacheT.render() + + val sqlFxs = queryCfg.sqlFunctionClasses() + + if (sqlFxs.nonEmpty) { + println("\nQuery SQL functions:") + + val sqlFxsT = VisorTextTable() + + sqlFxsT #= "Function Class Name" + + sqlFxs.foreach(s => sqlFxsT += s) + + sqlFxsT.render() + } + + val indexedTypes = queryCfg.indexedTypes() + + if (indexedTypes.nonEmpty) { + println("\nQuery Indexed Types:") + + val indexedTypesT = VisorTextTable() + + indexedTypesT #= ("Key Class Name", "Value Class Name") + + indexedTypes.grouped(2).foreach(types => indexedTypesT += (types(0), types(1))) + + indexedTypesT.render() + } } }
