Skip to content

Commit b083fd3

Browse files
authored
Topic edit feature (#1)
* Added topic edit feature and other minor enhancements. * Updated the Spring Boot to version 3.0.2 * Updated the package and few minor updates * Minor refactor.
1 parent 6dbd1e1 commit b083fd3

File tree

71 files changed

+3936
-8516
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

71 files changed

+3936
-8516
lines changed

backend/main/java/com/ideasbucket/tansen/configuration/ApplicationProperties.java

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -7,20 +7,18 @@
77
package com.ideasbucket.tansen.configuration;
88

99
import com.ideasbucket.tansen.entity.Cluster;
10+
import jakarta.validation.Valid;
11+
import jakarta.validation.constraints.AssertTrue;
12+
import jakarta.validation.constraints.NotEmpty;
13+
import jakarta.validation.constraints.NotNull;
1014
import java.util.Map;
1115
import java.util.Set;
1216
import java.util.function.Function;
1317
import java.util.stream.Collectors;
14-
import javax.validation.Valid;
15-
import javax.validation.constraints.AssertTrue;
16-
import javax.validation.constraints.NotEmpty;
17-
import javax.validation.constraints.NotNull;
1818
import org.springframework.boot.context.properties.ConfigurationProperties;
19-
import org.springframework.boot.context.properties.ConstructorBinding;
2019
import org.springframework.validation.annotation.Validated;
2120

2221
@ConfigurationProperties("tansen")
23-
@ConstructorBinding
2422
@Validated
2523
public class ApplicationProperties {
2624

backend/main/java/com/ideasbucket/tansen/entity/Cluster.java

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -6,11 +6,11 @@
66
*/
77
package com.ideasbucket.tansen.entity;
88

9+
import jakarta.validation.constraints.NotBlank;
10+
import jakarta.validation.constraints.NotNull;
11+
import jakarta.validation.constraints.Pattern;
12+
import jakarta.validation.constraints.Size;
913
import java.util.Map;
10-
import javax.validation.constraints.NotBlank;
11-
import javax.validation.constraints.NotNull;
12-
import javax.validation.constraints.Pattern;
13-
import javax.validation.constraints.Size;
1414

1515
public class Cluster {
1616

backend/main/java/com/ideasbucket/tansen/entity/ClusterInformation.java

Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,9 @@ public final class ClusterInformation {
4747
@JsonProperty("outOfSyncReplicas")
4848
private final Integer outOfSyncReplicas;
4949

50+
@JsonProperty("clusterSize")
51+
private final Long clusterSize;
52+
5053
@JsonCreator
5154
public ClusterInformation(
5255
@JsonProperty("id") String id,
@@ -59,7 +62,8 @@ public ClusterInformation(
5962
@JsonProperty("totalNumberOfPartitions") Integer totalNumberOfPartitions,
6063
@JsonProperty("totalReplicas") Integer totalReplicas,
6164
@JsonProperty("inSyncReplicas") Integer inSyncReplicas,
62-
@JsonProperty("outOfSyncReplicas") Integer outOfSyncReplicas
65+
@JsonProperty("outOfSyncReplicas") Integer outOfSyncReplicas,
66+
@JsonProperty("clusterSize") Long clusterSize
6367
) {
6468
this.id = id;
6569
this.name = name;
@@ -72,6 +76,7 @@ public ClusterInformation(
7276
this.inSyncReplicas = inSyncReplicas;
7377
this.outOfSyncReplicas = outOfSyncReplicas;
7478
this.configurations = configurations;
79+
this.clusterSize = clusterSize;
7580
}
7681

7782
public ClusterInformation(
@@ -84,7 +89,8 @@ public ClusterInformation(
8489
@JsonProperty("totalNumberOfTopics") Integer totalNumberOfTopics,
8590
@JsonProperty("totalNumberOfPartitions") Integer totalNumberOfPartitions,
8691
@JsonProperty("totalReplicas") Integer totalReplicas,
87-
@JsonProperty("inSyncReplicas") Integer inSyncReplicas
92+
@JsonProperty("inSyncReplicas") Integer inSyncReplicas,
93+
@JsonProperty("clusterSize") Long clusterSize
8894
) {
8995
this.id = id;
9096
this.name = name;
@@ -97,6 +103,7 @@ public ClusterInformation(
97103
this.inSyncReplicas = inSyncReplicas;
98104
this.outOfSyncReplicas = totalReplicas - inSyncReplicas;
99105
this.configurations = configurations;
106+
this.clusterSize = clusterSize;
100107
}
101108

102109
public String getName() {
@@ -142,4 +149,8 @@ public Integer getOutOfSyncReplicas() {
142149
public List<ConfigurationWithDefinition> getConfigurations() {
143150
return configurations;
144151
}
152+
153+
public Long getClusterSize() {
154+
return clusterSize;
155+
}
145156
}

backend/main/java/com/ideasbucket/tansen/entity/CompatibilityChangeRequest.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -10,9 +10,9 @@
1010
import com.fasterxml.jackson.annotation.JsonInclude;
1111
import com.fasterxml.jackson.annotation.JsonProperty;
1212
import com.fasterxml.jackson.annotation.JsonPropertyOrder;
13-
import javax.validation.constraints.NotBlank;
14-
import javax.validation.constraints.NotNull;
15-
import javax.validation.constraints.Pattern;
13+
import jakarta.validation.constraints.NotBlank;
14+
import jakarta.validation.constraints.NotNull;
15+
import jakarta.validation.constraints.Pattern;
1616

1717
@JsonInclude(JsonInclude.Include.NON_NULL)
1818
@JsonPropertyOrder({ "compatibility" })

backend/main/java/com/ideasbucket/tansen/entity/MessageSelectionCriteria.java

Lines changed: 6 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -7,8 +7,9 @@
77
package com.ideasbucket.tansen.entity;
88

99
import com.fasterxml.jackson.annotation.*;
10+
import jakarta.validation.constraints.AssertFalse;
11+
1012
import java.time.Instant;
11-
import javax.validation.constraints.AssertFalse;
1213

1314
@JsonInclude(JsonInclude.Include.NON_NULL)
1415
@JsonPropertyOrder({ "offset", "partition", "timestamp" })
@@ -55,19 +56,16 @@ private boolean hasValidOffset() {
5556
@AssertFalse(message = "Invalid partition.")
5657
@JsonIgnore
5758
private boolean hasValidPartition() {
58-
return this.partition != null && this.partition < 0;
59+
return this.partition != null && this.partition < -1;
5960
}
6061

6162
@JsonIgnore
6263
public String getCase() {
63-
if ((this.partition != null) && (this.offset != null)) {
64-
return "offset";
65-
}
6664

67-
if (this.timestamp != null) {
68-
return "timestamp";
65+
if (this.partition == null) {
66+
return "";
6967
}
7068

71-
return "";
69+
return (this.offset != null) ? "offset" : "timestamp";
7270
}
7371
}

backend/main/java/com/ideasbucket/tansen/entity/ModeChangeRequest.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
package com.ideasbucket.tansen.entity;
88

99
import com.fasterxml.jackson.annotation.*;
10-
import javax.validation.constraints.AssertTrue;
10+
import jakarta.validation.constraints.AssertTrue;
1111

1212
@JsonInclude(JsonInclude.Include.NON_NULL)
1313
@JsonPropertyOrder({ "mode" })

backend/main/java/com/ideasbucket/tansen/entity/Reference.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,8 +10,8 @@
1010
import com.fasterxml.jackson.annotation.JsonInclude;
1111
import com.fasterxml.jackson.annotation.JsonProperty;
1212
import com.fasterxml.jackson.annotation.JsonPropertyOrder;
13-
import javax.validation.constraints.NotBlank;
14-
import javax.validation.constraints.NotNull;
13+
import jakarta.validation.constraints.NotBlank;
14+
import jakarta.validation.constraints.NotNull;
1515

1616
@JsonInclude(JsonInclude.Include.NON_NULL)
1717
@JsonPropertyOrder({ "name", "subject", "version" })

backend/main/java/com/ideasbucket/tansen/entity/SaveSchemaRequest.java

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -7,12 +7,12 @@
77
package com.ideasbucket.tansen.entity;
88

99
import com.fasterxml.jackson.annotation.*;
10+
import jakarta.validation.Valid;
11+
import jakarta.validation.constraints.AssertTrue;
12+
import jakarta.validation.constraints.NotBlank;
13+
import jakarta.validation.constraints.NotNull;
1014
import java.util.Collections;
1115
import java.util.List;
12-
import javax.validation.Valid;
13-
import javax.validation.constraints.AssertTrue;
14-
import javax.validation.constraints.NotBlank;
15-
import javax.validation.constraints.NotNull;
1616

1717
@JsonInclude(JsonInclude.Include.NON_NULL)
1818
@JsonPropertyOrder({ "schema", "schemaType", "references" })

backend/main/java/com/ideasbucket/tansen/entity/NewTopicCreateRequest.java renamed to backend/main/java/com/ideasbucket/tansen/entity/TopicCreateRequest.java

Lines changed: 41 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -10,9 +10,9 @@
1010
import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
1111
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
1212
import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
13+
import jakarta.validation.constraints.*;
1314
import java.util.HashMap;
1415
import java.util.Map;
15-
import javax.validation.constraints.*;
1616
import org.apache.kafka.common.config.TopicConfig;
1717

1818
@JsonInclude(JsonInclude.Include.NON_NULL)
@@ -49,7 +49,7 @@
4949
"preallocate",
5050
}
5151
)
52-
public final class NewTopicCreateRequest {
52+
public final class TopicCreateRequest {
5353

5454
@JsonProperty("cleanup.policy")
5555
@NotNull(message = "cleanup.policy must be either delete or compact.")
@@ -214,7 +214,7 @@ public final class NewTopicCreateRequest {
214214
private final Boolean preallocate;
215215

216216
@JsonCreator
217-
public NewTopicCreateRequest(
217+
public TopicCreateRequest(
218218
@JsonProperty("cleanup.policy") String cleanupPolicy,
219219
@JsonProperty("compression.type") String compressionType,
220220
@JsonProperty("delete.retention.ms") Long deleteRetentionMs,
@@ -274,6 +274,37 @@ public NewTopicCreateRequest(
274274
this.preallocate = preallocate;
275275
}
276276

277+
public TopicCreateRequest(String name, Integer partition) {
278+
this.name = name;
279+
this.partition = partition;
280+
this.cleanupPolicy = "delete";
281+
this.compressionType = "producer";
282+
this.deleteRetentionMs = 86400000L;
283+
this.fileDeleteDelayMs = 60000L;
284+
this.flushMessages = 9223372036854775807L;
285+
this.flushMs = 9223372036854775807L;
286+
this.followerReplicationThrottledReplicas = "";
287+
this.indexIntervalBytes = 4096;
288+
this.leaderReplicationThrottledReplicas = "";
289+
this.maxCompactionLagMs = 9223372036854775807L;
290+
this.maxMessageBytes = 1048588;
291+
this.messageDownconversionEnable = true;
292+
this.messageTimestampDifferenceMaxMs = 9223372036854775807L;
293+
this.messageTimestampType = "CreateTime";
294+
this.minCleanableDirtyRatio = 0.5;
295+
this.minCompactionLagMs = 0L;
296+
this.minInsyncReplicas = 1;
297+
this.replicationFactor = 1;
298+
this.retentionBytes = -1L;
299+
this.retentionMs = 604800000L;
300+
this.segmentBytes = 1073741824;
301+
this.segmentIndexBytes = 10485760;
302+
this.segmentJitterMs = 0L;
303+
this.segmentMs = 604800000L;
304+
this.uncleanLeaderElectionEnable = false;
305+
this.preallocate = false;
306+
}
307+
277308
@AssertTrue(message = "Retention bytes cannot be null, must be numeric either exactly -1 or greater than 0.")
278309
@JsonIgnore
279310
private boolean hasValidRetentionBytes() {
@@ -284,6 +315,13 @@ private boolean hasValidRetentionBytes() {
284315
return this.retentionBytes == -1L || this.retentionBytes > 0L;
285316
}
286317

318+
@AssertFalse(message = "Minimum in-sync replica must be equal or less than replication factor.")
319+
@JsonIgnore
320+
private boolean hasMinInsyncReplicas() {
321+
322+
return (this.replicationFactor < this.minInsyncReplicas);
323+
}
324+
287325
@AssertTrue(message = "Retention time cannot be null, must be numeric either exactly -1 or greater than 0.")
288326
@JsonIgnore
289327
private boolean hasValidRetentionMs() {

0 commit comments

Comments
 (0)