From 7f5afef34f3dfa05127819d5c34782bbc2f45c7f Mon Sep 17 00:00:00 2001 From: Aravindan Vijayan Date: Tue, 7 May 2019 13:37:59 -0700 Subject: [PATCH 1/2] HDDS-1451 : SCMBlockManager findPipeline and createPipeline are not lock protected. --- .../hdds/scm/block/BlockManagerImpl.java | 18 ++++++++++++++---- 1 file changed, 14 insertions(+), 4 deletions(-) diff --git a/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/block/BlockManagerImpl.java b/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/block/BlockManagerImpl.java index 31d82f633b6ee..2bc297af81589 100644 --- a/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/block/BlockManagerImpl.java +++ b/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/block/BlockManagerImpl.java @@ -182,18 +182,28 @@ public AllocatedBlock allocateBlock(final long size, ReplicationType type, pipelineManager .getPipelines(type, factor, Pipeline.PipelineState.OPEN, excludeList.getDatanodes(), excludeList.getPipelineIds()); - Pipeline pipeline; + Pipeline pipeline = null; if (availablePipelines.size() == 0) { try { // TODO: #CLUTIL Remove creation logic when all replication types and // factors are handled by pipeline creator pipeline = pipelineManager.createPipeline(type, factor); } catch (IOException e) { - LOG.error("Pipeline creation failed for type:{} factor:{}", + LOG.warn("Pipeline creation failed for type:{} factor:{}", type, factor, e); - break; + LOG.info("Checking one more time for suitable pipelines"); + availablePipelines = pipelineManager + .getPipelines(type, factor, Pipeline.PipelineState.OPEN, + excludeList.getDatanodes(), excludeList.getPipelineIds()); + if (availablePipelines.size() == 0) { + LOG.info("Could not find available pipeline even after trying " + + "once more"); + break; + } } - } else { + } + + if (null == pipeline) { // TODO: #CLUTIL Make the selection policy driven. pipeline = availablePipelines .get((int) (Math.random() * availablePipelines.size())); From f1b8a32ab4a5983811bb631de6057c3181f783a3 Mon Sep 17 00:00:00 2001 From: Aravindan Vijayan Date: Thu, 16 May 2019 19:12:26 -0700 Subject: [PATCH 2/2] HDDS-1451 : Address review comments. --- .../apache/hadoop/hdds/scm/block/BlockManagerImpl.java | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/block/BlockManagerImpl.java b/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/block/BlockManagerImpl.java index 2bc297af81589..1ffd01d30c559 100644 --- a/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/block/BlockManagerImpl.java +++ b/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/block/BlockManagerImpl.java @@ -189,15 +189,14 @@ public AllocatedBlock allocateBlock(final long size, ReplicationType type, // factors are handled by pipeline creator pipeline = pipelineManager.createPipeline(type, factor); } catch (IOException e) { - LOG.warn("Pipeline creation failed for type:{} factor:{}", - type, factor, e); - LOG.info("Checking one more time for suitable pipelines"); + LOG.warn("Pipeline creation failed for type:{} factor:{}. Retrying " + + "get pipelines call once.", type, factor, e); availablePipelines = pipelineManager .getPipelines(type, factor, Pipeline.PipelineState.OPEN, excludeList.getDatanodes(), excludeList.getPipelineIds()); if (availablePipelines.size() == 0) { - LOG.info("Could not find available pipeline even after trying " + - "once more"); + LOG.info("Could not find available pipeline of type:{} and " + + "factor:{} even after retrying", type, factor); break; } }