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 ab0b24a06d4 IGNITE-26194 Move OptimizedMarshaller to ignite-binary-impl (#12268) ab0b24a06d4 is described below commit ab0b24a06d4b1e90dcde72fe31702fa4f14e8dc1 Author: Nikolay <nizhi...@apache.org> AuthorDate: Tue Aug 19 15:42:20 2025 +0300 IGNITE-26194 Move OptimizedMarshaller to ignite-binary-impl (#12268) --- .../ignite/internal/MarshallerPlatformIds.java | 0 .../marshaller/optimized/OptimizedMarshaller.java | 113 +++++ .../optimized/OptimizedMarshallerIdMapper.java | 0 .../ignite/marshaller/AbstractMarshaller.java | 9 - .../AbstractNodeNameAwareMarshaller.java | 8 +- .../org/apache/ignite/marshaller/Marshaller.java | 16 + .../org/apache/ignite/marshaller/Marshallers.java | 25 ++ .../ignite/marshaller/MarshallersFactory.java | 14 + .../optimized/OptimizedClassDescriptor.java | 6 +- .../marshaller/optimized/OptimizedFieldType.java | 0 .../optimized/OptimizedMarshallerImpl.java} | 64 +-- ...imizedMarshallerInaccessibleClassException.java | 0 .../optimized/OptimizedMarshallerUtils.java | 7 +- .../optimized/OptimizedObjectInputStream.java | 20 +- .../optimized/OptimizedObjectOutputStream.java | 4 +- .../OptimizedObjectPooledStreamRegistry.java | 6 +- .../OptimizedObjectSharedStreamRegistry.java | 8 +- .../optimized/OptimizedObjectStreamRegistry.java | 0 .../ignite/marshaller/MarshallersFactoryImpl.java | 12 + .../ignite/IgniteCommonsSystemProperties.java | 24 + .../main/java/org/apache/ignite/IgniteLogger.java | 0 .../IgniteInterruptedCheckedException.java | 0 .../apache/ignite/internal/util/CommonUtils.java | 481 ++++++++++++++++++++- .../ignite/internal/util/GridHandleTable.java | 0 .../ignite/internal/util/GridLogThrottle.java | 20 +- .../ignite/internal/util/io/GridDataInput.java | 0 .../ignite/internal/util/io/GridDataOutput.java | 0 .../ignite/internal/util/typedef/internal/LT.java | 0 .../org/apache/ignite/IgniteSystemProperties.java | 24 - .../org/apache/ignite/internal/IgniteKernal.java | 7 +- .../ignite/internal/MarshallerContextImpl.java | 2 +- .../ignite/internal/binary/BinaryContext.java | 2 +- .../optimized/GridClientOptimizedMarshaller.java | 5 +- .../apache/ignite/internal/util/IgniteUtils.java | 468 +------------------- .../apache/ignite/marshaller/MarshallerUtils.java | 11 - .../ignite/spi/discovery/tcp/TcpDiscoverySpi.java | 3 +- .../ignite/stream/socket/SocketStreamer.java | 3 +- .../GridDiscoveryManagerAttributesSelfTest.java | 4 +- .../optimized/OptimizedMarshallerEnumSelfTest.java | 3 +- .../OptimizedMarshallerPooledSelfTest.java | 5 +- .../optimized/OptimizedMarshallerSelfTest.java | 3 +- ...edMarshallerSerialPersistentFieldsSelfTest.java | 3 +- .../optimized/OptimizedMarshallerTest.java | 3 +- .../optimized/OptimizedObjectStreamSelfTest.java | 9 +- ...rMetricsSnapshotSerializeCompatibilityTest.java | 3 +- .../internal/util/io/GridUnsafeDataInput.java | 9 +- .../internal/util/io/GridUnsafeDataOutput.java | 13 +- 47 files changed, 779 insertions(+), 638 deletions(-) diff --git a/modules/core/src/main/java/org/apache/ignite/internal/MarshallerPlatformIds.java b/modules/binary/api/src/main/java/org/apache/ignite/internal/MarshallerPlatformIds.java similarity index 100% rename from modules/core/src/main/java/org/apache/ignite/internal/MarshallerPlatformIds.java rename to modules/binary/api/src/main/java/org/apache/ignite/internal/MarshallerPlatformIds.java diff --git a/modules/binary/api/src/main/java/org/apache/ignite/internal/marshaller/optimized/OptimizedMarshaller.java b/modules/binary/api/src/main/java/org/apache/ignite/internal/marshaller/optimized/OptimizedMarshaller.java new file mode 100644 index 00000000000..e4733564f76 --- /dev/null +++ b/modules/binary/api/src/main/java/org/apache/ignite/internal/marshaller/optimized/OptimizedMarshaller.java @@ -0,0 +1,113 @@ +/* + * 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.marshaller.optimized; + +import java.io.ObjectOutputStream; +import java.io.Serializable; +import org.apache.ignite.marshaller.Marshaller; + +/** + * Optimized implementation of {@link org.apache.ignite.marshaller.Marshaller}. + * Unlike {@link org.apache.ignite.marshaller.jdk.JdkMarshaller}, + * which is based on standard {@link ObjectOutputStream}, this marshaller does not + * enforce that all serialized objects implement {@link Serializable} interface. It is also + * about 20 times faster as it removes lots of serialization overhead that exists in + * default JDK implementation. + * <p> + * {@code OptimizedMarshaller} is tested only on Java HotSpot VM on other VMs + * it could yield unexpected results. It is the default marshaller on Java HotSpot VMs + * and will be used if no other marshaller was explicitly configured. + * <p> + * <h1 class="header">Configuration</h1> + * <h2 class="header">Mandatory</h2> + * This marshaller has no mandatory configuration parameters. + * <h2 class="header">Java Example</h2> + * <pre name="code" class="java"> + * OptimizedMarshaller marshaller = new OptimizedMarshaller(); + * + * // Enforce Serializable interface. + * marshaller.setRequireSerializable(true); + * + * IgniteConfiguration cfg = new IgniteConfiguration(); + * + * // Override marshaller. + * cfg.setMarshaller(marshaller); + * + * // Starts grid. + * G.start(cfg); + * </pre> + * <h2 class="header">Spring Example</h2> + * GridOptimizedMarshaller can be configured from Spring XML configuration file: + * <pre name="code" class="xml"> + * <bean id="grid.custom.cfg" class="org.apache.ignite.configuration.IgniteConfiguration" singleton="true"> + * ... + * <property name="marshaller"> + * <bean class="OptimizedMarshaller"> + * <property name="requireSerializable">true</property> + * </bean> + * </property> + * ... + * </bean> + * </pre> + * <p> + * <img src="http://ignite.apache.org/images/spring-small.png"> + * <br> + * For information about Spring framework visit <a href="http://www.springframework.org/">www.springframework.org</a> + */ +public interface OptimizedMarshaller extends Marshaller { + /** + * Sets whether marshaller should require {@link Serializable} interface or not. + * + * @param requireSer Whether to require {@link Serializable}. + * @return {@code this} for chaining. + */ + public OptimizedMarshaller setRequireSerializable(boolean requireSer); + + /** + * Sets ID mapper. + * + * @param mapper ID mapper. + * @return {@code this} for chaining. + */ + public OptimizedMarshaller setIdMapper(OptimizedMarshallerIdMapper mapper); + + /** + * Specifies size of cached object streams used by marshaller. Object streams are cached for + * performance reason to avoid costly recreation for every serialization routine. If {@code 0} (default), + * pool is not used and each thread has its own cached object stream which it keeps reusing. + * <p> + * Since each stream has an internal buffer, creating a stream for each thread can lead to + * high memory consumption if many large messages are marshalled or unmarshalled concurrently. + * Consider using pool in this case. This will limit number of streams that can be created and, + * therefore, decrease memory consumption. + * <p> + * NOTE: Using streams pool can decrease performance since streams will be shared between + * different threads which will lead to more frequent context switching. + * + * @param poolSize Streams pool size. If {@code 0}, pool is not used. + * @return {@code this} for chaining. + */ + public OptimizedMarshaller setPoolSize(int poolSize); + + /** + * Clears the optimized class descriptors cache. This is essential for the clients + * on disconnect in order to make them register their user types again (server nodes may + * lose previously registered types). + */ + public void clearClassDescriptorsCache(); +} diff --git a/modules/core/src/main/java/org/apache/ignite/internal/marshaller/optimized/OptimizedMarshallerIdMapper.java b/modules/binary/api/src/main/java/org/apache/ignite/internal/marshaller/optimized/OptimizedMarshallerIdMapper.java similarity index 100% rename from modules/core/src/main/java/org/apache/ignite/internal/marshaller/optimized/OptimizedMarshallerIdMapper.java rename to modules/binary/api/src/main/java/org/apache/ignite/internal/marshaller/optimized/OptimizedMarshallerIdMapper.java diff --git a/modules/binary/api/src/main/java/org/apache/ignite/marshaller/AbstractMarshaller.java b/modules/binary/api/src/main/java/org/apache/ignite/marshaller/AbstractMarshaller.java index 032e758f853..ee1e3c493fd 100644 --- a/modules/binary/api/src/main/java/org/apache/ignite/marshaller/AbstractMarshaller.java +++ b/modules/binary/api/src/main/java/org/apache/ignite/marshaller/AbstractMarshaller.java @@ -30,15 +30,6 @@ public abstract class AbstractMarshaller implements Marshaller { /** Context. */ protected MarshallerContext ctx; - /** - * Undeployment callback invoked when class loader is being undeployed. - * - * Some marshallers may want to clean their internal state that uses the undeployed class loader somehow. - * - * @param ldr Class loader being undeployed. - */ - public abstract void onUndeploy(ClassLoader ldr); - /** * @return Marshaller context. */ diff --git a/modules/binary/api/src/main/java/org/apache/ignite/marshaller/AbstractNodeNameAwareMarshaller.java b/modules/binary/api/src/main/java/org/apache/ignite/marshaller/AbstractNodeNameAwareMarshaller.java index 6f8150f09fb..ccf32d80a2b 100644 --- a/modules/binary/api/src/main/java/org/apache/ignite/marshaller/AbstractNodeNameAwareMarshaller.java +++ b/modules/binary/api/src/main/java/org/apache/ignite/marshaller/AbstractNodeNameAwareMarshaller.java @@ -33,12 +33,8 @@ public abstract class AbstractNodeNameAwareMarshaller extends AbstractMarshaller /** Node name. */ private volatile String nodeName = CommonUtils.LOC_IGNITE_NAME_EMPTY; - /** - * Set node name. - * - * @param nodeName Node name. - */ - public void nodeName(@Nullable String nodeName) { + /** {@inheritDoc} */ + @Override public void nodeName(@Nullable String nodeName) { if (!nodeNameSet) { this.nodeName = nodeName; diff --git a/modules/binary/api/src/main/java/org/apache/ignite/marshaller/Marshaller.java b/modules/binary/api/src/main/java/org/apache/ignite/marshaller/Marshaller.java index 7bc328ef2b8..6112c6fc188 100644 --- a/modules/binary/api/src/main/java/org/apache/ignite/marshaller/Marshaller.java +++ b/modules/binary/api/src/main/java/org/apache/ignite/marshaller/Marshaller.java @@ -73,6 +73,13 @@ public interface Marshaller { */ public void setContext(MarshallerContext ctx); + /** + * Set node name. + * + * @param nodeName Node name. + */ + public void nodeName(@Nullable String nodeName); + /** * Marshals object to the output stream. This method should not close * given output stream. @@ -114,4 +121,13 @@ public interface Marshaller { * @throws IgniteCheckedException If unmarshalling failed. */ public <T> T unmarshal(byte[] arr, @Nullable ClassLoader clsLdr) throws IgniteCheckedException; + + /** + * Undeployment callback invoked when class loader is being undeployed. + * + * Some marshallers may want to clean their internal state that uses the undeployed class loader somehow. + * + * @param ldr Class loader being undeployed. + */ + public void onUndeploy(ClassLoader ldr); } diff --git a/modules/binary/api/src/main/java/org/apache/ignite/marshaller/Marshallers.java b/modules/binary/api/src/main/java/org/apache/ignite/marshaller/Marshallers.java index ef54a1452d9..d590e1aaf8d 100644 --- a/modules/binary/api/src/main/java/org/apache/ignite/marshaller/Marshallers.java +++ b/modules/binary/api/src/main/java/org/apache/ignite/marshaller/Marshallers.java @@ -17,13 +17,18 @@ package org.apache.ignite.marshaller; +import java.io.Serializable; import java.util.Iterator; +import org.apache.ignite.IgniteCommonsSystemProperties; +import org.apache.ignite.internal.marshaller.optimized.OptimizedMarshaller; import org.apache.ignite.internal.util.CommonUtils; import org.apache.ignite.internal.util.typedef.internal.A; import org.apache.ignite.lang.IgnitePredicate; import org.apache.ignite.marshaller.jdk.JdkMarshaller; import org.jetbrains.annotations.Nullable; +import static org.apache.ignite.IgniteCommonsSystemProperties.IGNITE_OPTIMIZED_MARSHALLER_USE_DEFAULT_SUID; + /** * Factory to create implementation of {@link Marshaller}. */ @@ -31,6 +36,10 @@ public class Marshallers { /** Flag whether class caching should be used by the current thread. */ public static final ThreadLocal<Boolean> USE_CACHE = ThreadLocal.withInitial(() -> Boolean.TRUE); + /** Use default {@code serialVersionUID} for {@link Serializable} classes. */ + public static final boolean USE_DFLT_SUID = + IgniteCommonsSystemProperties.getBoolean(IGNITE_OPTIMIZED_MARSHALLER_USE_DEFAULT_SUID, false); + /** Streams factory implementation. */ private static final MarshallersFactory factory; @@ -57,4 +66,20 @@ public class Marshallers { public static JdkMarshaller jdk(@Nullable IgnitePredicate<String> clsFilter) { return factory.jdk(clsFilter); } + + /** @return Optimized marshaller instance. */ + public static OptimizedMarshaller optimized() { + return factory.optimized(); + } + + /** + * Creates new marshaller providing whether it should + * require {@link Serializable} interface or not. + * + * @param requireSer Whether to require {@link Serializable}. + * @return Optimized marshaller instance. + */ + public static OptimizedMarshaller optimized(boolean requireSer) { + return factory.optimized(requireSer); + } } diff --git a/modules/binary/api/src/main/java/org/apache/ignite/marshaller/MarshallersFactory.java b/modules/binary/api/src/main/java/org/apache/ignite/marshaller/MarshallersFactory.java index 4500c703eb3..0c7809213ae 100644 --- a/modules/binary/api/src/main/java/org/apache/ignite/marshaller/MarshallersFactory.java +++ b/modules/binary/api/src/main/java/org/apache/ignite/marshaller/MarshallersFactory.java @@ -17,7 +17,9 @@ package org.apache.ignite.marshaller; +import java.io.Serializable; import java.util.ServiceLoader; +import org.apache.ignite.internal.marshaller.optimized.OptimizedMarshaller; import org.apache.ignite.internal.util.CommonUtils; import org.apache.ignite.lang.IgnitePredicate; import org.apache.ignite.marshaller.jdk.JdkMarshaller; @@ -39,4 +41,16 @@ public interface MarshallersFactory { * @return Filtered instance of {@link JdkMarshaller}. */ public JdkMarshaller jdk(@Nullable IgnitePredicate<String> clsFilter); + + /** @return Optimized marshaller instance. */ + public OptimizedMarshaller optimized(); + + /** + * Creates new marshaller providing whether it should + * require {@link Serializable} interface or not. + * + * @param requireSer Whether to require {@link Serializable}. + * @return Optimized marshaller instance. + */ + public OptimizedMarshaller optimized(boolean requireSer); } diff --git a/modules/core/src/main/java/org/apache/ignite/internal/marshaller/optimized/OptimizedClassDescriptor.java b/modules/binary/impl/src/main/java/org/apache/ignite/internal/marshaller/optimized/OptimizedClassDescriptor.java similarity index 99% rename from modules/core/src/main/java/org/apache/ignite/internal/marshaller/optimized/OptimizedClassDescriptor.java rename to modules/binary/impl/src/main/java/org/apache/ignite/internal/marshaller/optimized/OptimizedClassDescriptor.java index 67747d00807..4dee1dff695 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/marshaller/optimized/OptimizedClassDescriptor.java +++ b/modules/binary/impl/src/main/java/org/apache/ignite/internal/marshaller/optimized/OptimizedClassDescriptor.java @@ -45,8 +45,8 @@ import java.util.Map; import java.util.Properties; import java.util.UUID; import java.util.concurrent.ConcurrentMap; +import org.apache.ignite.internal.util.CommonUtils; import org.apache.ignite.internal.util.GridUnsafe; -import org.apache.ignite.internal.util.typedef.internal.U; import org.apache.ignite.marshaller.MarshallerContext; import org.apache.ignite.marshaller.MarshallerExclusions; import org.apache.ignite.marshaller.Marshallers; @@ -89,7 +89,7 @@ import static org.apache.ignite.internal.marshaller.optimized.OptimizedMarshalle import static org.apache.ignite.internal.marshaller.optimized.OptimizedMarshallerUtils.STR; import static org.apache.ignite.internal.marshaller.optimized.OptimizedMarshallerUtils.UUID; import static org.apache.ignite.internal.marshaller.optimized.OptimizedMarshallerUtils.computeSerialVersionUid; -import static org.apache.ignite.internal.util.IgniteUtils.isLambda; +import static org.apache.ignite.internal.util.CommonUtils.isLambda; /** * Class descriptor. @@ -1000,7 +1000,7 @@ class OptimizedClassDescriptor { ClassFields(List<FieldInfo> fields) { this.fields = fields; - nameToIndex = U.newHashMap(fields.size()); + nameToIndex = CommonUtils.newHashMap(fields.size()); for (int i = 0; i < fields.size(); ++i) nameToIndex.put(fields.get(i).name(), i); diff --git a/modules/core/src/main/java/org/apache/ignite/internal/marshaller/optimized/OptimizedFieldType.java b/modules/binary/impl/src/main/java/org/apache/ignite/internal/marshaller/optimized/OptimizedFieldType.java similarity index 100% rename from modules/core/src/main/java/org/apache/ignite/internal/marshaller/optimized/OptimizedFieldType.java rename to modules/binary/impl/src/main/java/org/apache/ignite/internal/marshaller/optimized/OptimizedFieldType.java diff --git a/modules/core/src/main/java/org/apache/ignite/internal/marshaller/optimized/OptimizedMarshaller.java b/modules/binary/impl/src/main/java/org/apache/ignite/internal/marshaller/optimized/OptimizedMarshallerImpl.java similarity index 81% rename from modules/core/src/main/java/org/apache/ignite/internal/marshaller/optimized/OptimizedMarshaller.java rename to modules/binary/impl/src/main/java/org/apache/ignite/internal/marshaller/optimized/OptimizedMarshallerImpl.java index f8738a6e58a..9c5549a29c6 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/marshaller/optimized/OptimizedMarshaller.java +++ b/modules/binary/impl/src/main/java/org/apache/ignite/internal/marshaller/optimized/OptimizedMarshallerImpl.java @@ -26,16 +26,13 @@ import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.ConcurrentMap; import org.apache.ignite.IgniteCheckedException; import org.apache.ignite.IgniteException; -import org.apache.ignite.IgniteSystemProperties; +import org.apache.ignite.internal.util.CommonUtils; import org.apache.ignite.internal.util.typedef.internal.S; -import org.apache.ignite.internal.util.typedef.internal.U; import org.apache.ignite.marshaller.AbstractNodeNameAwareMarshaller; import org.apache.ignite.marshaller.Marshallers; import org.jetbrains.annotations.Nullable; import sun.misc.Unsafe; -import static org.apache.ignite.IgniteSystemProperties.IGNITE_OPTIMIZED_MARSHALLER_USE_DEFAULT_SUID; - /** * Optimized implementation of {@link org.apache.ignite.marshaller.Marshaller}. * Unlike {@link org.apache.ignite.marshaller.jdk.JdkMarshaller}, @@ -84,11 +81,7 @@ import static org.apache.ignite.IgniteSystemProperties.IGNITE_OPTIMIZED_MARSHALL * <br> * For information about Spring framework visit <a href="http://www.springframework.org/">www.springframework.org</a> */ -public class OptimizedMarshaller extends AbstractNodeNameAwareMarshaller { - /** Use default {@code serialVersionUID} for {@link Serializable} classes. */ - public static final boolean USE_DFLT_SUID = - IgniteSystemProperties.getBoolean(IGNITE_OPTIMIZED_MARSHALLER_USE_DEFAULT_SUID, false); - +public class OptimizedMarshallerImpl extends AbstractNodeNameAwareMarshaller implements OptimizedMarshaller { /** Default class loader. */ private final ClassLoader dfltClsLdr = getClass().getClassLoader(); @@ -112,7 +105,7 @@ public class OptimizedMarshaller extends AbstractNodeNameAwareMarshaller { * * @throws IgniteException If this marshaller is not supported on the current JVM. */ - public OptimizedMarshaller() { + public OptimizedMarshallerImpl() { if (!available()) throw new IgniteException("Using OptimizedMarshaller on unsupported JVM version (some of " + "JVM-private APIs required for the marshaller to work are missing)."); @@ -124,51 +117,26 @@ public class OptimizedMarshaller extends AbstractNodeNameAwareMarshaller { * * @param requireSer Whether to require {@link Serializable}. */ - public OptimizedMarshaller(boolean requireSer) { + public OptimizedMarshallerImpl(boolean requireSer) { this.requireSer = requireSer; } - /** - * Sets whether marshaller should require {@link Serializable} interface or not. - * - * @param requireSer Whether to require {@link Serializable}. - * @return {@code this} for chaining. - */ - public OptimizedMarshaller setRequireSerializable(boolean requireSer) { + /** {@inheritDoc} */ + @Override public OptimizedMarshaller setRequireSerializable(boolean requireSer) { this.requireSer = requireSer; return this; } - /** - * Sets ID mapper. - * - * @param mapper ID mapper. - * @return {@code this} for chaining. - */ - public OptimizedMarshaller setIdMapper(OptimizedMarshallerIdMapper mapper) { + /** {@inheritDoc} */ + @Override public OptimizedMarshaller setIdMapper(OptimizedMarshallerIdMapper mapper) { this.mapper = mapper; return this; } - /** - * Specifies size of cached object streams used by marshaller. Object streams are cached for - * performance reason to avoid costly recreation for every serialization routine. If {@code 0} (default), - * pool is not used and each thread has its own cached object stream which it keeps reusing. - * <p> - * Since each stream has an internal buffer, creating a stream for each thread can lead to - * high memory consumption if many large messages are marshalled or unmarshalled concurrently. - * Consider using pool in this case. This will limit number of streams that can be created and, - * therefore, decrease memory consumption. - * <p> - * NOTE: Using streams pool can decrease performance since streams will be shared between - * different threads which will lead to more frequent context switching. - * - * @param poolSize Streams pool size. If {@code 0}, pool is not used. - * @return {@code this} for chaining. - */ - public OptimizedMarshaller setPoolSize(int poolSize) { + /** {@inheritDoc} */ + @Override public OptimizedMarshaller setPoolSize(int poolSize) { registry = poolSize > 0 ? new OptimizedObjectPooledStreamRegistry(poolSize) : new OptimizedObjectSharedStreamRegistry(); @@ -337,20 +305,16 @@ public class OptimizedMarshaller extends AbstractNodeNameAwareMarshaller { clsMap.remove(cls); } - U.clearClassCache(ldr); + CommonUtils.clearClassCache(ldr); } - /** - * Clears the optimized class descriptors cache. This is essential for the clients - * on disconnect in order to make them register their user types again (server nodes may - * lose previously registered types). - */ - public void clearClassDescriptorsCache() { + /** {@inheritDoc} */ + @Override public void clearClassDescriptorsCache() { clsMap.clear(); } /** {@inheritDoc} */ @Override public String toString() { - return S.toString(OptimizedMarshaller.class, this); + return S.toString(OptimizedMarshallerImpl.class, this); } } diff --git a/modules/core/src/main/java/org/apache/ignite/internal/marshaller/optimized/OptimizedMarshallerInaccessibleClassException.java b/modules/binary/impl/src/main/java/org/apache/ignite/internal/marshaller/optimized/OptimizedMarshallerInaccessibleClassException.java similarity index 100% rename from modules/core/src/main/java/org/apache/ignite/internal/marshaller/optimized/OptimizedMarshallerInaccessibleClassException.java rename to modules/binary/impl/src/main/java/org/apache/ignite/internal/marshaller/optimized/OptimizedMarshallerInaccessibleClassException.java diff --git a/modules/core/src/main/java/org/apache/ignite/internal/marshaller/optimized/OptimizedMarshallerUtils.java b/modules/binary/impl/src/main/java/org/apache/ignite/internal/marshaller/optimized/OptimizedMarshallerUtils.java similarity index 98% rename from modules/core/src/main/java/org/apache/ignite/internal/marshaller/optimized/OptimizedMarshallerUtils.java rename to modules/binary/impl/src/main/java/org/apache/ignite/internal/marshaller/optimized/OptimizedMarshallerUtils.java index 8581b322ea9..1c9836956ad 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/marshaller/optimized/OptimizedMarshallerUtils.java +++ b/modules/binary/impl/src/main/java/org/apache/ignite/internal/marshaller/optimized/OptimizedMarshallerUtils.java @@ -30,10 +30,11 @@ import java.util.List; import java.util.concurrent.ConcurrentMap; import org.apache.ignite.IgniteCheckedException; import org.apache.ignite.IgniteException; +import org.apache.ignite.internal.util.CommonUtils; import org.apache.ignite.internal.util.GridUnsafe; import org.apache.ignite.internal.util.typedef.F; -import org.apache.ignite.internal.util.typedef.internal.U; import org.apache.ignite.marshaller.MarshallerContext; +import org.apache.ignite.marshaller.Marshallers; import org.jetbrains.annotations.NotNull; import static org.apache.ignite.internal.MarshallerPlatformIds.JAVA_ID; @@ -300,7 +301,7 @@ class OptimizedMarshallerUtils { throw new IOException("Failed to resolve class for ID: " + typeId, e); } - Class cls = U.forName(clsName, ldr, null); + Class cls = CommonUtils.forName(clsName, ldr, null, Marshallers.USE_CACHE.get()); OptimizedClassDescriptor desc = clsMap.get(cls); @@ -375,7 +376,7 @@ class OptimizedMarshallerUtils { throw new IOException(e); } - if (OptimizedMarshaller.USE_DFLT_SUID) + if (Marshallers.USE_DFLT_SUID) return (short)ObjectStreamClass.lookup(cls).getSerialVersionUID(); } diff --git a/modules/core/src/main/java/org/apache/ignite/internal/marshaller/optimized/OptimizedObjectInputStream.java b/modules/binary/impl/src/main/java/org/apache/ignite/internal/marshaller/optimized/OptimizedObjectInputStream.java similarity index 97% rename from modules/core/src/main/java/org/apache/ignite/internal/marshaller/optimized/OptimizedObjectInputStream.java rename to modules/binary/impl/src/main/java/org/apache/ignite/internal/marshaller/optimized/OptimizedObjectInputStream.java index d3566905c3d..08e0a367217 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/marshaller/optimized/OptimizedObjectInputStream.java +++ b/modules/binary/impl/src/main/java/org/apache/ignite/internal/marshaller/optimized/OptimizedObjectInputStream.java @@ -42,11 +42,12 @@ import java.util.Properties; import java.util.UUID; import java.util.concurrent.ConcurrentMap; import org.apache.ignite.IgniteCheckedException; +import org.apache.ignite.internal.util.CommonUtils; import org.apache.ignite.internal.util.GridUnsafe; import org.apache.ignite.internal.util.io.GridDataInput; import org.apache.ignite.internal.util.typedef.internal.SB; -import org.apache.ignite.internal.util.typedef.internal.U; import org.apache.ignite.marshaller.MarshallerContext; +import org.apache.ignite.marshaller.Marshallers; import static org.apache.ignite.internal.marshaller.optimized.OptimizedMarshallerUtils.ARRAY_LIST; import static org.apache.ignite.internal.marshaller.optimized.OptimizedMarshallerUtils.BOOLEAN; @@ -336,16 +337,21 @@ class OptimizedObjectInputStream extends ObjectInputStream { InvocationHandler ih = (InvocationHandler)readObject(); - return Proxy.newProxyInstance(clsLdr != null ? clsLdr : U.gridClassLoader(), intfs, ih); + return Proxy.newProxyInstance(clsLdr != null ? clsLdr : CommonUtils.gridClassLoader(), intfs, ih); case ENUM: case EXTERNALIZABLE: case SERIALIZABLE: int typeId = readInt(); - OptimizedClassDescriptor desc = typeId == 0 ? - classDescriptor(clsMap, U.forName(readUTF(), clsLdr, ctx.classNameFilter()), useCache, ctx, mapper) : - classDescriptor(clsMap, typeId, clsLdr, useCache, ctx, mapper); + OptimizedClassDescriptor desc = typeId == 0 + ? classDescriptor( + clsMap, + CommonUtils.forName(readUTF(), clsLdr, ctx.classNameFilter(), useCache), + useCache, + ctx, + mapper) + : classDescriptor(clsMap, typeId, clsLdr, useCache, ctx, mapper); curCls = desc.describedClass(); @@ -380,7 +386,7 @@ class OptimizedObjectInputStream extends ObjectInputStream { private Class<?> readClass() throws ClassNotFoundException, IOException { int compTypeId = readInt(); - return compTypeId == 0 ? U.forName(readUTF(), clsLdr, null, useCache) : + return compTypeId == 0 ? CommonUtils.forName(readUTF(), clsLdr, null, useCache) : classDescriptor(clsMap, compTypeId, clsLdr, useCache, ctx, mapper).describedClass(); } @@ -539,7 +545,7 @@ class OptimizedObjectInputStream extends ObjectInputStream { // Must have 'Class.forName()' instead of clsLoader.loadClass() // due to weird ClassNotFoundExceptions for arrays of classes // in certain cases. - return U.forName(desc.getName(), clsLdr, ctx.classNameFilter()); + return CommonUtils.forName(desc.getName(), clsLdr, ctx.classNameFilter(), Marshallers.USE_CACHE.get()); } /** diff --git a/modules/core/src/main/java/org/apache/ignite/internal/marshaller/optimized/OptimizedObjectOutputStream.java b/modules/binary/impl/src/main/java/org/apache/ignite/internal/marshaller/optimized/OptimizedObjectOutputStream.java similarity index 99% rename from modules/core/src/main/java/org/apache/ignite/internal/marshaller/optimized/OptimizedObjectOutputStream.java rename to modules/binary/impl/src/main/java/org/apache/ignite/internal/marshaller/optimized/OptimizedObjectOutputStream.java index d3ce371324a..86e29e16298 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/marshaller/optimized/OptimizedObjectOutputStream.java +++ b/modules/binary/impl/src/main/java/org/apache/ignite/internal/marshaller/optimized/OptimizedObjectOutputStream.java @@ -39,10 +39,10 @@ import java.util.Set; import java.util.UUID; import java.util.concurrent.ConcurrentMap; import org.apache.ignite.IgniteCheckedException; +import org.apache.ignite.internal.util.CommonUtils; import org.apache.ignite.internal.util.GridHandleTable; import org.apache.ignite.internal.util.io.GridDataOutput; import org.apache.ignite.internal.util.typedef.F; -import org.apache.ignite.internal.util.typedef.internal.U; import org.apache.ignite.lang.IgniteBiTuple; import org.apache.ignite.marshaller.MarshallerContext; import org.apache.ignite.marshaller.Marshallers; @@ -182,7 +182,7 @@ public class OptimizedObjectOutputStream extends ObjectOutputStream { if (obj == null) writeByte(NULL); else { - if (obj instanceof Throwable && !(obj instanceof Externalizable) || U.isEnum(obj.getClass())) { + if (obj instanceof Throwable && !(obj instanceof Externalizable) || CommonUtils.isEnum(obj.getClass())) { // Avoid problems with differing Enum objects or Enum implementation class deadlocks. writeByte(JDK); diff --git a/modules/core/src/main/java/org/apache/ignite/internal/marshaller/optimized/OptimizedObjectPooledStreamRegistry.java b/modules/binary/impl/src/main/java/org/apache/ignite/internal/marshaller/optimized/OptimizedObjectPooledStreamRegistry.java similarity index 95% rename from modules/core/src/main/java/org/apache/ignite/internal/marshaller/optimized/OptimizedObjectPooledStreamRegistry.java rename to modules/binary/impl/src/main/java/org/apache/ignite/internal/marshaller/optimized/OptimizedObjectPooledStreamRegistry.java index 632be9e577d..1ff85173d9d 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/marshaller/optimized/OptimizedObjectPooledStreamRegistry.java +++ b/modules/binary/impl/src/main/java/org/apache/ignite/internal/marshaller/optimized/OptimizedObjectPooledStreamRegistry.java @@ -20,7 +20,7 @@ package org.apache.ignite.internal.marshaller.optimized; import java.util.concurrent.BlockingQueue; import java.util.concurrent.LinkedBlockingQueue; import org.apache.ignite.internal.IgniteInterruptedCheckedException; -import org.apache.ignite.internal.util.typedef.internal.U; +import org.apache.ignite.internal.util.CommonUtils; /** * @@ -71,7 +71,7 @@ public class OptimizedObjectPooledStreamRegistry extends OptimizedObjectStreamRe /** {@inheritDoc} */ @Override void closeOut(OptimizedObjectOutputStream out) { - U.close(out, null); + CommonUtils.close(out, null); boolean b = outPool.offer(out); @@ -80,7 +80,7 @@ public class OptimizedObjectPooledStreamRegistry extends OptimizedObjectStreamRe /** {@inheritDoc} */ @Override void closeIn(OptimizedObjectInputStream in) { - U.close(in, null); + CommonUtils.close(in, null); boolean b = inPool.offer(in); diff --git a/modules/core/src/main/java/org/apache/ignite/internal/marshaller/optimized/OptimizedObjectSharedStreamRegistry.java b/modules/binary/impl/src/main/java/org/apache/ignite/internal/marshaller/optimized/OptimizedObjectSharedStreamRegistry.java similarity index 95% rename from modules/core/src/main/java/org/apache/ignite/internal/marshaller/optimized/OptimizedObjectSharedStreamRegistry.java rename to modules/binary/impl/src/main/java/org/apache/ignite/internal/marshaller/optimized/OptimizedObjectSharedStreamRegistry.java index c938ccbe795..c27f2b0b517 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/marshaller/optimized/OptimizedObjectSharedStreamRegistry.java +++ b/modules/binary/impl/src/main/java/org/apache/ignite/internal/marshaller/optimized/OptimizedObjectSharedStreamRegistry.java @@ -17,7 +17,7 @@ package org.apache.ignite.internal.marshaller.optimized; -import org.apache.ignite.internal.util.typedef.internal.U; +import org.apache.ignite.internal.util.CommonUtils; /** * @@ -38,7 +38,7 @@ public class OptimizedObjectSharedStreamRegistry extends OptimizedObjectStreamRe /** {@inheritDoc} */ @Override void closeOut(OptimizedObjectOutputStream out) { - U.close(out, null); + CommonUtils.close(out, null); StreamHolder holder = holders.get(); @@ -48,7 +48,7 @@ public class OptimizedObjectSharedStreamRegistry extends OptimizedObjectStreamRe /** {@inheritDoc} */ @Override void closeIn(OptimizedObjectInputStream in) { - U.close(in, null); + CommonUtils.close(in, null); StreamHolder holder = holders.get(); @@ -62,7 +62,7 @@ public class OptimizedObjectSharedStreamRegistry extends OptimizedObjectStreamRe * @param in Object input stream. */ void closeNotCachedIn(OptimizedObjectInputStream in) { - U.close(in, null); + CommonUtils.close(in, null); StreamHolder holder = holders.get(); diff --git a/modules/core/src/main/java/org/apache/ignite/internal/marshaller/optimized/OptimizedObjectStreamRegistry.java b/modules/binary/impl/src/main/java/org/apache/ignite/internal/marshaller/optimized/OptimizedObjectStreamRegistry.java similarity index 100% rename from modules/core/src/main/java/org/apache/ignite/internal/marshaller/optimized/OptimizedObjectStreamRegistry.java rename to modules/binary/impl/src/main/java/org/apache/ignite/internal/marshaller/optimized/OptimizedObjectStreamRegistry.java diff --git a/modules/binary/impl/src/main/java/org/apache/ignite/marshaller/MarshallersFactoryImpl.java b/modules/binary/impl/src/main/java/org/apache/ignite/marshaller/MarshallersFactoryImpl.java index 04a1224f8b3..e75f8cab375 100644 --- a/modules/binary/impl/src/main/java/org/apache/ignite/marshaller/MarshallersFactoryImpl.java +++ b/modules/binary/impl/src/main/java/org/apache/ignite/marshaller/MarshallersFactoryImpl.java @@ -17,6 +17,8 @@ package org.apache.ignite.marshaller; +import org.apache.ignite.internal.marshaller.optimized.OptimizedMarshaller; +import org.apache.ignite.internal.marshaller.optimized.OptimizedMarshallerImpl; import org.apache.ignite.lang.IgnitePredicate; import org.apache.ignite.marshaller.jdk.JdkMarshaller; import org.apache.ignite.marshaller.jdk.JdkMarshallerImpl; @@ -38,4 +40,14 @@ public class MarshallersFactoryImpl implements MarshallersFactory { @Override public JdkMarshaller jdk(@Nullable IgnitePredicate<String> clsFilter) { return clsFilter == null ? INSTANCE : new JdkMarshallerImpl(clsFilter); } + + /** {@inheritDoc} */ + @Override public OptimizedMarshaller optimized() { + return new OptimizedMarshallerImpl(); + } + + /** {@inheritDoc} */ + @Override public OptimizedMarshaller optimized(boolean requireSer) { + return new OptimizedMarshallerImpl(requireSer); + } } diff --git a/modules/commons/src/main/java/org/apache/ignite/IgniteCommonsSystemProperties.java b/modules/commons/src/main/java/org/apache/ignite/IgniteCommonsSystemProperties.java index b0957c244c5..64dcfd2274a 100644 --- a/modules/commons/src/main/java/org/apache/ignite/IgniteCommonsSystemProperties.java +++ b/modules/commons/src/main/java/org/apache/ignite/IgniteCommonsSystemProperties.java @@ -17,11 +17,14 @@ package org.apache.ignite; +import java.io.Serializable; +import org.apache.ignite.internal.util.GridLogThrottle; import org.jetbrains.annotations.Nullable; import static org.apache.ignite.internal.util.CommonUtils.DFLT_MARSHAL_BUFFERS_PER_THREAD_POOL_SIZE; import static org.apache.ignite.internal.util.CommonUtils.DFLT_MARSHAL_BUFFERS_RECHECK; import static org.apache.ignite.internal.util.CommonUtils.DFLT_MEMORY_PER_BYTE_COPY_THRESHOLD; +import static org.apache.ignite.internal.util.GridLogThrottle.DFLT_LOG_THROTTLE_CAPACITY; import static org.apache.ignite.internal.util.tostring.GridToStringBuilder.DFLT_TO_STRING_COLLECTION_LIMIT; import static org.apache.ignite.internal.util.tostring.GridToStringBuilder.DFLT_TO_STRING_INCLUDE_SENSITIVE; import static org.apache.ignite.internal.util.tostring.GridToStringBuilder.DFLT_TO_STRING_MAX_LENGTH; @@ -85,6 +88,27 @@ public class IgniteCommonsSystemProperties { type = Integer.class, defaults = "" + DFLT_MARSHAL_BUFFERS_PER_THREAD_POOL_SIZE) public static final String IGNITE_MARSHAL_BUFFERS_PER_THREAD_POOL_SIZE = "IGNITE_MARSHAL_BUFFERS_PER_THREAD_POOL_SIZE"; + /** + * Manages {@code OptimizedMarshaller} behavior of {@code serialVersionUID} computation for + * {@link Serializable} classes. + */ + @SystemProperty("Manages OptimizedMarshaller behavior of serialVersionUID computation " + + "for Serializable classes") + public static final String IGNITE_OPTIMIZED_MARSHALLER_USE_DEFAULT_SUID = + "IGNITE_OPTIMIZED_MARSHALLER_USE_DEFAULT_SUID"; + + /** + * When set to {@code true}, warnings that are intended for development environments and not for production + * (such as coding mistakes in code using Ignite) will not be logged. + */ + @SystemProperty("Enables development environments warnings") + public static final String IGNITE_DEV_ONLY_LOGGING_DISABLED = "IGNITE_DEV_ONLY_LOGGING_DISABLED"; + + /** Max amount of remembered errors for {@link GridLogThrottle}. */ + @SystemProperty(value = "Max amount of remembered errors for GridLogThrottle", type = Integer.class, + defaults = "" + DFLT_LOG_THROTTLE_CAPACITY) + public static final String IGNITE_LOG_THROTTLE_CAPACITY = "IGNITE_LOG_THROTTLE_CAPACITY"; + /** * @param enumCls Enum type. * @param name Name of the system property or environment variable. diff --git a/modules/core/src/main/java/org/apache/ignite/IgniteLogger.java b/modules/commons/src/main/java/org/apache/ignite/IgniteLogger.java similarity index 100% rename from modules/core/src/main/java/org/apache/ignite/IgniteLogger.java rename to modules/commons/src/main/java/org/apache/ignite/IgniteLogger.java diff --git a/modules/core/src/main/java/org/apache/ignite/internal/IgniteInterruptedCheckedException.java b/modules/commons/src/main/java/org/apache/ignite/internal/IgniteInterruptedCheckedException.java similarity index 100% rename from modules/core/src/main/java/org/apache/ignite/internal/IgniteInterruptedCheckedException.java rename to modules/commons/src/main/java/org/apache/ignite/internal/IgniteInterruptedCheckedException.java diff --git a/modules/commons/src/main/java/org/apache/ignite/internal/util/CommonUtils.java b/modules/commons/src/main/java/org/apache/ignite/internal/util/CommonUtils.java index 2b1c7ccc6e3..0a8f4174100 100644 --- a/modules/commons/src/main/java/org/apache/ignite/internal/util/CommonUtils.java +++ b/modules/commons/src/main/java/org/apache/ignite/internal/util/CommonUtils.java @@ -21,11 +21,22 @@ import java.io.DataInput; import java.io.DataOutput; import java.io.Externalizable; import java.io.IOException; +import java.io.PrintStream; import java.lang.reflect.Constructor; import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; +import java.net.DatagramSocket; +import java.net.Socket; +import java.net.SocketException; +import java.net.URLClassLoader; +import java.nio.channels.ClosedChannelException; +import java.nio.channels.SelectionKey; +import java.nio.channels.Selector; import java.security.AccessController; import java.security.PrivilegedAction; +import java.time.Instant; +import java.time.ZoneId; +import java.time.format.DateTimeFormatter; import java.util.HashMap; import java.util.Map; import java.util.ServiceLoader; @@ -35,9 +46,13 @@ import java.util.concurrent.ConcurrentMap; import java.util.concurrent.TimeUnit; import org.apache.ignite.IgniteCheckedException; import org.apache.ignite.IgniteCommonsSystemProperties; +import org.apache.ignite.IgniteLogger; import org.apache.ignite.internal.processors.cache.CacheClassLoaderMarker; import org.apache.ignite.internal.util.typedef.F; +import org.apache.ignite.internal.util.typedef.X; import org.apache.ignite.internal.util.typedef.internal.A; +import org.apache.ignite.internal.util.typedef.internal.LT; +import org.apache.ignite.internal.util.typedef.internal.SB; import org.apache.ignite.lang.IgnitePredicate; import org.jetbrains.annotations.Nullable; @@ -45,6 +60,10 @@ import org.jetbrains.annotations.Nullable; * Collection of utility methods used in 'ignite-commons' and throughout the system. */ public abstract class CommonUtils { + /** Dev only logging disabled. */ + private static final boolean devOnlyLogDisabled = + IgniteCommonsSystemProperties.getBoolean(IgniteCommonsSystemProperties.IGNITE_DEV_ONLY_LOGGING_DISABLED); + /** * The maximum size of array to allocate. * Some VMs reserve some header words in an array. @@ -100,6 +119,17 @@ public abstract class CommonUtils { } }; + /** Ignite package. */ + public static final String IGNITE_PKG = "org.apache.ignite."; + + /** + * Short date format pattern for log messages in "quiet" mode. + * Only time is included since we don't expect "quiet" mode to be used + * for longer runs. + */ + public static final DateTimeFormatter SHORT_DATE_FMT = + DateTimeFormatter.ofPattern("HH:mm:ss").withZone(ZoneId.systemDefault()); + /** Class loader used to load Ignite. */ private static final ClassLoader gridClassLoader = CommonUtils.class.getClassLoader(); @@ -561,7 +591,7 @@ public abstract class CommonUtils { } /** - * Tests whether given class is loadable by provided class loader. + * Tests whether given class is loadable with provided class loader. * * @param clsName Class name to test. * @param ldr Class loader to test with. If {@code null} - we'll use system class loader instead. @@ -587,7 +617,7 @@ public abstract class CommonUtils { } /** - * Gets a class for a given name if it can be loaded or a given default class otherwise. + * Gets class for the given name if it can be loaded or default given class. * * @param cls Class. * @param dflt Default class to return. @@ -598,7 +628,7 @@ public abstract class CommonUtils { } /** - * Gets a class for a given name if it can be loaded or a given default class otherwise. + * Gets class for the given name if it can be loaded or default given class. * * @param cls Class. * @param dflt Default class to return. @@ -740,4 +770,449 @@ public abstract class CommonUtils { return clsName.substring(0, idx0 >= 0 ? idx0 : idx1); } + + /** + * Returns {@code true} if class is a lambda. + * + * @param objectClass Class. + * @return {@code true} if class is a lambda, {@code false} otherwise. + */ + public static boolean isLambda(Class<?> objectClass) { + return !objectClass.isPrimitive() && !objectClass.isArray() + // Order is crucial here, isAnonymousClass and isLocalClass may fail if + // class' outer class was loaded with different classloader. + && objectClass.isSynthetic() + && !objectClass.isAnonymousClass() && !objectClass.isLocalClass() + && classCannotBeLoadedByName(objectClass); + } + + /** + * Returns {@code true} if class can not be loaded by name. + * + * @param objectClass Class. + * @return {@code true} if class can not be loaded by name, {@code false} otherwise. + */ + public static boolean classCannotBeLoadedByName(Class<?> objectClass) { + try { + Class.forName(objectClass.getName()); + return false; + } + catch (ClassNotFoundException e) { + return true; + } + } + + /** + * Creates new {@link HashMap} with expected size. + * + * @param expSize Expected size of created map. + * @param <K> Type of map keys. + * @param <V> Type of map values. + * @return New map. + */ + public static <K, V> HashMap<K, V> newHashMap(int expSize) { + return new HashMap<>(capacity(expSize)); + } + + /** + * Closes given resource logging possible checked exception. + * + * @param rsrc Resource to close. If it's {@code null} - it's no-op. + * @param log Logger to log possible checked exception with (optional). + */ + public static void close(@Nullable AutoCloseable rsrc, @Nullable IgniteLogger log) { + if (rsrc != null) { + try { + rsrc.close(); + } + catch (Exception e) { + warn(log, "Failed to close resource: " + e.getMessage(), e); + } + } + } + + /** + * Closes given socket logging possible checked exception. + * + * @param sock Socket to close. If it's {@code null} - it's no-op. + * @param log Logger to log possible checked exception with (optional). + */ + public static void close(@Nullable Socket sock, @Nullable IgniteLogger log) { + if (sock == null || sock.isClosed()) + return; + + try { + // Closing output and input first to avoid tls 1.3 incompatibility + // https://bugs.openjdk.java.net/browse/JDK-8208526 + if (!sock.isOutputShutdown()) + sock.shutdownOutput(); + if (!sock.isInputShutdown()) + sock.shutdownInput(); + } + catch (ClosedChannelException | SocketException ex) { + LT.warn(log, "Failed to shutdown socket", ex); + } + catch (Exception e) { + warn(log, "Failed to shutdown socket: " + e.getMessage(), e); + } + + try { + sock.close(); + } + catch (ClosedChannelException | SocketException ex) { + LT.warn(log, "Failed to close socket", ex); + } + catch (Exception e) { + warn(log, "Failed to close socket: " + e.getMessage(), e); + } + } + + /** + * Closes given resource logging possible checked exceptions. + * + * @param rsrc Resource to close. If it's {@code null} - it's no-op. + * @param log Logger to log possible checked exception with (optional). + */ + public static void close(@Nullable SelectionKey rsrc, @Nullable IgniteLogger log) { + if (rsrc != null) + // This apply will automatically deregister the selection key as well. + close(rsrc.channel(), log); + } + + /** + * Closes given resource. + * + * @param rsrc Resource to close. If it's {@code null} - it's no-op. + */ + public static void close(@Nullable DatagramSocket rsrc) { + if (rsrc != null) + rsrc.close(); + } + + /** + * Closes given resource logging possible checked exception. + * + * @param rsrc Resource to close. If it's {@code null} - it's no-op. + * @param log Logger to log possible checked exception with (optional). + */ + public static void close(@Nullable Selector rsrc, @Nullable IgniteLogger log) { + if (rsrc != null) + try { + if (rsrc.isOpen()) + rsrc.close(); + } + catch (IOException e) { + warn(log, "Failed to close resource: " + e.getMessage()); + } + } + + /** + * Closes class loader logging possible checked exception. + * + * @param clsLdr Class loader. If it's {@code null} - it's no-op. + * @param log Logger to log possible checked exception with (optional). + */ + public static void close(@Nullable URLClassLoader clsLdr, @Nullable IgniteLogger log) { + if (clsLdr != null) { + try { + clsLdr.close(); + } + catch (Exception e) { + warn(log, "Failed to close resource: " + e.getMessage()); + } + } + } + + /** + * Depending on whether log is provided and quiet mode is enabled logs given + * messages as quiet message or normal log WARN message. If {@code log} is {@code null} + * or in QUIET mode it will add {@code (wrn)} prefix to the message. + * + * @param log Optional logger to use when QUIET mode is not enabled. + * @param msg Message to log. + */ + public static void warn(@Nullable IgniteLogger log, Object msg) { + assert msg != null; + + String s = msg.toString(); + + warn(log, s, null); + } + + /** + * Depending on whether log is provided and quiet mode is enabled logs given + * messages as quiet message or normal log WARN message. If {@code log} is {@code null} + * or in QUIET mode it will add {@code (wrn)} prefix to the message. + * + * @param log Optional logger to use when QUIET mode is not enabled. + * @param msg Message to log using normal logger. + * @param e Optional exception. + */ + public static void warn(@Nullable IgniteLogger log, Object msg, @Nullable Throwable e) { + assert msg != null; + + if (log != null) + log.warning(compact(msg.toString()), e); + else { + X.println("[" + SHORT_DATE_FMT.format(Instant.now()) + "] (wrn) " + + compact(msg.toString())); + + if (e != null) + e.printStackTrace(System.err); + else + X.printerrln(); + } + } + + /** + * Logs warning message in both verbose and quiet modes. + * + * @param log Logger to use. + * @param msg Message to log. + */ + public static void quietAndWarn(IgniteLogger log, Object msg) { + quietAndWarn(log, msg, msg); + } + + /** + * Logs warning message in both verbose and quiet modes. + * + * @param log Logger to use. + * @param shortMsg Short message. + * @param msg Message to log. + */ + public static void quietAndWarn(IgniteLogger log, Object msg, Object shortMsg) { + warn(log, msg); + + if (log.isQuiet()) + quiet(false, shortMsg); + } + + /** + * Logs warning message in both verbose and quiet modes. + * + * @param log Logger to use. + * @param msg Message to log. + * @param e Optional exception. + */ + public static void quietAndWarn(IgniteLogger log, Object msg, @Nullable Throwable e) { + warn(log, msg, e); + + if (log.isQuiet()) + quiet(false, msg); + } + + /** + * Depending on whether log is provided and quiet mode is enabled logs given + * messages as quiet message or normal log ERROR message. If {@code log} is {@code null} + * or in QUIET mode it will add {@code (err)} prefix to the message. + * + * @param log Optional logger to use when QUIET mode is not enabled. + * @param msg Message to log. + */ + public static void error(@Nullable IgniteLogger log, Object msg) { + assert msg != null; + + if (msg instanceof Throwable) { + Throwable t = (Throwable)msg; + + error(log, t.getMessage(), t); + } + else { + String s = msg.toString(); + + error(log, s, s, null); + } + } + + /** + * Depending on whether log is provided and quiet mode is enabled logs given + * messages as quiet message or normal log WARN message with {@link IgniteLogger#DEV_ONLY DEV_ONLY} marker. + * If {@code log} is {@code null} or in QUIET mode it will add {@code (wrn)} prefix to the message. + * If property {@link IgniteCommonsSystemProperties#IGNITE_DEV_ONLY_LOGGING_DISABLED IGNITE_DEV_ONLY_LOGGING_DISABLED} + * is set to true, the message will not be logged. + * + * @param log Optional logger to use when QUIET mode is not enabled. + * @param msg Message to log. + */ + public static void warnDevOnly(@Nullable IgniteLogger log, Object msg) { + assert msg != null; + + // don't log message if DEV_ONLY messages are disabled + if (devOnlyLogDisabled) + return; + + if (log != null) + log.warning(IgniteLogger.DEV_ONLY, compact(msg.toString()), null); + else + X.println("[" + SHORT_DATE_FMT.format(Instant.now()) + "] (wrn) " + + compact(msg.toString())); + } + + /** + * Depending on whether log is provided and quiet mode is enabled logs given + * messages as quiet message or normal log INFO message. + * <p> + * <b>NOTE:</b> unlike the normal logging when INFO level may not be enabled and + * therefore no logging will happen - using this method the log will be written + * always either via INFO log or quiet mode. + * <p> + * <b>USE IT APPROPRIATELY.</b> + * + * @param log Optional logger to use when QUIET mode is not enabled. + * @param longMsg Message to log using normal logger. + * @param shortMsg Message to log using quiet logger. + */ + public static void log(@Nullable IgniteLogger log, Object longMsg, Object shortMsg) { + assert longMsg != null; + assert shortMsg != null; + + if (log != null) { + if (log.isInfoEnabled()) + log.info(compact(longMsg.toString())); + } + else + quiet(false, shortMsg); + } + + /** + * Depending on whether log is provided and quiet mode is enabled logs given + * messages as quiet message or normal log INF0 message. + * <p> + * <b>NOTE:</b> unlike the normal logging when INFO level may not be enabled and + * therefore no logging will happen - using this method the log will be written + * always either via INFO log or quiet mode. + * <p> + * <b>USE IT APPROPRIATELY.</b> + * + * @param log Optional logger to use when QUIET mode is not enabled. + * @param msg Message to log. + */ + public static void log(@Nullable IgniteLogger log, Object msg) { + assert msg != null; + + String s = msg.toString(); + + log(log, s, s); + } + + /** + * Depending on whether log is provided and quiet mode is enabled logs given + * messages as quiet message or normal log ERROR message. If {@code log} is {@code null} + * or in QUIET mode it will add {@code (err)} prefix to the message. + * + * @param log Optional logger to use when QUIET mode is not enabled. + * @param longMsg Message to log using normal logger. + * @param shortMsg Message to log using quiet logger. + * @param e Optional exception. + */ + public static void error(@Nullable IgniteLogger log, Object longMsg, Object shortMsg, @Nullable Throwable e) { + assert longMsg != null; + assert shortMsg != null; + + if (log != null) { + if (e == null) + log.error(compact(longMsg.toString())); + else + log.error(compact(longMsg.toString()), e); + } + else { + X.printerr("[" + SHORT_DATE_FMT.format(Instant.now()) + "] (err) " + + compact(shortMsg.toString())); + + if (e != null) + e.printStackTrace(System.err); + else + X.printerrln(); + } + } + + /** + * Shortcut for {@link #error(org.apache.ignite.IgniteLogger, Object, Object, Throwable)}. + * + * @param log Optional logger. + * @param shortMsg Message to log using quiet logger. + * @param e Optional exception. + */ + public static void error(@Nullable IgniteLogger log, Object shortMsg, @Nullable Throwable e) { + assert shortMsg != null; + + String s = shortMsg.toString(); + + error(log, s, s, e); + } + + /** + * + * @param err Whether to print to {@code System.err}. + * @param objs Objects to log in quiet mode. + */ + public static void quiet(boolean err, Object... objs) { + assert objs != null; + + String time = SHORT_DATE_FMT.format(Instant.now()); + + SB sb = new SB(); + + for (Object obj : objs) + sb.a('[').a(time).a("] ").a(obj.toString()).a(NL); + + PrintStream ps = err ? System.err : System.out; + + ps.print(compact(sb.toString())); + } + + /** + * + * @param err Whether to print to {@code System.err}. + * @param multiline Multiple lines string to print. + */ + public static void quietMultipleLines(boolean err, String multiline) { + assert multiline != null; + + quiet(err, multiline.split(NL)); + } + + /** + * Prints out the message in quiet and info modes. + * + * @param log Logger. + * @param msg Message to print. + */ + public static void quietAndInfo(IgniteLogger log, String msg) { + if (log.isQuiet()) + quiet(false, msg); + + if (log.isInfoEnabled()) + log.info(msg); + } + + /** + * Replaces all occurrences of {@code org.apache.ignite.} with {@code o.a.i.}, + * {@code org.apache.ignite.internal.} with {@code o.a.i.i.}, + * {@code org.apache.ignite.internal.visor.} with {@code o.a.i.i.v.} and + * + * @param s String to replace in. + * @return Replaces string. + */ + public static String compact(String s) { + return s.replace("org.apache.ignite.internal.visor.", "o.a.i.i.v."). + replace("org.apache.ignite.internal.", "o.a.i.i."). + replace(IGNITE_PKG, "o.a.i."); + } + + /** + * Check if given class represents a Enum. + * + * @param cls Class to check. + * @return {@code True} if this is a Enum class. + */ + public static boolean isEnum(Class cls) { + if (cls.isEnum()) + return true; + + Class sCls = cls.getSuperclass(); + + return sCls != null && sCls.isEnum(); + } } diff --git a/modules/core/src/main/java/org/apache/ignite/internal/util/GridHandleTable.java b/modules/commons/src/main/java/org/apache/ignite/internal/util/GridHandleTable.java similarity index 100% rename from modules/core/src/main/java/org/apache/ignite/internal/util/GridHandleTable.java rename to modules/commons/src/main/java/org/apache/ignite/internal/util/GridHandleTable.java diff --git a/modules/core/src/main/java/org/apache/ignite/internal/util/GridLogThrottle.java b/modules/commons/src/main/java/org/apache/ignite/internal/util/GridLogThrottle.java similarity index 93% rename from modules/core/src/main/java/org/apache/ignite/internal/util/GridLogThrottle.java rename to modules/commons/src/main/java/org/apache/ignite/internal/util/GridLogThrottle.java index 3061ba5de0a..707926a819d 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/util/GridLogThrottle.java +++ b/modules/commons/src/main/java/org/apache/ignite/internal/util/GridLogThrottle.java @@ -18,15 +18,13 @@ package org.apache.ignite.internal.util; import java.util.concurrent.ConcurrentMap; +import org.apache.ignite.IgniteCommonsSystemProperties; import org.apache.ignite.IgniteLogger; -import org.apache.ignite.IgniteSystemProperties; import org.apache.ignite.internal.util.typedef.F; -import org.apache.ignite.internal.util.typedef.internal.U; import org.apache.ignite.lang.IgniteBiTuple; import org.jetbrains.annotations.Nullable; import org.jsr166.ConcurrentLinkedHashMap; -import static org.apache.ignite.IgniteSystemProperties.IGNITE_LOG_THROTTLE_CAPACITY; import static org.jsr166.ConcurrentLinkedHashMap.DFLT_CONCUR_LVL; /** @@ -44,12 +42,12 @@ public class GridLogThrottle { /** Throttle timeout in milliseconds. */ private static volatile int throttleTimeout = DFLT_THROTTLE_TIMEOUT; - /** @see IgniteSystemProperties#IGNITE_LOG_THROTTLE_CAPACITY */ + /** @see IgniteCommonsSystemProperties#IGNITE_LOG_THROTTLE_CAPACITY */ public static final int DFLT_LOG_THROTTLE_CAPACITY = 128; /** Throttle capacity. */ private static final int throttleCap = - IgniteSystemProperties.getInteger(IGNITE_LOG_THROTTLE_CAPACITY, DFLT_LOG_THROTTLE_CAPACITY); + IgniteCommonsSystemProperties.getInteger(IgniteCommonsSystemProperties.IGNITE_LOG_THROTTLE_CAPACITY, DFLT_LOG_THROTTLE_CAPACITY); /** Errors. */ private static volatile ConcurrentMap<IgniteBiTuple<Class<? extends Throwable>, String>, Long> errors = @@ -220,7 +218,7 @@ public class GridLogThrottle { while (true) { Long loggedTs = errors.get(tup); - long curTs = U.currentTimeMillis(); + long curTs = CommonUtils.currentTimeMillis(); if (loggedTs == null || loggedTs < curTs - throttleTimeout) { if (replace(tup, loggedTs, curTs)) { @@ -268,9 +266,9 @@ public class GridLogThrottle { /** {@inheritDoc} */ @Override public void doLog(IgniteLogger log, String msg, Throwable e, boolean quiet) { if (e != null) - U.error(log, msg, e); + CommonUtils.error(log, msg, e); else - U.error(log, msg); + CommonUtils.error(log, msg); } }, @@ -279,9 +277,9 @@ public class GridLogThrottle { /** {@inheritDoc} */ @Override public void doLog(IgniteLogger log, String msg, Throwable e, boolean quiet) { if (quiet) - U.quietAndWarn(log, msg, e); + CommonUtils.quietAndWarn(log, msg, e); else - U.warn(log, msg, e); + CommonUtils.warn(log, msg, e); } }, @@ -290,7 +288,7 @@ public class GridLogThrottle { /** {@inheritDoc} */ @Override public void doLog(IgniteLogger log, String msg, Throwable e, boolean quiet) { if (quiet) - U.quietAndInfo(log, msg); + CommonUtils.quietAndInfo(log, msg); else { if (log.isInfoEnabled()) log.info(msg); diff --git a/modules/core/src/main/java/org/apache/ignite/internal/util/io/GridDataInput.java b/modules/commons/src/main/java/org/apache/ignite/internal/util/io/GridDataInput.java similarity index 100% rename from modules/core/src/main/java/org/apache/ignite/internal/util/io/GridDataInput.java rename to modules/commons/src/main/java/org/apache/ignite/internal/util/io/GridDataInput.java diff --git a/modules/core/src/main/java/org/apache/ignite/internal/util/io/GridDataOutput.java b/modules/commons/src/main/java/org/apache/ignite/internal/util/io/GridDataOutput.java similarity index 100% rename from modules/core/src/main/java/org/apache/ignite/internal/util/io/GridDataOutput.java rename to modules/commons/src/main/java/org/apache/ignite/internal/util/io/GridDataOutput.java diff --git a/modules/core/src/main/java/org/apache/ignite/internal/util/typedef/internal/LT.java b/modules/commons/src/main/java/org/apache/ignite/internal/util/typedef/internal/LT.java similarity index 100% rename from modules/core/src/main/java/org/apache/ignite/internal/util/typedef/internal/LT.java rename to modules/commons/src/main/java/org/apache/ignite/internal/util/typedef/internal/LT.java diff --git a/modules/core/src/main/java/org/apache/ignite/IgniteSystemProperties.java b/modules/core/src/main/java/org/apache/ignite/IgniteSystemProperties.java index 2dfee417fbd..b759d2f7488 100644 --- a/modules/core/src/main/java/org/apache/ignite/IgniteSystemProperties.java +++ b/modules/core/src/main/java/org/apache/ignite/IgniteSystemProperties.java @@ -34,7 +34,6 @@ import org.apache.ignite.configuration.DiskPageCompression; import org.apache.ignite.configuration.IgniteConfiguration; import org.apache.ignite.internal.binary.BinaryUtils; import org.apache.ignite.internal.cache.query.index.sorted.inline.InlineRecommender; -import org.apache.ignite.internal.marshaller.optimized.OptimizedMarshaller; import org.apache.ignite.internal.processors.cache.persistence.checkpoint.CheckpointEntry; import org.apache.ignite.internal.processors.cache.persistence.checkpoint.CheckpointMarkersStorage; import org.apache.ignite.internal.processors.cache.persistence.snapshot.IgniteSnapshotManager; @@ -42,7 +41,6 @@ import org.apache.ignite.internal.processors.metastorage.DistributedMetaStorage; import org.apache.ignite.internal.processors.performancestatistics.FilePerformanceStatisticsWriter; import org.apache.ignite.internal.processors.query.schema.SchemaIndexCachePartitionWorker; import org.apache.ignite.internal.processors.rest.GridRestCommand; -import org.apache.ignite.internal.util.GridLogThrottle; import org.apache.ignite.internal.util.IgniteUtils; import org.apache.ignite.lang.IgniteExperimental; import org.apache.ignite.mxbean.MetricsMxBean; @@ -134,7 +132,6 @@ import static org.apache.ignite.internal.processors.query.schema.SchemaIndexCach import static org.apache.ignite.internal.processors.rest.GridRestProcessor.DFLT_SES_TIMEOUT; import static org.apache.ignite.internal.processors.rest.GridRestProcessor.DFLT_SES_TOKEN_INVALIDATE_INTERVAL; import static org.apache.ignite.internal.processors.rest.handlers.task.GridTaskCommandHandler.DFLT_MAX_TASK_RESULTS; -import static org.apache.ignite.internal.util.GridLogThrottle.DFLT_LOG_THROTTLE_CAPACITY; import static org.apache.ignite.internal.util.GridReflectionCache.DFLT_REFLECTION_CACHE_SIZE; import static org.apache.ignite.internal.util.IgniteExceptionRegistry.DEFAULT_QUEUE_SIZE; import static org.apache.ignite.internal.util.IgniteUtils.DFLT_MBEAN_APPEND_CLASS_LOADER_ID; @@ -834,15 +831,6 @@ public final class IgniteSystemProperties extends IgniteCommonsSystemProperties @SystemProperty("Enables local store keeps primary only. Backward compatibility flag") public static final String IGNITE_LOCAL_STORE_KEEPS_PRIMARY_ONLY = "IGNITE_LOCAL_STORE_KEEPS_PRIMARY_ONLY"; - /** - * Manages {@link OptimizedMarshaller} behavior of {@code serialVersionUID} computation for - * {@link Serializable} classes. - */ - @SystemProperty("Manages OptimizedMarshaller behavior of serialVersionUID computation " + - "for Serializable classes") - public static final String IGNITE_OPTIMIZED_MARSHALLER_USE_DEFAULT_SUID = - "IGNITE_OPTIMIZED_MARSHALLER_USE_DEFAULT_SUID"; - /** * Manages type of serialization mechanism for {@link String} that is marshalled/unmarshalled by BinaryMarshaller. * Should be used for cases when a String contains a surrogate symbol without its pair one. This is frequently used @@ -1162,11 +1150,6 @@ public final class IgniteSystemProperties extends IgniteCommonsSystemProperties defaults = "" + DFLT_USE_ASYNC_FILE_IO_FACTORY) public static final String IGNITE_USE_ASYNC_FILE_IO_FACTORY = "IGNITE_USE_ASYNC_FILE_IO_FACTORY"; - /** Max amount of remembered errors for {@link GridLogThrottle}. */ - @SystemProperty(value = "Max amount of remembered errors for GridLogThrottle", type = Integer.class, - defaults = "" + DFLT_LOG_THROTTLE_CAPACITY) - public static final String IGNITE_LOG_THROTTLE_CAPACITY = "IGNITE_LOG_THROTTLE_CAPACITY"; - /** * If this property is set, {@link DataStorageConfiguration#setWriteThrottlingEnabled(boolean)} * will be overridden to {@code true} regardless the initial value in the configuration. @@ -1267,13 +1250,6 @@ public final class IgniteSystemProperties extends IgniteCommonsSystemProperties "this mode", defaults = "true") public static final String IGNITE_DIRECT_IO_ENABLED = "IGNITE_DIRECT_IO_ENABLED"; - /** - * When set to {@code true}, warnings that are intended for development environments and not for production - * (such as coding mistakes in code using Ignite) will not be logged. - */ - @SystemProperty("Enables development environments warnings") - public static final String IGNITE_DEV_ONLY_LOGGING_DISABLED = "IGNITE_DEV_ONLY_LOGGING_DISABLED"; - /** * When set to {@code true} (default), pages are written to page store without holding segment lock (with delay). * Because other thread may require exactly the same page to be loaded from store, reads are protected by locking. diff --git a/modules/core/src/main/java/org/apache/ignite/internal/IgniteKernal.java b/modules/core/src/main/java/org/apache/ignite/internal/IgniteKernal.java index ac58cfc992d..a3e0ac10b61 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/IgniteKernal.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/IgniteKernal.java @@ -112,7 +112,6 @@ import org.apache.ignite.internal.managers.systemview.GridSystemViewManager; import org.apache.ignite.internal.managers.systemview.IgniteConfigurationIterable; import org.apache.ignite.internal.managers.systemview.walker.ConfigurationViewWalker; import org.apache.ignite.internal.managers.tracing.GridTracingManager; -import org.apache.ignite.internal.marshaller.optimized.OptimizedMarshaller; import org.apache.ignite.internal.plugin.IgniteLogInfoProvider; import org.apache.ignite.internal.plugin.IgniteLogInfoProviderImpl; import org.apache.ignite.internal.processors.GridProcessor; @@ -205,6 +204,7 @@ import org.apache.ignite.marshaller.IgniteMarshallerClassFilter; import org.apache.ignite.marshaller.Marshaller; import org.apache.ignite.marshaller.MarshallerExclusions; import org.apache.ignite.marshaller.MarshallerUtils; +import org.apache.ignite.marshaller.Marshallers; import org.apache.ignite.metric.IgniteMetrics; import org.apache.ignite.metric.MetricRegistry; import org.apache.ignite.plugin.IgnitePlugin; @@ -1416,8 +1416,7 @@ public class IgniteKernal implements IgniteEx, Externalizable { Marshaller marsh = ctx.marshaller(); marsh.setContext(ctx.marshallerContext()); - - MarshallerUtils.setNodeName(marsh, ctx.igniteInstanceName()); + marsh.nodeName(ctx.igniteInstanceName()); } /** */ @@ -1535,7 +1534,7 @@ public class IgniteKernal implements IgniteEx, Externalizable { add(ATTR_BUILD_DATE, BUILD_TSTAMP_STR); add(ATTR_MARSHALLER, ctx.marshaller().getClass().getName()); add(ATTR_MARSHALLER_USE_DFLT_SUID, - getBoolean(IGNITE_OPTIMIZED_MARSHALLER_USE_DEFAULT_SUID, OptimizedMarshaller.USE_DFLT_SUID)); + getBoolean(IGNITE_OPTIMIZED_MARSHALLER_USE_DEFAULT_SUID, Marshallers.USE_DFLT_SUID)); add(ATTR_LATE_AFFINITY_ASSIGNMENT, cfg.isLateAffinityAssignment()); add(ATTR_MARSHALLER_COMPACT_FOOTER, cfg.getBinaryConfiguration() == null ? diff --git a/modules/core/src/main/java/org/apache/ignite/internal/MarshallerContextImpl.java b/modules/core/src/main/java/org/apache/ignite/internal/MarshallerContextImpl.java index 28131e156d0..9191ceddfb1 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/MarshallerContextImpl.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/MarshallerContextImpl.java @@ -639,7 +639,7 @@ public class MarshallerContextImpl implements MarshallerContext { if (CU.isPersistenceEnabled(ctx.config())) fileStore.restoreMappings(this); - MarshallerUtils.setNodeName(jdkMarsh, ctx.igniteInstanceName()); + jdkMarsh.nodeName(ctx.igniteInstanceName()); } /** diff --git a/modules/core/src/main/java/org/apache/ignite/internal/binary/BinaryContext.java b/modules/core/src/main/java/org/apache/ignite/internal/binary/BinaryContext.java index 81b8035a3e3..099b3edaf65 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/binary/BinaryContext.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/binary/BinaryContext.java @@ -147,7 +147,7 @@ public class BinaryContext { private final IgniteLogger log; /** */ - private final OptimizedMarshaller optmMarsh = new OptimizedMarshaller(false); + private final OptimizedMarshaller optmMarsh = Marshallers.optimized(false); /** Compact footer flag. */ private final boolean compactFooter; diff --git a/modules/core/src/main/java/org/apache/ignite/internal/client/marshaller/optimized/GridClientOptimizedMarshaller.java b/modules/core/src/main/java/org/apache/ignite/internal/client/marshaller/optimized/GridClientOptimizedMarshaller.java index 267abee4784..2677959f0b4 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/client/marshaller/optimized/GridClientOptimizedMarshaller.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/client/marshaller/optimized/GridClientOptimizedMarshaller.java @@ -26,6 +26,7 @@ import org.apache.ignite.internal.client.marshaller.GridClientMarshaller; import org.apache.ignite.internal.marshaller.optimized.OptimizedMarshaller; import org.apache.ignite.internal.processors.rest.client.message.GridClientMessage; import org.apache.ignite.internal.util.typedef.internal.U; +import org.apache.ignite.marshaller.Marshallers; import org.apache.ignite.plugin.PluginProvider; import org.jetbrains.annotations.Nullable; @@ -44,7 +45,7 @@ public class GridClientOptimizedMarshaller implements GridClientMarshaller { * Default constructor. */ public GridClientOptimizedMarshaller() { - opMarsh = new OptimizedMarshaller(); + opMarsh = Marshallers.optimized(); opMarsh.setContext(new MarshallerContextImpl(null, null)); } @@ -55,7 +56,7 @@ public class GridClientOptimizedMarshaller implements GridClientMarshaller { * @param plugins Plugins. */ public GridClientOptimizedMarshaller(@Nullable List<PluginProvider> plugins) { - opMarsh = new OptimizedMarshaller(); + opMarsh = Marshallers.optimized(); opMarsh.setContext(new MarshallerContextImpl(plugins, null)); } diff --git a/modules/core/src/main/java/org/apache/ignite/internal/util/IgniteUtils.java b/modules/core/src/main/java/org/apache/ignite/internal/util/IgniteUtils.java index 71e42f6a04b..e8c5a63c337 100755 --- a/modules/core/src/main/java/org/apache/ignite/internal/util/IgniteUtils.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/util/IgniteUtils.java @@ -35,7 +35,6 @@ import java.io.ObjectInputStream; import java.io.ObjectOutput; import java.io.ObjectOutputStream; import java.io.OutputStream; -import java.io.PrintStream; import java.io.Reader; import java.io.Serializable; import java.io.StringWriter; @@ -55,7 +54,6 @@ import java.lang.reflect.Method; import java.lang.reflect.Modifier; import java.math.BigDecimal; import java.math.MathContext; -import java.net.DatagramSocket; import java.net.InetAddress; import java.net.InetSocketAddress; import java.net.MalformedURLException; @@ -70,10 +68,7 @@ import java.net.URL; import java.net.URLClassLoader; import java.nio.ByteBuffer; import java.nio.ByteOrder; -import java.nio.channels.ClosedChannelException; import java.nio.channels.FileLock; -import java.nio.channels.SelectionKey; -import java.nio.channels.Selector; import java.nio.channels.SocketChannel; import java.nio.charset.Charset; import java.nio.file.DirectoryStream; @@ -218,7 +213,6 @@ import org.apache.ignite.internal.util.typedef.P1; import org.apache.ignite.internal.util.typedef.X; import org.apache.ignite.internal.util.typedef.internal.A; import org.apache.ignite.internal.util.typedef.internal.CU; -import org.apache.ignite.internal.util.typedef.internal.LT; import org.apache.ignite.internal.util.typedef.internal.S; import org.apache.ignite.internal.util.typedef.internal.SB; import org.apache.ignite.internal.util.worker.GridWorker; @@ -353,9 +347,6 @@ public abstract class IgniteUtils extends CommonUtils { /** Length of numbered file name. */ public static final int NUMBER_FILE_NAME_LENGTH = 16; - /** Ignite package. */ - public static final String IGNITE_PKG = "org.apache.ignite."; - /** Project home directory. */ private static volatile GridTuple<String> ggHome; @@ -403,14 +394,6 @@ public abstract class IgniteUtils extends CommonUtils { public static final DateTimeFormatter LONG_DATE_FMT = DateTimeFormatter.ofPattern("MM/dd/yyyy HH:mm:ss").withZone(ZoneId.systemDefault()); - /** - * Short date format pattern for log messages in "quiet" mode. - * Only time is included since we don't expect "quiet" mode to be used - * for longer runs. - */ - public static final DateTimeFormatter SHORT_DATE_FMT = - DateTimeFormatter.ofPattern("HH:mm:ss").withZone(ZoneId.systemDefault()); - /** Debug date format. */ public static final DateTimeFormatter DEBUG_DATE_FMT = DateTimeFormatter.ofPattern("HH:mm:ss,SSS").withZone(ZoneId.systemDefault()); @@ -493,10 +476,6 @@ public abstract class IgniteUtils extends CommonUtils { */ private static final Field urlClsLdrField = urlClassLoaderField(); - /** Dev only logging disabled. */ - private static final boolean devOnlyLogDisabled = - IgniteSystemProperties.getBoolean(IgniteSystemProperties.IGNITE_DEV_ONLY_LOGGING_DISABLED); - /** JDK9: jdk.internal.loader.URLClassPath. */ private static Class clsURLClassPath; @@ -3264,59 +3243,6 @@ public abstract class IgniteUtils extends CommonUtils { return false; } - /** - * Closes given resource logging possible checked exception. - * - * @param rsrc Resource to close. If it's {@code null} - it's no-op. - * @param log Logger to log possible checked exception with (optional). - */ - public static void close(@Nullable AutoCloseable rsrc, @Nullable IgniteLogger log) { - if (rsrc != null) { - try { - rsrc.close(); - } - catch (Exception e) { - warn(log, "Failed to close resource: " + e.getMessage(), e); - } - } - } - - /** - * Closes given socket logging possible checked exception. - * - * @param sock Socket to close. If it's {@code null} - it's no-op. - * @param log Logger to log possible checked exception with (optional). - */ - public static void close(@Nullable Socket sock, @Nullable IgniteLogger log) { - if (sock == null || sock.isClosed()) - return; - - try { - // Closing output and input first to avoid tls 1.3 incompatibility - // https://bugs.openjdk.java.net/browse/JDK-8208526 - if (!sock.isOutputShutdown()) - sock.shutdownOutput(); - if (!sock.isInputShutdown()) - sock.shutdownInput(); - } - catch (ClosedChannelException | SocketException ex) { - LT.warn(log, "Failed to shutdown socket", ex); - } - catch (Exception e) { - warn(log, "Failed to shutdown socket: " + e.getMessage(), e); - } - - try { - sock.close(); - } - catch (ClosedChannelException | SocketException ex) { - LT.warn(log, "Failed to close socket", ex); - } - catch (Exception e) { - warn(log, "Failed to close socket: " + e.getMessage(), e); - } - } - /** * Closes given resource suppressing possible checked exception. * @@ -3348,62 +3274,6 @@ public abstract class IgniteUtils extends CommonUtils { } } - /** - * Closes given resource logging possible checked exceptions. - * - * @param rsrc Resource to close. If it's {@code null} - it's no-op. - * @param log Logger to log possible checked exception with (optional). - */ - public static void close(@Nullable SelectionKey rsrc, @Nullable IgniteLogger log) { - if (rsrc != null) - // This apply will automatically deregister the selection key as well. - close(rsrc.channel(), log); - } - - /** - * Closes given resource. - * - * @param rsrc Resource to close. If it's {@code null} - it's no-op. - */ - public static void close(@Nullable DatagramSocket rsrc) { - if (rsrc != null) - rsrc.close(); - } - - /** - * Closes given resource logging possible checked exception. - * - * @param rsrc Resource to close. If it's {@code null} - it's no-op. - * @param log Logger to log possible checked exception with (optional). - */ - public static void close(@Nullable Selector rsrc, @Nullable IgniteLogger log) { - if (rsrc != null) - try { - if (rsrc.isOpen()) - rsrc.close(); - } - catch (IOException e) { - warn(log, "Failed to close resource: " + e.getMessage()); - } - } - - /** - * Closes class loader logging possible checked exception. - * - * @param clsLdr Class loader. If it's {@code null} - it's no-op. - * @param log Logger to log possible checked exception with (optional). - */ - public static void close(@Nullable URLClassLoader clsLdr, @Nullable IgniteLogger log) { - if (clsLdr != null) { - try { - clsLdr.close(); - } - catch (Exception e) { - warn(log, "Failed to close resource: " + e.getMessage()); - } - } - } - /** * Quietly closes given {@link Socket} ignoring possible checked exception. * @@ -3499,158 +3369,6 @@ public abstract class IgniteUtils extends CommonUtils { compact(shortMsg.toString())); } - /** - * Depending on whether or not log is provided and quiet mode is enabled logs given - * messages as quiet message or normal log WARN message. If {@code log} is {@code null} - * or in QUIET mode it will add {@code (wrn)} prefix to the message. - * - * @param log Optional logger to use when QUIET mode is not enabled. - * @param msg Message to log. - */ - public static void warn(@Nullable IgniteLogger log, Object msg) { - assert msg != null; - - String s = msg.toString(); - - warn(log, s, null); - } - - /** - * Logs warning message in both verbose and quiet modes. - * - * @param log Logger to use. - * @param msg Message to log. - */ - public static void quietAndWarn(IgniteLogger log, Object msg) { - quietAndWarn(log, msg, msg); - } - - /** - * Logs warning message in both verbose and quiet modes. - * - * @param log Logger to use. - * @param shortMsg Short message. - * @param msg Message to log. - */ - public static void quietAndWarn(IgniteLogger log, Object msg, Object shortMsg) { - warn(log, msg); - - if (log.isQuiet()) - quiet(false, shortMsg); - } - - /** - * Logs warning message in both verbose and quiet modes. - * - * @param log Logger to use. - * @param msg Message to log. - * @param e Optional exception. - */ - public static void quietAndWarn(IgniteLogger log, Object msg, @Nullable Throwable e) { - warn(log, msg, e); - - if (log.isQuiet()) - quiet(false, msg); - } - - /** - * Depending on whether or not log is provided and quiet mode is enabled logs given - * messages as quiet message or normal log ERROR message. If {@code log} is {@code null} - * or in QUIET mode it will add {@code (err)} prefix to the message. - * - * @param log Optional logger to use when QUIET mode is not enabled. - * @param msg Message to log. - */ - public static void error(@Nullable IgniteLogger log, Object msg) { - assert msg != null; - - if (msg instanceof Throwable) { - Throwable t = (Throwable)msg; - - error(log, t.getMessage(), t); - } - else { - String s = msg.toString(); - - error(log, s, s, null); - } - } - - /** - * Depending on whether or not log is provided and quiet mode is enabled logs given - * messages as quiet message or normal log WARN message. If {@code log} is {@code null} - * or in QUIET mode it will add {@code (wrn)} prefix to the message. - * - * @param log Optional logger to use when QUIET mode is not enabled. - * @param msg Message to log using normal logger. - * @param e Optional exception. - */ - public static void warn(@Nullable IgniteLogger log, Object msg, @Nullable Throwable e) { - assert msg != null; - - if (log != null) - log.warning(compact(msg.toString()), e); - else { - X.println("[" + SHORT_DATE_FMT.format(Instant.now()) + "] (wrn) " + - compact(msg.toString())); - - if (e != null) - e.printStackTrace(System.err); - else - X.printerrln(); - } - } - - /** - * Depending on whether or not log is provided and quiet mode is enabled logs given - * messages as quiet message or normal log WARN message with {@link IgniteLogger#DEV_ONLY DEV_ONLY} marker. - * If {@code log} is {@code null} or in QUIET mode it will add {@code (wrn)} prefix to the message. - * If property {@link IgniteSystemProperties#IGNITE_DEV_ONLY_LOGGING_DISABLED IGNITE_DEV_ONLY_LOGGING_DISABLED} - * is set to true, the message will not be logged. - * - * @param log Optional logger to use when QUIET mode is not enabled. - * @param msg Message to log. - */ - public static void warnDevOnly(@Nullable IgniteLogger log, Object msg) { - assert msg != null; - - // don't log message if DEV_ONLY messages are disabled - if (devOnlyLogDisabled) - return; - - if (log != null) - log.warning(IgniteLogger.DEV_ONLY, compact(msg.toString()), null); - else - X.println("[" + SHORT_DATE_FMT.format(Instant.now()) + "] (wrn) " + - compact(msg.toString())); - } - - /** - * Depending on whether or not log is provided and quiet mode is enabled logs given - * messages as quiet message or normal log INFO message. - * <p> - * <b>NOTE:</b> unlike the normal logging when INFO level may not be enabled and - * therefore no logging will happen - using this method the log will be written - * always either via INFO log or quiet mode. - * <p> - * <b>USE IT APPROPRIATELY.</b> - * - * @param log Optional logger to use when QUIET mode is not enabled. - * @param longMsg Message to log using normal logger. - * @param shortMsg Message to log using quiet logger. - */ - public static void log(@Nullable IgniteLogger log, Object longMsg, Object shortMsg) { - assert longMsg != null; - assert shortMsg != null; - - if (log != null) { - if (log.isInfoEnabled()) - log.info(compact(longMsg.toString())); - } - else - quiet(false, shortMsg); - } - /** * Resolves work directory. * @param cfg Ignite configuration. @@ -3773,118 +3491,6 @@ public abstract class IgniteUtils extends CommonUtils { } } - /** - * Depending on whether or not log is provided and quiet mode is enabled logs given - * messages as quiet message or normal log INF0 message. - * <p> - * <b>NOTE:</b> unlike the normal logging when INFO level may not be enabled and - * therefore no logging will happen - using this method the log will be written - * always either via INFO log or quiet mode. - * <p> - * <b>USE IT APPROPRIATELY.</b> - * - * @param log Optional logger to use when QUIET mode is not enabled. - * @param msg Message to log. - */ - public static void log(@Nullable IgniteLogger log, Object msg) { - assert msg != null; - - String s = msg.toString(); - - log(log, s, s); - } - - /** - * Depending on whether or not log is provided and quiet mode is enabled logs given - * messages as quiet message or normal log ERROR message. If {@code log} is {@code null} - * or in QUIET mode it will add {@code (err)} prefix to the message. - * - * @param log Optional logger to use when QUIET mode is not enabled. - * @param longMsg Message to log using normal logger. - * @param shortMsg Message to log using quiet logger. - * @param e Optional exception. - */ - public static void error(@Nullable IgniteLogger log, Object longMsg, Object shortMsg, @Nullable Throwable e) { - assert longMsg != null; - assert shortMsg != null; - - if (log != null) { - if (e == null) - log.error(compact(longMsg.toString())); - else - log.error(compact(longMsg.toString()), e); - } - else { - X.printerr("[" + SHORT_DATE_FMT.format(Instant.now()) + "] (err) " + - compact(shortMsg.toString())); - - if (e != null) - e.printStackTrace(System.err); - else - X.printerrln(); - } - } - - /** - * Shortcut for {@link #error(org.apache.ignite.IgniteLogger, Object, Object, Throwable)}. - * - * @param log Optional logger. - * @param shortMsg Message to log using quiet logger. - * @param e Optional exception. - */ - public static void error(@Nullable IgniteLogger log, Object shortMsg, @Nullable Throwable e) { - assert shortMsg != null; - - String s = shortMsg.toString(); - - error(log, s, s, e); - } - - /** - * - * @param err Whether to print to {@code System.err}. - * @param objs Objects to log in quiet mode. - */ - public static void quiet(boolean err, Object... objs) { - assert objs != null; - - String time = SHORT_DATE_FMT.format(Instant.now()); - - SB sb = new SB(); - - for (Object obj : objs) - sb.a('[').a(time).a("] ").a(obj.toString()).a(NL); - - PrintStream ps = err ? System.err : System.out; - - ps.print(compact(sb.toString())); - } - - /** - * - * @param err Whether to print to {@code System.err}. - * @param multiline Multiple lines string to print. - */ - public static void quietMultipleLines(boolean err, String multiline) { - assert multiline != null; - - quiet(err, multiline.split(NL)); - } - - /** - * Prints out the message in quiet and info modes. - * - * @param log Logger. - * @param msg Message to print. - */ - public static void quietAndInfo(IgniteLogger log, String msg) { - if (log.isQuiet()) - quiet(false, msg); - - if (log.isInfoEnabled()) - log.info(msg); - } - /** * Quietly rollbacks JDBC connection ignoring possible checked exception. * @@ -5305,20 +4911,6 @@ public abstract class IgniteUtils extends CommonUtils { return cls.getName().startsWith("org.apache.ignite.internal"); } - /** - * Replaces all occurrences of {@code org.apache.ignite.} with {@code o.a.i.}, - * {@code org.apache.ignite.internal.} with {@code o.a.i.i.}, - * {@code org.apache.ignite.internal.visor.} with {@code o.a.i.i.v.} and - * - * @param s String to replace in. - * @return Replaces string. - */ - public static String compact(String s) { - return s.replace("org.apache.ignite.internal.visor.", "o.a.i.i.v."). - replace("org.apache.ignite.internal.", "o.a.i.i."). - replace(IGNITE_PKG, "o.a.i."); - } - /** * Check if given class is of JDK type. * @@ -5334,21 +4926,6 @@ public abstract class IgniteUtils extends CommonUtils { return s.startsWith("java.") || s.startsWith("javax."); } - /** - * Check if given class represents a Enum. - * - * @param cls Class to check. - * @return {@code True} if this is a Enum class. - */ - public static boolean isEnum(Class cls) { - if (cls.isEnum()) - return true; - - Class sCls = cls.getSuperclass(); - - return sCls != null && sCls.isEnum(); - } - /** * Converts {@link InterruptedException} to {@link IgniteCheckedException}. * @@ -6821,7 +6398,7 @@ public abstract class IgniteUtils extends CommonUtils { public static Class<?> forName( String clsName, @Nullable ClassLoader ldr, - IgnitePredicate<String> clsFilter + @Nullable IgnitePredicate<String> clsFilter ) throws ClassNotFoundException { return forName(clsName, ldr, clsFilter, Marshallers.USE_CACHE.get()); } @@ -7508,18 +7085,6 @@ public abstract class IgniteUtils extends CommonUtils { return res; } - /** - * Creates new {@link HashMap} with expected size. - * - * @param expSize Expected size of created map. - * @param <K> Type of map keys. - * @param <V> Type of map values. - * @return New map. - */ - public static <K, V> HashMap<K, V> newHashMap(int expSize) { - return new HashMap<>(capacity(expSize)); - } - /** * Creates new {@link LinkedHashMap} with expected size. * @@ -9337,37 +8902,6 @@ public abstract class IgniteUtils extends CommonUtils { return IGNITE_SUCCESS_FILE_PROPERTY != null; } - /** - * Returns {@code true} if class is a lambda. - * - * @param objectClass Class. - * @return {@code true} if class is a lambda, {@code false} otherwise. - */ - public static boolean isLambda(Class<?> objectClass) { - return !objectClass.isPrimitive() && !objectClass.isArray() - // Order is crucial here, isAnonymousClass and isLocalClass may fail if - // class' outer class was loaded with different classloader. - && objectClass.isSynthetic() - && !objectClass.isAnonymousClass() && !objectClass.isLocalClass() - && classCannotBeLoadedByName(objectClass); - } - - /** - * Returns {@code true} if class can not be loaded by name. - * - * @param objectClass Class. - * @return {@code true} if class can not be loaded by name, {@code false} otherwise. - */ - public static boolean classCannotBeLoadedByName(Class<?> objectClass) { - try { - Class.forName(objectClass.getName()); - return false; - } - catch (ClassNotFoundException e) { - return true; - } - } - /** * Appends spaces to end of input string for extending to needed length. * diff --git a/modules/core/src/main/java/org/apache/ignite/marshaller/MarshallerUtils.java b/modules/core/src/main/java/org/apache/ignite/marshaller/MarshallerUtils.java index c77d2880896..fb23c8bcbbd 100644 --- a/modules/core/src/main/java/org/apache/ignite/marshaller/MarshallerUtils.java +++ b/modules/core/src/main/java/org/apache/ignite/marshaller/MarshallerUtils.java @@ -66,17 +66,6 @@ public class MarshallerUtils { /** */ private static final Object MUX = new Object(); - /** - * Set node name to marshaller context if possible. - * - * @param marsh Marshaller instance. - * @param nodeName Node name. - */ - public static void setNodeName(Marshaller marsh, @Nullable String nodeName) { - if (marsh instanceof AbstractNodeNameAwareMarshaller) - ((AbstractNodeNameAwareMarshaller)marsh).nodeName(nodeName); - } - /** * Private constructor. */ diff --git a/modules/core/src/main/java/org/apache/ignite/spi/discovery/tcp/TcpDiscoverySpi.java b/modules/core/src/main/java/org/apache/ignite/spi/discovery/tcp/TcpDiscoverySpi.java index a2d55b094f5..c4ba9264ebc 100644 --- a/modules/core/src/main/java/org/apache/ignite/spi/discovery/tcp/TcpDiscoverySpi.java +++ b/modules/core/src/main/java/org/apache/ignite/spi/discovery/tcp/TcpDiscoverySpi.java @@ -74,7 +74,6 @@ import org.apache.ignite.lang.IgnitePredicate; import org.apache.ignite.lang.IgniteProductVersion; import org.apache.ignite.lang.IgniteUuid; import org.apache.ignite.marshaller.Marshaller; -import org.apache.ignite.marshaller.MarshallerUtils; import org.apache.ignite.resources.IgniteInstanceResource; import org.apache.ignite.resources.LoggerResource; import org.apache.ignite.spi.IgniteSpiAdapter; @@ -2531,7 +2530,7 @@ public class TcpDiscoverySpi extends IgniteSpiAdapter implements IgniteDiscovery * @return Marshaller. */ protected Marshaller marshaller() { - MarshallerUtils.setNodeName(marsh, igniteInstanceName); + marsh.nodeName(igniteInstanceName); return marsh; } diff --git a/modules/core/src/main/java/org/apache/ignite/stream/socket/SocketStreamer.java b/modules/core/src/main/java/org/apache/ignite/stream/socket/SocketStreamer.java index 9ea50a0819d..e4587555f3f 100644 --- a/modules/core/src/main/java/org/apache/ignite/stream/socket/SocketStreamer.java +++ b/modules/core/src/main/java/org/apache/ignite/stream/socket/SocketStreamer.java @@ -38,7 +38,6 @@ import org.apache.ignite.internal.util.typedef.F; import org.apache.ignite.internal.util.typedef.internal.A; import org.apache.ignite.internal.util.typedef.internal.U; import org.apache.ignite.marshaller.Marshaller; -import org.apache.ignite.marshaller.MarshallerUtils; import org.apache.ignite.marshaller.Marshallers; import org.apache.ignite.stream.StreamAdapter; import org.apache.ignite.stream.StreamTupleExtractor; @@ -231,7 +230,7 @@ public class SocketStreamer<T, K, V> extends StreamAdapter<T, K, V> { private DefaultConverter(@Nullable String igniteInstanceName) { marsh = Marshallers.jdk(((IgniteKernal)ignite).context().marshallerContext().classNameFilter()); - MarshallerUtils.setNodeName(marsh, igniteInstanceName); + marsh.nodeName(igniteInstanceName); } /** {@inheritDoc} */ diff --git a/modules/core/src/test/java/org/apache/ignite/internal/managers/discovery/GridDiscoveryManagerAttributesSelfTest.java b/modules/core/src/test/java/org/apache/ignite/internal/managers/discovery/GridDiscoveryManagerAttributesSelfTest.java index 2f4212f9a9f..a89a8dfb11f 100644 --- a/modules/core/src/test/java/org/apache/ignite/internal/managers/discovery/GridDiscoveryManagerAttributesSelfTest.java +++ b/modules/core/src/test/java/org/apache/ignite/internal/managers/discovery/GridDiscoveryManagerAttributesSelfTest.java @@ -22,7 +22,7 @@ import org.apache.ignite.IgniteCheckedException; import org.apache.ignite.configuration.DeploymentMode; import org.apache.ignite.configuration.IgniteConfiguration; import org.apache.ignite.internal.IgniteEx; -import org.apache.ignite.internal.marshaller.optimized.OptimizedMarshaller; +import org.apache.ignite.marshaller.Marshallers; import org.apache.ignite.spi.discovery.TestReconnectSecurityPluginProvider; import org.apache.ignite.testframework.junits.common.GridCommonAbstractTest; import org.junit.Test; @@ -134,7 +134,7 @@ public class GridDiscoveryManagerAttributesSelfTest extends GridCommonAbstractTe } finally { System.setProperty(IGNITE_OPTIMIZED_MARSHALLER_USE_DEFAULT_SUID, - String.valueOf(OptimizedMarshaller.USE_DFLT_SUID)); + String.valueOf(Marshallers.USE_DFLT_SUID)); } } diff --git a/modules/core/src/test/java/org/apache/ignite/internal/marshaller/optimized/OptimizedMarshallerEnumSelfTest.java b/modules/core/src/test/java/org/apache/ignite/internal/marshaller/optimized/OptimizedMarshallerEnumSelfTest.java index 3cba5d59be1..dc15eedb27c 100644 --- a/modules/core/src/test/java/org/apache/ignite/internal/marshaller/optimized/OptimizedMarshallerEnumSelfTest.java +++ b/modules/core/src/test/java/org/apache/ignite/internal/marshaller/optimized/OptimizedMarshallerEnumSelfTest.java @@ -18,6 +18,7 @@ package org.apache.ignite.internal.marshaller.optimized; import org.apache.ignite.marshaller.Marshaller; +import org.apache.ignite.marshaller.Marshallers; import org.apache.ignite.testframework.junits.common.GridCommonAbstractTest; import org.junit.Test; @@ -31,7 +32,7 @@ public class OptimizedMarshallerEnumSelfTest extends GridCommonAbstractTest { */ @Test public void testEnumSerialisation() throws Exception { - Marshaller marsh = initTestMarshallerContext(new OptimizedMarshaller()); + Marshaller marsh = initTestMarshallerContext(Marshallers.optimized()); byte[] bytes = marsh.marshal(TestEnum.Bond); diff --git a/modules/core/src/test/java/org/apache/ignite/internal/marshaller/optimized/OptimizedMarshallerPooledSelfTest.java b/modules/core/src/test/java/org/apache/ignite/internal/marshaller/optimized/OptimizedMarshallerPooledSelfTest.java index 4199dc9686f..15223c9eb6a 100644 --- a/modules/core/src/test/java/org/apache/ignite/internal/marshaller/optimized/OptimizedMarshallerPooledSelfTest.java +++ b/modules/core/src/test/java/org/apache/ignite/internal/marshaller/optimized/OptimizedMarshallerPooledSelfTest.java @@ -19,6 +19,7 @@ package org.apache.ignite.internal.marshaller.optimized; import org.apache.ignite.IgniteCheckedException; import org.apache.ignite.marshaller.Marshaller; +import org.apache.ignite.marshaller.Marshallers; import org.apache.ignite.testframework.junits.common.GridCommonTest; /** @@ -28,7 +29,7 @@ import org.apache.ignite.testframework.junits.common.GridCommonTest; public class OptimizedMarshallerPooledSelfTest extends OptimizedMarshallerSelfTest { /** {@inheritDoc} */ @Override protected Marshaller marshaller() throws IgniteCheckedException { - OptimizedMarshaller m = initTestMarshallerContext(new OptimizedMarshaller(false)); + OptimizedMarshaller m = initTestMarshallerContext(Marshallers.optimized(false)); m.setPoolSize(8); @@ -38,6 +39,6 @@ public class OptimizedMarshallerPooledSelfTest extends OptimizedMarshallerSelfTe /** {@inheritDoc} */ @Override protected void afterTestsStopped() throws Exception { // Reset static registry. - new OptimizedMarshaller().setPoolSize(0); + Marshallers.optimized().setPoolSize(0); } } diff --git a/modules/core/src/test/java/org/apache/ignite/internal/marshaller/optimized/OptimizedMarshallerSelfTest.java b/modules/core/src/test/java/org/apache/ignite/internal/marshaller/optimized/OptimizedMarshallerSelfTest.java index 4cc60836797..0e95b8c5bda 100644 --- a/modules/core/src/test/java/org/apache/ignite/internal/marshaller/optimized/OptimizedMarshallerSelfTest.java +++ b/modules/core/src/test/java/org/apache/ignite/internal/marshaller/optimized/OptimizedMarshallerSelfTest.java @@ -26,6 +26,7 @@ import org.apache.ignite.IgniteCheckedException; import org.apache.ignite.lang.IgniteRunnable; import org.apache.ignite.marshaller.GridMarshallerAbstractTest; import org.apache.ignite.marshaller.Marshaller; +import org.apache.ignite.marshaller.Marshallers; import org.apache.ignite.testframework.GridTestUtils; import org.apache.ignite.testframework.junits.common.GridCommonTest; import org.junit.Test; @@ -37,7 +38,7 @@ import org.junit.Test; public class OptimizedMarshallerSelfTest extends GridMarshallerAbstractTest { /** {@inheritDoc} */ @Override protected Marshaller marshaller() throws IgniteCheckedException { - return initTestMarshallerContext(new OptimizedMarshaller(false)); + return initTestMarshallerContext(Marshallers.optimized(false)); } /** diff --git a/modules/core/src/test/java/org/apache/ignite/internal/marshaller/optimized/OptimizedMarshallerSerialPersistentFieldsSelfTest.java b/modules/core/src/test/java/org/apache/ignite/internal/marshaller/optimized/OptimizedMarshallerSerialPersistentFieldsSelfTest.java index 435ffdb59f0..3522c95aa1c 100644 --- a/modules/core/src/test/java/org/apache/ignite/internal/marshaller/optimized/OptimizedMarshallerSerialPersistentFieldsSelfTest.java +++ b/modules/core/src/test/java/org/apache/ignite/internal/marshaller/optimized/OptimizedMarshallerSerialPersistentFieldsSelfTest.java @@ -24,6 +24,7 @@ import java.io.Serializable; import org.apache.ignite.IgniteCheckedException; import org.apache.ignite.marshaller.GridMarshallerAbstractTest; import org.apache.ignite.marshaller.Marshaller; +import org.apache.ignite.marshaller.Marshallers; import org.junit.Test; /** @@ -32,7 +33,7 @@ import org.junit.Test; public class OptimizedMarshallerSerialPersistentFieldsSelfTest extends GridMarshallerAbstractTest { /** {@inheritDoc} */ @Override protected Marshaller marshaller() throws IgniteCheckedException { - return initTestMarshallerContext(new OptimizedMarshaller(false)); + return initTestMarshallerContext(Marshallers.optimized(false)); } /** diff --git a/modules/core/src/test/java/org/apache/ignite/internal/marshaller/optimized/OptimizedMarshallerTest.java b/modules/core/src/test/java/org/apache/ignite/internal/marshaller/optimized/OptimizedMarshallerTest.java index 6b0fc73977e..e4aa8de4bdc 100644 --- a/modules/core/src/test/java/org/apache/ignite/internal/marshaller/optimized/OptimizedMarshallerTest.java +++ b/modules/core/src/test/java/org/apache/ignite/internal/marshaller/optimized/OptimizedMarshallerTest.java @@ -35,6 +35,7 @@ import org.apache.ignite.internal.util.typedef.internal.U; import org.apache.ignite.marshaller.GridMarshallerTestInheritedBean; import org.apache.ignite.marshaller.Marshaller; import org.apache.ignite.marshaller.MarshallerContextTestImpl; +import org.apache.ignite.marshaller.Marshallers; import org.apache.ignite.spi.discovery.tcp.ipfinder.TcpDiscoveryIpFinder; import org.apache.ignite.spi.discovery.tcp.ipfinder.TcpDiscoveryIpFinderAdapter; import org.apache.ignite.spi.discovery.tcp.ipfinder.vm.TcpDiscoveryVmIpFinder; @@ -53,7 +54,7 @@ public class OptimizedMarshallerTest extends GridCommonAbstractTest { private OptimizedMarshaller marshaller() { U.clearClassCache(); - OptimizedMarshaller marsh = new OptimizedMarshaller(); + OptimizedMarshaller marsh = Marshallers.optimized(); marsh.setContext(new MarshallerContextTestImpl()); diff --git a/modules/core/src/test/java/org/apache/ignite/internal/marshaller/optimized/OptimizedObjectStreamSelfTest.java b/modules/core/src/test/java/org/apache/ignite/internal/marshaller/optimized/OptimizedObjectStreamSelfTest.java index b974f49f89b..67695c9ee51 100644 --- a/modules/core/src/test/java/org/apache/ignite/internal/marshaller/optimized/OptimizedObjectStreamSelfTest.java +++ b/modules/core/src/test/java/org/apache/ignite/internal/marshaller/optimized/OptimizedObjectStreamSelfTest.java @@ -66,6 +66,7 @@ import org.apache.ignite.internal.util.typedef.internal.U; import org.apache.ignite.marshaller.MarshallerContext; import org.apache.ignite.marshaller.MarshallerContextTestImpl; import org.apache.ignite.marshaller.MarshallerExclusions; +import org.apache.ignite.marshaller.Marshallers; import org.apache.ignite.testframework.GridTestUtils; import org.apache.ignite.testframework.junits.common.GridCommonAbstractTest; import org.jetbrains.annotations.Nullable; @@ -275,7 +276,7 @@ public class OptimizedObjectStreamSelfTest extends GridCommonAbstractTest { @Test public void testRequireSerializable() throws Exception { try { - OptimizedMarshaller marsh = new OptimizedMarshaller(true); + OptimizedMarshaller marsh = Marshallers.optimized(true); marsh.setContext(CTX); @@ -298,7 +299,7 @@ public class OptimizedObjectStreamSelfTest extends GridCommonAbstractTest { */ @Test public void testFailedUnmarshallingLogging() throws Exception { - OptimizedMarshaller marsh = new OptimizedMarshaller(true); + OptimizedMarshaller marsh = Marshallers.optimized(true); marsh.setContext(CTX); @@ -320,7 +321,7 @@ public class OptimizedObjectStreamSelfTest extends GridCommonAbstractTest { */ @Test public void testFailedMarshallingLogging() throws Exception { - OptimizedMarshaller marsh = new OptimizedMarshaller(true); + OptimizedMarshaller marsh = Marshallers.optimized(true); marsh.setContext(CTX); @@ -350,7 +351,7 @@ public class OptimizedObjectStreamSelfTest extends GridCommonAbstractTest { Arrays.fill(obj.longArr, 100L); Arrays.fill(obj.doubleArr, 100.0d); - final OptimizedMarshaller marsh = new OptimizedMarshaller(); + final OptimizedMarshaller marsh = Marshallers.optimized(); marsh.setContext(CTX); diff --git a/modules/core/src/test/java/org/apache/ignite/spi/discovery/ClusterMetricsSnapshotSerializeCompatibilityTest.java b/modules/core/src/test/java/org/apache/ignite/spi/discovery/ClusterMetricsSnapshotSerializeCompatibilityTest.java index 1e45af48272..d906a657ad7 100644 --- a/modules/core/src/test/java/org/apache/ignite/spi/discovery/ClusterMetricsSnapshotSerializeCompatibilityTest.java +++ b/modules/core/src/test/java/org/apache/ignite/spi/discovery/ClusterMetricsSnapshotSerializeCompatibilityTest.java @@ -23,6 +23,7 @@ import org.apache.ignite.internal.marshaller.optimized.OptimizedMarshaller; import org.apache.ignite.internal.processors.cache.CacheMetricsSnapshot; import org.apache.ignite.internal.util.typedef.internal.U; import org.apache.ignite.marshaller.MarshallerContextTestImpl; +import org.apache.ignite.marshaller.Marshallers; import org.apache.ignite.testframework.GridTestUtils; import org.apache.ignite.testframework.junits.common.GridCommonAbstractTest; import org.junit.Test; @@ -81,7 +82,7 @@ public class ClusterMetricsSnapshotSerializeCompatibilityTest extends GridCommon private OptimizedMarshaller marshaller() { U.clearClassCache(); - OptimizedMarshaller marsh = new OptimizedMarshaller(); + OptimizedMarshaller marsh = Marshallers.optimized(); marsh.setContext(new MarshallerContextTestImpl()); diff --git a/modules/core/src/main/java/org/apache/ignite/internal/util/io/GridUnsafeDataInput.java b/modules/unsafe/src/main/java/org/apache/ignite/internal/util/io/GridUnsafeDataInput.java similarity index 98% rename from modules/core/src/main/java/org/apache/ignite/internal/util/io/GridUnsafeDataInput.java rename to modules/unsafe/src/main/java/org/apache/ignite/internal/util/io/GridUnsafeDataInput.java index 08666e0fa63..9d760df8d76 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/util/io/GridUnsafeDataInput.java +++ b/modules/unsafe/src/main/java/org/apache/ignite/internal/util/io/GridUnsafeDataInput.java @@ -21,13 +21,13 @@ import java.io.EOFException; import java.io.IOException; import java.io.InputStream; import java.io.UTFDataFormatException; +import org.apache.ignite.IgniteCommonsSystemProperties; +import org.apache.ignite.internal.util.CommonUtils; import org.apache.ignite.internal.util.GridUnsafe; import org.apache.ignite.internal.util.tostring.GridToStringExclude; import org.apache.ignite.internal.util.typedef.internal.S; import org.apache.ignite.internal.util.typedef.internal.SB; -import org.apache.ignite.internal.util.typedef.internal.U; -import static org.apache.ignite.IgniteSystemProperties.IGNITE_MARSHAL_BUFFERS_RECHECK; import static org.apache.ignite.internal.util.CommonUtils.DFLT_MARSHAL_BUFFERS_RECHECK; import static org.apache.ignite.internal.util.GridUnsafe.BIG_ENDIAN; import static org.apache.ignite.internal.util.GridUnsafe.BYTE_ARR_OFF; @@ -43,7 +43,8 @@ import static org.apache.ignite.internal.util.GridUnsafe.SHORT_ARR_OFF; */ public class GridUnsafeDataInput extends InputStream implements GridDataInput { /** */ - private static final Long CHECK_FREQ = Long.getLong(IGNITE_MARSHAL_BUFFERS_RECHECK, DFLT_MARSHAL_BUFFERS_RECHECK); + private static final Long CHECK_FREQ = + Long.getLong(IgniteCommonsSystemProperties.IGNITE_MARSHAL_BUFFERS_RECHECK, DFLT_MARSHAL_BUFFERS_RECHECK); /** Maximum data block length. */ private static final int MAX_BLOCK_SIZE = 1024; @@ -125,7 +126,7 @@ public class GridUnsafeDataInput extends InputStream implements GridDataInput { maxOff = Math.max(maxOff, size); - long now = U.currentTimeMillis(); + long now = CommonUtils.currentTimeMillis(); // Increase size of buffer if needed. if (size > inBuf.length) diff --git a/modules/core/src/main/java/org/apache/ignite/internal/util/io/GridUnsafeDataOutput.java b/modules/unsafe/src/main/java/org/apache/ignite/internal/util/io/GridUnsafeDataOutput.java similarity index 97% rename from modules/core/src/main/java/org/apache/ignite/internal/util/io/GridUnsafeDataOutput.java rename to modules/unsafe/src/main/java/org/apache/ignite/internal/util/io/GridUnsafeDataOutput.java index f2331d84a09..2277c258204 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/util/io/GridUnsafeDataOutput.java +++ b/modules/unsafe/src/main/java/org/apache/ignite/internal/util/io/GridUnsafeDataOutput.java @@ -20,11 +20,11 @@ package org.apache.ignite.internal.util.io; import java.io.IOException; import java.io.OutputStream; import java.util.Arrays; +import org.apache.ignite.IgniteCommonsSystemProperties; +import org.apache.ignite.internal.util.CommonUtils; import org.apache.ignite.internal.util.GridUnsafe; import org.apache.ignite.internal.util.typedef.internal.S; -import org.apache.ignite.internal.util.typedef.internal.U; -import static org.apache.ignite.IgniteSystemProperties.IGNITE_MARSHAL_BUFFERS_RECHECK; import static org.apache.ignite.internal.util.CommonUtils.DFLT_MARSHAL_BUFFERS_RECHECK; import static org.apache.ignite.internal.util.CommonUtils.MAX_ARRAY_SIZE; import static org.apache.ignite.internal.util.GridUnsafe.BIG_ENDIAN; @@ -41,7 +41,8 @@ import static org.apache.ignite.internal.util.GridUnsafe.SHORT_ARR_OFF; */ public class GridUnsafeDataOutput extends OutputStream implements GridDataOutput { /** */ - private static final long CHECK_FREQ = Long.getLong(IGNITE_MARSHAL_BUFFERS_RECHECK, DFLT_MARSHAL_BUFFERS_RECHECK); + private static final long CHECK_FREQ = + Long.getLong(IgniteCommonsSystemProperties.IGNITE_MARSHAL_BUFFERS_RECHECK, DFLT_MARSHAL_BUFFERS_RECHECK); /** Length of char buffer (for writing strings). */ private static final int CHAR_BUF_SIZE = 256; @@ -62,7 +63,7 @@ public class GridUnsafeDataOutput extends OutputStream implements GridDataOutput private int maxOff; /** Last length check timestamp. */ - private long lastCheck = U.currentTimeMillis(); + private long lastCheck = CommonUtils.currentTimeMillis(); /** * @@ -132,7 +133,7 @@ public class GridUnsafeDataOutput extends OutputStream implements GridDataOutput maxOff = Math.max(maxOff, size); - long now = U.currentTimeMillis(); + long now = CommonUtils.currentTimeMillis(); if (size > bytes.length) { int newSize = size << 1; @@ -156,7 +157,7 @@ public class GridUnsafeDataOutput extends OutputStream implements GridDataOutput /** * @param size Size of potential byte array to check. * @return true if {@code new byte[size]} won't throw {@link OutOfMemoryError} given enough heap space. - * @see U#MAX_ARRAY_SIZE + * @see CommonUtils#MAX_ARRAY_SIZE */ private boolean canBeAllocated(long size) { return 0 <= size && size <= MAX_ARRAY_SIZE;