This is an automated email from the ASF dual-hosted git repository.
devesh pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/ozone.git
The following commit(s) were added to refs/heads/master by this push:
new 8f8d8094c7 HDDS-11309. Increase CONTAINER_STATE Column Length in
UNHEALTHY_CONTAINERS to Avoid Truncation (#7071)
8f8d8094c7 is described below
commit 8f8d8094c72abc2a535b5243c8d1411cc11e7fa4
Author: Arafat2198 <[email protected]>
AuthorDate: Mon Aug 26 18:44:03 2024 +0530
HDDS-11309. Increase CONTAINER_STATE Column Length in UNHEALTHY_CONTAINERS
to Avoid Truncation (#7071)
---
.../recon/schema/ContainerSchemaDefinition.java | 2 +-
.../persistence/ContainerHealthSchemaManager.java | 4 +-
.../ozone/recon/fsck/TestContainerHealthTask.java | 92 +++++++++++++++++++++-
3 files changed, 93 insertions(+), 5 deletions(-)
diff --git
a/hadoop-ozone/recon-codegen/src/main/java/org/hadoop/ozone/recon/schema/ContainerSchemaDefinition.java
b/hadoop-ozone/recon-codegen/src/main/java/org/hadoop/ozone/recon/schema/ContainerSchemaDefinition.java
index 4d62ca886c..7c293ff186 100644
---
a/hadoop-ozone/recon-codegen/src/main/java/org/hadoop/ozone/recon/schema/ContainerSchemaDefinition.java
+++
b/hadoop-ozone/recon-codegen/src/main/java/org/hadoop/ozone/recon/schema/ContainerSchemaDefinition.java
@@ -51,7 +51,7 @@ public class ContainerSchemaDefinition implements
ReconSchemaDefinition {
UNDER_REPLICATED,
OVER_REPLICATED,
MIS_REPLICATED,
- ALL_REPLICAS_UNHEALTHY,
+ ALL_REPLICAS_BAD,
NEGATIVE_SIZE // Added new state to track containers with negative sizes
}
diff --git
a/hadoop-ozone/recon/src/main/java/org/apache/hadoop/ozone/recon/persistence/ContainerHealthSchemaManager.java
b/hadoop-ozone/recon/src/main/java/org/apache/hadoop/ozone/recon/persistence/ContainerHealthSchemaManager.java
index 0c13376fa5..9ccc09d8d0 100644
---
a/hadoop-ozone/recon/src/main/java/org/apache/hadoop/ozone/recon/persistence/ContainerHealthSchemaManager.java
+++
b/hadoop-ozone/recon/src/main/java/org/apache/hadoop/ozone/recon/persistence/ContainerHealthSchemaManager.java
@@ -18,7 +18,7 @@
package org.apache.hadoop.ozone.recon.persistence;
import static
org.hadoop.ozone.recon.schema.ContainerSchemaDefinition.UnHealthyContainerStates.UNDER_REPLICATED;
-import static
org.hadoop.ozone.recon.schema.ContainerSchemaDefinition.UnHealthyContainerStates.ALL_REPLICAS_UNHEALTHY;
+import static
org.hadoop.ozone.recon.schema.ContainerSchemaDefinition.UnHealthyContainerStates.ALL_REPLICAS_BAD;
import static
org.hadoop.ozone.recon.schema.tables.UnhealthyContainersTable.UNHEALTHY_CONTAINERS;
import static org.jooq.impl.DSL.count;
@@ -76,7 +76,7 @@ public class ContainerHealthSchemaManager {
SelectQuery<Record> query = dslContext.selectQuery();
query.addFrom(UNHEALTHY_CONTAINERS);
if (state != null) {
- if (state.equals(ALL_REPLICAS_UNHEALTHY)) {
+ if (state.equals(ALL_REPLICAS_BAD)) {
query.addConditions(UNHEALTHY_CONTAINERS.CONTAINER_STATE
.eq(UNDER_REPLICATED.toString()));
query.addConditions(UNHEALTHY_CONTAINERS.ACTUAL_REPLICA_COUNT.eq(0));
diff --git
a/hadoop-ozone/recon/src/test/java/org/apache/hadoop/ozone/recon/fsck/TestContainerHealthTask.java
b/hadoop-ozone/recon/src/test/java/org/apache/hadoop/ozone/recon/fsck/TestContainerHealthTask.java
index 8647639dd1..ae46bd8b5b 100644
---
a/hadoop-ozone/recon/src/test/java/org/apache/hadoop/ozone/recon/fsck/TestContainerHealthTask.java
+++
b/hadoop-ozone/recon/src/test/java/org/apache/hadoop/ozone/recon/fsck/TestContainerHealthTask.java
@@ -20,9 +20,12 @@ package org.apache.hadoop.ozone.recon.fsck;
import static
org.apache.hadoop.hdds.protocol.proto.HddsProtos.ReplicationFactor.THREE;
import static org.assertj.core.api.Assertions.assertThat;
-import static
org.hadoop.ozone.recon.schema.ContainerSchemaDefinition.UnHealthyContainerStates.ALL_REPLICAS_UNHEALTHY;
+import static
org.hadoop.ozone.recon.schema.ContainerSchemaDefinition.UnHealthyContainerStates.ALL_REPLICAS_BAD;
import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertNotNull;
+import static org.junit.jupiter.api.Assertions.assertNull;
+import static org.junit.jupiter.api.Assertions.fail;
+import static org.junit.jupiter.api.Assertions.assertFalse;
import static org.mockito.Mockito.any;
import static org.mockito.Mockito.anyInt;
import static org.mockito.Mockito.mock;
@@ -199,7 +202,7 @@ public class TestContainerHealthTask extends
AbstractReconSqlDBTest {
List<UnhealthyContainers> unhealthyContainers =
containerHealthSchemaManager.getUnhealthyContainers(
- ALL_REPLICAS_UNHEALTHY, 0, Integer.MAX_VALUE);
+ ALL_REPLICAS_BAD, 0, Integer.MAX_VALUE);
assertEquals(1, unhealthyContainers.size());
assertEquals(2L,
unhealthyContainers.get(0).getContainerId().longValue());
@@ -384,6 +387,91 @@ public class TestContainerHealthTask extends
AbstractReconSqlDBTest {
.isGreaterThan(currentTime);
}
+ @Test
+ public void testAllContainerStateInsertions() {
+ UnhealthyContainersDao unHealthyContainersTableHandle =
+ getDao(UnhealthyContainersDao.class);
+
+ ContainerHealthSchemaManager containerHealthSchemaManager =
+ new ContainerHealthSchemaManager(
+ getSchemaDefinition(ContainerSchemaDefinition.class),
+ unHealthyContainersTableHandle);
+
+ // Iterate through each state in the UnHealthyContainerStates enum
+ for (ContainerSchemaDefinition.UnHealthyContainerStates state :
+ ContainerSchemaDefinition.UnHealthyContainerStates.values()) {
+
+ // Create a dummy UnhealthyContainer record with the current state
+ UnhealthyContainers unhealthyContainer = new UnhealthyContainers();
+ unhealthyContainer.setContainerId(state.ordinal() + 1L);
+
+ // Set replica counts based on the state
+ switch (state) {
+ case MISSING:
+ case EMPTY_MISSING:
+ unhealthyContainer.setExpectedReplicaCount(3);
+ unhealthyContainer.setActualReplicaCount(0);
+ unhealthyContainer.setReplicaDelta(3);
+ break;
+
+ case UNDER_REPLICATED:
+ unhealthyContainer.setExpectedReplicaCount(3);
+ unhealthyContainer.setActualReplicaCount(1);
+ unhealthyContainer.setReplicaDelta(2);
+ break;
+
+ case OVER_REPLICATED:
+ unhealthyContainer.setExpectedReplicaCount(3);
+ unhealthyContainer.setActualReplicaCount(4);
+ unhealthyContainer.setReplicaDelta(-1);
+ break;
+
+ case MIS_REPLICATED:
+ case NEGATIVE_SIZE:
+ unhealthyContainer.setExpectedReplicaCount(3);
+ unhealthyContainer.setActualReplicaCount(3);
+ unhealthyContainer.setReplicaDelta(0);
+ break;
+
+ case ALL_REPLICAS_BAD:
+ unhealthyContainer.setExpectedReplicaCount(3);
+ unhealthyContainer.setActualReplicaCount(0);
+ unhealthyContainer.setReplicaDelta(3);
+ break;
+
+ default:
+ fail("Unhandled state: " + state.name() + ". Please add this state to
the switch case.");
+ }
+
+ unhealthyContainer.setContainerState(state.name());
+ unhealthyContainer.setInStateSince(System.currentTimeMillis());
+
+ // Try inserting the record and catch any exception that occurs
+ Exception exception = null;
+ try {
+ containerHealthSchemaManager.insertUnhealthyContainerRecords(
+ Collections.singletonList(unhealthyContainer));
+ } catch (Exception e) {
+ exception = e;
+ }
+
+ // Assert no exception should be thrown for each state
+ assertNull(exception,
+ "Exception was thrown during insertion for state " + state.name() +
+ ": " + exception);
+
+ // Optionally, verify the record was inserted correctly
+ List<UnhealthyContainers> insertedRecords =
+ unHealthyContainersTableHandle.fetchByContainerId(
+ state.ordinal() + 1L);
+ assertFalse(insertedRecords.isEmpty(),
+ "Record was not inserted for state " + state.name() + ".");
+ assertEquals(insertedRecords.get(0).getContainerState(), state.name(),
+ "The inserted container state does not match for state " +
+ state.name() + ".");
+ }
+ }
+
@Test
public void testNegativeSizeContainers() throws Exception {
// Setup mock objects and test environment
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]