You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ignite.apache.org by se...@apache.org on 2020/08/20 11:35:46 UTC
[ignite] branch master updated: IGNITE-13367 Unnecessary system
classes registration fixed,
'Type not found' scenario handling improved. - Fixes #8162.
This is an automated email from the ASF dual-hosted git repository.
sergeychugunov 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 cdb5500 IGNITE-13367 Unnecessary system classes registration fixed, 'Type not found' scenario handling improved. - Fixes #8162.
cdb5500 is described below
commit cdb5500e8aa5e1484599319d2d86d1ad33015808
Author: Sergey Chugunov <se...@gmail.com>
AuthorDate: Thu Aug 20 14:27:00 2020 +0300
IGNITE-13367 Unnecessary system classes registration fixed, 'Type not found' scenario handling improved. - Fixes #8162.
Signed-off-by: Sergey Chugunov <se...@gmail.com>
---
.../meta/subcommands/MetadataRemoveCommand.java | 7 +-
.../util/GridCommandHandlerMetadataTest.java | 105 +++++++++++++++++++++
.../internal/binary/BinaryClassDescriptor.java | 10 +-
.../commandline/meta/tasks/MetadataRemoveTask.java | 3 +
.../commandline/meta/tasks/MetadataTypeArgs.java | 7 +-
.../main/resources/META-INF/classnames.properties | 49 ++++++++++
6 files changed, 171 insertions(+), 10 deletions(-)
diff --git a/modules/control-utility/src/main/java/org/apache/ignite/internal/commandline/meta/subcommands/MetadataRemoveCommand.java b/modules/control-utility/src/main/java/org/apache/ignite/internal/commandline/meta/subcommands/MetadataRemoveCommand.java
index 7d4b0e6..08e731b 100644
--- a/modules/control-utility/src/main/java/org/apache/ignite/internal/commandline/meta/subcommands/MetadataRemoveCommand.java
+++ b/modules/control-utility/src/main/java/org/apache/ignite/internal/commandline/meta/subcommands/MetadataRemoveCommand.java
@@ -86,11 +86,8 @@ public class MetadataRemoveCommand
/** {@inheritDoc} */
@Override protected void printResult(MetadataMarshalled res, Logger log) {
- if (res.metadata() == null) {
- log.info("Type not found");
-
- return;
- }
+ if (res.metadata() == null)
+ throw new IllegalArgumentException("Failed to remove binary type, type not found: " + arg());
BinaryMetadata m = res.metadata();
diff --git a/modules/control-utility/src/test/java/org/apache/ignite/util/GridCommandHandlerMetadataTest.java b/modules/control-utility/src/test/java/org/apache/ignite/util/GridCommandHandlerMetadataTest.java
index d7a1d1e..e4a2579 100644
--- a/modules/control-utility/src/test/java/org/apache/ignite/util/GridCommandHandlerMetadataTest.java
+++ b/modules/control-utility/src/test/java/org/apache/ignite/util/GridCommandHandlerMetadataTest.java
@@ -26,10 +26,14 @@ import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import java.sql.Statement;
+import java.util.Collection;
import java.util.Date;
import java.util.HashMap;
import java.util.UUID;
+import java.util.stream.Collectors;
+
import org.apache.ignite.IgniteBinary;
+import org.apache.ignite.IgniteCache;
import org.apache.ignite.IgniteLogger;
import org.apache.ignite.Ignition;
import org.apache.ignite.binary.BinaryObject;
@@ -43,6 +47,7 @@ import org.apache.ignite.internal.binary.BinarySchema;
import org.apache.ignite.internal.binary.BinaryTypeImpl;
import org.apache.ignite.testframework.GridTestUtils;
import org.jetbrains.annotations.Nullable;
+import org.junit.After;
import org.junit.Test;
import static org.apache.ignite.internal.commandline.CommandHandler.EXIT_CODE_INVALID_ARGUMENTS;
@@ -60,6 +65,12 @@ public class GridCommandHandlerMetadataTest extends GridCommandHandlerClusterByC
/** Types count. */
private static final int TYPES_CNT = 10;
+ /** */
+ @After
+ public void clear() {
+ crd.binary().types().stream().forEach(type -> crd.context().cacheObjects().removeType(type.typeId()));
+ }
+
/**
* Check the command '--meta list'.
* Steps:
@@ -89,6 +100,100 @@ public class GridCommandHandlerMetadataTest extends GridCommandHandlerClusterByC
}
/**
+ * Checks that command remove when provided with absent type name prints informative message and
+ * returns corresponding error code (invalid argument).
+ *
+ * Test scenario:
+ * <ol>
+ * <li>
+ * Execute meta --remove command passing non-existing type name.
+ * </li>
+ * <li>
+ * Verify that invalid argument error code is returned, message is printed to command output.
+ * </li>
+ * <li>
+ * Execute meta --remove command passing non-existing type id.
+ * </li>
+ * <li>
+ * Verify that invalid argument error code is returned, message is printed to command output.
+ * </li>
+ * </ol>
+ */
+ @Test
+ public void testMetadataRemoveWrongType() {
+ injectTestSystemOut();
+
+ String wrongTypeName = "Type01";
+
+ assertEquals(EXIT_CODE_INVALID_ARGUMENTS, execute("--meta", "remove", "--typeName", wrongTypeName));
+
+ assertContains(log, testOut.toString(), "Failed to remove binary type, type not found: " + wrongTypeName);
+
+ int wrongTypeId = 42;
+
+ assertEquals(EXIT_CODE_INVALID_ARGUMENTS, execute("--meta", "remove", "--typeId", Integer.toString(wrongTypeId)));
+
+ assertContains(log, testOut.toString(), "Failed to remove binary type, type not found: ");
+ assertContains(log, testOut.toString(), "0x" +
+ Integer.toHexString(wrongTypeId).toUpperCase() + " (" + wrongTypeId + ")");
+ }
+
+ /**
+ * Checks that commands --meta list and --meta remove don't cause registering system or internal classes
+ * in binary metadata.
+ *
+ * Test scenario:
+ * <ol>
+ * <li>
+ * Put a value of a user class to the default cache that requires registering new binary type for that class.
+ * </li>
+ * <li>
+ * Run --meta list command to check that class is registered.
+ * </li>
+ * <li>
+ * Destroy the cache. Remove binary type with --meta remove command.
+ * </li>
+ * <li>
+ * Run --meta list again to check that no additional system or internal classes were registered.
+ * </li>
+ * </ol>
+ */
+ @Test
+ public void testMetadataForInternalClassesIsNotRegistered() {
+ injectTestSystemOut();
+
+ IgniteCache<Object, Object> dfltCache = grid(0).getOrCreateCache(DEFAULT_CACHE_NAME);
+
+ dfltCache.put(1, new TestValue());
+
+ Collection<BinaryType> metadata = crd.context().cacheObjects().metadata();
+
+ assertEquals(EXIT_CODE_OK, execute("--meta", "list"));
+
+ assertEquals(metadata.toString(), 1, metadata.size());
+
+ assertContains(log, testOut.toString(), "typeName=" + TestValue.class.getTypeName());
+
+ grid(0).destroyCache(DEFAULT_CACHE_NAME);
+
+ metadata = crd.context().cacheObjects().metadata();
+
+ assertEquals(metadata.toString(), 1, metadata.size());
+
+ assertEquals(EXIT_CODE_OK, execute("--meta", "remove", "--typeName", TestValue.class.getTypeName()));
+
+ metadata = crd.context().cacheObjects().metadata();
+
+ assertEquals("Binary metadata is expected to be empty but the following binary types were found: "
+ + metadata
+ .stream()
+ .map(b -> "BinaryType[typeId=" + b.typeId() + ", typeName=" + b.typeName() + ']')
+ .collect(Collectors.toList()).toString(),
+ 0,
+ metadata.size());
+ }
+
+ /**
* Check the command '--meta details'.
* Steps:
* - Creates binary two types for a test (by BinaryObjectBuilder) with several fields and shemas;
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/binary/BinaryClassDescriptor.java b/modules/core/src/main/java/org/apache/ignite/internal/binary/BinaryClassDescriptor.java
index 5b58300..f15ac5b 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/binary/BinaryClassDescriptor.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/binary/BinaryClassDescriptor.java
@@ -827,12 +827,14 @@ public class BinaryClassDescriptor {
BinarySchema newSchema = collector.schema();
- BinaryMetadata meta = new BinaryMetadata(typeId, typeName, collector.meta(),
- affKeyFieldName, Collections.singleton(newSchema), false, null);
+ schemaReg.addSchema(newSchema.schemaId(), newSchema);
- ctx.updateMetadata(typeId, meta, writer.failIfUnregistered());
+ if (userType) {
+ BinaryMetadata meta = new BinaryMetadata(typeId, typeName, collector.meta(),
+ affKeyFieldName, Collections.singleton(newSchema), false, null);
- schemaReg.addSchema(newSchema.schemaId(), newSchema);
+ ctx.updateMetadata(typeId, meta, writer.failIfUnregistered());
+ }
}
}
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/commandline/meta/tasks/MetadataRemoveTask.java b/modules/core/src/main/java/org/apache/ignite/internal/commandline/meta/tasks/MetadataRemoveTask.java
index f7de2ca..e85d1d6 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/commandline/meta/tasks/MetadataRemoveTask.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/commandline/meta/tasks/MetadataRemoveTask.java
@@ -100,6 +100,9 @@ public class MetadataRemoveTask extends VisorMultiNodeTask<MetadataTypeArgs, Met
BinaryMetadata meta = ((CacheObjectBinaryProcessorImpl)ignite.context().cacheObjects())
.binaryMetadata(typeId);
+ if (meta == null)
+ return new MetadataMarshalled(null, null);
+
byte[] marshalled = U.marshal(ignite.context(), meta);
res = new MetadataMarshalled(marshalled, meta);
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/commandline/meta/tasks/MetadataTypeArgs.java b/modules/core/src/main/java/org/apache/ignite/internal/commandline/meta/tasks/MetadataTypeArgs.java
index 05f8139..1704b76 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/commandline/meta/tasks/MetadataTypeArgs.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/commandline/meta/tasks/MetadataTypeArgs.java
@@ -91,6 +91,11 @@ public class MetadataTypeArgs extends IgniteDataTransferObject {
/** {@inheritDoc} */
@Override public String toString() {
- return typeId != null ? "0x" + Integer.toHexString(typeId).toUpperCase() : typeName;
+ return typeId != null ? printInt(typeId) : typeName;
+ }
+
+ /** */
+ private String printInt(int val) {
+ return "0x" + Integer.toHexString(val).toUpperCase() + " (" + val + ')';
}
}
diff --git a/modules/core/src/main/resources/META-INF/classnames.properties b/modules/core/src/main/resources/META-INF/classnames.properties
index d4f4f01..f97d546 100644
--- a/modules/core/src/main/resources/META-INF/classnames.properties
+++ b/modules/core/src/main/resources/META-INF/classnames.properties
@@ -337,6 +337,54 @@ org.apache.ignite.internal.cluster.IgniteKillTask
org.apache.ignite.internal.cluster.IgniteKillTask$IgniteKillJob
org.apache.ignite.internal.cluster.NodeOrderComparator
org.apache.ignite.internal.cluster.NodeOrderLegacyComparator
+org.apache.ignite.internal.commandline.CommandList
+org.apache.ignite.internal.commandline.OutputFormat
+org.apache.ignite.internal.commandline.TxCommandArg
+org.apache.ignite.internal.commandline.baseline.AutoAdjustCommandArg
+org.apache.ignite.internal.commandline.baseline.BaselineSubcommands
+org.apache.ignite.internal.commandline.cache.CacheCommandList
+org.apache.ignite.internal.commandline.cache.CacheSubcommands
+org.apache.ignite.internal.commandline.cache.argument.DistributionCommandArg
+org.apache.ignite.internal.commandline.cache.argument.FindAndDeleteGarbageArg
+org.apache.ignite.internal.commandline.cache.argument.IdleVerifyCommandArg
+org.apache.ignite.internal.commandline.cache.argument.ListCommandArg
+org.apache.ignite.internal.commandline.cache.argument.PartitionReconciliationCommandArg
+org.apache.ignite.internal.commandline.cache.argument.ValidateIndexesCommandArg
+org.apache.ignite.internal.commandline.cache.check_indexes_inline_size.CheckIndexInlineSizesResult
+org.apache.ignite.internal.commandline.cache.check_indexes_inline_size.CheckIndexInlineSizesTask
+org.apache.ignite.internal.commandline.cache.check_indexes_inline_size.CheckIndexInlineSizesTask$CheckIndexInlineSizesJob
+org.apache.ignite.internal.commandline.cache.distribution.CacheDistributionGroup
+org.apache.ignite.internal.commandline.cache.distribution.CacheDistributionNode
+org.apache.ignite.internal.commandline.cache.distribution.CacheDistributionPartition
+org.apache.ignite.internal.commandline.cache.distribution.CacheDistributionTask
+org.apache.ignite.internal.commandline.cache.distribution.CacheDistributionTask$CacheDistributionJob
+org.apache.ignite.internal.commandline.cache.distribution.CacheDistributionTaskArg
+org.apache.ignite.internal.commandline.cache.distribution.CacheDistributionTaskResult
+org.apache.ignite.internal.commandline.cache.reset_lost_partitions.CacheResetLostPartitionsTask
+org.apache.ignite.internal.commandline.cache.reset_lost_partitions.CacheResetLostPartitionsTask$CacheResetLostPartitionsJob
+org.apache.ignite.internal.commandline.cache.reset_lost_partitions.CacheResetLostPartitionsTaskArg
+org.apache.ignite.internal.commandline.cache.reset_lost_partitions.CacheResetLostPartitionsTaskResult
+org.apache.ignite.internal.commandline.diagnostic.DiagnosticSubCommand
+org.apache.ignite.internal.commandline.diagnostic.PageLocksCommand$PageLocksCommandArg
+org.apache.ignite.internal.commandline.dr.DrSubCommandsList
+org.apache.ignite.internal.commandline.dr.subcommands.DrCacheCommand$Action
+org.apache.ignite.internal.commandline.dr.subcommands.DrCacheCommand$CacheFilter
+org.apache.ignite.internal.commandline.dr.subcommands.DrCacheCommand$SenderGroup
+org.apache.ignite.internal.commandline.management.ManagementCommandList
+org.apache.ignite.internal.commandline.management.ManagementURLCommandArg
+org.apache.ignite.internal.commandline.meta.subcommands.MetadataAbstractSubCommand.VoidDto
+org.apache.ignite.internal.commandline.meta.tasks.MetadataListResult
+org.apache.ignite.internal.commandline.meta.tasks.MetadataInfoTask
+org.apache.ignite.internal.commandline.meta.tasks.MetadataInfoTask.MetadataListJob
+org.apache.ignite.internal.commandline.meta.tasks.MetadataMarshalled
+org.apache.ignite.internal.commandline.meta.tasks.MetadataRemoveTask
+org.apache.ignite.internal.commandline.meta.tasks.MetadataRemoveTask$MetadataRemoveJob
+org.apache.ignite.internal.commandline.meta.tasks.MetadataRemoveTask$DropAllThinSessionsJob
+org.apache.ignite.internal.commandline.meta.tasks.MetadataTypeArgs
+org.apache.ignite.internal.commandline.meta.tasks.MetadataUpdateTask
+org.apache.ignite.internal.commandline.meta.tasks.MetadataUpdateTask.MetadataUpdateJob
+org.apache.ignite.internal.commandline.ru.RollingUpgradeCommandArg
+org.apache.ignite.internal.commandline.ru.RollingUpgradeSubCommands
org.apache.ignite.internal.compute.ComputeTaskCancelledCheckedException
org.apache.ignite.internal.compute.ComputeTaskTimeoutCheckedException
org.apache.ignite.internal.direct.DirectMessageReader$1
@@ -2457,3 +2505,4 @@ org.apache.ignite.transactions.TransactionTimeoutException
org.apache.ignite.transactions.TransactionUnsupportedConcurrencyException
org.apache.ignite.util.AttributeNodeFilter
org.apache.ignite.internal.processors.cache.SysCacheInconsistencyInternalKeyTest$KeyUtility
+org.apache.ignite.util.deque.FastSizeDeque