diff --git a/gemfire-core/src/main/java/com/gemstone/gemfire/internal/cache/ExternalTableMetaData.java b/gemfire-core/src/main/java/com/gemstone/gemfire/internal/cache/ExternalTableMetaData.java index 62d6323c8..199afc3ad 100644 --- a/gemfire-core/src/main/java/com/gemstone/gemfire/internal/cache/ExternalTableMetaData.java +++ b/gemfire-core/src/main/java/com/gemstone/gemfire/internal/cache/ExternalTableMetaData.java @@ -69,6 +69,8 @@ public ExternalTableMetaData(String entityName, public List columns; public boolean hasDependentSampleTables; + public ExternalTableMetaData() { } + @Override public String toString() { return "ObjectMetadata(name=" + this.entityName + ", schema=" + this.schema + diff --git a/gemfirexd/core/src/main/java/com/pivotal/gemfirexd/internal/engine/GfxdDataSerializable.java b/gemfirexd/core/src/main/java/com/pivotal/gemfirexd/internal/engine/GfxdDataSerializable.java index ec18c1e8d..b22b0aa36 100644 --- a/gemfirexd/core/src/main/java/com/pivotal/gemfirexd/internal/engine/GfxdDataSerializable.java +++ b/gemfirexd/core/src/main/java/com/pivotal/gemfirexd/internal/engine/GfxdDataSerializable.java @@ -89,6 +89,7 @@ import com.pivotal.gemfirexd.internal.engine.ui.SnappyRegionStatsCollectorResult; import com.pivotal.gemfirexd.internal.impl.store.raw.data.GfxdJarMessage; import com.pivotal.gemfirexd.internal.snappy.LeadNodeExecutionContext; +import com.pivotal.gemfirexd.internal.snappy.hivetables.dto.ExternalHiveTablesCollectorResult; import com.pivotal.gemfirexd.tools.planexporter.ExecutionPlanMessage; /** @@ -270,6 +271,8 @@ public static synchronized boolean initTypes() { () -> new SnappyResultHolder()); DSFIDFactory.registerGemFireXDClass(SNAPPY_REGION_STATS_RESULT, () -> new SnappyRegionStatsCollectorResult()); + DSFIDFactory.registerGemFireXDClass(HIVE_TABLES_COLLECTOR_RESULT, + () -> new ExternalHiveTablesCollectorResult()); DSFIDFactory.registerGemFireXDClass(MEMBER_STATISTICS_MESSAGE, () -> new MemberStatisticsMessage()); DSFIDFactory.registerGemFireXDClass(MEMBER_LOGS_MESSAGE, diff --git a/gemfirexd/core/src/main/java/com/pivotal/gemfirexd/internal/engine/GfxdSerializable.java b/gemfirexd/core/src/main/java/com/pivotal/gemfirexd/internal/engine/GfxdSerializable.java index cd78c7782..99a722839 100644 --- a/gemfirexd/core/src/main/java/com/pivotal/gemfirexd/internal/engine/GfxdSerializable.java +++ b/gemfirexd/core/src/main/java/com/pivotal/gemfirexd/internal/engine/GfxdSerializable.java @@ -326,7 +326,7 @@ public interface GfxdSerializable extends GfxdDSFID { byte SNAPPY_REGION_STATS_RESULT = 111; - // 112 is unused -- use for new IDs + byte HIVE_TABLES_COLLECTOR_RESULT= 112; byte COLUMN_FORMAT_KEY = 113; diff --git a/gemfirexd/core/src/main/java/com/pivotal/gemfirexd/internal/engine/Misc.java b/gemfirexd/core/src/main/java/com/pivotal/gemfirexd/internal/engine/Misc.java index 8b1192b4c..c7f63d594 100644 --- a/gemfirexd/core/src/main/java/com/pivotal/gemfirexd/internal/engine/Misc.java +++ b/gemfirexd/core/src/main/java/com/pivotal/gemfirexd/internal/engine/Misc.java @@ -15,6 +15,24 @@ * LICENSE file. */ +/* + * Changes for SnappyData data platform. + * + * Portions Copyright (c) 2017-2019 TIBCO Software Inc. All rights reserved. + * + * Licensed 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. See accompanying + * LICENSE file. + */ package com.pivotal.gemfirexd.internal.engine; import java.io.CharArrayWriter; @@ -275,6 +293,20 @@ public static Set getLeadNode() { throw new NoMemberFoundException("SnappyData Lead node is not available"); } + /** + * + * @return Optional of profile of primary lead node if primary lead exists in cluster + * Optional#empty if primary lead node does not exist in cluster + */ + public static Optional getPrimaryLeadProfile(){ + return getLeadNode().stream().map(GemFireXDUtils::getGfxdProfile) + .filter(GfxdDistributionAdvisor.GfxdProfile::hasSparkURL).findFirst(); + } + + public static boolean isLead(){ + return GemFireXDUtils.getGfxdAdvisor().getMyProfile().hasSparkURL(); + } + /** * Check if {@link GemFireCache} is closed or is in the process of closing and * throw {@link CacheClosedException} if so. diff --git a/gemfirexd/core/src/main/java/com/pivotal/gemfirexd/internal/engine/diag/HiveTablesVTI.java b/gemfirexd/core/src/main/java/com/pivotal/gemfirexd/internal/engine/diag/HiveTablesVTI.java index 4b50982cd..b7beed268 100644 --- a/gemfirexd/core/src/main/java/com/pivotal/gemfirexd/internal/engine/diag/HiveTablesVTI.java +++ b/gemfirexd/core/src/main/java/com/pivotal/gemfirexd/internal/engine/diag/HiveTablesVTI.java @@ -21,18 +21,26 @@ import java.sql.ResultSetMetaData; import java.sql.SQLException; import java.sql.Types; +import java.util.ArrayList; +import java.util.Collection; import java.util.Collections; import java.util.Iterator; +import java.util.List; import java.util.ListIterator; +import java.util.concurrent.TimeUnit; +import com.gemstone.gemfire.cache.execute.FunctionService; import com.gemstone.gemfire.internal.cache.ExternalTableMetaData; import com.gemstone.gemfire.internal.shared.SystemProperties; +import com.google.common.collect.Iterators; import com.pivotal.gemfirexd.internal.catalog.ExternalCatalog; import com.pivotal.gemfirexd.internal.engine.GfxdVTITemplate; import com.pivotal.gemfirexd.internal.engine.GfxdVTITemplateNoAllNodesRoute; import com.pivotal.gemfirexd.internal.engine.Misc; +import com.pivotal.gemfirexd.internal.engine.distributed.GfxdDistributionAdvisor; import com.pivotal.gemfirexd.internal.engine.jdbc.GemFireXDRuntimeException; import com.pivotal.gemfirexd.internal.iapi.sql.ResultColumnDescriptor; +import com.pivotal.gemfirexd.internal.iapi.sql.conn.LanguageConnectionContext; import com.pivotal.gemfirexd.internal.iapi.types.HarmonySerialClob; import com.pivotal.gemfirexd.internal.impl.jdbc.EmbedResultSetMetaData; import com.pivotal.gemfirexd.internal.impl.jdbc.Util; @@ -40,6 +48,8 @@ import com.pivotal.gemfirexd.internal.shared.common.SharedUtils; import com.pivotal.gemfirexd.internal.shared.common.reference.Limits; import com.pivotal.gemfirexd.internal.shared.common.reference.SQLState; +import com.pivotal.gemfirexd.internal.snappy.hivetables.ExternalHiveTablesCollectorFunction; +import com.pivotal.gemfirexd.internal.snappy.hivetables.dto.ExternalHiveTablesCollectorResult; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -69,7 +79,9 @@ public boolean next() { if (!GfxdDataDictionary.SKIP_CATALOG_OPS.get().skipHiveCatalogCalls && (hiveCatalog = Misc.getMemStore().getExternalCatalog()) != null) { try { - this.tableMetas = hiveCatalog.getCatalogTables().iterator(); + List catalogTables = hiveCatalog.getCatalogTables(); + Collection externalHiveTables = getExternalHiveTables(); + this.tableMetas = Iterators.concat(catalogTables.iterator(), externalHiveTables.iterator()); } catch (Exception e) { // log and move on logger.warn("ERROR in retrieving Hive tables: " + e.toString()); @@ -96,6 +108,21 @@ public boolean next() { } } + private Collection getExternalHiveTables() throws InterruptedException { + GfxdDistributionAdvisor.GfxdProfile primaryLeadProfile = Misc.getPrimaryLeadProfile() + .orElseThrow(() -> { + throw new IllegalStateException("Lead not available"); + }); + if (!Misc.isLead() && primaryLeadProfile.isHiveSessionInitialized()) { + ArrayList result = (ArrayList)FunctionService.onMembers(Misc.getLeadNode()) + .execute(ExternalHiveTablesCollectorFunction.ID) + .getResult(30, TimeUnit.SECONDS); + return ((ExternalHiveTablesCollectorResult)(result).get(0)).getTablesMetadata(); + } else { + return Collections.emptyList(); + } + } + @Override protected Object getObjectForColumn(int columnNumber) { String provider = this.currentTableMeta.shortProvider; diff --git a/gemfirexd/core/src/main/java/com/pivotal/gemfirexd/internal/engine/distributed/GfxdDistributionAdvisor.java b/gemfirexd/core/src/main/java/com/pivotal/gemfirexd/internal/engine/distributed/GfxdDistributionAdvisor.java index 80f5a9366..b4e7440cf 100644 --- a/gemfirexd/core/src/main/java/com/pivotal/gemfirexd/internal/engine/distributed/GfxdDistributionAdvisor.java +++ b/gemfirexd/core/src/main/java/com/pivotal/gemfirexd/internal/engine/distributed/GfxdDistributionAdvisor.java @@ -1336,6 +1336,13 @@ public static final class GfxdProfile extends DistributionAdvisor.Profile */ private long usableHeap; + /** + * Flag indicating whether the external hive catalog is enabled. By default it's false. + * Set to true when hive session is initialized at + * org.apache.spark.sql.SnappyContext#newHiveSession(). + */ + private boolean hiveSessionInitialized; + /** for deserialization */ public GfxdProfile() { this.initialized = true; @@ -1450,7 +1457,7 @@ public final void setInitialized(boolean initialized) { public final boolean getInitialized() { return this.initialized; } - + public final String getLocale() { return this.dbLocaleStr; } @@ -1463,6 +1470,14 @@ public final long getUsableHeap() { return this.usableHeap; } + public void setHiveSessionInitialized(boolean hiveSessionInitialized) { + this.hiveSessionInitialized = hiveSessionInitialized; + } + + public boolean isHiveSessionInitialized() { + return hiveSessionInitialized; + } + @Override public void processIncoming(DistributionManager dm, String adviseePath, boolean removeProfile, boolean exchangeProfiles, @@ -1549,6 +1564,7 @@ public final void toData(DataOutput out) throws IOException { } out.writeLong(this.catalogSchemaVersion.get()); out.writeLong(this.usableHeap); + out.writeBoolean(this.hiveSessionInitialized); } @Override @@ -1589,6 +1605,7 @@ public final void fromData(DataInput in) throws IOException, if ((this.flags & F_HAS_USABLE_HEAP) != 0) { this.usableHeap = in.readLong(); } + this.hiveSessionInitialized = in.readBoolean(); } @Override @@ -1608,6 +1625,7 @@ public final void fillInToString(StringBuilder sb) { sb.append("; numProcessors=").append(this.numProcessors); sb.append("; catalogVersion=").append(this.catalogSchemaVersion.get()); sb.append("; usableHeap=").append(this.usableHeap); + sb.append("; hiveSessionInitialized=").append(this.hiveSessionInitialized); } } diff --git a/gemfirexd/core/src/main/java/com/pivotal/gemfirexd/internal/engine/store/GemFireStore.java b/gemfirexd/core/src/main/java/com/pivotal/gemfirexd/internal/engine/store/GemFireStore.java index bee96245e..525096cf9 100644 --- a/gemfirexd/core/src/main/java/com/pivotal/gemfirexd/internal/engine/store/GemFireStore.java +++ b/gemfirexd/core/src/main/java/com/pivotal/gemfirexd/internal/engine/store/GemFireStore.java @@ -99,6 +99,7 @@ import com.pivotal.gemfirexd.internal.engine.GemFireXDQueryTimeStatistics; import com.pivotal.gemfirexd.internal.engine.GfxdConstants; import com.pivotal.gemfirexd.internal.engine.GfxdDataSerializable; +import com.pivotal.gemfirexd.internal.snappy.hivetables.ExternalHiveTablesCollectorFunction; import com.pivotal.gemfirexd.internal.engine.Misc; import com.pivotal.gemfirexd.internal.engine.SigThreadDumpHandler; import com.pivotal.gemfirexd.internal.engine.access.GemFireTransaction; @@ -1209,6 +1210,7 @@ else if (!hostData) { FunctionService.registerFunction(new QueryCancelFunction()); FunctionService.registerFunction(new SnappyRegionStatsCollectorFunction()); FunctionService.registerFunction(new DiskStoreIDs.DiskStoreIDFunction()); + FunctionService.registerFunction(new ExternalHiveTablesCollectorFunction()); final ConnectionSignaller signaller = ConnectionSignaller.getInstance(); if (logger.fineEnabled()) { @@ -2696,6 +2698,8 @@ public static final class StoreAdvisee implements DistributionAdvisee { */ private volatile SortedSet serverGroups; + private boolean hiveSessionInitialized; + private final CancelCriterion stopper = new CancelCriterion() { @Override @@ -2781,6 +2785,10 @@ final synchronized void setVMKind(VMKind newKind) { + " GemFireXD not booted or closed down."); } + public void setHiveSessionInitialized(boolean hiveSessionInitialized) { + this.hiveSessionInitialized = hiveSessionInitialized; + } + /** * Get the server groups of this VM. */ @@ -2809,6 +2817,7 @@ public void fillInProfile(Profile p) { .isDataDictionaryPersistent()); profile.setLocale(Misc.getMemStoreBooting().getLocale()); profile.serialNumber = getSerialNumber(); + profile.setHiveSessionInitialized(hiveSessionInitialized); } @Override diff --git a/gemfirexd/core/src/main/java/com/pivotal/gemfirexd/internal/snappy/CallbackFactoryProvider.java b/gemfirexd/core/src/main/java/com/pivotal/gemfirexd/internal/snappy/CallbackFactoryProvider.java index c2635d0f1..561db4e90 100644 --- a/gemfirexd/core/src/main/java/com/pivotal/gemfirexd/internal/snappy/CallbackFactoryProvider.java +++ b/gemfirexd/core/src/main/java/com/pivotal/gemfirexd/internal/snappy/CallbackFactoryProvider.java @@ -17,12 +17,14 @@ package com.pivotal.gemfirexd.internal.snappy; +import java.util.Collection; import java.util.HashSet; import java.util.Iterator; import java.util.List; import com.gemstone.gemfire.distributed.internal.membership.InternalDistributedMember; import com.gemstone.gemfire.internal.ByteArrayDataInput; +import com.gemstone.gemfire.internal.cache.ExternalTableMetaData; import com.gemstone.gemfire.internal.shared.Version; import com.gemstone.gemfire.internal.snappy.StoreCallbacks; import com.pivotal.gemfirexd.internal.iapi.sql.ParameterValueSet; @@ -111,6 +113,11 @@ public String getClusterType() { @Override public void setLeadClassLoader() { } + + @Override + public Collection getHiveTablesMetadata() { + return null; + } }; public static ClusterCallbacks getClusterCallbacks() { diff --git a/gemfirexd/core/src/main/java/com/pivotal/gemfirexd/internal/snappy/ClusterCallbacks.java b/gemfirexd/core/src/main/java/com/pivotal/gemfirexd/internal/snappy/ClusterCallbacks.java index 5752356ba..f68aeaab7 100644 --- a/gemfirexd/core/src/main/java/com/pivotal/gemfirexd/internal/snappy/ClusterCallbacks.java +++ b/gemfirexd/core/src/main/java/com/pivotal/gemfirexd/internal/snappy/ClusterCallbacks.java @@ -17,12 +17,14 @@ package com.pivotal.gemfirexd.internal.snappy; +import java.util.Collection; import java.util.HashSet; import java.util.Iterator; import java.util.List; import com.gemstone.gemfire.distributed.internal.membership.InternalDistributedMember; import com.gemstone.gemfire.internal.ByteArrayDataInput; +import com.gemstone.gemfire.internal.cache.ExternalTableMetaData; import com.gemstone.gemfire.internal.shared.Version; import com.pivotal.gemfirexd.internal.iapi.sql.ParameterValueSet; import com.pivotal.gemfirexd.internal.iapi.types.DataValueDescriptor; @@ -71,4 +73,11 @@ Iterator getRowIterator(DataValueDescriptor[] dvds, int[] types, String getClusterType(); void setLeadClassLoader(); + + /** + * Used for fetching the metadata of hive tables stored in external hive metastore from lead. + * @return Collection of {@link ExternalTableMetaData} representing necessary information to + * required by SYS.HIVETABLES VTI. + */ + Collection getHiveTablesMetadata(); } diff --git a/gemfirexd/core/src/main/java/com/pivotal/gemfirexd/internal/snappy/hivetables/ExternalHiveTablesCollectorFunction.java b/gemfirexd/core/src/main/java/com/pivotal/gemfirexd/internal/snappy/hivetables/ExternalHiveTablesCollectorFunction.java new file mode 100644 index 000000000..c390502e7 --- /dev/null +++ b/gemfirexd/core/src/main/java/com/pivotal/gemfirexd/internal/snappy/hivetables/ExternalHiveTablesCollectorFunction.java @@ -0,0 +1,65 @@ +/* + * Copyright (c) 2017-2019 TIBCO Software Inc. All rights reserved. + * + * Licensed 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. See accompanying + * LICENSE file. + */ + +package com.pivotal.gemfirexd.internal.snappy.hivetables; + +import java.util.Collection; + +import com.gemstone.gemfire.cache.execute.Function; +import com.gemstone.gemfire.cache.execute.FunctionContext; +import com.gemstone.gemfire.internal.cache.ExternalTableMetaData; +import com.pivotal.gemfirexd.internal.snappy.CallbackFactoryProvider; +import com.pivotal.gemfirexd.internal.snappy.hivetables.dto.ExternalHiveTablesCollectorResult; + +/** + * Server node(s) use this function to retrieve metadata of hive tables stored + * in external hive metastore (if configured) which is available on lead node. + * Returns {@link ExternalHiveTablesCollectorResult}. + */ +public class ExternalHiveTablesCollectorFunction implements Function { + + public static final String ID = "ExternalHiveTablesCollectorFunction"; + + @Override + public boolean hasResult() { + return true; + } + + @Override + public void execute(FunctionContext context) { + Collection hiveTablesMetadata = + CallbackFactoryProvider.getClusterCallbacks().getHiveTablesMetadata(); + context.getResultSender().lastResult(new ExternalHiveTablesCollectorResult(hiveTablesMetadata)); + } + + @Override + public String getId() { + return ID; + } + + //todo[vatsal] : verify this return value + @Override + public boolean optimizeForWrite() { + return false; + } + + //todo[vatsal] : verify this return value + @Override + public boolean isHA() { + return false; + } +} diff --git a/gemfirexd/core/src/main/java/com/pivotal/gemfirexd/internal/snappy/hivetables/dto/ExternalHiveTablesCollectorResult.java b/gemfirexd/core/src/main/java/com/pivotal/gemfirexd/internal/snappy/hivetables/dto/ExternalHiveTablesCollectorResult.java new file mode 100644 index 000000000..29d8d1d5c --- /dev/null +++ b/gemfirexd/core/src/main/java/com/pivotal/gemfirexd/internal/snappy/hivetables/dto/ExternalHiveTablesCollectorResult.java @@ -0,0 +1,111 @@ +/* + * Copyright (c) 2017-2019 TIBCO Software Inc. All rights reserved. + * + * Licensed 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. See accompanying + * LICENSE file. + */ + +package com.pivotal.gemfirexd.internal.snappy.hivetables.dto; + +import java.io.DataInput; +import java.io.DataOutput; +import java.io.IOException; +import java.util.ArrayList; +import java.util.Collection; +import java.util.List; + +import com.gemstone.gemfire.DataSerializer; +import com.gemstone.gemfire.internal.InternalDataSerializer; +import com.gemstone.gemfire.internal.cache.ExternalTableMetaData; +import com.pivotal.gemfirexd.internal.engine.GfxdDataSerializable; +import com.pivotal.gemfirexd.internal.engine.diag.HiveTablesVTI; +import com.pivotal.gemfirexd.internal.snappy.hivetables.ExternalHiveTablesCollectorFunction; + +/** + * Result returned by {@link ExternalHiveTablesCollectorFunction}. Contains Collection of + * {@link ExternalTableMetaData}. + *
+ * Important Note: Only contains those fields of {@link ExternalTableMetaData} which are + * required by {@link HiveTablesVTI} are serialized. Remaining fields will be null. + */ +public class ExternalHiveTablesCollectorResult extends GfxdDataSerializable { + + private Collection tablesMetadata; + + public ExternalHiveTablesCollectorResult(Collection tablesMetadata) { + this.tablesMetadata = tablesMetadata; + } + + public ExternalHiveTablesCollectorResult() { + } + + @Override + public byte getGfxdID() { + return HIVE_TABLES_COLLECTOR_RESULT; + } + + public Collection getTablesMetadata() { + return tablesMetadata; + } + + @Override + public void toData(DataOutput out) throws IOException { + InternalDataSerializer.writeArrayLength(tablesMetadata.size(), out); + for (ExternalTableMetaData md : tablesMetadata) { + DataSerializer.writeString(md.entityName, out); + DataSerializer.writeObject(md.schema, out); + DataSerializer.writeString(md.tableType, out); + DataSerializer.writeString(md.compressionCodec, out); + DataSerializer.writeString(md.shortProvider, out); + DataSerializer.writeString(md.dataSourcePath, out); + DataSerializer.writeString(md.viewText, out); + InternalDataSerializer.writeArrayLength(md.columns.size(), out); + for (ExternalTableMetaData.Column c : md.columns) { + DataSerializer.writeString(c.name, out); + out.writeInt(c.typeId); + DataSerializer.writeString(c.typeName, out); + out.writeInt(c.precision); + out.writeInt(c.scale); + out.writeInt(c.maxWidth); + out.writeBoolean(c.nullable); + } + } + } + + @Override + public void fromData(DataInput out) throws IOException, + ClassNotFoundException { + int tableMetadataSize = InternalDataSerializer.readArrayLength(out); + this.tablesMetadata = new ArrayList<>(tableMetadataSize); + for (int i = 0; i < tableMetadataSize; i++) { + ExternalTableMetaData md = new ExternalTableMetaData(); + md.entityName = DataSerializer.readString(out); + md.schema = DataSerializer.readObject(out); + md.tableType = DataSerializer.readString(out); + md.compressionCodec = DataSerializer.readString(out); + md.shortProvider = DataSerializer.readString(out); + md.dataSourcePath = DataSerializer.readString(out); + md.viewText = DataSerializer.readString(out); + int columnsSize = InternalDataSerializer.readArrayLength(out); + List columns = new ArrayList<>(columnsSize); + for (int j = 0; j < columnsSize; j++) { + ExternalTableMetaData.Column c = new ExternalTableMetaData.Column( + DataSerializer.readString(out), out.readInt(), DataSerializer.readString(out), + out.readInt(), out.readInt(), out.readInt(), out.readBoolean()); + columns.add(c); + } + md.columns = columns; + this.tablesMetadata.add(md); + } + } +} diff --git a/gemfirexd/tools/src/test/resources/codeAnalysis/sanctionedDataSerializables.txt b/gemfirexd/tools/src/test/resources/codeAnalysis/sanctionedDataSerializables.txt index e02eb0a19..fb471aafe 100644 --- a/gemfirexd/tools/src/test/resources/codeAnalysis/sanctionedDataSerializables.txt +++ b/gemfirexd/tools/src/test/resources/codeAnalysis/sanctionedDataSerializables.txt @@ -135,8 +135,8 @@ fromData,53,2a2bb700152bb9001601003d1c047e99000c2a2bb8001788b500051c057e9900112a toData,71,2a2bb700112ab40009412ab4000a10bf7e360420140007949900091504058036042b1504b9001202002ab6000b99000c2ab40005852bb8001320140007949900082b20b80014b1 com/pivotal/gemfirexd/internal/engine/distributed/GfxdDistributionAdvisor$GfxdProfile,2 -fromData,216,2a2bb700552a2bb900560100b80057b500012bb800583d1c02a0000b2a01b5001ea700262abb005959b7005ab5001e1c8402ff9e00142ab4001e2bb8005bb9005c020057a7ffeb2a2bb900560100b5001c2a2bb9005d0100b500032ab4001c057e99000b2a2bb8005bb5001f2ab4001c10087e99000d2a2bb9005e0100b500072ab7001b2ab6002199000b2a2bb8005bb500082ab4001c10107e9900172abb000b592bb9005f0100b7000cb5000da700152abb000b592bb9005e010085b7000cb5000d2ab4001c10207e99000d2a2bb9005f0100b50015b1 -toData,236,2a2bb700462b2ab40001b60047b9004802002ab4001ec7000b022bb80049a700352ab4001eb9004a01002bb800492ab4001eb9004b01004d2cb9003e01009900152cb9003f0100c0004c4e2d2bb8004da7ffe82bb8004e4db2004f2cb600509b000704a70004033eb200512cb600509e000704a700040336042ab4001c36051d99000b150510fd7e913605150499000b150510f77e9136052b1505b9004802002b2ab40003b9005202001d9a000b2ab4001f2bb8004d15049a000d2b2ab40007b9005302002ab6002199000b2ab400082bb8004d2b2ab4000db60022b9005403002b2ab40015b900540300b1 +fromData,226,2a2bb700562a2bb900570100b80058b500012bb800593d1c02a0000b2a01b5001ea700262abb005a59b7005bb5001e1c8402ff9e00142ab4001e2bb8005cb9005d020057a7ffeb2a2bb900570100b5001c2a2bb9005e0100b500032ab4001c057e99000b2a2bb8005cb5001f2ab4001c10087e99000d2a2bb9005f0100b500072ab7001b2ab6002199000b2a2bb8005cb500082ab4001c10107e9900172abb000b592bb900600100b7000cb5000da700152abb000b592bb9005f010085b7000cb5000d2ab4001c10207e99000d2a2bb900600100b500152a2bb9005e0100b50025b1 +toData,246,2a2bb700472b2ab40001b60048b9004902002ab4001ec7000b022bb8004aa700352ab4001eb9004b01002bb8004a2ab4001eb9004c01004d2cb9003f01009900152cb900400100c0004d4e2d2bb8004ea7ffe82bb8004f4db200502cb600519b000704a70004033eb200522cb600519e000704a700040336042ab4001c36051d99000b150510fd7e913605150499000b150510f77e9136052b1505b9004902002b2ab40003b9005302001d9a000b2ab4001f2bb8004e15049a000d2b2ab40007b9005402002ab6002199000b2ab400082bb8004e2b2ab4000db60022b9005503002b2ab40015b9005503002b2ab40025b900530200b1 com/pivotal/gemfirexd/internal/engine/distributed/GfxdDumpLocalResultMessage,2 fromData,16,2a2bb7005a2a2bb9005b0100b50002b1 @@ -546,3 +546,6 @@ com/pivotal/gemfirexd/tools/planexporter/ExecutionPlanMessage$ExecutionPlanReply fromData,14,2a2bb700052a2bb80006b50001b1 toData,14,2a2bb700072ab400012bb80008b1 +com/pivotal/gemfirexd/internal/snappy/hivetables/dto/ExternalHiveTablesCollectorResult,2 +fromData,212,2bb800203d2abb0021591cb70022b50002033e1d1ca200bebb000959b700233a0419042bb80024b5000a19042bb80025b5000c19042bb80024b5000e19042bb80024b5000f19042bb80024b5001019042bb80024b5001119042bb80024b500122bb800203605bb0021591505b700223a0603360715071505a20042bb0016592bb800242bb9002601002bb800242bb9002601002bb9002601002bb9002601002bb900270100b700283a0819061908b90029020057840701a7ffbd19041906b500132ab400021904b9002a020057840301a7ff43b1 +toData,224,2ab40002b9000401002bb800052ab40002b9000601004d2cb9000701009900c22cb900080100c000094e2db4000a2bb8000b2db4000c2bb8000d2db4000e2bb8000b2db4000f2bb8000b2db400102bb8000b2db400112bb8000b2db400122bb8000b2db40013b9001401002bb800052db40013b9001501003a041904b90007010099005b1904b900080100c000163a051905b400172bb8000b2b1905b40018b9001902001905b4001a2bb8000b2b1905b4001bb9001902002b1905b4001cb9001902002b1905b4001db9001902002b1905b4001eb9001f0200a7ffa1a7ff3bb1 \ No newline at end of file