You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ignite.apache.org by ak...@apache.org on 2015/11/25 12:31:18 UTC
[6/6] ignite git commit: IGNITE-1990 Added support for collecting new
query and JDBC types metadata for Visor.
IGNITE-1990 Added support for collecting new query and JDBC types metadata for Visor.
Project: http://git-wip-us.apache.org/repos/asf/ignite/repo
Commit: http://git-wip-us.apache.org/repos/asf/ignite/commit/dc8268ae
Tree: http://git-wip-us.apache.org/repos/asf/ignite/tree/dc8268ae
Diff: http://git-wip-us.apache.org/repos/asf/ignite/diff/dc8268ae
Branch: refs/heads/ignite-1990
Commit: dc8268ae494b6a403f8de6ff2bc0234fe2e1d7be
Parents: 8537a7d
Author: Alexey Kuznetsov <ak...@apache.org>
Authored: Wed Nov 25 18:31:16 2015 +0700
Committer: Alexey Kuznetsov <ak...@apache.org>
Committed: Wed Nov 25 18:31:16 2015 +0700
----------------------------------------------------------------------
.../visor/cache/VisorCacheConfiguration.java | 4 +-
.../cache/VisorCacheTypeFieldMetadata.java | 30 +++-
.../visor/cache/VisorCacheTypeMetadata.java | 137 +++++++++++++++++--
3 files changed, 149 insertions(+), 22 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/ignite/blob/dc8268ae/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 073ad22..69eb311 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
@@ -138,7 +138,7 @@ public class VisorCacheConfiguration implements Serializable {
maxConcurrentAsyncOps = ccfg.getMaxConcurrentAsyncOperations();
memoryMode = ccfg.getMemoryMode();
interceptor = compactClass(ccfg.getInterceptor());
- typeMeta = VisorCacheTypeMetadata.list(ccfg.getTypeMetadata());
+ typeMeta = VisorCacheTypeMetadata.list(ccfg.getQueryEntities(), ccfg.getCacheStoreFactory(), ccfg.getTypeMetadata());
statisticsEnabled = ccfg.isStatisticsEnabled();
mgmtEnabled = ccfg.isManagementEnabled();
ldrFactory = compactClass(ccfg.getCacheLoaderFactory());
@@ -350,4 +350,4 @@ public class VisorCacheConfiguration implements Serializable {
@Override public String toString() {
return S.toString(VisorCacheConfiguration.class, this);
}
-}
\ No newline at end of file
+}
http://git-wip-us.apache.org/repos/asf/ignite/blob/dc8268ae/modules/core/src/main/java/org/apache/ignite/internal/visor/cache/VisorCacheTypeFieldMetadata.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/visor/cache/VisorCacheTypeFieldMetadata.java b/modules/core/src/main/java/org/apache/ignite/internal/visor/cache/VisorCacheTypeFieldMetadata.java
index c21354b..323e536 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/visor/cache/VisorCacheTypeFieldMetadata.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/visor/cache/VisorCacheTypeFieldMetadata.java
@@ -45,14 +45,30 @@ public class VisorCacheTypeFieldMetadata implements Serializable {
* @return Data transfer object for given cache field metadata.
*/
public static VisorCacheTypeFieldMetadata from(CacheTypeFieldMetadata f) {
- VisorCacheTypeFieldMetadata fieldMetadata = new VisorCacheTypeFieldMetadata();
+ return new VisorCacheTypeFieldMetadata(f.getDatabaseName(), f.getDatabaseType(),
+ f.getJavaName(), U.compact(f.getJavaType().getName()));
+ }
- fieldMetadata.dbName = f.getDatabaseName();
- fieldMetadata.dbType = f.getDatabaseType();
- fieldMetadata.javaName = f.getJavaName();
- fieldMetadata.javaType = U.compact(f.getJavaType().getName());
+ /**
+ * Empty constructor.
+ */
+ public VisorCacheTypeFieldMetadata() {
+ // No-op.
+ }
- return fieldMetadata;
+ /**
+ * Full constructor.
+ *
+ * @param dbName Column name in database.
+ * @param dbType Column JDBC type in database.
+ * @param javaName Field name in java object.
+ * @param javaType Corresponding java type.
+ */
+ public VisorCacheTypeFieldMetadata(String dbName, int dbType, String javaName, String javaType) {
+ this.dbName = dbName;
+ this.dbType = dbType;
+ this.javaName = javaName;
+ this.javaType = javaType;
}
/**
@@ -82,4 +98,4 @@ public class VisorCacheTypeFieldMetadata implements Serializable {
public String javaType() {
return javaType;
}
-}
\ No newline at end of file
+}
http://git-wip-us.apache.org/repos/asf/ignite/blob/dc8268ae/modules/core/src/main/java/org/apache/ignite/internal/visor/cache/VisorCacheTypeMetadata.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/visor/cache/VisorCacheTypeMetadata.java b/modules/core/src/main/java/org/apache/ignite/internal/visor/cache/VisorCacheTypeMetadata.java
index 2a00ec1..0093073 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/visor/cache/VisorCacheTypeMetadata.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/visor/cache/VisorCacheTypeMetadata.java
@@ -18,17 +18,21 @@
package org.apache.ignite.internal.visor.cache;
import java.io.Serializable;
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.Collections;
-import java.util.LinkedHashMap;
-import java.util.Map;
+import java.util.*;
+
import org.apache.ignite.cache.CacheTypeFieldMetadata;
import org.apache.ignite.cache.CacheTypeMetadata;
+import org.apache.ignite.cache.QueryEntity;
+import org.apache.ignite.cache.QueryIndex;
+import org.apache.ignite.cache.store.jdbc.CacheJdbcPojoStoreFactory;
+import org.apache.ignite.cache.store.jdbc.JdbcType;
+import org.apache.ignite.cache.store.jdbc.JdbcTypeField;
import org.apache.ignite.internal.util.tostring.GridToStringInclude;
import org.apache.ignite.internal.util.typedef.internal.U;
import org.apache.ignite.lang.IgniteBiTuple;
+import javax.cache.configuration.Factory;
+
/**
* Data transfer object for {@link CacheTypeMetadata}.
*/
@@ -77,19 +81,126 @@ public class VisorCacheTypeMetadata implements Serializable {
private Map<String, LinkedHashMap<String, IgniteBiTuple<String, Boolean>>> grps;
/**
+ * @param qryEntities Collection of query entities.
+ * @param factory Store factory to extract JDBC types info.
* @param types Cache types metadata configurations.
* @return Data transfer object for cache type metadata configurations.
*/
- public static Collection<VisorCacheTypeMetadata> list(Collection<CacheTypeMetadata> types) {
- if (types == null)
- return Collections.emptyList();
+ public static Collection<VisorCacheTypeMetadata> list(Collection<QueryEntity> qryEntities, Factory factory,
+ Collection<CacheTypeMetadata> types) {
+ final Collection<VisorCacheTypeMetadata> metas = new ArrayList<>();
+
+ Map<String, VisorCacheTypeMetadata> metaMap =
+ U.newHashMap(qryEntities != null ? qryEntities.size() : 0);
+
+ if (qryEntities != null)
+ for (QueryEntity qryEntity : qryEntities) {
+ VisorCacheTypeMetadata meta = from(qryEntity);
+
+ metas.add(meta);
+
+ metaMap.put(meta.keyType, meta);
+ }
+
+ if (factory != null && factory instanceof CacheJdbcPojoStoreFactory) {
+ CacheJdbcPojoStoreFactory jdbcFactory = (CacheJdbcPojoStoreFactory) factory;
+
+ for (JdbcType jdbcType : jdbcFactory.getTypes()) {
+ VisorCacheTypeMetadata meta = metaMap.get(jdbcType.getKeyType());
+
+ boolean notFound = meta == null;
+
+ if (notFound) {
+ meta = new VisorCacheTypeMetadata();
+
+ meta.keyType = jdbcType.getKeyType();
+ meta.valType = jdbcType.getValueType();
+
+ meta.qryFlds = Collections.emptyMap();
+ meta.ascFlds = Collections.emptyMap();
+ meta.descFlds = Collections.emptyMap();
+ meta.txtFlds = Collections.emptyList();
+ meta.grps = Collections.emptyMap();
+ }
+
+ meta.dbSchema = jdbcType.getDatabaseSchema();
+ meta.dbTbl = jdbcType.getDatabaseTable();
+
+ JdbcTypeField[] keyFields = jdbcType.getKeyFields();
+
+ meta.keyFields = new ArrayList<>(keyFields.length);
+
+ for (JdbcTypeField fld : keyFields)
+ meta.keyFields.add(new VisorCacheTypeFieldMetadata(
+ fld.getDatabaseFieldName(), fld.getDatabaseFieldType(),
+ fld.getDatabaseFieldName(), U.compact(fld.getJavaFieldType().getName())));
+
+ JdbcTypeField[] valFields = jdbcType.getValueFields();
+
+ meta.valFields = new ArrayList<>(valFields.length);
+
+ for (JdbcTypeField fld : valFields)
+ meta.valFields.add(new VisorCacheTypeFieldMetadata(
+ fld.getDatabaseFieldName(), fld.getDatabaseFieldType(),
+ fld.getDatabaseFieldName(), U.compact(fld.getJavaFieldType().getName())));
+
+ if (notFound)
+ metas.add(meta);
+ }
+ }
+
+ if (types != null)
+ for (CacheTypeMetadata type : types)
+ metas.add(from(type));
+
+ return metas;
+ }
+
+ /**
+ * @param q Actual cache query entities.
+ * @return Data transfer object for given cache type metadata.
+ */
+ public static VisorCacheTypeMetadata from(QueryEntity q) {
+ assert q != null;
+
+ VisorCacheTypeMetadata metadata = new VisorCacheTypeMetadata();
+
+ metadata.keyType = q.getKeyType();
+ metadata.valType = q.getValueType();
+
+ metadata.dbSchema = "";
+ metadata.dbTbl = "";
+
+ metadata.keyFields = Collections.emptyList();
+ metadata.valFields = Collections.emptyList();
- final Collection<VisorCacheTypeMetadata> cfgs = new ArrayList<>(types.size());
+ LinkedHashMap<String, String> qryFields = q.getFields();
- for (CacheTypeMetadata type : types)
- cfgs.add(from(type));
+ metadata.qryFlds = new LinkedHashMap<>(qryFields);
- return cfgs;
+ metadata.ascFlds = Collections.emptyMap();
+ metadata.descFlds = Collections.emptyMap();
+ metadata.txtFlds = Collections.emptyList();
+
+ Collection<QueryIndex> qryIdxs = q.getIndexes();
+
+ metadata.grps = new LinkedHashMap<>(qryIdxs.size());
+
+ for (QueryIndex qryIdx : qryIdxs) {
+ LinkedHashMap<String, Boolean> qryIdxFlds = qryIdx.getFields();
+
+ LinkedHashMap<String, IgniteBiTuple<String, Boolean>> grpFlds = new LinkedHashMap<>();
+
+ for (Map.Entry<String, Boolean> qryIdxFld : qryIdxFlds.entrySet()) {
+ String fldName = qryIdxFld.getKey();
+
+ grpFlds.put(fldName, new IgniteBiTuple<>(qryFields.get(fldName), !qryIdxFld.getValue()));
+ }
+
+ metadata.grps.put(qryIdx.getName(), grpFlds);
+ }
+
+ return metadata;
}
/**
@@ -246,4 +357,4 @@ public class VisorCacheTypeMetadata implements Serializable {
public Map<String, LinkedHashMap<String, IgniteBiTuple<String, Boolean>>> grps() {
return grps;
}
-}
\ No newline at end of file
+}