This is an automated email from the ASF dual-hosted git repository.
sergeychugunov pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/ignite.git
The following commit(s) were added to refs/heads/master by this push:
new bddff632c52 IGNITE-27597 Use MessageSerializer for UserAcceptedMessage
and UserProposedMessage (#12643)
bddff632c52 is described below
commit bddff632c52ae1dd612a45b5041aa00028c061aa
Author: Dmitry Werner <[email protected]>
AuthorDate: Thu Mar 5 14:34:06 2026 +0500
IGNITE-27597 Use MessageSerializer for UserAcceptedMessage and
UserProposedMessage (#12643)
---
.../managers/communication/ErrorMessage.java | 9 +++--
.../communication/GridIoMessageFactory.java | 2 +-
.../discovery/DiscoveryMessageFactory.java | 15 ++++++++
.../internal/processors/authentication/User.java | 28 +++++++--------
.../authentication/UserAcceptedMessage.java | 41 ++++++++++++++++------
.../authentication/UserManagementOperation.java | 21 ++++++++---
.../authentication/UserProposedMessage.java | 25 ++++++++++---
7 files changed, 103 insertions(+), 38 deletions(-)
diff --git
a/modules/core/src/main/java/org/apache/ignite/internal/managers/communication/ErrorMessage.java
b/modules/core/src/main/java/org/apache/ignite/internal/managers/communication/ErrorMessage.java
index 49889896252..34146c63d11 100644
---
a/modules/core/src/main/java/org/apache/ignite/internal/managers/communication/ErrorMessage.java
+++
b/modules/core/src/main/java/org/apache/ignite/internal/managers/communication/ErrorMessage.java
@@ -17,6 +17,7 @@
package org.apache.ignite.internal.managers.communication;
+import java.io.Serializable;
import org.apache.ignite.IgniteCheckedException;
import org.apache.ignite.IgniteException;
import org.apache.ignite.internal.MessageProcessor;
@@ -40,7 +41,11 @@ import static org.apache.ignite.marshaller.Marshallers.jdk;
* <p>If the message serialization fails, wraps this error with own one.
*/
@SuppressWarnings({"NullableProblems", "unused"})
-public class ErrorMessage implements Message {
+// TODO Remove Serializable once
https://issues.apache.org/jira/browse/IGNITE-27627 is completed.
+public class ErrorMessage implements Message, Serializable {
+ /** */
+ private static final long serialVersionUID = 0L;
+
/** Serialization and deserealization call holder. */
@Order(value = 0, method = "errorBytes")
@GridToStringExclude
@@ -131,7 +136,7 @@ public class ErrorMessage implements Message {
/** {@inheritDoc} */
@Override public short directType() {
- return -100;
+ return -66;
}
/** {@inheritDoc} */
diff --git
a/modules/core/src/main/java/org/apache/ignite/internal/managers/communication/GridIoMessageFactory.java
b/modules/core/src/main/java/org/apache/ignite/internal/managers/communication/GridIoMessageFactory.java
index eb1a84d7223..6baea4e7684 100644
---
a/modules/core/src/main/java/org/apache/ignite/internal/managers/communication/GridIoMessageFactory.java
+++
b/modules/core/src/main/java/org/apache/ignite/internal/managers/communication/GridIoMessageFactory.java
@@ -355,7 +355,7 @@ public class GridIoMessageFactory implements
MessageFactoryProvider {
// -54 is reserved for SQL.
// We don't use the code‑generated serializer for CompressedMessage -
serialization is highly customized.
factory.register(CompressedMessage.TYPE_CODE, CompressedMessage::new);
- factory.register((short)-100, ErrorMessage::new, new
ErrorMessageSerializer());
+ factory.register((short)-66, ErrorMessage::new, new
ErrorMessageSerializer());
factory.register((short)-65, TxInfo::new, new TxInfoSerializer());
factory.register((short)-64, TxEntriesInfo::new, new
TxEntriesInfoSerializer());
factory.register((short)-63, ExchangeInfo::new, new
ExchangeInfoSerializer());
diff --git
a/modules/core/src/main/java/org/apache/ignite/internal/managers/discovery/DiscoveryMessageFactory.java
b/modules/core/src/main/java/org/apache/ignite/internal/managers/discovery/DiscoveryMessageFactory.java
index 009905b70d5..f15a181026a 100644
---
a/modules/core/src/main/java/org/apache/ignite/internal/managers/discovery/DiscoveryMessageFactory.java
+++
b/modules/core/src/main/java/org/apache/ignite/internal/managers/discovery/DiscoveryMessageFactory.java
@@ -17,6 +17,16 @@
package org.apache.ignite.internal.managers.discovery;
+import org.apache.ignite.internal.managers.communication.ErrorMessage;
+import
org.apache.ignite.internal.managers.communication.ErrorMessageSerializer;
+import org.apache.ignite.internal.processors.authentication.User;
+import
org.apache.ignite.internal.processors.authentication.UserAcceptedMessage;
+import
org.apache.ignite.internal.processors.authentication.UserAcceptedMessageSerializer;
+import
org.apache.ignite.internal.processors.authentication.UserManagementOperation;
+import
org.apache.ignite.internal.processors.authentication.UserManagementOperationSerializer;
+import
org.apache.ignite.internal.processors.authentication.UserProposedMessage;
+import
org.apache.ignite.internal.processors.authentication.UserProposedMessageSerializer;
+import org.apache.ignite.internal.processors.authentication.UserSerializer;
import
org.apache.ignite.internal.processors.cache.CacheStatisticsModeChangeMessage;
import
org.apache.ignite.internal.processors.cache.CacheStatisticsModeChangeMessageSerializer;
import
org.apache.ignite.internal.processors.cache.TxTimeoutOnPartitionMapExchangeChangeMessage;
@@ -104,6 +114,8 @@ import
org.apache.ignite.spi.discovery.tcp.messages.TcpDiscoveryStatusCheckMessa
public class DiscoveryMessageFactory implements MessageFactoryProvider {
/** {@inheritDoc} */
@Override public void registerAll(MessageFactory factory) {
+ factory.register((short)-109, User::new, new UserSerializer());
+ factory.register((short)-108, UserManagementOperation::new, new
UserManagementOperationSerializer());
factory.register((short)-107, NodeSpecificData::new, new
NodeSpecificDataSerializer());
factory.register((short)-106, DiscoveryDataPacket::new, new
DiscoveryDataPacketSerializer());
factory.register((short)-105, TcpDiscoveryNodeFullMetricsMessage::new,
@@ -113,6 +125,7 @@ public class DiscoveryMessageFactory implements
MessageFactoryProvider {
factory.register((short)-102, TcpDiscoveryNodeMetricsMessage::new, new
TcpDiscoveryNodeMetricsMessageSerializer());
factory.register((short)-101, InetSocketAddressMessage::new, new
InetSocketAddressMessageSerializer());
factory.register((short)-100, InetAddressMessage::new, new
InetAddressMessageSerializer());
+ factory.register((short)-66, ErrorMessage::new, new
ErrorMessageSerializer());
// TcpDiscoveryAbstractMessage
factory.register((short)0, TcpDiscoveryCheckFailedMessage::new, new
TcpDiscoveryCheckFailedMessageSerializer());
@@ -153,5 +166,7 @@ public class DiscoveryMessageFactory implements
MessageFactoryProvider {
new MetadataUpdateAcceptedMessageSerializer());
factory.register((short)509,
TxTimeoutOnPartitionMapExchangeChangeMessage::new,
new TxTimeoutOnPartitionMapExchangeChangeMessageSerializer());
+ factory.register((short)510, UserAcceptedMessage::new, new
UserAcceptedMessageSerializer());
+ factory.register((short)511, UserProposedMessage::new, new
UserProposedMessageSerializer());
}
}
diff --git
a/modules/core/src/main/java/org/apache/ignite/internal/processors/authentication/User.java
b/modules/core/src/main/java/org/apache/ignite/internal/processors/authentication/User.java
index 1441bd96521..877101693d4 100644
---
a/modules/core/src/main/java/org/apache/ignite/internal/processors/authentication/User.java
+++
b/modules/core/src/main/java/org/apache/ignite/internal/processors/authentication/User.java
@@ -19,15 +19,17 @@ package
org.apache.ignite.internal.processors.authentication;
import java.io.Serializable;
import java.util.Objects;
+import org.apache.ignite.internal.Order;
import org.apache.ignite.internal.util.tostring.GridToStringExclude;
import org.apache.ignite.internal.util.typedef.F;
import org.apache.ignite.internal.util.typedef.internal.S;
+import org.apache.ignite.plugin.extensions.communication.Message;
import org.jetbrains.annotations.Nullable;
import org.mindrot.BCrypt;
/**
*/
-public class User implements Serializable {
+public class User implements Serializable, Message {
/** */
private static final long serialVersionUID = 0L;
@@ -43,11 +45,13 @@ public class User implements Serializable {
private static int bCryptGensaltLog2Rounds = 10;
/** User name. */
- private String name;
+ @Order(0)
+ String name;
/** Hashed password. */
+ @Order(1)
@GridToStringExclude
- private String hashedPasswd;
+ String hashedPasswd;
/**
* Constructor.
@@ -103,15 +107,7 @@ public class User implements Serializable {
* @param passwd Plain text password.
* @return Hashed password.
*/
- @Nullable public static String password(String passwd) {
- return password_bcrypt(passwd);
- }
-
- /**
- * @param passwd Plain text password.
- * @return Hashed password.
- */
- @Nullable private static String password_bcrypt(String passwd) {
+ @Nullable private static String password(String passwd) {
return BCrypt.hashpw(passwd, BCrypt.gensalt(bCryptGensaltLog2Rounds));
}
@@ -141,12 +137,16 @@ public class User implements Serializable {
/** {@inheritDoc} */
@Override public int hashCode() {
- int result = Objects.hash(name, hashedPasswd);
- return result;
+ return Objects.hash(name, hashedPasswd);
}
/** {@inheritDoc} */
@Override public String toString() {
return S.toString(User.class, this);
}
+
+ /** {@inheritDoc} */
+ @Override public short directType() {
+ return -109;
+ }
}
diff --git
a/modules/core/src/main/java/org/apache/ignite/internal/processors/authentication/UserAcceptedMessage.java
b/modules/core/src/main/java/org/apache/ignite/internal/processors/authentication/UserAcceptedMessage.java
index ef87a444cb3..c0b49fefb2f 100644
---
a/modules/core/src/main/java/org/apache/ignite/internal/processors/authentication/UserAcceptedMessage.java
+++
b/modules/core/src/main/java/org/apache/ignite/internal/processors/authentication/UserAcceptedMessage.java
@@ -17,7 +17,8 @@
package org.apache.ignite.internal.processors.authentication;
-import org.apache.ignite.IgniteCheckedException;
+import org.apache.ignite.internal.Order;
+import org.apache.ignite.internal.managers.communication.ErrorMessage;
import org.apache.ignite.internal.managers.discovery.DiscoCache;
import org.apache.ignite.internal.managers.discovery.DiscoveryCustomMessage;
import org.apache.ignite.internal.managers.discovery.GridDiscoveryManager;
@@ -25,35 +26,48 @@ import
org.apache.ignite.internal.processors.affinity.AffinityTopologyVersion;
import org.apache.ignite.internal.util.tostring.GridToStringInclude;
import org.apache.ignite.internal.util.typedef.internal.S;
import org.apache.ignite.lang.IgniteUuid;
+import org.apache.ignite.plugin.extensions.communication.Message;
import org.jetbrains.annotations.Nullable;
/**
* Is sent as an acknowledgement for end (with success or error) of user
management operation on the cluster
* (see {@link UserProposedMessage} and {@link UserManagementOperation}).
*/
-public class UserAcceptedMessage implements DiscoveryCustomMessage {
+public class UserAcceptedMessage implements DiscoveryCustomMessage, Message {
/** */
private static final long serialVersionUID = 0L;
/** */
- private final IgniteUuid id = IgniteUuid.randomUuid();
+ @Order(0)
+ IgniteUuid id;
/** Operation ID. */
+ @Order(1)
@GridToStringInclude
- private final IgniteUuid opId;
+ IgniteUuid opId;
- /** Error. */
- private final IgniteCheckedException error;
+ /** Error message. */
+ @Order(2)
+ ErrorMessage errMsg;
+
+ /** Constructor. */
+ public UserAcceptedMessage() {
+ // No-op.
+ }
/**
- * @param opId THe ID of operation.
+ * @param opId The ID of operation.
* @param error Error.
*/
- UserAcceptedMessage(IgniteUuid opId, IgniteCheckedException error) {
+ UserAcceptedMessage(IgniteUuid opId, Throwable error) {
assert opId != null || error != null;
+ id = IgniteUuid.randomUuid();
+
this.opId = opId;
- this.error = error;
+
+ if (error != null)
+ errMsg = new ErrorMessage(error);
}
/** {@inheritDoc} */
@@ -87,12 +101,17 @@ public class UserAcceptedMessage implements
DiscoveryCustomMessage {
/**
* @return Error.
*/
- IgniteCheckedException error() {
- return error;
+ Throwable error() {
+ return ErrorMessage.error(errMsg);
}
/** {@inheritDoc} */
@Override public String toString() {
return S.toString(UserAcceptedMessage.class, this);
}
+
+ /** {@inheritDoc} */
+ @Override public short directType() {
+ return 510;
+ }
}
diff --git
a/modules/core/src/main/java/org/apache/ignite/internal/processors/authentication/UserManagementOperation.java
b/modules/core/src/main/java/org/apache/ignite/internal/processors/authentication/UserManagementOperation.java
index 150a866cd8c..7d7be64e6f4 100644
---
a/modules/core/src/main/java/org/apache/ignite/internal/processors/authentication/UserManagementOperation.java
+++
b/modules/core/src/main/java/org/apache/ignite/internal/processors/authentication/UserManagementOperation.java
@@ -19,24 +19,29 @@ package
org.apache.ignite.internal.processors.authentication;
import java.io.Serializable;
import java.util.Objects;
+import org.apache.ignite.internal.Order;
import org.apache.ignite.internal.util.typedef.internal.S;
import org.apache.ignite.lang.IgniteUuid;
+import org.apache.ignite.plugin.extensions.communication.Message;
/**
* The operation with users. Used to deliver the information about requested
operation to all server nodes.
*/
-public class UserManagementOperation implements Serializable {
+public class UserManagementOperation implements Serializable, Message {
/** */
private static final long serialVersionUID = 0L;
/** User. */
- private User usr;
+ @Order(0)
+ User usr;
/** Operation type. */
- private OperationType type;
+ @Order(1)
+ OperationType type;
- /** Operation Id. */
- private final IgniteUuid id = IgniteUuid.randomUuid();
+ /** Operation ID. */
+ @Order(2)
+ IgniteUuid id;
/**
* Constructor.
@@ -52,6 +57,7 @@ public class UserManagementOperation implements Serializable {
public UserManagementOperation(User usr, OperationType type) {
this.usr = usr;
this.type = type;
+ id = IgniteUuid.randomUuid();
}
/**
@@ -98,6 +104,11 @@ public class UserManagementOperation implements
Serializable {
return id.hashCode();
}
+ /** {@inheritDoc} */
+ @Override public short directType() {
+ return -108;
+ }
+
/**
* User action type.
*/
diff --git
a/modules/core/src/main/java/org/apache/ignite/internal/processors/authentication/UserProposedMessage.java
b/modules/core/src/main/java/org/apache/ignite/internal/processors/authentication/UserProposedMessage.java
index 1a0be8ecaa2..1c8e44299e8 100644
---
a/modules/core/src/main/java/org/apache/ignite/internal/processors/authentication/UserProposedMessage.java
+++
b/modules/core/src/main/java/org/apache/ignite/internal/processors/authentication/UserProposedMessage.java
@@ -17,6 +17,7 @@
package org.apache.ignite.internal.processors.authentication;
+import org.apache.ignite.internal.Order;
import org.apache.ignite.internal.managers.discovery.DiscoCache;
import org.apache.ignite.internal.managers.discovery.DiscoveryCustomMessage;
import
org.apache.ignite.internal.managers.discovery.DiscoveryServerOnlyCustomMessage;
@@ -25,25 +26,33 @@ import
org.apache.ignite.internal.processors.affinity.AffinityTopologyVersion;
import org.apache.ignite.internal.util.tostring.GridToStringInclude;
import org.apache.ignite.internal.util.typedef.internal.S;
import org.apache.ignite.lang.IgniteUuid;
+import org.apache.ignite.plugin.extensions.communication.Message;
import org.jetbrains.annotations.Nullable;
/**
* A node sends this message when it wants to propose user operation (add /
update / remove).
- *
+ * <p>
* After sending this message to the cluster sending node gets blocked until
operation acknowledgement is received.
- *
+ * <p>
* {@link UserAcceptedMessage} is sent as an acknowledgement that operation is
finished on the all nodes of the cluster.
*/
-public class UserProposedMessage implements DiscoveryServerOnlyCustomMessage {
+public class UserProposedMessage implements DiscoveryServerOnlyCustomMessage,
Message {
/** */
private static final long serialVersionUID = 0L;
/** */
- private final IgniteUuid id = IgniteUuid.randomUuid();
+ @Order(0)
+ IgniteUuid id;
/** */
+ @Order(1)
@GridToStringInclude
- private final UserManagementOperation op;
+ UserManagementOperation op;
+
+ /** Constructor. */
+ public UserProposedMessage() {
+ // No-op.
+ }
/**
* @param op User action.
@@ -52,6 +61,7 @@ public class UserProposedMessage implements
DiscoveryServerOnlyCustomMessage {
assert op != null;
this.op = op;
+ id = IgniteUuid.randomUuid();
}
/** {@inheritDoc} */
@@ -88,4 +98,9 @@ public class UserProposedMessage implements
DiscoveryServerOnlyCustomMessage {
@Override public String toString() {
return S.toString(UserProposedMessage.class, this);
}
+
+ /** {@inheritDoc} */
+ @Override public short directType() {
+ return 511;
+ }
}