Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -48,6 +48,7 @@
import java.util.Objects;
import java.util.Set;
import java.util.concurrent.ConcurrentHashMap;
import org.apache.hadoop.hdds.client.StorageTypeUtils;
import org.apache.hadoop.hdds.protocol.datanode.proto.ContainerProtos;
import org.apache.hadoop.hdds.protocol.datanode.proto.ContainerProtos.ContainerDataProto;
import org.apache.hadoop.hdds.protocol.proto.StorageContainerDatanodeProtocolProtos.ContainerReplicaProto;
Expand Down Expand Up @@ -275,16 +276,19 @@ public long getDeleteTransactionId() {
}

ContainerReplicaProto buildContainerReplicaProto() throws StorageContainerException {
return getStatistics().setContainerReplicaProto(ContainerReplicaProto.newBuilder())
ContainerReplicaProto.Builder builder = getStatistics().setContainerReplicaProto(ContainerReplicaProto.newBuilder())
.setContainerID(getContainerID())
.setState(getContainerReplicaProtoState(getState()))
.setIsEmpty(isEmpty())
.setOriginNodeId(getOriginNodeId())
.setReplicaIndex(getReplicaIndex())
.setBlockCommitSequenceId(getBlockCommitSequenceId())
.setDeleteTransactionId(getDeleteTransactionId())
.setDataChecksum(getDataChecksum())
.build();
.setDataChecksum(getDataChecksum());
if (getStorageType() != null) {
builder.setStorageType(StorageTypeUtils.getStorageTypeProto(getStorageType()));
}
return builder.build();
}

// TODO remove one of the State from proto
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -235,6 +235,7 @@ message ContainerReplicaProto {
optional int32 replicaIndex = 14;
optional bool isEmpty = 15 [default = false];
optional int64 dataChecksum = 16;
optional StorageTypeProto storageType = 17;
}

message CommandStatusReportsProto {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,7 @@
import java.util.Set;
import java.util.function.Supplier;
import org.apache.hadoop.hdds.client.ECReplicationConfig;
import org.apache.hadoop.hdds.client.StorageTypeUtils;
import org.apache.hadoop.hdds.protocol.DatanodeDetails;
import org.apache.hadoop.hdds.protocol.DatanodeID;
import org.apache.hadoop.hdds.protocol.proto.HddsProtos;
Expand Down Expand Up @@ -338,14 +339,14 @@ private boolean updateContainerState(final DatanodeDetails datanode,
targetState = LifeCycleState.CLOSED;
getLogger().info("Resurrecting container {} from {} to CLOSED due to non-empty CLOSED replica " +
"(keyCount={}, BCSID={}) from {}",
containerId, container.getState(), replica.getKeyCount(), replica.getBlockCommitSequenceId(),
containerId, container.getState(), replica.getKeyCount(), replica.getBlockCommitSequenceId(),
detailsForLogging);
} else {
// For OPEN, CLOSING, UNHEALTHY, QUASI_CLOSED replicas, transition to QUASI_CLOSED state
targetState = LifeCycleState.QUASI_CLOSED;
getLogger().info("Resurrecting container {} from {} to QUASI_CLOSED due to non-empty {} replica " +
"(keyCount={}, BCSID={}) from {}",
containerId, container.getState(), replica.getState(), replica.getKeyCount(),
containerId, container.getState(), replica.getState(), replica.getKeyCount(),
replica.getBlockCommitSequenceId(), detailsForLogging);
}
containerManager.transitionDeletingOrDeletedToTargetState(containerId, targetState);
Expand Down Expand Up @@ -379,7 +380,7 @@ private void updateContainerReplica(final DatanodeDetails datanodeDetails,
final ContainerReplicaProto replicaProto)
throws ContainerNotFoundException, ContainerReplicaNotFoundException {

final ContainerReplica replica = ContainerReplica.newBuilder()
final ContainerReplica.ContainerReplicaBuilder replicaBuilder = ContainerReplica.newBuilder()
.setContainerID(containerId)
.setContainerState(replicaProto.getState())
.setDatanodeDetails(datanodeDetails)
Expand All @@ -388,8 +389,11 @@ private void updateContainerReplica(final DatanodeDetails datanodeDetails,
.setKeyCount(replicaProto.getKeyCount())
.setReplicaIndex(replicaProto.getReplicaIndex())
.setBytesUsed(replicaProto.getUsed())
.setEmpty(replicaProto.getIsEmpty())
.setChecksums(ContainerChecksums.of(replicaProto.getDataChecksum()))
.setEmpty(replicaProto.getIsEmpty());
if (replicaProto.hasStorageType()) {
replicaBuilder.setStorageType(StorageTypeUtils.getFromProtobuf(replicaProto.getStorageType()));
}
ContainerReplica replica = replicaBuilder.setChecksums(ContainerChecksums.of(replicaProto.getDataChecksum()))
.build();

if (replica.getState().equals(State.DELETED)) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,10 +17,12 @@

package org.apache.hadoop.hdds.scm.container;

import jakarta.annotation.Nullable;
import java.util.Objects;
import org.apache.commons.lang3.builder.CompareToBuilder;
import org.apache.commons.lang3.builder.EqualsBuilder;
import org.apache.commons.lang3.builder.HashCodeBuilder;
import org.apache.hadoop.fs.StorageType;
import org.apache.hadoop.hdds.protocol.DatanodeDetails;
import org.apache.hadoop.hdds.protocol.DatanodeID;
import org.apache.hadoop.hdds.protocol.proto.StorageContainerDatanodeProtocolProtos.ContainerReplicaProto;
Expand All @@ -46,6 +48,7 @@ public final class ContainerReplica implements Comparable<ContainerReplica> {
private final long bytesUsed;
private final boolean isEmpty;
private final ContainerChecksums checksums;
private final StorageType storageType;

private ContainerReplica(ContainerReplicaBuilder b) {
this.containerID = Objects.requireNonNull(b.containerID, "containerID == null");
Expand All @@ -58,6 +61,7 @@ private ContainerReplica(ContainerReplicaBuilder b) {
this.isEmpty = b.isEmpty;
this.sequenceId = b.sequenceId;
this.checksums = Objects.requireNonNull(b.checksums, "checksums == null");
this.storageType = b.storageType;
}

public ContainerID getContainerID() {
Expand Down Expand Up @@ -130,6 +134,11 @@ public long getDataChecksum() {
return checksums.getDataChecksum();
}

@Nullable
public StorageType getStorageType() {
return storageType;
}

@Override
public int hashCode() {
return new HashCodeBuilder(61, 71)
Expand Down Expand Up @@ -185,6 +194,7 @@ public ContainerReplicaBuilder toBuilder() {
.setReplicaIndex(replicaIndex)
.setSequenceId(sequenceId)
.setEmpty(isEmpty)
.setStorageType(storageType)
.setChecksums(checksums);
}

Expand All @@ -200,6 +210,7 @@ public String toString() {
+ ", bytesUsed=" + bytesUsed
+ ", " + (isEmpty ? "empty" : "non-empty")
+ ", checksums=" + checksums
+ ", storageType=" + storageType
+ '}';
}

Expand All @@ -218,6 +229,7 @@ public static class ContainerReplicaBuilder {
private int replicaIndex;
private boolean isEmpty;
private ContainerChecksums checksums;
private StorageType storageType;

/**
* Set Container Id.
Expand Down Expand Up @@ -297,6 +309,11 @@ public ContainerReplicaBuilder setChecksums(ContainerChecksums checksums) {
return this;
}

public ContainerReplicaBuilder setStorageType(StorageType storageType) {
this.storageType = storageType;
return this;
}

/**
* Constructs new ContainerReplicaBuilder.
*
Expand Down
Loading