You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@kafka.apache.org by sa...@apache.org on 2024/06/11 07:12:54 UTC
(kafka) 06/12: KAFKA-16880 Update equals and hashcode methods for two attributes (#16173)
This is an automated email from the ASF dual-hosted git repository.
satishd pushed a commit to branch 3.8
in repository https://gitbox.apache.org/repos/asf/kafka.git
commit 944f4699a7de443a72fa2618b5cbc8531f12a8c4
Author: Murali Basani <mu...@aiven.io>
AuthorDate: Tue Jun 4 08:05:00 2024 +0200
KAFKA-16880 Update equals and hashcode methods for two attributes (#16173)
Reviewers: Kamal Chandraprakash <ka...@gmail.com>, Chia-Ping Tsai <ch...@gmail.com>
---
.../log/remote/storage/RemoteLogManagerConfig.java | 5 +-
.../remote/storage/RemoteLogManagerConfigTest.java | 107 +++++++++++++++++++--
2 files changed, 102 insertions(+), 10 deletions(-)
diff --git a/storage/src/main/java/org/apache/kafka/server/log/remote/storage/RemoteLogManagerConfig.java b/storage/src/main/java/org/apache/kafka/server/log/remote/storage/RemoteLogManagerConfig.java
index d6cf615c781..1add933d788 100644
--- a/storage/src/main/java/org/apache/kafka/server/log/remote/storage/RemoteLogManagerConfig.java
+++ b/storage/src/main/java/org/apache/kafka/server/log/remote/storage/RemoteLogManagerConfig.java
@@ -585,6 +585,8 @@ public final class RemoteLogManagerConfig {
return enableRemoteStorageSystem == that.enableRemoteStorageSystem
&& remoteLogIndexFileCacheTotalSizeBytes == that.remoteLogIndexFileCacheTotalSizeBytes
&& remoteLogManagerThreadPoolSize == that.remoteLogManagerThreadPoolSize
+ && remoteLogManagerCopierThreadPoolSize == that.remoteLogManagerCopierThreadPoolSize
+ && remoteLogManagerExpirationThreadPoolSize == that.remoteLogManagerExpirationThreadPoolSize
&& remoteLogManagerTaskIntervalMs == that.remoteLogManagerTaskIntervalMs
&& remoteLogManagerTaskRetryBackoffMs == that.remoteLogManagerTaskRetryBackoffMs
&& remoteLogManagerTaskRetryBackoffMaxMs == that.remoteLogManagerTaskRetryBackoffMaxMs
@@ -613,7 +615,8 @@ public final class RemoteLogManagerConfig {
public int hashCode() {
return Objects.hash(enableRemoteStorageSystem, remoteStorageManagerClassName, remoteStorageManagerClassPath,
remoteLogMetadataManagerClassName, remoteLogMetadataManagerClassPath, remoteLogMetadataManagerListenerName,
- remoteLogMetadataCustomMetadataMaxBytes, remoteLogIndexFileCacheTotalSizeBytes, remoteLogManagerThreadPoolSize, remoteLogManagerTaskIntervalMs,
+ remoteLogMetadataCustomMetadataMaxBytes, remoteLogIndexFileCacheTotalSizeBytes, remoteLogManagerThreadPoolSize,
+ remoteLogManagerCopierThreadPoolSize, remoteLogManagerExpirationThreadPoolSize, remoteLogManagerTaskIntervalMs,
remoteLogManagerTaskRetryBackoffMs, remoteLogManagerTaskRetryBackoffMaxMs, remoteLogManagerTaskRetryJitter,
remoteLogReaderThreads, remoteLogReaderMaxPendingTasks, remoteStorageManagerProps, remoteLogMetadataManagerProps,
remoteStorageManagerPrefix, remoteLogMetadataManagerPrefix, remoteLogManagerCopyMaxBytesPerSecond,
diff --git a/storage/src/test/java/org/apache/kafka/server/log/remote/storage/RemoteLogManagerConfigTest.java b/storage/src/test/java/org/apache/kafka/server/log/remote/storage/RemoteLogManagerConfigTest.java
index 4e3c2fc26cb..d04c42409b2 100644
--- a/storage/src/test/java/org/apache/kafka/server/log/remote/storage/RemoteLogManagerConfigTest.java
+++ b/storage/src/test/java/org/apache/kafka/server/log/remote/storage/RemoteLogManagerConfigTest.java
@@ -17,7 +17,7 @@
package org.apache.kafka.server.log.remote.storage;
import org.apache.kafka.common.config.AbstractConfig;
-import org.junit.jupiter.api.Assertions;
+import org.junit.jupiter.api.Test;
import org.junit.jupiter.params.ParameterizedTest;
import org.junit.jupiter.params.provider.ValueSource;
@@ -27,6 +27,8 @@ import java.util.Map;
import static org.apache.kafka.server.log.remote.storage.RemoteLogManagerConfig.DEFAULT_REMOTE_LOG_METADATA_MANAGER_CLASS_NAME;
import static org.apache.kafka.server.log.remote.storage.RemoteLogManagerConfig.REMOTE_LOG_METADATA_MANAGER_CLASS_NAME_PROP;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertNotEquals;
public class RemoteLogManagerConfigTest {
@@ -43,13 +45,11 @@ public class RemoteLogManagerConfigTest {
String rlmmPrefix = "__custom.rlmm.";
Map<String, Object> rsmProps = Collections.singletonMap("rsm.prop", "val");
Map<String, Object> rlmmProps = Collections.singletonMap("rlmm.prop", "val");
- String remoteLogMetadataManagerClass = useDefaultRemoteLogMetadataManagerClass ? DEFAULT_REMOTE_LOG_METADATA_MANAGER_CLASS_NAME : "dummy.remote.log.metadata.class";
- RemoteLogManagerConfig expectedRemoteLogManagerConfig
- = new RemoteLogManagerConfig(true, "dummy.remote.storage.class", "dummy.remote.storage.class.path",
- remoteLogMetadataManagerClass, "dummy.remote.log.metadata.class.path",
- "listener.name", 1024 * 1024L, 1, 1, 1, 60000L, 100L, 60000L, 0.3, 10, 100, 100,
- rsmPrefix, rsmProps, rlmmPrefix, rlmmProps, Long.MAX_VALUE, 11, 1,
- Long.MAX_VALUE, 11, 1);
+ RemoteLogManagerConfig expectedRemoteLogManagerConfig = getRemoteLogManagerConfig(useDefaultRemoteLogMetadataManagerClass,
+ rsmPrefix,
+ rlmmPrefix,
+ rsmProps,
+ rlmmProps);
Map<String, Object> props = extractProps(expectedRemoteLogManagerConfig);
rsmProps.forEach((k, v) -> props.put(rsmPrefix + k, v));
@@ -60,7 +60,42 @@ public class RemoteLogManagerConfigTest {
}
TestConfig config = new TestConfig(props);
RemoteLogManagerConfig remoteLogManagerConfig = new RemoteLogManagerConfig(config);
- Assertions.assertEquals(expectedRemoteLogManagerConfig, remoteLogManagerConfig);
+ assertEquals(expectedRemoteLogManagerConfig, remoteLogManagerConfig);
+ }
+
+ private static RemoteLogManagerConfig getRemoteLogManagerConfig(boolean useDefaultRemoteLogMetadataManagerClass,
+ String rsmPrefix,
+ String rlmmPrefix,
+ Map<String, Object> rsmProps,
+ Map<String, Object> rlmmProps) {
+ String remoteLogMetadataManagerClass = useDefaultRemoteLogMetadataManagerClass ? DEFAULT_REMOTE_LOG_METADATA_MANAGER_CLASS_NAME : "dummy.remote.log.metadata.class";
+ return new RemoteLogManagerConfig(true,
+ "dummy.remote.storage.class",
+ "dummy.remote.storage.class.path",
+ remoteLogMetadataManagerClass,
+ "dummy.remote.log.metadata.class.path",
+ "listener.name",
+ 1024 * 1024L,
+ 1,
+ 1,
+ 1,
+ 60000L,
+ 100L,
+ 60000L,
+ 0.3,
+ 10,
+ 100,
+ 100,
+ rsmPrefix,
+ rsmProps,
+ rlmmPrefix,
+ rlmmProps,
+ Long.MAX_VALUE,
+ 11,
+ 1,
+ Long.MAX_VALUE,
+ 11,
+ 1);
}
private Map<String, Object> extractProps(RemoteLogManagerConfig remoteLogManagerConfig) {
@@ -105,4 +140,58 @@ public class RemoteLogManagerConfigTest {
remoteLogManagerConfig.remoteLogMetadataManagerPrefix());
return props;
}
+
+ @Test
+ public void testHashCodeAndEquals_ForAllAndTwoFields() {
+ String rsmPrefix = "__custom.rsm.";
+ String rlmmPrefix = "__custom.rlmm.";
+ Map<String, Object> rsmProps = Collections.singletonMap("rsm.prop", "val");
+ Map<String, Object> rlmmProps = Collections.singletonMap("rlmm.prop", "val");
+ RemoteLogManagerConfig config1 = getRemoteLogManagerConfig(false,
+ rsmPrefix,
+ rlmmPrefix,
+ rsmProps,
+ rlmmProps);
+ RemoteLogManagerConfig config2 = getRemoteLogManagerConfig(false,
+ rsmPrefix,
+ rlmmPrefix,
+ rsmProps,
+ rlmmProps);
+
+ // Initially, hash codes should be equal for default objects
+ assertEquals(config1.hashCode(), config2.hashCode());
+
+ // Initially, objects should be equal
+ assertEquals(config1, config2);
+
+ // Test for specific field remoteLogManagerCopierThreadPoolSize
+ RemoteLogManagerConfig config3 = new RemoteLogManagerConfig(true, "dummy.remote.storage.class",
+ "dummy.remote.storage.class.path",
+ "dummy.remote.log.metadata.class", "dummy.remote.log.metadata.class.path",
+ "listener.name",
+ 1024 * 1024L,
+ 1,
+ 2, // Change here
+ 2, // Change here
+ 60000L,
+ 100L,
+ 60000L,
+ 0.3,
+ 10,
+ 100,
+ 100,
+ rsmPrefix,
+ rsmProps,
+ rlmmPrefix,
+ rlmmProps,
+ Long.MAX_VALUE,
+ 11,
+ 1,
+ Long.MAX_VALUE,
+ 11,
+ 1);
+
+ assertNotEquals(config1.hashCode(), config3.hashCode());
+ assertNotEquals(config1, config3);
+ }
}