diff --git a/topic/src/main/java/tech/ydb/topic/description/Consumer.java b/topic/src/main/java/tech/ydb/topic/description/Consumer.java index 3dc85d45c..e20ca9f85 100644 --- a/topic/src/main/java/tech/ydb/topic/description/Consumer.java +++ b/topic/src/main/java/tech/ydb/topic/description/Consumer.java @@ -5,6 +5,7 @@ import java.util.HashMap; import java.util.List; import java.util.Map; +import java.util.Objects; import java.util.stream.Collectors; import javax.annotation.Nonnull; @@ -140,4 +141,23 @@ public Consumer build() { return new Consumer(this); } } + + @Override + public boolean equals(Object o) { + if (o == null || getClass() != o.getClass()) { + return false; + } + Consumer consumer = (Consumer) o; + return important == consumer.important && + Objects.equals(name, consumer.name) && + Objects.equals(readFrom, consumer.readFrom) && + Objects.equals(supportedCodecs, consumer.supportedCodecs) && + Objects.equals(attributes, consumer.attributes) && + Objects.equals(stats, consumer.stats); + } + + @Override + public int hashCode() { + return Objects.hash(name, important, readFrom, supportedCodecs, attributes, stats); + } } diff --git a/topic/src/main/java/tech/ydb/topic/description/ConsumerDescription.java b/topic/src/main/java/tech/ydb/topic/description/ConsumerDescription.java index 3a85494fe..68084c2aa 100644 --- a/topic/src/main/java/tech/ydb/topic/description/ConsumerDescription.java +++ b/topic/src/main/java/tech/ydb/topic/description/ConsumerDescription.java @@ -2,6 +2,7 @@ import java.util.List; +import java.util.Objects; import java.util.stream.Collectors; import tech.ydb.proto.topic.YdbTopic; @@ -28,4 +29,18 @@ public Consumer getConsumer() { public List getPartitions() { return partitions; } + + @Override + public boolean equals(Object o) { + if (o == null || getClass() != o.getClass()) { + return false; + } + ConsumerDescription that = (ConsumerDescription) o; + return Objects.equals(consumer, that.consumer) && Objects.equals(partitions, that.partitions); + } + + @Override + public int hashCode() { + return Objects.hash(consumer, partitions); + } } diff --git a/topic/src/main/java/tech/ydb/topic/description/ConsumerPartitionInfo.java b/topic/src/main/java/tech/ydb/topic/description/ConsumerPartitionInfo.java index 225c614da..babd11506 100644 --- a/topic/src/main/java/tech/ydb/topic/description/ConsumerPartitionInfo.java +++ b/topic/src/main/java/tech/ydb/topic/description/ConsumerPartitionInfo.java @@ -3,6 +3,7 @@ import java.time.Duration; import java.time.Instant; import java.util.List; +import java.util.Objects; import tech.ydb.core.utils.ProtobufUtils; import tech.ydb.proto.topic.YdbTopic; @@ -178,4 +179,32 @@ public int getConnectionNodeId() { return connectionNodeId; } } + + @Override + public boolean equals(Object o) { + if (o == null || getClass() != o.getClass()) { + return false; + } + ConsumerPartitionInfo that = (ConsumerPartitionInfo) o; + return partitionId == that.partitionId && + active == that.active && + Objects.equals(childPartitionIds, that.childPartitionIds) && + Objects.equals(parentPartitionIds, that.parentPartitionIds) && + Objects.equals(partitionStats, that.partitionStats) && + Objects.equals(consumerStats, that.consumerStats) && + Objects.equals(location, that.location); + } + + @Override + public int hashCode() { + return Objects.hash( + partitionId, + active, + childPartitionIds, + parentPartitionIds, + partitionStats, + consumerStats, + location + ); + } } diff --git a/topic/src/main/java/tech/ydb/topic/description/MultipleWindowsStat.java b/topic/src/main/java/tech/ydb/topic/description/MultipleWindowsStat.java index 74a0c4f2a..dcbf1ac66 100644 --- a/topic/src/main/java/tech/ydb/topic/description/MultipleWindowsStat.java +++ b/topic/src/main/java/tech/ydb/topic/description/MultipleWindowsStat.java @@ -1,5 +1,7 @@ package tech.ydb.topic.description; +import java.util.Objects; + import tech.ydb.proto.topic.YdbTopic; /** @@ -33,4 +35,18 @@ public long getPerHour() { public long getPerDay() { return perDay; } + + @Override + public boolean equals(Object o) { + if (o == null || getClass() != o.getClass()) { + return false; + } + MultipleWindowsStat that = (MultipleWindowsStat) o; + return perMinute == that.perMinute && perHour == that.perHour && perDay == that.perDay; + } + + @Override + public int hashCode() { + return Objects.hash(perMinute, perHour, perDay); + } } diff --git a/topic/src/main/java/tech/ydb/topic/description/PartitionInfo.java b/topic/src/main/java/tech/ydb/topic/description/PartitionInfo.java index 1c16782f0..dc439191e 100644 --- a/topic/src/main/java/tech/ydb/topic/description/PartitionInfo.java +++ b/topic/src/main/java/tech/ydb/topic/description/PartitionInfo.java @@ -2,6 +2,7 @@ import java.util.ArrayList; import java.util.List; +import java.util.Objects; import com.google.common.collect.ImmutableList; @@ -86,4 +87,22 @@ public PartitionInfo build() { return new PartitionInfo(this); } } + + @Override + public boolean equals(Object o) { + if (o == null || getClass() != o.getClass()) { + return false; + } + PartitionInfo that = (PartitionInfo) o; + return partitionId == that.partitionId && + active == that.active && + Objects.equals(childPartitionIds, that.childPartitionIds) && + Objects.equals(parentPartitionIds, that.parentPartitionIds) && + Objects.equals(partitionStats, that.partitionStats); + } + + @Override + public int hashCode() { + return Objects.hash(partitionId, active, childPartitionIds, parentPartitionIds, partitionStats); + } } diff --git a/topic/src/main/java/tech/ydb/topic/description/PartitionStats.java b/topic/src/main/java/tech/ydb/topic/description/PartitionStats.java index 78bde4ec1..8c4e27b35 100644 --- a/topic/src/main/java/tech/ydb/topic/description/PartitionStats.java +++ b/topic/src/main/java/tech/ydb/topic/description/PartitionStats.java @@ -2,6 +2,7 @@ import java.time.Duration; import java.time.Instant; +import java.util.Objects; import javax.annotation.Nullable; @@ -126,4 +127,30 @@ public PartitionStats build() { return new PartitionStats(this); } } + + @Override + public boolean equals(Object o) { + if (o == null || getClass() != o.getClass()) { + return false; + } + PartitionStats that = (PartitionStats) o; + return storeSizeBytes == that.storeSizeBytes && + partitionNodeId == that.partitionNodeId && + Objects.equals(partitionOffsets, that.partitionOffsets) && + Objects.equals(lastWriteTime, that.lastWriteTime) && + Objects.equals(maxWriteTimeLag, that.maxWriteTimeLag) && + Objects.equals(bytesWritten, that.bytesWritten); + } + + @Override + public int hashCode() { + return Objects.hash( + partitionOffsets, + storeSizeBytes, + lastWriteTime, + maxWriteTimeLag, + bytesWritten, + partitionNodeId + ); + } } diff --git a/topic/src/main/java/tech/ydb/topic/description/SupportedCodecs.java b/topic/src/main/java/tech/ydb/topic/description/SupportedCodecs.java index 09a4b126b..2fa1d088c 100644 --- a/topic/src/main/java/tech/ydb/topic/description/SupportedCodecs.java +++ b/topic/src/main/java/tech/ydb/topic/description/SupportedCodecs.java @@ -2,6 +2,7 @@ import java.util.ArrayList; import java.util.List; +import java.util.Objects; import com.google.common.collect.ImmutableList; @@ -47,4 +48,18 @@ public SupportedCodecs build() { return new SupportedCodecs(this); } } + + @Override + public boolean equals(Object o) { + if (o == null || getClass() != o.getClass()) { + return false; + } + SupportedCodecs that = (SupportedCodecs) o; + return Objects.equals(codecs, that.codecs); + } + + @Override + public int hashCode() { + return Objects.hashCode(codecs); + } } diff --git a/topic/src/main/java/tech/ydb/topic/description/TopicDescription.java b/topic/src/main/java/tech/ydb/topic/description/TopicDescription.java index 3b228624d..024ccd709 100644 --- a/topic/src/main/java/tech/ydb/topic/description/TopicDescription.java +++ b/topic/src/main/java/tech/ydb/topic/description/TopicDescription.java @@ -4,6 +4,7 @@ import java.util.ArrayList; import java.util.List; import java.util.Map; +import java.util.Objects; import javax.annotation.Nonnull; import javax.annotation.Nullable; @@ -179,4 +180,40 @@ public TopicDescription build() { return new TopicDescription(this); } } + + @Override + public boolean equals(Object o) { + if (o == null || getClass() != o.getClass()) { + return false; + } + TopicDescription that = (TopicDescription) o; + return retentionStorageMb == that.retentionStorageMb && + partitionWriteSpeedBytesPerSecond == that.partitionWriteSpeedBytesPerSecond && + partitionWriteBurstBytes == that.partitionWriteBurstBytes && + Objects.equals(partitioningSettings, that.partitioningSettings) && + Objects.equals(partitions, that.partitions) && + Objects.equals(retentionPeriod, that.retentionPeriod) && + Objects.equals(supportedCodecs, that.supportedCodecs) && + Objects.equals(attributes, that.attributes) && + Objects.equals(consumers, that.consumers) && + meteringMode == that.meteringMode && + Objects.equals(topicStats, that.topicStats); + } + + @Override + public int hashCode() { + return Objects.hash( + partitioningSettings, + partitions, + retentionPeriod, + retentionStorageMb, + supportedCodecs, + partitionWriteSpeedBytesPerSecond, + partitionWriteBurstBytes, + attributes, + consumers, + meteringMode, + topicStats + ); + } } diff --git a/topic/src/main/java/tech/ydb/topic/description/TopicStats.java b/topic/src/main/java/tech/ydb/topic/description/TopicStats.java index f350660a1..5f7d77a2d 100644 --- a/topic/src/main/java/tech/ydb/topic/description/TopicStats.java +++ b/topic/src/main/java/tech/ydb/topic/description/TopicStats.java @@ -2,6 +2,7 @@ import java.time.Duration; import java.time.Instant; +import java.util.Objects; import javax.annotation.Nullable; @@ -76,4 +77,21 @@ public TopicStats build() { return new TopicStats(this); } } + + @Override + public boolean equals(Object o) { + if (o == null || getClass() != o.getClass()) { + return false; + } + TopicStats that = (TopicStats) o; + return storeSizeBytes == that.storeSizeBytes && + Objects.equals(minLastWriteTime, that.minLastWriteTime) && + Objects.equals(maxWriteTimeLag, that.maxWriteTimeLag) && + Objects.equals(bytesWritten, that.bytesWritten); + } + + @Override + public int hashCode() { + return Objects.hash(storeSizeBytes, minLastWriteTime, maxWriteTimeLag, bytesWritten); + } } diff --git a/topic/src/main/java/tech/ydb/topic/read/impl/OffsetsRangeImpl.java b/topic/src/main/java/tech/ydb/topic/read/impl/OffsetsRangeImpl.java index 6cf1165ca..e85cad1a1 100644 --- a/topic/src/main/java/tech/ydb/topic/read/impl/OffsetsRangeImpl.java +++ b/topic/src/main/java/tech/ydb/topic/read/impl/OffsetsRangeImpl.java @@ -1,5 +1,7 @@ package tech.ydb.topic.read.impl; +import java.util.Objects; + import tech.ydb.topic.description.OffsetsRange; /** @@ -36,4 +38,18 @@ public void setStart(long start) { public void setEnd(long end) { this.end = end; } + + @Override + public boolean equals(Object o) { + if (o == null || getClass() != o.getClass()) { + return false; + } + OffsetsRangeImpl that = (OffsetsRangeImpl) o; + return start == that.start && end == that.end; + } + + @Override + public int hashCode() { + return Objects.hash(start, end); + } } diff --git a/topic/src/main/java/tech/ydb/topic/settings/AutoPartitioningWriteStrategySettings.java b/topic/src/main/java/tech/ydb/topic/settings/AutoPartitioningWriteStrategySettings.java index 88db26fb1..c54ab0572 100644 --- a/topic/src/main/java/tech/ydb/topic/settings/AutoPartitioningWriteStrategySettings.java +++ b/topic/src/main/java/tech/ydb/topic/settings/AutoPartitioningWriteStrategySettings.java @@ -1,6 +1,7 @@ package tech.ydb.topic.settings; import java.time.Duration; +import java.util.Objects; public class AutoPartitioningWriteStrategySettings { private final Duration stabilizationWindow; @@ -69,4 +70,20 @@ public AutoPartitioningWriteStrategySettings build() { return new AutoPartitioningWriteStrategySettings(this); } } + + @Override + public boolean equals(Object o) { + if (o == null || getClass() != o.getClass()) { + return false; + } + AutoPartitioningWriteStrategySettings that = (AutoPartitioningWriteStrategySettings) o; + return upUtilizationPercent == that.upUtilizationPercent && + downUtilizationPercent == that.downUtilizationPercent && + Objects.equals(stabilizationWindow, that.stabilizationWindow); + } + + @Override + public int hashCode() { + return Objects.hash(stabilizationWindow, upUtilizationPercent, downUtilizationPercent); + } } diff --git a/topic/src/main/java/tech/ydb/topic/settings/PartitioningSettings.java b/topic/src/main/java/tech/ydb/topic/settings/PartitioningSettings.java index e963babc2..d19f361eb 100644 --- a/topic/src/main/java/tech/ydb/topic/settings/PartitioningSettings.java +++ b/topic/src/main/java/tech/ydb/topic/settings/PartitioningSettings.java @@ -1,5 +1,7 @@ package tech.ydb.topic.settings; +import java.util.Objects; + /** * @author Nikolay Perfilov */ @@ -107,4 +109,21 @@ public PartitioningSettings build() { return new PartitioningSettings(this); } } + + @Override + public boolean equals(Object o) { + if (o == null || getClass() != o.getClass()) { + return false; + } + PartitioningSettings that = (PartitioningSettings) o; + return minActivePartitions == that.minActivePartitions && + partitionCountLimit == that.partitionCountLimit && + autoPartitioningStrategy == that.autoPartitioningStrategy && + Objects.equals(writeStrategySettings, that.writeStrategySettings); + } + + @Override + public int hashCode() { + return Objects.hash(minActivePartitions, partitionCountLimit, autoPartitioningStrategy, writeStrategySettings); + } }