This is an automated email from the ASF dual-hosted git repository.

sodonnell pushed a commit to branch HDDS-3816-ec
in repository https://gitbox.apache.org/repos/asf/ozone.git

commit a0f6881a281b12752d87b9444e1b99d4af30478a
Merge: cd781b9 59d6e95
Author: S O'Donnell <[email protected]>
AuthorDate: Wed Jul 28 21:41:07 2021 +0100

    Merge branch 'master' into ec-merge-master

 .github/workflows/post-commit.yml                  |    2 +-
 .../apache/hadoop/hdds/scm/XceiverClientGrpc.java  |   18 +-
 .../hadoop/hdds/scm/storage/BlockOutputStream.java |   76 +-
 .../hdds/scm/storage/RatisBlockOutputStream.java   |  126 +++
 .../storage/TestBlockOutputStreamCorrectness.java  |    2 +-
 hadoop-hdds/common/pom.xml                         |   17 +
 .../java/org/apache/hadoop/hdds/HddsUtils.java     |    9 +
 .../hadoop/hdds/fs/AbstractSpaceUsageSource.java   |    7 +-
 .../hadoop/hdds/fs/DedicatedDiskSpaceUsage.java    |    8 +-
 .../hadoop/hdds/protocol/DatanodeDetails.java      |    9 +
 .../apache/hadoop/hdds/scm/PlacementPolicy.java    |    7 +-
 .../java/org/apache/hadoop/hdds/scm/ScmConfig.java |   17 +
 .../org/apache/hadoop/hdds/scm/ScmConfigKeys.java  |   79 +-
 .../apache/hadoop/hdds/scm/client/ScmClient.java   |    7 +
 .../hadoop/hdds/scm/container/ContainerInfo.java   |    5 +
 .../hadoop/hdds/scm/ha/SCMHAConfiguration.java     |    4 +-
 .../apache/hadoop/hdds/scm/pipeline/Pipeline.java  |    4 +-
 .../protocol/StorageContainerLocationProtocol.java |    8 +
 .../hadoop/hdds/upgrade/HDDSLayoutFeature.java     |   76 ++
 .../hdds/upgrade/HDDSLayoutVersionManager.java     |   97 ++
 .../hadoop/hdds/upgrade/HDDSUpgradeAction.java     |   15 +-
 .../apache/hadoop/hdds/upgrade}/package-info.java  |    5 +-
 .../apache/hadoop/hdds/utils/HddsVersionInfo.java  |    4 +-
 .../org/apache/hadoop/hdds/utils/VersionInfo.java  |   16 +-
 .../org/apache/hadoop/ozone/OzoneConfigKeys.java   |    1 +
 .../java/org/apache/hadoop/ozone/OzoneConsts.java  |   10 +-
 .../apache/hadoop/ozone/common/MonotonicClock.java |   81 ++
 .../org/apache/hadoop/ozone/common/Storage.java    |   41 +-
 .../apache/hadoop/ozone/common/StorageInfo.java    |   33 +-
 .../hadoop/ozone/conf/OzoneServiceConfig.java      |   76 ++
 .../apache/hadoop/ozone/conf}/package-info.java    |   12 +-
 .../upgrade/AbstractLayoutVersionManager.java      |  162 +++
 .../ozone/upgrade/BasicUpgradeFinalizer.java       |  367 +++++++
 .../DefaultUpgradeFinalizationExecutor.java        |   66 ++
 .../apache/hadoop/ozone/upgrade/LayoutFeature.java |   79 ++
 .../upgrade/LayoutVersionInstanceFactory.java      |  253 +++++
 .../hadoop/ozone/upgrade/LayoutVersionManager.java |   76 ++
 .../ozone/upgrade/LayoutVersionManagerMXBean.java  |   18 +-
 .../hadoop/ozone/upgrade/UpgradeActionHdds.java    |   39 +-
 .../hadoop/ozone/upgrade/UpgradeException.java     |  159 +--
 .../hadoop/ozone/upgrade/UpgradeFinalizer.java     |  195 ++++
 .../hadoop/ozone/upgrade/VersionFactoryKey.java    |   70 ++
 .../apache/hadoop/ozone/upgrade}/package-info.java |   12 +-
 .../hadoop/ozone/util/ShutdownHookManager.java     |  396 ++++++++
 .../apache/hadoop/ozone/util}/package-info.java    |   12 +-
 .../main/resources/hdds-version-info.properties    |    4 +-
 .../common/src/main/resources/ozone-default.xml    |  139 +--
 .../hdds/upgrade/TestHDDSLayoutVersionManager.java |  102 ++
 .../hadoop/hdds/upgrade/test/MockComponent.java    |   67 ++
 .../ozone/container/ContainerTestHelper.java       |   75 ++
 .../InjectedUpgradeFinalizationExecutor.java       |  128 +++
 .../upgrade/TestAbstractLayoutVersionManager.java  |  203 ++++
 .../ozone/upgrade/TestBasicUpgradeFinalizer.java   |  126 +++
 .../TestDefaultUpgradeFinalizationExecutor.java    |   99 ++
 .../upgrade/TestLayoutVersionInstanceFactory.java  |  198 ++++
 .../ozone/upgrade/TestUpgradeFinalizerActions.java |  210 ++++
 .../hadoop/ozone/upgrade/TestUpgradeUtils.java     |   54 +
 .../hadoop/hdds/conf/ConfigFileGenerator.java      |   17 +-
 .../org/apache/hadoop/hdds/conf/ConfigTag.java     |    3 +-
 .../org/apache/hadoop/hdds/conf/StorageUnit.java   |    8 +-
 .../hadoop/hdds/freon/FakeRatisFollower.java       |    7 +-
 .../apache/hadoop/ozone/HddsDatanodeService.java   |   21 +-
 .../container/common/DatanodeLayoutStorage.java    |   98 ++
 ...utVersion.java => HDDSVolumeLayoutVersion.java} |   16 +-
 .../container/common/helpers/ContainerUtils.java   |    5 +-
 .../ozone/container/common/impl/ContainerData.java |    2 +
 .../container/common/report/ReportManager.java     |    3 +-
 .../common/statemachine/DatanodeConfiguration.java |    4 +-
 .../common/statemachine/DatanodeStateMachine.java  |   53 +-
 .../common/statemachine/StateContext.java          |    3 +-
 .../commandhandler/DeleteBlocksCommandHandler.java |    2 +-
 .../FinalizeNewLayoutVersionCommandHandler.java    |  121 +++
 .../states/endpoint/HeartbeatEndpointTask.java     |   65 +-
 .../states/endpoint/RegisterEndpointTask.java      |   60 +-
 .../common/transport/server/XceiverServerGrpc.java |    3 +-
 .../server/ratis/ContainerStateMachine.java        |    4 +-
 .../transport/server/ratis/XceiverServerRatis.java |    2 +-
 .../container/common/utils/HddsVolumeUtil.java     |    6 +-
 .../common/utils/db/DatanodeDBProfile.java         |  145 +++
 .../container/common/utils/db}/package-info.java   |   10 +-
 .../ozone/container/common/volume/HddsVolume.java  |    7 +-
 .../common/volume/ImmutableVolumeSet.java          |   16 +
 .../container/common/volume/MutableVolumeSet.java  |   25 +-
 .../common/volume/StorageVolumeChecker.java        |   54 +-
 .../ozone/container/common/volume/VolumeSet.java   |    3 +
 .../container/keyvalue/KeyValueContainer.java      |    4 +-
 .../container/metadata/AbstractDatanodeStore.java  |   47 +-
 .../ozone/container/ozoneimpl/ContainerReader.java |   11 +-
 .../replication/GrpcReplicationClient.java         |    3 +-
 .../container/replication/ReplicationServer.java   |    1 +
 .../replication/ReplicationSupervisor.java         |   33 +-
 .../ozone/container/stream/StreamingClient.java    |    1 +
 .../ozone/container/stream/StreamingServer.java    |    1 +
 .../upgrade/DataNodeUpgradeFinalizer.java          |   95 ++
 .../upgrade/DatanodeMetadataFeatures.java          |   53 +
 .../upgrade/DatanodeSchemaV2FinalizeAction.java    |   48 +
 .../ScmHAFirstUpgradeLayoutChangeAction.java       |   45 +
 .../UpgradeUtils.java}                             |   45 +-
 .../ozone/container/upgrade}/package-info.java     |   13 +-
 .../protocol/StorageContainerDatanodeProtocol.java |    6 +-
 .../protocol/StorageContainerNodeProtocol.java     |   12 +-
 .../commands/FinalizeNewLayoutVersionCommand.java  |   80 ++
 ...inerDatanodeProtocolClientSideTranslatorPB.java |   11 +-
 ...inerDatanodeProtocolServerSideTranslatorPB.java |   16 +-
 .../hadoop/ozone/container/common/ScmTestMock.java |   11 +-
 .../common/TestDatanodeLayOutVersion.java          |   10 +-
 .../common/helpers/TestContainerUtils.java         |   60 ++
 .../common/helpers/TestDatanodeVersionFile.java    |    4 +-
 .../states/endpoint/TestHeartbeatEndpointTask.java |   12 +-
 .../common/volume/TestPeriodicVolumeChecker.java   |  131 +++
 .../container/keyvalue/TestKeyValueContainer.java  |   77 +-
 .../TestKeyValueHandlerWithUnhealthyContainer.java |   78 +-
 .../replication/TestReplicationSupervisor.java     |    4 +-
 .../upgrade/TestDataNodeStartupSlvLessThanMlv.java |   96 ++
 .../docs/content/design/nonrolling-upgrade.md      |   32 +
 hadoop-hdds/docs/content/design/omprepare.md       |   60 ++
 .../docs/content/design/upgrade-dev-primer.md      |  111 ++
 .../feature/how-to-do-a-nonrolling-upgrade.md      |   54 +
 hadoop-hdds/docs/content/interface/O3fs.md         |    8 +
 hadoop-hdds/docs/content/interface/O3fs.zh.md      |    8 +
 .../java/org/apache/hadoop/hdds/NodeDetails.java   |   44 +-
 ...inerLocationProtocolClientSideTranslatorPB.java |   54 +-
 .../SCMBlockLocationFailoverProxyProvider.java     |    8 +-
 .../SCMSecurityProtocolFailoverProxyProvider.java  |    8 +-
 .../scm/update/client/CRLClientUpdateHandler.java  |    7 +-
 .../update/client/SCMUpdateServiceGrpcClient.java  |    3 +-
 .../authority/PKIProfiles/DefaultProfile.java      |    2 +-
 .../hadoop/hdds/server/events/EventExecutor.java   |    5 +
 .../hadoop/hdds/server/events/EventQueue.java      |   44 +-
 ...dExecutor.java => FixedThreadPoolExecutor.java} |   42 +-
 .../hdds/server/events/SingleThreadExecutor.java   |    9 +
 .../hadoop/hdds/server/http/HttpServer2.java       |    1 +
 .../hadoop/hdds/server/http/ProfileServlet.java    |    2 +-
 .../hadoop/hdds/utils/MetadataKeyFilters.java      |    2 +-
 .../org/apache/hadoop/hdds/utils/db/DBProfile.java |   35 +-
 .../org/apache/hadoop/hdds/utils/db/RDBStore.java  |   14 +
 .../apache/hadoop/hdds/utils/db/ShortCodec.java}   |   50 +-
 .../hadoop/hdds/server/events/TestEventQueue.java  |   62 +-
 hadoop-hdds/hadoop-dependency-test/pom.xml         |    9 +
 hadoop-hdds/interface-admin/pom.xml                |    2 +-
 .../src/main/proto/ScmAdminProtocol.proto          |   23 +-
 .../dev-support/findbugsExcludeFile.xml            |    3 +
 hadoop-hdds/interface-client/pom.xml               |   40 +-
 .../interface-client/src/main/proto/hdds.proto     |   24 +-
 hadoop-hdds/interface-server/pom.xml               |    4 +-
 .../src/main/proto/SCMRatisProtocol.proto          |    2 +-
 .../proto/ScmServerDatanodeHeartbeatProtocol.proto |   24 +
 .../src/main/proto/ScmServerProtocol.proto         |    2 +-
 .../src/main/proto/ScmServerSecurityProtocol.proto |    1 +
 hadoop-hdds/server-scm/pom.xml                     |   24 +-
 .../hadoop/hdds/scm/SCMCommonPlacementPolicy.java  |   73 +-
 .../block/DatanodeDeletedBlockTransactions.java    |    6 -
 .../hdds/scm/block/DeletedBlockLogImplV2.java      |    1 +
 .../scm/block/DeletedBlockLogStateManagerImpl.java |   26 +-
 .../hdds/scm/block/PendingDeleteStatusList.java    |   85 --
 .../hdds/scm/block/SCMBlockDeletingService.java    |   26 +-
 .../hdds/scm/container/ContainerReportHandler.java |   38 -
 .../scm/container/ContainerStateManagerImpl.java   |    2 +-
 .../hdds/scm/container/ReplicationManager.java     |  562 +++++++++--
 .../scm/container/balancer/ContainerBalancer.java  |    4 +-
 .../algorithms/SCMContainerPlacementCapacity.java  |   10 +-
 .../algorithms/SCMContainerPlacementRackAware.java |  102 +-
 .../algorithms/SCMContainerPlacementRandom.java    |   10 +-
 .../apache/hadoop/hdds/scm/events/SCMEvents.java   |   23 +-
 .../apache/hadoop/hdds/scm/ha/HASecurityUtils.java |    1 +
 .../hadoop/hdds/scm/ha/InterSCMGrpcClient.java     |    3 +-
 .../hdds/scm/ha/InterSCMGrpcProtocolService.java   |    3 +-
 .../org/apache/hadoop/hdds/scm/ha/SCMContext.java  |    5 +-
 .../hadoop/hdds/scm/ha/SCMRatisServerImpl.java     |    8 +-
 .../hadoop/hdds/scm/ha/SCMSnapshotProvider.java    |    1 +
 .../apache/hadoop/hdds/scm/node/DatanodeInfo.java  |   43 +-
 ...andler.java => HealthyReadOnlyNodeHandler.java} |   41 +-
 .../apache/hadoop/hdds/scm/node/NodeManager.java   |   39 +
 .../hadoop/hdds/scm/node/NodeStateManager.java     |  216 +++-
 .../apache/hadoop/hdds/scm/node/NodeStatus.java    |   14 +-
 ...va => ReadOnlyHealthyToHealthyNodeHandler.java} |   15 +-
 .../hadoop/hdds/scm/node/SCMNodeManager.java       |  170 +++-
 .../hadoop/hdds/scm/node/SCMNodeMetrics.java       |    3 +-
 .../hadoop/hdds/scm/node/states/NodeStateMap.java  |   10 +-
 .../scm/pipeline/BackgroundPipelineCreator.java    |   15 +
 .../hadoop/hdds/scm/pipeline/PipelineManager.java  |   12 +-
 .../hdds/scm/pipeline/PipelineManagerV2Impl.java   |   25 +
 .../hdds/scm/pipeline/PipelinePlacementPolicy.java |   49 +-
 .../hadoop/hdds/scm/pipeline/PipelineProvider.java |   31 +-
 .../scm/pipeline/PipelineStateManagerV2Impl.java   |    6 +-
 .../hadoop/hdds/scm/pipeline/PipelineStateMap.java |    4 +-
 .../hdds/scm/pipeline/RatisPipelineProvider.java   |   17 +-
 .../hdds/scm/pipeline/SCMPipelineManager.java      |   29 +-
 .../hdds/scm/pipeline/SimplePipelineProvider.java  |    2 +-
 ...inerLocationProtocolServerSideTranslatorPB.java |   63 ++
 .../hdds/scm/server/SCMClientProtocolServer.java   |   38 +-
 .../scm/server/SCMDatanodeHeartbeatDispatcher.java |   31 +-
 .../hdds/scm/server/SCMDatanodeProtocolServer.java |   24 +-
 .../hdds/scm/server/SCMSecurityProtocolServer.java |    1 +
 .../hadoop/hdds/scm/server/SCMStorageConfig.java   |    9 +-
 .../hdds/scm/server/StorageContainerManager.java   |  190 ++--
 .../scm/server/StorageContainerManagerStarter.java |   12 +-
 .../scm/server/upgrade/SCMUpgradeFinalizer.java    |  163 +++
 .../ScmHAUnfinalizedStateValidationAction.java     |   72 ++
 .../ScmOnFinalizeActionForDatanodeSchemaV2.java    |   46 +
 .../hdds/scm/server/upgrade}/package-info.java     |    5 +-
 .../update/server/SCMUpdateServiceGrpcServer.java  |    3 +-
 .../java/org/apache/hadoop/hdds/scm/TestUtils.java |   19 +
 .../hadoop/hdds/scm/block/TestDeletedBlockLog.java |   96 +-
 .../hadoop/hdds/scm/container/MockNodeManager.java |   26 +-
 .../hdds/scm/container/SimpleMockNodeManager.java  |   40 +-
 .../scm/container/TestContainerReportHandler.java  |    4 +-
 .../TestIncrementalContainerReportHandler.java     |   14 +-
 .../hdds/scm/container/TestReplicationManager.java |  455 +++++++--
 .../algorithms/TestContainerPlacementFactory.java  |   41 +-
 .../TestSCMContainerPlacementCapacity.java         |    6 +-
 .../TestSCMContainerPlacementRackAware.java        |  112 +-
 .../TestSCMContainerPlacementRandom.java           |    6 +-
 .../hdds/scm/node/TestContainerPlacement.java      |   23 +-
 .../hdds/scm/node/TestNodeDecommissionManager.java |    2 +-
 .../hdds/scm/node/TestNodeReportHandler.java       |   16 +-
 .../hadoop/hdds/scm/node/TestNodeStateManager.java |   57 +-
 .../hadoop/hdds/scm/node/TestSCMNodeManager.java   |  532 +++++++++-
 .../hadoop/hdds/scm/node/TestStatisticsUpdate.java |   17 +-
 .../hdds/scm/node/states/TestNodeStateMap.java     |   26 +-
 .../hdds/scm/pipeline/MockPipelineManager.java     |   10 +
 .../scm/pipeline/TestPipelinePlacementPolicy.java  |   71 +-
 .../scm/pipeline/TestRatisPipelineProvider.java    |   44 +-
 .../hdds/scm/pipeline/TestSCMPipelineManager.java  |  157 ++-
 .../hdds/scm/update/server/MockCRLStore.java       |    6 +-
 .../TestSCMHAUnfinalizedStateValidationAction.java |  128 +++
 .../scm/upgrade/TestScmStartupSlvLessThanMlv.java  |   75 ++
 .../hadoop/hdds/scm/upgrade/package-info.java      |   21 +
 .../ozone/container/common/TestEndPoint.java       |   20 +-
 .../placement/TestContainerPlacement.java          |    5 +-
 .../testutils/ReplicationNodeManagerMock.java      |   23 +-
 .../hadoop/ozone/scm/node/TestSCMNodeMetrics.java  |   63 +-
 .../main/java/org/apache/ozone/test/TestClock.java |   76 ++
 hadoop-hdds/tools/pom.xml                          |   12 +-
 .../hdds/scm/cli/ContainerOperationClient.java     |   16 +-
 .../hdds/scm/cli/SafeModeWaitSubcommand.java       |    3 +-
 .../hdds/scm/cli/datanode/ListInfoSubcommand.java  |   22 +
 .../scm/cli/datanode/TestListInfoSubcommand.java   |   17 +-
 .../apache/hadoop/ozone/client/OzoneBucket.java    |   16 +
 .../org/apache/hadoop/ozone/client/OzoneKey.java   |    4 +
 .../ozone/client/io/BlockOutputStreamEntry.java    |    7 +
 .../ozone/client/protocol/ClientProtocol.java      |   16 +
 .../apache/hadoop/ozone/client/rpc/RpcClient.java  |   21 +
 hadoop-ozone/common/pom.xml                        |    4 +
 .../main/java/org/apache/hadoop/ozone/OmUtils.java |   31 +
 .../org/apache/hadoop/ozone/om/OMConfigKeys.java   |    7 +
 .../apache/hadoop/ozone/om/OmUpgradeConfig.java    |   82 ++
 .../hadoop/ozone/om/exceptions/OMException.java    |   10 +-
 .../ozone/om/ha/OMFailoverProxyProvider.java       |   67 +-
 .../hadoop/ozone/om/helpers}/OMNodeDetails.java    |   86 +-
 .../apache/hadoop/ozone/om/helpers/OmKeyArgs.java  |   16 +-
 .../ozone/om/helpers/OmKeyLocationInfoGroup.java   |   11 +
 .../hadoop/ozone/om/helpers/WithObjectID.java      |    6 +-
 .../ozone/om/protocol/OMInterServiceProtocol.java  |   32 +-
 .../ozone/om/protocol/OzoneManagerProtocol.java    |  105 ++
 .../ozone/om/protocolPB/Hadoop3OmTransport.java    |    2 +-
 .../OMInterServiceProtocolClientSideImpl.java      |  121 +++
 .../om/protocolPB/OMInterServiceProtocolPB.java    |   52 +-
 ...OzoneManagerProtocolClientSideTranslatorPB.java |  111 +-
 .../apache/hadoop/ozone/util/OzoneVersionInfo.java |    4 +-
 .../main/resources/ozone-version-info.properties   |    4 +-
 .../java/org/apache/hadoop/ozone/TestOmUtils.java  |   31 +
 .../ozone/om/ha/TestOMFailoverProxyProvider.java   |    7 +-
 .../om/helpers/TestOmKeyLocationInfoGroup.java     |    3 +-
 hadoop-ozone/csi/pom.xml                           |    6 +-
 hadoop-ozone/dev-support/checks/_lib.sh            |    9 +-
 hadoop-ozone/dev-support/intellij/ozone-site.xml   |    2 +-
 hadoop-ozone/dist/pom.xml                          |    2 +-
 .../1.0.0/test.sh => ozone-mr/hadoop33/.env}       |   13 +-
 .../compose/ozone-mr/hadoop33/docker-compose.yaml  |  110 ++
 .../test.sh => ozone-mr/hadoop33/docker-config}    |   12 +-
 .../compose/{upgrade => ozone-mr/hadoop33}/test.sh |   31 +-
 .../compose/{upgrade => ozone-om-prepare}/.env     |   10 +-
 .../docker-compose.yaml                            |   75 +-
 .../{upgrade => ozone-om-prepare}/docker-config    |   28 +-
 .../dist/src/main/compose/ozone-om-prepare/test.sh |   74 ++
 .../src/main/compose/ozone/docker-compose.yaml     |    2 +-
 .../dist/src/main/compose/ozonesecure-mr/.env      |    2 +-
 .../src/main/compose/ozonesecure/docker-config     |    2 +-
 hadoop-ozone/dist/src/main/compose/testlib.sh      |   22 +-
 .../dist/src/main/compose/upgrade/README.md        |   95 +-
 .../src/main/compose/upgrade/{ => compose/ha}/.env |    7 +-
 .../upgrade/{ => compose/ha}/docker-compose.yaml   |  120 ++-
 .../compose/upgrade/{ => compose/ha}/docker-config |   30 +-
 .../upgrade/{0.5.0/test.sh => compose/ha/load.sh}  |   14 +-
 .../main/compose/upgrade/{ => compose/non-ha}/.env |    2 +-
 .../{ => compose/non-ha}/docker-compose.yaml       |   99 +-
 .../upgrade/{ => compose/non-ha}/docker-config     |   13 +-
 .../{0.5.0/test.sh => compose/non-ha/load.sh}      |   13 +-
 hadoop-ozone/dist/src/main/compose/upgrade/test.sh |   30 +-
 .../dist/src/main/compose/upgrade/testlib.sh       |  135 ++-
 .../src/main/compose/upgrade/upgrade_to_current.sh |   51 -
 .../manual-upgrade/0.5.0-1.1.0/callback.sh}        |   26 +-
 .../manual-upgrade/driver.sh}                      |   63 +-
 .../non-rolling-upgrade/1.0.0-1.1.0/callback.sh    |   79 ++
 .../upgrade/upgrades/non-rolling-upgrade/driver.sh |  101 ++
 .../dist/src/main/compose/versions/0.5.0.sh        |    4 -
 .../dist/src/main/compose/versions/1.0.0.sh        |    4 -
 .../dist/src/main/compose/versions/1.1.0.sh        |    4 -
 .../dist/src/main/compose/versions/README.md       |    3 -
 hadoop-ozone/dist/src/main/k8s/examples/testlib.sh |   11 +-
 hadoop-ozone/dist/src/main/license/bin/LICENSE.txt |    8 +
 .../license/bin/licenses/LICENSE-org.aspectj.html  |   91 ++
 .../LICENSE-org.reflections-reflections.txt        |   14 +
 hadoop-ozone/dist/src/main/license/jar-report.txt  |   69 +-
 .../src/main/smoketest/admincli/datanode.robot     |   18 +
 .../main/smoketest/omha/om-cancel-prepare.robot    |   43 +
 .../dist/src/main/smoketest/omha/om-prepare.robot  |   49 +
 .../bucketcreate.robot => omha/om-prepared.robot}  |   29 +-
 .../src/main/smoketest/ozonefs/hadoopo3fs.robot    |    2 +-
 .../dist/src/main/smoketest/s3/bucketcreate.robot  |    3 +-
 .../dist/src/main/smoketest/spnego/web.robot       |    2 +-
 .../bucketcreate.robot => upgrade/check-mlv.robot} |   30 +-
 .../bucketcreate.robot => upgrade/finalize.robot}  |   30 +-
 .../bucketcreate.robot => upgrade/generate.robot}  |   26 +-
 .../bucketcreate.robot => upgrade/prepare.robot}   |   25 +-
 .../bucketcreate.robot => upgrade/validate.robot}  |   23 +-
 .../dist/src/shell/ozone/ozone-functions.sh        |    2 +-
 .../dist/src/shell/upgrade/{v1.sh => 1.0.0.sh}     |    2 +-
 .../upgrade/{v1 => 1.0.0}/01-migrate-scm-db.sh     |    0
 .../apache/hadoop/ozone/MiniOzoneChaosCluster.java |    9 +-
 .../apache/hadoop/ozone/insight/LogSubcommand.java |    9 +-
 hadoop-ozone/integration-test/pom.xml              |    3 +-
 .../hadoop/hdds/upgrade/TestHDDSUpgrade.java       | 1067 ++++++++++++++++++++
 .../org/apache/hadoop/ozone/MiniOzoneCluster.java  |   25 +
 .../apache/hadoop/ozone/MiniOzoneClusterImpl.java  |   52 +-
 .../hadoop/ozone/MiniOzoneHAClusterImpl.java       |  263 ++++-
 .../hadoop/ozone/MiniOzoneOMHAClusterImpl.java     |    7 +-
 .../org/apache/hadoop/ozone/OzoneTestUtils.java    |   17 +
 .../hadoop/ozone/TestOzoneConfigurationFields.java |    2 +
 .../hadoop/ozone/TestStorageContainerManager.java  |   37 +-
 .../ozone/client/rpc/TestBlockOutputStream.java    |   13 +-
 .../rpc/TestBlockOutputStreamFlushDelay.java       |   13 +-
 .../rpc/TestBlockOutputStreamWithFailures.java     |   17 +-
 ...estBlockOutputStreamWithFailuresFlushDelay.java |   17 +-
 .../rpc/TestOzoneClientMultipartUploadWithFSO.java |   13 +-
 .../client/rpc/TestOzoneRpcClientAbstract.java     |   68 +-
 .../ozone/client/rpc/TestWatchForCommit.java       |    3 +-
 .../ozone/container/TestContainerReplication.java  |   81 +-
 .../apache/hadoop/ozone/container/TestHelper.java  |    6 +-
 .../commandhandler/TestBlockDeletion.java          |  313 +++---
 .../hadoop/ozone/om/TestOMUpgradeFinalization.java |  254 +++++
 .../org/apache/hadoop/ozone/om/TestOmAcls.java     |    1 -
 .../ozone/om/TestOmStartupSlvLessThanMlv.java      |   80 ++
 .../hadoop/ozone/om/TestOzoneManagerBootstrap.java |  216 ++++
 .../ozone/om/TestOzoneManagerConfiguration.java    |    2 +-
 .../apache/hadoop/ozone/om/TestOzoneManagerHA.java |    3 +
 .../hadoop/ozone/om/TestOzoneManagerPrepare.java   |  510 ++++++++++
 .../hadoop/ozone/recon/TestReconAsPassiveScm.java  |    1 +
 .../ozone/recon/TestReconWithOzoneManagerHA.java   |    8 +-
 .../TestSCMContainerPlacementPolicyMetrics.java    |    2 +-
 .../hadoop/ozone/shell/TestOzoneShellHA.java       |    1 -
 .../dev-support/findbugsExcludeFile.xml            |    6 +
 hadoop-ozone/interface-client/pom.xml              |   62 +-
 .../src/main/proto/OmClientProtocol.proto          |   83 ++
 .../src/main/proto/OmInterServiceProtocol.proto    |   64 ++
 .../interface-client/src/main/proto/Security.proto |    1 +
 hadoop-ozone/interface-storage/pom.xml             |    2 +-
 .../apache/hadoop/ozone/om/OMMetadataManager.java  |    6 +
 .../dev-support/findbugsExcludeFile.xml            |    4 +
 hadoop-ozone/ozone-manager/pom.xml                 |   43 +-
 .../org/apache/hadoop/ozone/om/KeyManagerImpl.java |   47 +-
 .../java/org/apache/hadoop/ozone/om/OMMetrics.java |    1 -
 .../apache/hadoop/ozone/om/OMPolicyProvider.java   |    4 +
 .../apache/hadoop/ozone/om/OMStarterInterface.java |    4 +
 .../java/org/apache/hadoop/ozone/om/OMStorage.java |    7 +-
 .../hadoop/ozone/om/OmMetadataManagerImpl.java     |   30 +
 .../org/apache/hadoop/ozone/om/OzoneManager.java   |  621 +++++++++---
 .../hadoop/ozone/om/OzoneManagerPrepareState.java  |  311 ++++++
 .../hadoop/ozone/om/OzoneManagerStarter.java       |   79 +-
 .../apache/hadoop/ozone/om/TrashPolicyOzone.java   |   21 +-
 .../hadoop/ozone/om/codec/OMDBDefinition.java      |   10 +-
 .../apache/hadoop/ozone/om/ha/OMHANodeDetails.java |   11 +-
 .../ozone/om/ratis/OzoneManagerDoubleBuffer.java   |   15 +-
 .../ozone/om/ratis/OzoneManagerRatisServer.java    |  405 +++++---
 .../ozone/om/ratis/OzoneManagerStateMachine.java   |   87 +-
 .../om/ratis/utils/OzoneManagerRatisUtils.java     |   97 ++
 .../hadoop/ozone/om/request/OMClientRequest.java   |    7 +-
 .../om/request/bucket/OMBucketDeleteRequest.java   |    1 +
 .../request/bucket/OMBucketSetPropertyRequest.java |    1 +
 .../om/request/bucket/acl/OMBucketAclRequest.java  |    8 +-
 .../request/bucket/acl/OMBucketAddAclRequest.java  |   12 +-
 .../bucket/acl/OMBucketRemoveAclRequest.java       |    8 +-
 .../request/bucket/acl/OMBucketSetAclRequest.java  |    7 -
 .../om/request/file/OMDirectoryCreateRequest.java  |    1 +
 .../ozone/om/request/file/OMFileCreateRequest.java |    7 +-
 .../ozone/om/request/key/OMKeyCommitRequest.java   |    1 +
 .../ozone/om/request/key/OMKeyDeleteRequest.java   |    1 +
 .../ozone/om/request/key/OMKeyPurgeRequest.java    |    1 +
 .../ozone/om/request/key/OMKeyRenameRequest.java   |    1 +
 .../om/request/key/acl/OMKeyAddAclRequest.java     |    1 +
 .../om/request/key/acl/OMKeyRemoveAclRequest.java  |    1 +
 .../om/request/key/acl/OMKeySetAclRequest.java     |    1 +
 .../key/acl/prefix/OMPrefixAddAclRequest.java      |    1 +
 .../key/acl/prefix/OMPrefixRemoveAclRequest.java   |    1 +
 .../key/acl/prefix/OMPrefixSetAclRequest.java      |    1 +
 .../S3InitiateMultipartUploadRequest.java          |    1 +
 .../S3MultipartUploadCommitPartRequest.java        |   11 +-
 .../S3MultipartUploadCompleteRequest.java          |    1 +
 .../om/request/s3/security/S3GetSecretRequest.java |    1 +
 .../security/OMCancelDelegationTokenRequest.java   |    2 +-
 .../security/OMGetDelegationTokenRequest.java      |    2 +-
 .../security/OMRenewDelegationTokenRequest.java    |    1 +
 .../om/request/upgrade/OMCancelPrepareRequest.java |   97 ++
 .../request/upgrade/OMFinalizeUpgradeRequest.java  |  116 +++
 .../ozone/om/request/upgrade/OMPrepareRequest.java |  257 +++++
 .../security => request/upgrade}/package-info.java |   15 +-
 .../om/request/volume/OMVolumeDeleteRequest.java   |    2 +
 .../om/request/volume/OMVolumeSetOwnerRequest.java |    1 +
 .../om/request/volume/OMVolumeSetQuotaRequest.java |    1 +
 .../hadoop/ozone/om/response/CleanupTableInfo.java |   10 +-
 .../om/response/key/OMOpenKeysDeleteRequest.java   |    1 +
 .../om/response/s3/security/package-info.java      |    2 +-
 .../response/upgrade/OMCancelPrepareResponse.java  |   46 +
 .../upgrade/OMFinalizeUpgradeResponse.java         |   58 ++
 .../om/response/upgrade/OMPrepareResponse.java     |   60 ++
 .../{s3/security => upgrade}/package-info.java     |   15 +-
 .../om/snapshot/OzoneManagerSnapshotProvider.java  |   18 +-
 .../BelongsToLayoutVersion.java}                   |   23 +-
 .../DisallowedUntilLayoutVersion.java}             |   31 +-
 .../hadoop/ozone/om/upgrade/OMLayoutFeature.java   |   80 ++
 .../ozone/om/upgrade/OMLayoutFeatureAspect.java    |  114 +++
 .../ozone/om/upgrade/OMLayoutVersionManager.java   |  210 ++++
 .../ozone/om/upgrade/OMUpgradeFinalizer.java       |   50 +
 .../hadoop/ozone/om/upgrade/OmUpgradeAction.java   |   19 +-
 .../hadoop/ozone/om/upgrade/UpgradeActionOm.java   |   37 +
 .../s3/security => upgrade}/package-info.java      |    7 +-
 .../OMInterServiceProtocolServerSideImpl.java      |   90 ++
 ...OzoneManagerProtocolServerSideTranslatorPB.java |   87 +-
 .../protocolPB/OzoneManagerRequestHandler.java     |   70 +-
 .../hadoop/ozone/om/TestOmMetadataManager.java     |    9 +
 .../hadoop/ozone/om/TestOzoneManagerStarter.java   |   34 +
 .../hadoop/ozone/om/failover/TestOMFailovers.java  |    2 +-
 .../om/ratis/TestOzoneManagerRatisServer.java      |    8 +-
 .../om/ratis/TestOzoneManagerStateMachine.java     |  108 +-
 .../ozone/om/request/bucket/TestBucketRequest.java |    5 +
 .../ozone/om/request/key/TestOMKeyRequest.java     |   17 +
 .../TestS3MultipartUploadCompleteRequest.java      |   19 +-
 .../upgrade/TestOMCancelPrepareRequest.java        |  110 ++
 .../request/volume/TestOMVolumeDeleteRequest.java  |    2 +-
 .../om/request/volume/TestOMVolumeRequest.java     |    9 +-
 .../ozone/om/response/TestCleanupTableInfo.java    |   26 +-
 .../hadoop/ozone/om/upgrade/MockOmRequest.java     |   23 +-
 .../ozone/om/upgrade/OMLayoutFeatureUtil.java      |   66 ++
 .../om/upgrade/TestOMLayoutFeatureAspect.java      |   99 ++
 .../ozone/om/upgrade/TestOMUpgradeFinalizer.java   |  290 ++++++
 .../ozone/om/upgrade/TestOMVersionManager.java     |  195 ++++
 .../TestOmVersionManagerRequestFactory.java        |  111 ++
 .../om/upgrade/TestOzoneManagerPrepareState.java   |  283 ++++++
 .../hadoop/fs/ozone/BasicOzoneFileSystem.java      |    5 +-
 .../fs/ozone/BasicRootedOzoneFileSystem.java       |    5 +-
 .../hadoop/fs/ozone/Hadoop27RpcTransport.java      |    2 +-
 hadoop-ozone/recon/pom.xml                         |    5 +
 .../apache/hadoop/ozone/recon/ReconConstants.java  |    7 +
 .../hadoop/ozone/recon/ReconControllerModule.java  |   20 +-
 .../org/apache/hadoop/ozone/recon/ReconServer.java |   29 +-
 .../org/apache/hadoop/ozone/recon/ReconUtils.java  |   31 +
 .../ozone/recon/api/ClusterStateEndpoint.java      |    3 +-
 .../hadoop/ozone/recon/api/ContainerEndpoint.java  |   13 +-
 .../hadoop/ozone/recon/api/NodeEndpoint.java       |   15 +-
 .../ozone/recon/api/types/DatanodeMetadata.java    |   13 +
 .../hadoop/ozone/recon/api/types/NSSummary.java    |   86 ++
 .../hadoop/ozone/recon/codec/NSSummaryCodec.java   |  101 ++
 .../ozone/recon/scm/ReconContainerManager.java     |    8 +-
 .../hadoop/ozone/recon/scm/ReconNodeManager.java   |  139 ++-
 .../scm/ReconStorageContainerManagerFacade.java    |   16 +-
 ...der.java => ReconContainerMetadataManager.java} |    9 +-
 .../recon/spi/ReconNamespaceSummaryManager.java    |   22 +-
 ...java => ReconContainerMetadataManagerImpl.java} |   54 +-
 .../ozone/recon/spi/impl/ReconDBDefinition.java    |   13 +-
 ...ntainerDBProvider.java => ReconDBProvider.java} |   86 +-
 .../spi/impl/ReconNamespaceSummaryManagerImpl.java |   72 ++
 .../ozone/recon/tasks/ContainerKeyMapperTask.java  |   35 +-
 .../ozone/recon/tasks/FileSizeCountTask.java       |   25 +-
 .../hadoop/ozone/recon/tasks/NSSummaryTask.java    |  303 ++++++
 .../hadoop/ozone/recon/tasks/OMDBUpdateEvent.java  |    1 +
 .../src/views/datanodes/datanodes.tsx              |    8 +-
 .../ozone/recon/OMMetadataManagerTestUtils.java    |   77 ++
 .../hadoop/ozone/recon/ReconTestInjector.java      |   20 +-
 .../ozone/recon/api/TestContainerEndpoint.java     |   10 +-
 .../hadoop/ozone/recon/api/TestEndpoints.java      |   13 +-
 .../ozone/recon/api/TestOpenContainerCount.java    |    7 +-
 .../ozone/recon/fsck/TestContainerHealthTask.java  |    3 +-
 .../scm/AbstractReconContainerManagerTest.java     |   17 +-
 ...TestReconIncrementalContainerReportHandler.java |   14 +-
 .../ozone/recon/scm/TestReconNodeManager.java      |   57 +-
 .../ozone/recon/scm/TestReconPipelineManager.java  |   23 +-
 ... => TestReconContainerMetadataManagerImpl.java} |  144 +--
 ...nerDBProvider.java => TestReconDBProvider.java} |   13 +-
 .../impl/TestReconNamespaceSummaryManagerImpl.java |  104 ++
 .../recon/tasks/TestContainerKeyMapperTask.java    |   75 +-
 .../ozone/recon/tasks/TestNSSummaryTask.java       |  480 +++++++++
 hadoop-ozone/s3gateway/pom.xml                     |    5 +
 .../java/org/apache/hadoop/ozone/s3/Gateway.java   |   11 +
 .../hadoop/ozone/s3/OzoneClientProducer.java       |    4 +-
 .../hadoop/ozone/s3/endpoint/ObjectEndpoint.java   |    7 +-
 .../apache/hadoop/ozone/s3/util/ContinueToken.java |   15 +-
 .../hadoop/ozone/client/OzoneBucketStub.java       |   20 +
 .../hadoop/ozone/s3/util/TestContinueToken.java    |   20 +
 .../ozone/admin/om/CancelPrepareSubCommand.java    |   53 +
 .../admin/om/FinalizationStatusSubCommand.java     |   64 ++
 .../ozone/admin/om/FinalizeUpgradeSubCommand.java  |  171 ++++
 .../org/apache/hadoop/ozone/admin/om/OMAdmin.java  |   44 +-
 .../hadoop/ozone/admin/om/PrepareSubCommand.java   |  173 ++++
 .../admin/scm/FinalizationScmStatusSubcommand.java |   51 +
 .../admin/scm/FinalizeScmUpgradeSubcommand.java    |  156 +++
 .../admin/scm/FinalizeUpgradeCommandUtil.java      |   92 ++
 .../apache/hadoop/ozone/admin/scm/ScmAdmin.java    |    4 +-
 .../ozone/audit/parser/common/DatabaseHelper.java  |    4 +-
 .../apache/hadoop/ozone/debug/ChunkKeyHandler.java |    1 +
 .../hadoop/ozone/freon/BaseFreonGenerator.java     |   12 +-
 .../freon/FollowerAppendLogEntryGenerator.java     |    4 +-
 .../hadoop/ozone/freon/RandomKeyGenerator.java     |   19 +-
 .../hadoop/ozone/freon/StreamingGenerator.java     |   70 +-
 .../containergenerator/GeneratorDatanode.java      |   60 +-
 .../containergenerator/TestGeneratorDatanode.java  |   71 ++
 pom.xml                                            |   22 +-
 517 files changed, 21808 insertions(+), 3725 deletions(-)

diff --cc 
hadoop-hdds/client/src/main/java/org/apache/hadoop/hdds/scm/storage/BlockOutputStream.java
index 98bd157,0cfbb5a..c251c46
--- 
a/hadoop-hdds/client/src/main/java/org/apache/hadoop/hdds/scm/storage/BlockOutputStream.java
+++ 
b/hadoop-hdds/client/src/main/java/org/apache/hadoop/hdds/scm/storage/BlockOutputStream.java
@@@ -154,10 -148,8 +149,10 @@@ public class BlockOutputStream extends 
      this.bufferPool = bufferPool;
      this.token = token;
  
 +    replicationIndex = pipeline.getReplicaIndex(pipeline.getClosestNode());
 +
      //number of buffers used before doing a flush
-     refreshCurrentBuffer(bufferPool);
+     refreshCurrentBuffer();
      flushPeriod = (int) (config.getStreamBufferFlushSize() / config
          .getStreamBufferSize());
  
@@@ -219,27 -210,6 +213,30 @@@
      return ioException.get();
    }
  
++<<<<<<< HEAD
 +  XceiverClientSpi getXceiverClientSpi(){
 +    return this.xceiverClient;
 +  }
 +
 +  BlockData.Builder getContainerBlockData(){
 +    return this.containerBlockData;
 +  }
 +
 +  Token<? extends TokenIdentifier> getToken(){
 +    return this.token;
 +  }
 +
 +  ExecutorService getResponseExecutor(){
 +    return this.responseExecutor;
 +  }
 +
 +  @VisibleForTesting
 +  public Map<Long, List<ChunkBuffer>> getCommitIndex2flushedDataMap() {
 +    return commitWatcher.getCommitIndex2flushedDataMap();
 +  }
 +
++=======
++>>>>>>> master
    @Override
    public void write(int b) throws IOException {
      checkOpen();
@@@ -580,16 -557,10 +584,10 @@@
      }
    }
  
-   private void waitOnFlushFutures()
-       throws InterruptedException, ExecutionException {
-     CompletableFuture<Void> combinedFuture = CompletableFuture.allOf(
-         commitWatcher.getFutureMap().values().toArray(
-             new CompletableFuture[commitWatcher.getFutureMap().size()]));
-     // wait for all the transactions to complete
-     combinedFuture.get();
+   void waitOnFlushFutures() throws InterruptedException, ExecutionException {
    }
  
 -  private void validateResponse(
 +  void validateResponse(
        ContainerProtos.ContainerCommandResponseProto responseProto)
        throws IOException {
      try {
diff --cc 
hadoop-hdds/common/src/main/java/org/apache/hadoop/hdds/scm/pipeline/Pipeline.java
index 638180c,7b375f4..fbf034e
--- 
a/hadoop-hdds/common/src/main/java/org/apache/hadoop/hdds/scm/pipeline/Pipeline.java
+++ 
b/hadoop-hdds/common/src/main/java/org/apache/hadoop/hdds/scm/pipeline/Pipeline.java
@@@ -20,9 -20,9 +20,10 @@@ package org.apache.hadoop.hdds.scm.pipe
  
  import java.io.IOException;
  import java.time.Instant;
+ import java.time.ZoneId;
  import java.util.ArrayList;
  import java.util.Collections;
 +import java.util.HashMap;
  import java.util.Iterator;
  import java.util.LinkedHashMap;
  import java.util.List;
diff --cc 
hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/pipeline/PipelineManagerV2Impl.java
index adc75f4,a0f7e0f..ccddb11
--- 
a/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/pipeline/PipelineManagerV2Impl.java
+++ 
b/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/pipeline/PipelineManagerV2Impl.java
@@@ -160,10 -156,17 +165,18 @@@ public class PipelineManagerV2Impl impl
        throw new IOException("Pipeline creation is not allowed as safe mode " +
            "prechecks have not yet passed");
      }
+ 
+     if (freezePipelineCreation.get()) {
+       String message = "Cannot create new pipelines while pipeline creation " 
+
+           "is frozen.";
+       LOG.info(message);
+       throw new IOException(message);
+     }
+ 
      lock.lock();
      try {
 -      Pipeline pipeline = pipelineFactory.create(replicationConfig);
 +      Pipeline pipeline = pipelineFactory.create(replicationConfig,
 +          excludedNodes, favoredNodes);
        stateManager.addPipeline(pipeline.getProtobufMessage(
            ClientVersions.CURRENT_VERSION));
        recordMetricsForPipeline(pipeline);
diff --cc 
hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/pipeline/RatisPipelineProvider.java
index 8f4ed85,9cc3954..85ab1cc
--- 
a/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/pipeline/RatisPipelineProvider.java
+++ 
b/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/pipeline/RatisPipelineProvider.java
@@@ -144,11 -146,13 +155,13 @@@ public class RatisPipelineProvide
          replicationConfig.getReplicationFactor();
      switch (factor) {
      case ONE:
-       dns = pickNodesNeverUsed(replicationConfig);
+       dns = pickNodesNotUsed(replicationConfig, minRatisVolumeSizeBytes,
+           containerSizeBytes);
        break;
      case THREE:
 -      dns = placementPolicy.chooseDatanodes(null,
 -          null, factor.getNumber(), minRatisVolumeSizeBytes,
 +      dns = placementPolicy.chooseDatanodes(excludedNodes,
-           favoredNodes, factor.getNumber(), 0);
++          favoredNodes, factor.getNumber(), minRatisVolumeSizeBytes,
+           containerSizeBytes);
        break;
      default:
        throw new IllegalStateException("Unknown factor: " + factor.name());
diff --cc 
hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/pipeline/SCMPipelineManager.java
index 3ecd965,31b8115..4ef5fcd
--- 
a/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/pipeline/SCMPipelineManager.java
+++ 
b/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/pipeline/SCMPipelineManager.java
@@@ -279,10 -277,15 +286,16 @@@ public class SCMPipelineManager impleme
        throw new IOException("Pipeline creation is not allowed as safe mode " +
            "prechecks have not yet passed");
      }
+     if (freezePipelineCreation.get()) {
+       LOG.debug("Pipeline creation is frozen while an upgrade is in " +
+           "progress");
+       throw new IOException("Pipeline creation is frozen while an upgrade " +
+           "is in progress");
+     }
      lock.writeLock().lock();
      try {
 -      Pipeline pipeline = pipelineFactory.create(replicationConfig);
 +      Pipeline pipeline = pipelineFactory.create(replicationConfig,
 +          excludedNodes, favoredNodes);
        if (pipelineStore != null) {
          pipelineStore.put(pipeline.getId(), pipeline);
        }
diff --cc 
hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/pipeline/SimplePipelineProvider.java
index 8a22947,147f773..4daf8c2
--- 
a/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/pipeline/SimplePipelineProvider.java
+++ 
b/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/pipeline/SimplePipelineProvider.java
@@@ -41,15 -41,7 +41,15 @@@ public class SimplePipelineProvide
    @Override
    public Pipeline create(StandaloneReplicationConfig replicationConfig)
        throws IOException {
 +    return create(replicationConfig, Collections.emptyList(),
 +        Collections.emptyList());
 +  }
 +
 +  @Override
 +  public Pipeline create(StandaloneReplicationConfig replicationConfig,
 +      List<DatanodeDetails> excludedNodes, List<DatanodeDetails> favoredNodes)
 +      throws IOException {
-     List<DatanodeDetails> dns = pickNodesNeverUsed(replicationConfig);
+     List<DatanodeDetails> dns = pickNodesNotUsed(replicationConfig);
      if (dns.size() < replicationConfig.getRequiredNodes()) {
        String e = String
            .format("Cannot create pipeline of factor %d using %d nodes.",
diff --cc 
hadoop-hdds/server-scm/src/test/java/org/apache/hadoop/hdds/scm/container/placement/algorithms/TestSCMContainerPlacementRackAware.java
index b2cb636,376752b..2f41720
--- 
a/hadoop-hdds/server-scm/src/test/java/org/apache/hadoop/hdds/scm/container/placement/algorithms/TestSCMContainerPlacementRackAware.java
+++ 
b/hadoop-hdds/server-scm/src/test/java/org/apache/hadoop/hdds/scm/container/placement/algorithms/TestSCMContainerPlacementRackAware.java
@@@ -38,7 -38,7 +38,8 @@@ import org.apache.hadoop.hdds.scm.net.N
  import org.apache.hadoop.hdds.scm.node.DatanodeInfo;
  import org.apache.hadoop.hdds.scm.node.NodeManager;
  import org.apache.hadoop.hdds.scm.node.NodeStatus;
 +import org.junit.After;
+ import org.apache.hadoop.ozone.container.upgrade.UpgradeUtils;
  import org.junit.Assert;
  import org.junit.Before;
  import org.junit.Test;
diff --cc 
hadoop-hdds/server-scm/src/test/java/org/apache/hadoop/hdds/scm/pipeline/TestRatisPipelineProvider.java
index ef86c2f,7eb8977..b5fd0a7
--- 
a/hadoop-hdds/server-scm/src/test/java/org/apache/hadoop/hdds/scm/pipeline/TestRatisPipelineProvider.java
+++ 
b/hadoop-hdds/server-scm/src/test/java/org/apache/hadoop/hdds/scm/pipeline/TestRatisPipelineProvider.java
@@@ -41,8 -41,9 +42,10 @@@ import java.util.Set
  import java.util.stream.Collectors;
  
  import static org.apache.commons.collections.CollectionUtils.intersection;
+ import static 
org.apache.hadoop.hdds.scm.ScmConfigKeys.OZONE_DATANODE_RATIS_VOLUME_FREE_SPACE_MIN;
+ import static 
org.apache.hadoop.hdds.scm.ScmConfigKeys.OZONE_SCM_CONTAINER_SIZE;
  import static org.junit.Assert.assertEquals;
 +import static org.junit.Assert.assertFalse;
  import static org.junit.Assert.assertNotEquals;
  import static org.junit.Assert.assertTrue;
  
@@@ -222,30 -226,39 +228,64 @@@ public class TestRatisPipelineProvider 
    }
  
    @Test
 +  // Test excluded nodes work correctly. Note that for Ratis, the
 +  // PipelinePlacementPolicy, which Ratis is hardcoded to use, does not 
consider
 +  // favored nodes.
 +  public void testCreateFactorTHREEPipelineWithExcludedDatanodes()
 +      throws Exception {
 +    init(1);
 +    int healthyCount = nodeManager.getNodes(NodeStatus.inServiceHealthy())
 +        .size();
 +    // Add all but 3 nodes to the exclude list and ensure that the 3 picked
 +    // nodes are not in the excluded list.
 +    List<DatanodeDetails> excludedNodes = nodeManager
 +        .getNodes(NodeStatus.inServiceHealthy()).stream()
 +        .limit(healthyCount - 3).collect(Collectors.toList());
 +
 +    Pipeline pipeline1 = provider.create(
 +        new RatisReplicationConfig(ReplicationFactor.THREE), excludedNodes,
 +        Collections.EMPTY_LIST);
 +
 +    for (DatanodeDetails dn : pipeline1.getNodes()) {
 +      assertFalse(excludedNodes.contains(dn));
 +    }
 +  }
 +
 +
++  @Test
+   public void testCreatePipelinesWhenNotEnoughSpace() throws Exception {
+     String expectedErrorSubstring = "Unable to find enough" +
+         " nodes that meet the space requirement";
+ 
+     // Use large enough container or metadata sizes that no node will have
+     // enough space to hold one.
+     OzoneConfiguration largeContainerConf = new OzoneConfiguration();
+     largeContainerConf.set(OZONE_SCM_CONTAINER_SIZE, "100TB");
+     init(1, largeContainerConf);
+     for (ReplicationFactor factor: ReplicationFactor.values()) {
+       try {
+         provider.create(new RatisReplicationConfig(factor));
+         Assert.fail("Expected SCMException for large container size with " +
+             "replication factor " + factor.toString());
+       } catch(SCMException ex) {
+         Assert.assertTrue(ex.getMessage().contains(expectedErrorSubstring));
+       }
+     }
+ 
+     OzoneConfiguration largeMetadataConf = new OzoneConfiguration();
+     largeMetadataConf.set(OZONE_DATANODE_RATIS_VOLUME_FREE_SPACE_MIN, 
"100TB");
+     init(1, largeMetadataConf);
+     for (ReplicationFactor factor: ReplicationFactor.values()) {
+       try {
+         provider.create(new RatisReplicationConfig(factor));
+         Assert.fail("Expected SCMException for large metadata size with " +
+             "replication factor " + factor.toString());
+       } catch(SCMException ex) {
+         Assert.assertTrue(ex.getMessage().contains(expectedErrorSubstring));
+       }
+     }
+   }
+ 
    private void addPipeline(
        List<DatanodeDetails> dns,
        Pipeline.PipelineState open, ReplicationConfig replicationConfig)
diff --cc 
hadoop-ozone/client/src/main/java/org/apache/hadoop/ozone/client/io/BlockOutputStreamEntry.java
index 21c88cf,548587c..3fa339a
--- 
a/hadoop-ozone/client/src/main/java/org/apache/hadoop/ozone/client/io/BlockOutputStreamEntry.java
+++ 
b/hadoop-ozone/client/src/main/java/org/apache/hadoop/ozone/client/io/BlockOutputStreamEntry.java
@@@ -95,7 -96,9 +96,13 @@@ public class BlockOutputStreamEntry ext
     */
    private void checkStream() throws IOException {
      if (this.outputStream == null) {
++<<<<<<< HEAD
 +      this.outputStream = createOutputStream();
++=======
+       this.outputStream =
+           new RatisBlockOutputStream(blockID, xceiverClientManager,
+               pipeline, bufferPool, config, token);
++>>>>>>> master
      }
    }
  
diff --cc 
hadoop-ozone/common/src/main/java/org/apache/hadoop/ozone/om/protocolPB/OzoneManagerProtocolClientSideTranslatorPB.java
index 28aa93d,7c8b785..7743ab7
--- 
a/hadoop-ozone/common/src/main/java/org/apache/hadoop/ozone/om/protocolPB/OzoneManagerProtocolClientSideTranslatorPB.java
+++ 
b/hadoop-ozone/common/src/main/java/org/apache/hadoop/ozone/om/protocolPB/OzoneManagerProtocolClientSideTranslatorPB.java
@@@ -25,7 -25,8 +25,9 @@@ import java.util.Map
  import java.util.stream.Collectors;
  
  import org.apache.hadoop.hdds.annotation.InterfaceAudience;
 +import org.apache.hadoop.hdds.client.ECReplicationConfig;
+ import org.apache.hadoop.hdds.protocol.proto.HddsProtos
+     .UpgradeFinalizationStatus;
  import org.apache.hadoop.hdds.client.ReplicationConfig;
  import org.apache.hadoop.hdds.scm.container.common.helpers.ExcludeList;
  import org.apache.hadoop.hdds.tracing.TracingUtil;
diff --cc hadoop-ozone/interface-client/src/main/proto/OmClientProtocol.proto
index 07c6767,41604a3..3706a62
--- a/hadoop-ozone/interface-client/src/main/proto/OmClientProtocol.proto
+++ b/hadoop-ozone/interface-client/src/main/proto/OmClientProtocol.proto
@@@ -746,7 -769,9 +769,10 @@@ message KeyArgs 
  
      // This will be set when user performs delete directory recursively.
      optional bool recursive = 17;
+ 
+     // When it is a head operation which is to check whether key exist
+     optional bool headOp = 18;
 +    optional hadoop.hdds.ECReplicationConfig ecReplicationConfig = 18;
  }
  
  message KeyLocation {
diff --cc 
hadoop-ozone/ozone-manager/src/test/java/org/apache/hadoop/ozone/om/request/key/TestOMKeyRequest.java
index 4dfedd2,6bcf706..93b7787
--- 
a/hadoop-ozone/ozone-manager/src/test/java/org/apache/hadoop/ozone/om/request/key/TestOMKeyRequest.java
+++ 
b/hadoop-ozone/ozone-manager/src/test/java/org/apache/hadoop/ozone/om/request/key/TestOMKeyRequest.java
@@@ -24,7 -24,8 +24,9 @@@ import java.util.Random
  import java.util.UUID;
  
  import org.apache.commons.lang3.tuple.Pair;
 +import org.apache.hadoop.hdds.client.ReplicationConfig;
+ import org.apache.hadoop.ozone.OzoneConfigKeys;
+ import org.apache.hadoop.ozone.om.OzoneManagerPrepareState;
  import org.apache.hadoop.ozone.om.ResolvedBucket;
  import org.apache.hadoop.ozone.om.KeyManager;
  import org.apache.hadoop.ozone.om.KeyManagerImpl;

---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to