Skip to content

Commit

Permalink
HDDS-11503. Add Robot test to verify Container Balancer for EC contai…
Browse files Browse the repository at this point in the history
…ners. (#7311)
  • Loading branch information
Daniilchik authored Oct 18, 2024
1 parent 85eb89b commit f7b428d
Show file tree
Hide file tree
Showing 4 changed files with 94 additions and 12 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -39,6 +39,8 @@ services:
volumes:
- tmpfs1:/data
- ../..:/opt/hadoop
deploy:
replicas: ${DATANODE1_REPLICA:-1}
datanode2:
<<: *common-config
ports:
Expand All @@ -50,6 +52,8 @@ services:
volumes:
- tmpfs2:/data
- ../..:/opt/hadoop
deploy:
replicas: ${DATANODE2_REPLICA:-1}
datanode3:
<<: *common-config
ports:
Expand All @@ -61,6 +65,8 @@ services:
volumes:
- tmpfs3:/data
- ../..:/opt/hadoop
deploy:
replicas: ${DATANODE3_REPLICA:-1}
datanode4:
<<: *common-config
ports:
Expand All @@ -72,6 +78,34 @@ services:
volumes:
- tmpfs4:/data
- ../..:/opt/hadoop
deploy:
replicas: ${DATANODE4_REPLICA:-1}
datanode5:
<<: *common-config
ports:
- 19864
- 9882
environment:
<<: *replication
command: [ "ozone","datanode" ]
volumes:
- tmpfs5:/data
- ../..:/opt/hadoop
deploy:
replicas: ${DATANODE5_REPLICA:-1}
datanode6:
<<: *common-config
ports:
- 19864
- 9882
environment:
<<: *replication
command: [ "ozone","datanode" ]
volumes:
- tmpfs6:/data
- ../..:/opt/hadoop
deploy:
replicas: ${DATANODE6_REPLICA:-1}
om1:
<<: *common-config
environment:
Expand Down Expand Up @@ -175,3 +209,15 @@ volumes:
o: "size=1g,uid=4000"
device: tmpfs
type: tmpfs
tmpfs5:
driver: local
driver_opts:
o: "size=1g,uid=5000"
device: tmpfs
type: tmpfs
tmpfs6:
driver: local
driver_opts:
o: "size=1g,uid=6000"
device: tmpfs
type: tmpfs
31 changes: 31 additions & 0 deletions hadoop-ozone/dist/src/main/compose/ozone-balancer/test-ec.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
#!/usr/bin/env bash
# Licensed to the Apache Software Foundation (ASF) under one
# or more contributor license agreements. See the NOTICE file
# distributed with this work for additional information
# regarding copyright ownership. The ASF licenses this file
# to you under the Apache License, Version 2.0 (the
# "License"); you may not use this file except in compliance
# with the License. You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

#suite:balancer

COMPOSE_DIR="$( cd "$( dirname "${BASH_SOURCE0}" )" >/dev/null 2>&1 && pwd )"
export COMPOSE_DIR
export OM_SERVICE_ID="om"
export OM=om1
export SCM=scm1
export OZONE_REPLICATION_FACTOR=3

# shellcheck source=/dev/null
source "$COMPOSE_DIR/../testlib.sh"

start_docker_env
execute_robot_test ${OM} -v REPLICATION:rs-3-2-1024k -v TYPE:EC -v KEYS:7 -v LOWER_LIMIT:1.5 -v UPPER_LIMIT:2.5 -N ozone-balancer-EC balancer/testBalancer.robot
Original file line number Diff line number Diff line change
Expand Up @@ -24,10 +24,12 @@ export OM=om1
export SCM=scm1
export OZONE_REPLICATION_FACTOR=3

export DATANODE2_REPLICA=0
export DATANODE5_REPLICA=0

# shellcheck source=/dev/null
source "$COMPOSE_DIR/../testlib.sh"

# We need 4 dataNodes in this tests
start_docker_env 4
start_docker_env

execute_robot_test ${OM} balancer/testBalancer.robot
execute_robot_test ${OM} -v REPLICATION:THREE -v TYPE:RATIS -v KEYS:3 -v LOWER_LIMIT:3 -v UPPER_LIMIT:3.5 -N ozone-balancer-RATIS balancer/testBalancer.robot
21 changes: 12 additions & 9 deletions hadoop-ozone/dist/src/main/smoketest/balancer/testBalancer.robot
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@
*** Settings ***
Documentation Smoketest ozone cluster startup
Library OperatingSystem
Library String
Library Collections
Resource ../commonlib.robot
Resource ../ozone-lib/shell.robot
Expand All @@ -35,7 +36,7 @@ Prepare For Tests
Execute dd if=/dev/urandom of=/tmp/100mb bs=1048576 count=100
Run Keyword if '${SECURITY_ENABLED}' == 'true' Kinit test user testuser testuser.keytab
Execute ozone sh volume create /${VOLUME}
Execute ozone sh bucket create /${VOLUME}/${BUCKET}
Execute ozone sh bucket create --replication ${REPLICATION} --type ${TYPE} /${VOLUME}/${BUCKET}


Datanode In Maintenance Mode
Expand Down Expand Up @@ -67,7 +68,7 @@ Run Container Balancer
Wait Finish Of Balancing
${result} = Execute ozone admin containerbalancer status
Should Contain ${result} ContainerBalancer is Running.
Wait Until Keyword Succeeds 3min 10sec ContainerBalancer is Not Running
Wait Until Keyword Succeeds 6min 10sec ContainerBalancer is Not Running
Sleep 60000ms

Verify Verbose Balancer Status
Expand Down Expand Up @@ -111,7 +112,7 @@ Create Multiple Keys
${fileName} = Set Variable file-${INDEX}.txt
${key} = Set Variable /${VOLUME}/${BUCKET}/${fileName}
LOG ${fileName}
Create Key ${key} ${file}
Create Key ${key} ${file} --replication=${REPLICATION} --type=${TYPE}
Key Should Match Local File ${key} ${file}
END

Expand All @@ -126,14 +127,14 @@ Get Uuid

Close All Containers
FOR ${INDEX} IN RANGE 15
${container} = Execute ozone admin container list --state OPEN | jq -r 'select(.replicationConfig.replicationFactor == "THREE") | .containerID' | head -1
${container} = Execute ozone admin container list --state OPEN | jq -r 'select(.replicationConfig.data == 3) | .containerID' | head -1
EXIT FOR LOOP IF "${container}" == "${EMPTY}"
${message} = Execute And Ignore Error ozone admin container close "${container}"
Run Keyword If '${message}' != '${EMPTY}' Should Contain ${message} is in closing state
${output} = Execute ozone admin container info "${container}"
Should contain ${output} CLOS
END
Wait until keyword succeeds 3min 10sec All container is closed
Wait until keyword succeeds 4min 10sec All container is closed

All container is closed
${output} = Execute ozone admin container list --state OPEN
Expand All @@ -146,15 +147,15 @@ Get Datanode Ozone Used Bytes Info
[return] ${result}

** Test Cases ***
Verify Container Balancer for RATIS containers
Verify Container Balancer for RATIS/EC containers
Prepare For Tests

Datanode In Maintenance Mode

${uuid} = Get Uuid
Datanode Usageinfo ${uuid}

Create Multiple Keys 3
Create Multiple Keys ${KEYS}

Close All Containers

Expand All @@ -175,8 +176,10 @@ Verify Container Balancer for RATIS containers

${datanodeOzoneUsedBytesInfoAfterContainerBalancing} = Get Datanode Ozone Used Bytes Info ${uuid}
Should Not Be Equal As Integers ${datanodeOzoneUsedBytesInfo} ${datanodeOzoneUsedBytesInfoAfterContainerBalancing}
Should Be True ${datanodeOzoneUsedBytesInfoAfterContainerBalancing} < ${SIZE} * 3.5
Should Be True ${datanodeOzoneUsedBytesInfoAfterContainerBalancing} > ${SIZE} * 3
#We need to ensure that after balancing, the amount of data recorded on each datanode falls within the following ranges:
#{SIZE}*3 < used < {SIZE}*3.5 for RATIS containers, and {SIZE}*1.5 < used < {SIZE}*2.5 for EC containers.
Should Be True ${datanodeOzoneUsedBytesInfoAfterContainerBalancing} < ${SIZE} * ${UPPER_LIMIT}
Should Be True ${datanodeOzoneUsedBytesInfoAfterContainerBalancing} > ${SIZE} * ${LOWER_LIMIT}



Expand Down

0 comments on commit f7b428d

Please sign in to comment.