This is an automated email from the ASF dual-hosted git repository.
chia7712 pushed a commit to branch trunk
in repository https://gitbox.apache.org/repos/asf/kafka.git
The following commit(s) were added to refs/heads/trunk by this push:
new 2658f252389 KAFKA-19305 Make ClientQuotaImage and TopicImage immutable
(#19847)
2658f252389 is described below
commit 2658f2523899d74042f64a195329c573fcd3180b
Author: Chang-Chi Hsu <[email protected]>
AuthorDate: Wed Jul 16 11:50:18 2025 +0800
KAFKA-19305 Make ClientQuotaImage and TopicImage immutable (#19847)
- Updated `ClientQuotaImage` and `TopicImage` by using
`Collections.unmodifiableMap` or `ImmutableMap` to prevent accidental or
intentional mutations after construction.
Reviewers: Alyssa Huang <[email protected]>, Chia-Ping Tsai
<[email protected]>
---
.../org/apache/kafka/image/ClientQuotaImage.java | 28 ++------------
.../java/org/apache/kafka/image/TopicImage.java | 43 ++--------------------
.../kafka/image/node/ClientQuotaImageNode.java | 4 +-
3 files changed, 9 insertions(+), 66 deletions(-)
diff --git
a/metadata/src/main/java/org/apache/kafka/image/ClientQuotaImage.java
b/metadata/src/main/java/org/apache/kafka/image/ClientQuotaImage.java
index 3e139925eb1..2161ae2621f 100644
--- a/metadata/src/main/java/org/apache/kafka/image/ClientQuotaImage.java
+++ b/metadata/src/main/java/org/apache/kafka/image/ClientQuotaImage.java
@@ -31,7 +31,6 @@ import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
-import java.util.Objects;
/**
@@ -39,21 +38,11 @@ import java.util.Objects;
*
* This class is thread-safe.
*/
-public final class ClientQuotaImage {
+public record ClientQuotaImage(Map<String, Double> quotas) {
public static final ClientQuotaImage EMPTY = new
ClientQuotaImage(Map.of());
- private final Map<String, Double> quotas;
-
- public ClientQuotaImage(Map<String, Double> quotas) {
- this.quotas = quotas;
- }
-
- Map<String, Double> quotas() {
- return quotas;
- }
-
- public Map<String, Double> quotaMap() {
- return Collections.unmodifiableMap(quotas);
+ public ClientQuotaImage {
+ quotas = Collections.unmodifiableMap(quotas);
}
public void write(
@@ -100,17 +89,6 @@ public final class ClientQuotaImage {
return quotas.isEmpty();
}
- @Override
- public boolean equals(Object o) {
- if (!(o instanceof ClientQuotaImage other)) return false;
- return quotas.equals(other.quotas);
- }
-
- @Override
- public int hashCode() {
- return Objects.hash(quotas);
- }
-
@Override
public String toString() {
return new ClientQuotaImageNode(this).stringify();
diff --git a/metadata/src/main/java/org/apache/kafka/image/TopicImage.java
b/metadata/src/main/java/org/apache/kafka/image/TopicImage.java
index 48c71b7da89..734523a4493 100644
--- a/metadata/src/main/java/org/apache/kafka/image/TopicImage.java
+++ b/metadata/src/main/java/org/apache/kafka/image/TopicImage.java
@@ -24,9 +24,9 @@ import org.apache.kafka.image.writer.ImageWriter;
import org.apache.kafka.image.writer.ImageWriterOptions;
import org.apache.kafka.metadata.PartitionRegistration;
+import java.util.Collections;
import java.util.Map;
import java.util.Map.Entry;
-import java.util.Objects;
/**
@@ -34,31 +34,9 @@ import java.util.Objects;
*
* This class is thread-safe.
*/
-public final class TopicImage {
- private final String name;
-
- private final Uuid id;
-
- private final Map<Integer, PartitionRegistration> partitions;
-
- public TopicImage(String name,
- Uuid id,
- Map<Integer, PartitionRegistration> partitions) {
- this.name = name;
- this.id = id;
- this.partitions = partitions;
- }
-
- public String name() {
- return name;
- }
-
- public Uuid id() {
- return id;
- }
-
- public Map<Integer, PartitionRegistration> partitions() {
- return partitions;
+public record TopicImage(String name, Uuid id, Map<Integer,
PartitionRegistration> partitions) {
+ public TopicImage {
+ partitions = Collections.unmodifiableMap(partitions);
}
public void write(ImageWriter writer, ImageWriterOptions options) {
@@ -72,19 +50,6 @@ public final class TopicImage {
}
}
- @Override
- public boolean equals(Object o) {
- if (!(o instanceof TopicImage other)) return false;
- return name.equals(other.name) &&
- id.equals(other.id) &&
- partitions.equals(other.partitions);
- }
-
- @Override
- public int hashCode() {
- return Objects.hash(name, id, partitions);
- }
-
@Override
public String toString() {
return new TopicImageNode(this).stringify();
diff --git
a/metadata/src/main/java/org/apache/kafka/image/node/ClientQuotaImageNode.java
b/metadata/src/main/java/org/apache/kafka/image/node/ClientQuotaImageNode.java
index 725c5620ed9..45907fc8c66 100644
---
a/metadata/src/main/java/org/apache/kafka/image/node/ClientQuotaImageNode.java
+++
b/metadata/src/main/java/org/apache/kafka/image/node/ClientQuotaImageNode.java
@@ -34,12 +34,12 @@ public class ClientQuotaImageNode implements MetadataNode {
@Override
public Collection<String> childNames() {
- return image.quotaMap().keySet();
+ return image.quotas().keySet();
}
@Override
public MetadataNode child(String name) {
- Double result = image.quotaMap().get(name);
+ Double result = image.quotas().get(name);
if (result == null) return null;
return new MetadataLeafNode(result + "");
}