From 449b3e475771ed9bab135d2c89c95408e9dcf417 Mon Sep 17 00:00:00 2001 From: guohao1 Date: Sun, 25 Jun 2023 11:50:26 +0800 Subject: [PATCH] HDDS-8922. The XceiverClient cache is often expired when using ec reads --- .../apache/hadoop/ozone/client/io/ECBlockInputStream.java | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/hadoop-hdds/client/src/main/java/org/apache/hadoop/ozone/client/io/ECBlockInputStream.java b/hadoop-hdds/client/src/main/java/org/apache/hadoop/ozone/client/io/ECBlockInputStream.java index 8ad8f8851e81..ea4f3d743f92 100644 --- a/hadoop-hdds/client/src/main/java/org/apache/hadoop/ozone/client/io/ECBlockInputStream.java +++ b/hadoop-hdds/client/src/main/java/org/apache/hadoop/ozone/client/io/ECBlockInputStream.java @@ -181,12 +181,13 @@ protected BlockExtendedInputStream getOrOpenStream(int locationIndex) { // single location for the block index we want to read. The EC blocks are // indexed from 1 to N, however the data locations are stored in the // dataLocations array indexed from zero. + DatanodeDetails dataLocation = dataLocations[locationIndex]; Pipeline pipeline = Pipeline.newBuilder() .setReplicationConfig(StandaloneReplicationConfig.getInstance( HddsProtos.ReplicationFactor.ONE)) - .setNodes(Arrays.asList(dataLocations[locationIndex])) - .setId(PipelineID.randomId()).setReplicaIndexes( - ImmutableMap.of(dataLocations[locationIndex], locationIndex + 1)) + .setNodes(Arrays.asList(dataLocation)) + .setId(PipelineID.valueOf(dataLocation.getUuid())).setReplicaIndexes( + ImmutableMap.of(dataLocation, locationIndex + 1)) .setState(Pipeline.PipelineState.CLOSED) .build();