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

wangdan pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/incubator-pegasus.git


The following commit(s) were added to refs/heads/master by this push:
     new 8cad63e1d chore(github): free disk space for github workflows (#1577)
8cad63e1d is described below

commit 8cad63e1d153684327786134caf512818e58c850
Author: Dan Wang <[email protected]>
AuthorDate: Tue Aug 8 11:46:32 2023 +0800

    chore(github): free disk space for github workflows (#1577)
    
    https://github.com/apache/incubator-pegasus/issues/1576
    
    Free more disk space for github workflows in the following ways:
    
    - remove unnecessary packages and directories with reduced disk space up
       to 11GB;
    - support updating options such as `disk_min_available_space_ratio` by env
       `TEST_OPTS` for some tests;
    - reduce `disk_min_available_space_ratio` from 10 to 5 for some failed tests
       due to `SPACE_INSUFFICIENT`.
---
 .github/workflows/free_disk_space.sh              | 70 +++++++++++++++++++++++
 .github/workflows/lint_and_test_cpp.yaml          | 67 ++++++++++++++++++++--
 src/common/test/config-test.ini                   |  1 +
 src/common/test/run.sh                            | 21 ++++++-
 src/meta/test/config-test.ini                     |  1 +
 src/meta/test/run.sh                              | 21 ++++++-
 src/replica/backup/test/config-test.ini           |  1 +
 src/replica/backup/test/run.sh                    | 20 ++++++-
 src/replica/bulk_load/test/config-test.ini        |  3 +
 src/replica/bulk_load/test/run.sh                 | 20 ++++++-
 src/replica/duplication/test/config-test.ini      |  3 +
 src/replica/duplication/test/run.sh               | 20 ++++++-
 src/replica/split/test/config-test.ini            |  3 +
 src/replica/split/test/run.sh                     | 20 ++++++-
 src/replica/storage/simple_kv/config.ini          |  1 +
 src/replica/storage/simple_kv/run.sh              | 19 ++++++
 src/replica/storage/simple_kv/test/case-000.ini   |  1 +
 src/replica/storage/simple_kv/test/case-001.ini   |  1 +
 src/replica/storage/simple_kv/test/case-002.ini   |  1 +
 src/replica/storage/simple_kv/test/case-003.ini   |  1 +
 src/replica/storage/simple_kv/test/case-004.ini   |  1 +
 src/replica/storage/simple_kv/test/case-005.ini   |  1 +
 src/replica/storage/simple_kv/test/case-006.ini   |  1 +
 src/replica/storage/simple_kv/test/case-100.ini   |  1 +
 src/replica/storage/simple_kv/test/case-101.ini   |  1 +
 src/replica/storage/simple_kv/test/case-102.ini   |  1 +
 src/replica/storage/simple_kv/test/case-103.ini   |  1 +
 src/replica/storage/simple_kv/test/case-104.ini   |  1 +
 src/replica/storage/simple_kv/test/case-105.ini   |  1 +
 src/replica/storage/simple_kv/test/case-106.ini   |  1 +
 src/replica/storage/simple_kv/test/case-107.ini   |  1 +
 src/replica/storage/simple_kv/test/case-108.ini   |  1 +
 src/replica/storage/simple_kv/test/case-109.ini   |  1 +
 src/replica/storage/simple_kv/test/case-200.ini   |  1 +
 src/replica/storage/simple_kv/test/case-201.ini   |  1 +
 src/replica/storage/simple_kv/test/case-202-0.ini |  1 +
 src/replica/storage/simple_kv/test/case-202-1.ini |  1 +
 src/replica/storage/simple_kv/test/case-203-0.ini |  1 +
 src/replica/storage/simple_kv/test/case-204.ini   |  1 +
 src/replica/storage/simple_kv/test/case-205.ini   |  1 +
 src/replica/storage/simple_kv/test/case-206.ini   |  1 +
 src/replica/storage/simple_kv/test/case-207.ini   |  1 +
 src/replica/storage/simple_kv/test/case-208.ini   |  1 +
 src/replica/storage/simple_kv/test/case-209.ini   |  1 +
 src/replica/storage/simple_kv/test/case-210.ini   |  1 +
 src/replica/storage/simple_kv/test/case-211.ini   |  1 +
 src/replica/storage/simple_kv/test/case-212.ini   |  1 +
 src/replica/storage/simple_kv/test/case-213.ini   |  1 +
 src/replica/storage/simple_kv/test/case-214.ini   |  1 +
 src/replica/storage/simple_kv/test/case-215.ini   |  1 +
 src/replica/storage/simple_kv/test/case-216.ini   |  1 +
 src/replica/storage/simple_kv/test/case-300-0.ini |  1 +
 src/replica/storage/simple_kv/test/case-300-1.ini |  1 +
 src/replica/storage/simple_kv/test/case-300-2.ini |  1 +
 src/replica/storage/simple_kv/test/case-301.ini   |  1 +
 src/replica/storage/simple_kv/test/case-302.ini   |  1 +
 src/replica/storage/simple_kv/test/case-303.ini   |  1 +
 src/replica/storage/simple_kv/test/case-304.ini   |  1 +
 src/replica/storage/simple_kv/test/case-305.ini   |  1 +
 src/replica/storage/simple_kv/test/case-306.ini   |  1 +
 src/replica/storage/simple_kv/test/case-307.ini   |  1 +
 src/replica/storage/simple_kv/test/case-400.ini   |  1 +
 src/replica/storage/simple_kv/test/case-401.ini   |  1 +
 src/replica/storage/simple_kv/test/case-402.ini   |  1 +
 src/replica/storage/simple_kv/test/case-600.ini   |  1 +
 src/replica/storage/simple_kv/test/case-601.ini   |  1 +
 src/replica/storage/simple_kv/test/case-602.ini   |  1 +
 src/replica/storage/simple_kv/test/case-603.ini   |  1 +
 src/replica/storage/simple_kv/test/config.ini     |  1 +
 src/replica/storage/simple_kv/test/run.sh         | 20 +++++++
 src/replica/test/config-test.ini                  |  3 +
 src/replica/test/run.sh                           | 21 ++++++-
 src/server/test/config.ini                        |  1 +
 src/server/test/run.sh                            | 21 ++++++-
 src/test/function_test/run.sh                     |  2 +-
 src/utils/filesystem.cpp                          |  2 +-
 src/utils/simple_logger.cpp                       |  1 +
 77 files changed, 399 insertions(+), 16 deletions(-)

diff --git a/.github/workflows/free_disk_space.sh 
b/.github/workflows/free_disk_space.sh
new file mode 100755
index 000000000..87f0cdef8
--- /dev/null
+++ b/.github/workflows/free_disk_space.sh
@@ -0,0 +1,70 @@
+#!/bin/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.
+
+echo 
"=============================================================================="
+echo "Freeing up disk space on Github workflows"
+echo 
"=============================================================================="
+
+echo "Before freeing, the space of each disk:"
+df -h
+
+echo "Listing 100 largest packages ..."
+dpkg-query -Wf '${Installed-Size}\t${Package}\n' | sort -n | tail -n 100
+
+echo "Removing large packages ..."
+apt-get -s autoremove
+apt-get remove -y openjdk-11-jre-headless
+
+echo "After removing large packages, the space of each disk:"
+df -h
+
+echo "Listing directories ..."
+mount
+ls -lrt /
+du -csh /*
+du -csh /__e/*/*
+du -csh /__t/*/*
+du -csh /__w/*/*
+ls -lrt /github
+du -csh /github/*
+du -csh /opt/*
+du -csh /usr/local/*
+du -csh /usr/local/lib/*
+du -csh /usr/local/share/*
+du -csh /usr/share/*
+echo "AGENT_TOOLSDIRECTORY is $AGENT_TOOLSDIRECTORY"
+
+echo "Removing large directories ..."
+rm -rf /__t/CodeQL
+rm -rf /__t/PyPy
+rm -rf /__t/Python
+rm -rf /__t/Ruby
+rm -rf /__t/go
+rm -rf /__t/node
+rm -rf /opt/ghc
+rm -rf /usr/local/.ghcup
+rm -rf /usr/local/graalvm
+rm -rf /usr/local/lib/android
+rm -rf /usr/local/lib/node_modules
+rm -rf /usr/local/share/boost
+rm -rf /usr/local/share/chromium
+rm -rf /usr/local/share/powershell
+rm -rf /usr/share/dotnet
+
+echo "After freeing, the space of each disk:"
+df -h
diff --git a/.github/workflows/lint_and_test_cpp.yaml 
b/.github/workflows/lint_and_test_cpp.yaml
index 5c320eda5..38d8cc53f 100644
--- a/.github/workflows/lint_and_test_cpp.yaml
+++ b/.github/workflows/lint_and_test_cpp.yaml
@@ -49,8 +49,8 @@ on:
 env:
   # Update the options to reduce the consumption of the disk space
   ONEBOX_OPTS: disk_min_available_space_ratio=5
-  TEST_OPTS: throttle_test_medium_value_kb=10,throttle_test_large_value_kb=25
-                                                                               
                                 
+  TEST_OPTS: 
disk_min_available_space_ratio=5,throttle_test_medium_value_kb=10,throttle_test_large_value_kb=25
+
 jobs:
   cpp_clang_format_linter:
     name: Lint
@@ -70,6 +70,9 @@ jobs:
       image: apache/pegasus:thirdparties-bin-ubuntu2204-${{ github.base_ref }}
     steps:
       - uses: actions/checkout@v3
+      - name: Free Disk Space (Ubuntu)
+        run: |
+          .github/workflows/free_disk_space.sh
       - uses: dorny/paths-filter@v2
         id: changes
         with:
@@ -120,6 +123,9 @@ jobs:
           path: |
             /github/home/.ccache
           key: release_ccache
+      - name: Free Disk Space (Ubuntu)
+        run: |
+          .github/workflows/free_disk_space.sh
       - uses: dorny/paths-filter@v2
         id: changes
         with:
@@ -132,25 +138,36 @@ jobs:
       - name: Unpack prebuilt third-parties
         if: steps.changes.outputs.thirdparty == 'false'
         run: |
+          rm -f /root/thirdparties-src.zip
           unzip /root/thirdparties-bin.zip -d ./thirdparty
           rm -f /root/thirdparties-bin.zip
+          find ./thirdparty -name '*CMakeFiles*' -type d -exec rm -rf "{}" +
+          rm -rf ./thirdparty/hadoop-bin/share/doc
+          rm -rf ./thirdparty/zookeeper-bin/docs
       - name: Rebuild third-parties
         if: steps.changes.outputs.thirdparty == 'true'
         working-directory: thirdparty
         # Build thirdparties and leave some necessary libraries and source
         run: |
+          rm -f /root/thirdparties-src.zip
           mkdir build
           cmake -DCMAKE_BUILD_TYPE=Release -DROCKSDB_PORTABLE=ON -B build/
           cmake --build build/ -j $(nproc)
           rm -rf build/Build build/Download/[a-y]* build/Source/[a-g]* 
build/Source/[i-q]* build/Source/[s-z]*
+          find ./ -name '*CMakeFiles*' -type d -exec rm -rf "{}" +
           ../scripts/download_hadoop.sh hadoop-bin
           ../scripts/download_zk.sh zookeeper-bin
+          rm -rf hadoop-bin/share/doc
+          rm -rf zookeeper-bin/docs
       - name: Compilation
         run: |
           ccache -p
           ccache -z
           ./run.sh build --test --skip_thirdparty -j $(nproc) -t release
           ccache -s
+      - name: Clear Build Files
+        run: |
+          find ./build/latest/src/ -name '*CMakeFiles*' -type d -exec rm -rf 
"{}" +
       - name: Pack Server
         run: |
           ./run.sh pack_server
@@ -164,7 +181,6 @@ jobs:
           mv thirdparty/hadoop-bin ./
           mv thirdparty/zookeeper-bin ./
           rm -rf thirdparty
-          find ./build/latest/src/ -name '*CMakeFiles*' -type d -exec rm -rf 
"{}" +
           tar -zcvhf release__builder.tar build/latest/output build/latest/bin 
build/latest/src/server/test/config.ini hadoop-bin zookeeper-bin
       - name: Upload Artifact
         uses: actions/upload-artifact@v3
@@ -252,6 +268,9 @@ jobs:
           path: |
             /github/home/.ccache
           key: asan_ccache
+      - name: Free Disk Space (Ubuntu)
+        run: |
+          .github/workflows/free_disk_space.sh
       - uses: dorny/paths-filter@v2
         id: changes
         with:
@@ -264,31 +283,41 @@ jobs:
       - name: Unpack prebuilt third-parties
         if: steps.changes.outputs.thirdparty == 'false'
         run: |
+          rm -f /root/thirdparties-src.zip
           unzip /root/thirdparties-bin.zip -d ./thirdparty
           rm -f /root/thirdparties-bin.zip
+          find ./thirdparty -name '*CMakeFiles*' -type d -exec rm -rf "{}" +
+          rm -rf ./thirdparty/hadoop-bin/share/doc
+          rm -rf ./thirdparty/zookeeper-bin/docs
       - name: Rebuild third-parties
         if: steps.changes.outputs.thirdparty == 'true'
         working-directory: thirdparty
         # Build thirdparties and leave some necessary libraries and source
         run: |
+          rm -f /root/thirdparties-src.zip
           mkdir build
           cmake -DCMAKE_BUILD_TYPE=Release -DROCKSDB_PORTABLE=ON -B build/
           cmake --build build/ -j $(nproc)
           rm -rf build/Build build/Download/[a-y]* build/Source/[a-g]* 
build/Source/[i-q]* build/Source/[s-z]*
+          find ./ -name '*CMakeFiles*' -type d -exec rm -rf "{}" +
           ../scripts/download_hadoop.sh hadoop-bin
           ../scripts/download_zk.sh zookeeper-bin
+          rm -rf hadoop-bin/share/doc
+          rm -rf zookeeper-bin/docs
       - name: Compilation
         run: |
           ccache -p
           ccache -z
           ./run.sh build --test --sanitizer address --skip_thirdparty 
--disable_gperf -j $(nproc)
           ccache -s
+      - name: Clear Build Files
+        run: |
+          find ./build/latest/src/ -name '*CMakeFiles*' -type d -exec rm -rf 
"{}" +
       - name: Tar files
         run: |
           mv thirdparty/hadoop-bin ./
           mv thirdparty/zookeeper-bin ./
           rm -rf thirdparty
-          find ./build/latest/src/ -name '*CMakeFiles*' -type d -exec rm -rf 
"{}" +
           tar -zcvhf release_address_builder.tar build/latest/output 
build/latest/bin build/latest/src/server/test/config.ini hadoop-bin 
zookeeper-bin
       - name: Upload Artifact
         uses: actions/upload-artifact@v3
@@ -393,31 +422,41 @@ jobs:
 #      - name: Unpack prebuilt third-parties
 #        if: steps.changes.outputs.thirdparty == 'false'
 #        run: |
+#          rm -f /root/thirdparties-src.zip
 #          unzip /root/thirdparties-bin.zip -d ./thirdparty
 #          rm -f /root/thirdparties-bin.zip
+#          find ./thirdparty -name '*CMakeFiles*' -type d -exec rm -rf "{}" +
+#          rm -rf ./thirdparty/hadoop-bin/share/doc
+#          rm -rf ./thirdparty/zookeeper-bin/docs
 #      - name: Rebuild third-parties
 #        if: steps.changes.outputs.thirdparty == 'true'
 #        working-directory: thirdparty
 #        # Build thirdparties and leave some necessary libraries and source
 #        run: |
+#          rm -f /root/thirdparties-src.zip
 #          mkdir build
 #          cmake -DCMAKE_BUILD_TYPE=Release -DROCKSDB_PORTABLE=ON -B build/
 #          cmake --build build/ -j $(nproc)
 #          rm -rf build/Build build/Download/[a-y]* build/Source/[a-g]* 
build/Source/[i-q]* build/Source/[s-z]*
+#          find ./ -name '*CMakeFiles*' -type d -exec rm -rf "{}" +
 #          ../scripts/download_hadoop.sh hadoop-bin
 #          ../scripts/download_zk.sh zookeeper-bin
+#          rm -rf hadoop-bin/share/doc
+#          rm -rf zookeeper-bin/docs
 #      - name: Compilation
 #        run: |
 #          ccache -p
 #          ccache -z
 #          ./run.sh build --test --sanitizer undefined --skip_thirdparty 
--disable_gperf -j $(nproc)
 #          ccache -s
+#      - name: Clear Build Files
+#        run: |
+#          find ./build/latest/src/ -name '*CMakeFiles*' -type d -exec rm -rf 
"{}" +
 #      - name: Tar files
 #        run: |
 #          mv thirdparty/hadoop-bin ./
 #          mv thirdparty/zookeeper-bin ./
 #          rm -rf thirdparty
-#          find ./build/latest/src/ -name '*CMakeFiles*' -type d -exec rm -rf 
"{}" +
 #          tar -zcvhf release_undefined_builder.tar build/latest/output 
build/latest/bin build/latest/src/server/test/config.ini hadoop-bin 
zookeeper-bin
 #      - name: Upload Artifact
 #        uses: actions/upload-artifact@v3
@@ -470,6 +509,9 @@ jobs:
 #      options: --cap-add=SYS_PTRACE
 #    steps:
 #      - uses: actions/checkout@v3
+#      - name: Free Disk Space (Ubuntu)
+#        run: |
+#          .github/workflows/free_disk_space.sh
 #      - name: Unpack prebuilt third-parties
 #        run: |
 #          unzip /root/thirdparties-bin.zip -d ./thirdparty
@@ -503,6 +545,9 @@ jobs:
           path: |
             /github/home/.ccache
           key: jemalloc_ccache
+      - name: Free Disk Space (Ubuntu)
+        run: |
+          .github/workflows/free_disk_space.sh
       - uses: dorny/paths-filter@v2
         id: changes
         with:
@@ -515,25 +560,36 @@ jobs:
       - name: Unpack prebuilt third-parties
         if: steps.changes.outputs.thirdparty == 'false'
         run: |
+          rm -f /root/thirdparties-src.zip
           unzip /root/thirdparties-bin.zip -d ./thirdparty
           rm -f /root/thirdparties-bin.zip
+          find ./thirdparty -name '*CMakeFiles*' -type d -exec rm -rf "{}" +
+          rm -rf ./thirdparty/hadoop-bin/share/doc
+          rm -rf ./thirdparty/zookeeper-bin/docs
       - name: Rebuild third-parties
         if: steps.changes.outputs.thirdparty == 'true'
         working-directory: thirdparty
         # Build thirdparties and leave some necessary libraries and source
         run: |
+          rm -f /root/thirdparties-src.zip
           mkdir build
           cmake -DCMAKE_BUILD_TYPE=Release -DROCKSDB_PORTABLE=ON 
-DUSE_JEMALLOC=ON -B build/
           cmake --build build/ -j $(nproc)
           rm -rf build/Build build/Download/[a-y]* build/Source/[a-g]* 
build/Source/[i-q]* build/Source/[s-z]*
+          find ./ -name '*CMakeFiles*' -type d -exec rm -rf "{}" +
           ../scripts/download_hadoop.sh hadoop-bin
           ../scripts/download_zk.sh zookeeper-bin
+          rm -rf hadoop-bin/share/doc
+          rm -rf zookeeper-bin/docs
       - name: Compilation
         run: |
           ccache -p
           ccache -z
           ./run.sh build --test --skip_thirdparty -j $(nproc) -t release 
--use_jemalloc
           ccache -s
+      - name: Clear Build Files
+        run: |
+          find ./build/latest/src/ -name '*CMakeFiles*' -type d -exec rm -rf 
"{}" +
       - name: Pack Server
         run: ./run.sh pack_server -j
       - name: Pack Tools
@@ -543,7 +599,6 @@ jobs:
           mv thirdparty/hadoop-bin ./
           mv thirdparty/zookeeper-bin ./
           rm -rf thirdparty
-          find ./build/latest/src/ -name '*CMakeFiles*' -type d -exec rm -rf 
"{}" +
           tar -zcvhf release_jemalloc_builder.tar build/latest/output 
build/latest/bin build/latest/src/server/test/config.ini hadoop-bin 
zookeeper-bin
       - name: Upload Artifact
         uses: actions/upload-artifact@v3
diff --git a/src/common/test/config-test.ini b/src/common/test/config-test.ini
index 774ac82cd..2775e06bd 100644
--- a/src/common/test/config-test.ini
+++ b/src/common/test/config-test.ini
@@ -92,6 +92,7 @@ rpc_message_header_format = dsn
 rpc_timeout_milliseconds = 5000
 
 [replication]
+disk_min_available_space_ratio = 10
 cluster_name = master-cluster
 
 [duplication-group]
diff --git a/src/common/test/run.sh b/src/common/test/run.sh
index ce89cc4ea..affb98db8 100755
--- a/src/common/test/run.sh
+++ b/src/common/test/run.sh
@@ -1,4 +1,4 @@
-#!/bin/sh
+#!/bin/bash
 # The MIT License (MIT)
 #
 # Copyright (c) 2015 Microsoft Corporation
@@ -31,6 +31,25 @@ exit_if_fail() {
     fi
 }
 
+if [ -n ${TEST_OPTS} ]; then
+    if [ ! -f ./config-test.ini ]; then
+        echo "./config-test.ini does not exists !"
+        exit 1
+    fi
+
+    OPTS=`echo ${TEST_OPTS} | xargs`
+    config_kvs=(${OPTS//,/ })
+    for config_kv in ${config_kvs[@]}; do
+        config_kv=`echo $config_kv | xargs`
+        kv=(${config_kv//=/ })
+        if [ ! ${#kv[*]} -eq 2 ]; then
+            echo "Invalid config kv !"
+            exit 1
+        fi
+        sed -i '/^\s*'"${kv[0]}"'/c '"${kv[0]}"' = '"${kv[1]}" 
./config-test.ini
+    done
+fi
+
 ./dsn_replication_common_test
 
 exit_if_fail $? "run unit test failed"
diff --git a/src/meta/test/config-test.ini b/src/meta/test/config-test.ini
index 26bf34f75..d0a865656 100644
--- a/src/meta/test/config-test.ini
+++ b/src/meta/test/config-test.ini
@@ -106,6 +106,7 @@ only_move_primary = false
 cold_backup_disabled = false
 
 [replication]
+disk_min_available_space_ratio = 10
 cluster_name = master-cluster
 duplication_enabled = true
 
diff --git a/src/meta/test/run.sh b/src/meta/test/run.sh
index ad104aa6b..207a9c7f8 100755
--- a/src/meta/test/run.sh
+++ b/src/meta/test/run.sh
@@ -1,4 +1,4 @@
-#!/bin/sh
+#!/bin/bash
 # The MIT License (MIT)
 #
 # Copyright (c) 2015 Microsoft Corporation
@@ -28,6 +28,25 @@ if [ -z "${REPORT_DIR}" ]; then
     REPORT_DIR="."
 fi
 
+if [ -n ${TEST_OPTS} ]; then
+    if [ ! -f "./config-test.ini" ]; then
+        echo "./config-test.ini does not exists"
+        exit 1
+    fi
+
+    OPTS=`echo ${TEST_OPTS} | xargs`
+    config_kvs=(${OPTS//,/ })
+    for config_kv in ${config_kvs[@]}; do
+        config_kv=`echo $config_kv | xargs`
+        kv=(${config_kv//=/ })
+        if [ ! ${#kv[*]} -eq 2 ]; then
+            echo "Invalid config kv !"
+            exit 1
+        fi
+        sed -i '/^\s*'"${kv[0]}"'/c '"${kv[0]}"' = '"${kv[1]}" 
./config-test.ini
+    done
+fi
+
 ./clear.sh
 output_xml="${REPORT_DIR}/dsn.meta.test.1.xml"
 GTEST_OUTPUT="xml:${output_xml}" ./dsn.meta.test
diff --git a/src/replica/backup/test/config-test.ini 
b/src/replica/backup/test/config-test.ini
index b24a8ff14..ad6433590 100644
--- a/src/replica/backup/test/config-test.ini
+++ b/src/replica/backup/test/config-test.ini
@@ -51,6 +51,7 @@ partitioned = true
 name = replica_long
 
 [replication]
+disk_min_available_space_ratio = 10
 cluster_name = master-cluster
 
 [duplication-group]
diff --git a/src/replica/backup/test/run.sh b/src/replica/backup/test/run.sh
index 996196944..73aa02be9 100755
--- a/src/replica/backup/test/run.sh
+++ b/src/replica/backup/test/run.sh
@@ -1,4 +1,4 @@
-#!/bin/sh
+#!/bin/bash
 # The MIT License (MIT)
 #
 # Copyright (c) 2015 Microsoft Corporation
@@ -23,6 +23,24 @@
 # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
 # THE SOFTWARE.
 
+if [ -n ${TEST_OPTS} ]; then
+    if [ ! -f "./config-test.ini" ]; then
+        echo "./config-test.ini does not exists"
+        exit 1
+    fi
+
+    OPTS=`echo ${TEST_OPTS} | xargs`
+    config_kvs=(${OPTS//,/ })
+    for config_kv in ${config_kvs[@]}; do
+        config_kv=`echo $config_kv | xargs`
+        kv=(${config_kv//=/ })
+        if [ ! ${#kv[*]} -eq 2 ]; then
+            echo "Invalid config kv !"
+            exit 1
+        fi
+        sed -i '/^\s*'"${kv[0]}"'/c '"${kv[0]}"' = '"${kv[1]}" 
./config-test.ini
+    done
+fi
 
 ./dsn_replica_backup_test
 
diff --git a/src/replica/bulk_load/test/config-test.ini 
b/src/replica/bulk_load/test/config-test.ini
index d9d8fd9da..7bdc530aa 100644
--- a/src/replica/bulk_load/test/config-test.ini
+++ b/src/replica/bulk_load/test/config-test.ini
@@ -91,6 +91,9 @@ rpc_call_channel = RPC_CHANNEL_TCP
 rpc_message_header_format = dsn
 rpc_timeout_milliseconds = 5000
 
+[replication]
+disk_min_available_space_ratio = 10
+
 [block_service.local_service]
 type = local_service
 args =
diff --git a/src/replica/bulk_load/test/run.sh 
b/src/replica/bulk_load/test/run.sh
index 91ba50645..7b060300d 100755
--- a/src/replica/bulk_load/test/run.sh
+++ b/src/replica/bulk_load/test/run.sh
@@ -1,4 +1,4 @@
-#!/bin/sh
+#!/bin/bash
 # The MIT License (MIT)
 #
 # Copyright (c) 2015 Microsoft Corporation
@@ -23,6 +23,24 @@
 # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
 # THE SOFTWARE.
 
+if [ -n ${TEST_OPTS} ]; then
+    if [ ! -f "./config-test.ini" ]; then
+        echo "./config-test.ini does not exists"
+        exit 1
+    fi
+
+    OPTS=`echo ${TEST_OPTS} | xargs`
+    config_kvs=(${OPTS//,/ })
+    for config_kv in ${config_kvs[@]}; do
+        config_kv=`echo $config_kv | xargs`
+        kv=(${config_kv//=/ })
+        if [ ! ${#kv[*]} -eq 2 ]; then
+            echo "Invalid config kv !"
+            exit 1
+        fi
+        sed -i '/^\s*'"${kv[0]}"'/c '"${kv[0]}"' = '"${kv[1]}" 
./config-test.ini
+    done
+fi
 
 ./dsn_replica_bulk_load_test
 
diff --git a/src/replica/duplication/test/config-test.ini 
b/src/replica/duplication/test/config-test.ini
index 5eb6b1634..a06a16552 100644
--- a/src/replica/duplication/test/config-test.ini
+++ b/src/replica/duplication/test/config-test.ini
@@ -50,6 +50,9 @@ partitioned = true
 [threadpool.THREAD_POOL_REPLICATION_LONG]
 name = replica_long
 
+[replication]
+disk_min_available_space_ratio = 10
+
 [duplication-group]
 master-cluster = 1
 slave-cluster  = 2
diff --git a/src/replica/duplication/test/run.sh 
b/src/replica/duplication/test/run.sh
index c72b65788..cf9d4b11e 100755
--- a/src/replica/duplication/test/run.sh
+++ b/src/replica/duplication/test/run.sh
@@ -1,4 +1,4 @@
-#!/bin/sh
+#!/bin/bash
 # The MIT License (MIT)
 #
 # Copyright (c) 2015 Microsoft Corporation
@@ -23,6 +23,24 @@
 # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
 # THE SOFTWARE.
 
+if [ -n ${TEST_OPTS} ]; then
+    if [ ! -f "./config-test.ini" ]; then
+        echo "./config-test.ini does not exists"
+        exit 1
+    fi
+
+    OPTS=`echo ${TEST_OPTS} | xargs`
+    config_kvs=(${OPTS//,/ })
+    for config_kv in ${config_kvs[@]}; do
+        config_kv=`echo $config_kv | xargs`
+        kv=(${config_kv//=/ })
+        if [ ! ${#kv[*]} -eq 2 ]; then
+            echo "Invalid config kv !"
+            exit 1
+        fi
+        sed -i '/^\s*'"${kv[0]}"'/c '"${kv[0]}"' = '"${kv[1]}" 
./config-test.ini
+    done
+fi
 
 ./dsn_replica_dup_test
 
diff --git a/src/replica/split/test/config-test.ini 
b/src/replica/split/test/config-test.ini
index ca0550f48..86279cd5a 100644
--- a/src/replica/split/test/config-test.ini
+++ b/src/replica/split/test/config-test.ini
@@ -86,3 +86,6 @@ allow_inline = false
 rpc_call_channel = RPC_CHANNEL_TCP
 rpc_message_header_format = dsn
 rpc_timeout_milliseconds = 5000
+
+[replication]
+disk_min_available_space_ratio = 10
diff --git a/src/replica/split/test/run.sh b/src/replica/split/test/run.sh
index 397d6f7a8..71820b093 100755
--- a/src/replica/split/test/run.sh
+++ b/src/replica/split/test/run.sh
@@ -1,4 +1,4 @@
-#!/bin/sh
+#!/bin/bash
 # The MIT License (MIT)
 #
 # Copyright (c) 2015 Microsoft Corporation
@@ -23,6 +23,24 @@
 # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
 # THE SOFTWARE.
 
+if [ -n ${TEST_OPTS} ]; then
+    if [ ! -f "./config-test.ini" ]; then
+        echo "./config-test.ini does not exists"
+        exit 1
+    fi
+
+    OPTS=`echo ${TEST_OPTS} | xargs`
+    config_kvs=(${OPTS//,/ })
+    for config_kv in ${config_kvs[@]}; do
+        config_kv=`echo $config_kv | xargs`
+        kv=(${config_kv//=/ })
+        if [ ! ${#kv[*]} -eq 2 ]; then
+            echo "Invalid config kv !"
+            exit 1
+        fi
+        sed -i '/^\s*'"${kv[0]}"'/c '"${kv[0]}"' = '"${kv[1]}" 
./config-test.ini
+    done
+fi
 
 ./dsn_replica_split_test
 
diff --git a/src/replica/storage/simple_kv/config.ini 
b/src/replica/storage/simple_kv/config.ini
index e1b1013e0..ad9ec3371 100644
--- a/src/replica/storage/simple_kv/config.ini
+++ b/src/replica/storage/simple_kv/config.ini
@@ -152,6 +152,7 @@ max_replica_count = 3
 stateful = true
 
 [replication]
+disk_min_available_space_ratio = 10
 prepare_timeout_ms_for_secondaries = 10000
 prepare_timeout_ms_for_potential_secondaries = 20000
 
diff --git a/src/replica/storage/simple_kv/run.sh 
b/src/replica/storage/simple_kv/run.sh
index 6f0b84f18..7669b4daf 100755
--- a/src/replica/storage/simple_kv/run.sh
+++ b/src/replica/storage/simple_kv/run.sh
@@ -29,6 +29,25 @@ if [ ! -f dsn.replication.simple_kv ]; then
     exit 1
 fi
 
+if [ -n ${TEST_OPTS} ]; then
+    if [ ! -f "./config.ini" ]; then
+        echo "./config.ini does not exists"
+        exit 1
+    fi
+
+    OPTS=`echo ${TEST_OPTS} | xargs`
+    config_kvs=(${OPTS//,/ })
+    for config_kv in ${config_kvs[@]}; do
+        config_kv=`echo $config_kv | xargs`
+        kv=(${config_kv//=/ })
+        if [ ! ${#kv[*]} -eq 2 ]; then
+            echo "Invalid config kv !"
+            exit 1
+        fi
+        sed -i '/^\s*'"${kv[0]}"'/c '"${kv[0]}"' = '"${kv[1]}" ./config.ini
+    done
+fi
+
 ./clear.sh
 
 echo "running dsn.replication.simple_kv for 20 seconds ..."
diff --git a/src/replica/storage/simple_kv/test/case-000.ini 
b/src/replica/storage/simple_kv/test/case-000.ini
index 76896bdd8..a05a95e53 100644
--- a/src/replica/storage/simple_kv/test/case-000.ini
+++ b/src/replica/storage/simple_kv/test/case-000.ini
@@ -155,6 +155,7 @@ partition_count = 1
 max_replica_count = 3
 
 [replication]
+disk_min_available_space_ratio = 10
 empty_write_disabled = true
 prepare_timeout_ms_for_secondaries = 1000
 prepare_timeout_ms_for_potential_secondaries = 3000
diff --git a/src/replica/storage/simple_kv/test/case-001.ini 
b/src/replica/storage/simple_kv/test/case-001.ini
index d5b5339f0..4f214ef80 100644
--- a/src/replica/storage/simple_kv/test/case-001.ini
+++ b/src/replica/storage/simple_kv/test/case-001.ini
@@ -155,6 +155,7 @@ partition_count = 1
 max_replica_count = 3
 
 [replication]
+disk_min_available_space_ratio = 10
 empty_write_disabled = true
 prepare_timeout_ms_for_secondaries = 1000
 prepare_timeout_ms_for_potential_secondaries = 3000
diff --git a/src/replica/storage/simple_kv/test/case-002.ini 
b/src/replica/storage/simple_kv/test/case-002.ini
index 6beb5a024..d75bbc101 100644
--- a/src/replica/storage/simple_kv/test/case-002.ini
+++ b/src/replica/storage/simple_kv/test/case-002.ini
@@ -155,6 +155,7 @@ partition_count = 1
 max_replica_count = 3
 
 [replication]
+disk_min_available_space_ratio = 10
 empty_write_disabled = true
 prepare_timeout_ms_for_secondaries = 1000
 prepare_timeout_ms_for_potential_secondaries = 3000
diff --git a/src/replica/storage/simple_kv/test/case-003.ini 
b/src/replica/storage/simple_kv/test/case-003.ini
index b6865db7a..8d60d50d6 100644
--- a/src/replica/storage/simple_kv/test/case-003.ini
+++ b/src/replica/storage/simple_kv/test/case-003.ini
@@ -155,6 +155,7 @@ partition_count = 1
 max_replica_count = 3
 
 [replication]
+disk_min_available_space_ratio = 10
 empty_write_disabled = true
 prepare_timeout_ms_for_secondaries = 1000
 prepare_timeout_ms_for_potential_secondaries = 3000
diff --git a/src/replica/storage/simple_kv/test/case-004.ini 
b/src/replica/storage/simple_kv/test/case-004.ini
index 6dcbb398c..5c74f7e28 100644
--- a/src/replica/storage/simple_kv/test/case-004.ini
+++ b/src/replica/storage/simple_kv/test/case-004.ini
@@ -155,6 +155,7 @@ partition_count = 1
 max_replica_count = 3
 
 [replication]
+disk_min_available_space_ratio = 10
 empty_write_disabled = true
 prepare_timeout_ms_for_secondaries = 1000
 prepare_timeout_ms_for_potential_secondaries = 3000
diff --git a/src/replica/storage/simple_kv/test/case-005.ini 
b/src/replica/storage/simple_kv/test/case-005.ini
index 7446967dd..4c8c84b32 100644
--- a/src/replica/storage/simple_kv/test/case-005.ini
+++ b/src/replica/storage/simple_kv/test/case-005.ini
@@ -155,6 +155,7 @@ partition_count = 1
 max_replica_count = 3
 
 [replication]
+disk_min_available_space_ratio = 10
 empty_write_disabled = true
 prepare_timeout_ms_for_secondaries = 1000
 prepare_timeout_ms_for_potential_secondaries = 3000
diff --git a/src/replica/storage/simple_kv/test/case-006.ini 
b/src/replica/storage/simple_kv/test/case-006.ini
index beb1272fc..18e782b77 100644
--- a/src/replica/storage/simple_kv/test/case-006.ini
+++ b/src/replica/storage/simple_kv/test/case-006.ini
@@ -156,6 +156,7 @@ partition_count = 1
 max_replica_count = 3
 
 [replication]
+disk_min_available_space_ratio = 10
 empty_write_disabled = true
 prepare_timeout_ms_for_secondaries = 1000
 prepare_timeout_ms_for_potential_secondaries = 3000
diff --git a/src/replica/storage/simple_kv/test/case-100.ini 
b/src/replica/storage/simple_kv/test/case-100.ini
index e71811be9..0f601799a 100644
--- a/src/replica/storage/simple_kv/test/case-100.ini
+++ b/src/replica/storage/simple_kv/test/case-100.ini
@@ -156,6 +156,7 @@ partition_count = 1
 max_replica_count = 3
 
 [replication]
+disk_min_available_space_ratio = 10
 empty_write_disabled = true
 prepare_timeout_ms_for_secondaries = 1000
 prepare_timeout_ms_for_potential_secondaries = 3000
diff --git a/src/replica/storage/simple_kv/test/case-101.ini 
b/src/replica/storage/simple_kv/test/case-101.ini
index e71811be9..0f601799a 100644
--- a/src/replica/storage/simple_kv/test/case-101.ini
+++ b/src/replica/storage/simple_kv/test/case-101.ini
@@ -156,6 +156,7 @@ partition_count = 1
 max_replica_count = 3
 
 [replication]
+disk_min_available_space_ratio = 10
 empty_write_disabled = true
 prepare_timeout_ms_for_secondaries = 1000
 prepare_timeout_ms_for_potential_secondaries = 3000
diff --git a/src/replica/storage/simple_kv/test/case-102.ini 
b/src/replica/storage/simple_kv/test/case-102.ini
index 9b0c33ea7..8c3504778 100644
--- a/src/replica/storage/simple_kv/test/case-102.ini
+++ b/src/replica/storage/simple_kv/test/case-102.ini
@@ -156,6 +156,7 @@ partition_count = 1
 max_replica_count = 3
 
 [replication]
+disk_min_available_space_ratio = 10
 empty_write_disabled = true
 prepare_timeout_ms_for_secondaries = 1000
 prepare_timeout_ms_for_potential_secondaries = 3000
diff --git a/src/replica/storage/simple_kv/test/case-103.ini 
b/src/replica/storage/simple_kv/test/case-103.ini
index c57b99aa2..64a643dd0 100644
--- a/src/replica/storage/simple_kv/test/case-103.ini
+++ b/src/replica/storage/simple_kv/test/case-103.ini
@@ -156,6 +156,7 @@ partition_count = 1
 max_replica_count = 3
 
 [replication]
+disk_min_available_space_ratio = 10
 empty_write_disabled = true
 prepare_timeout_ms_for_secondaries = 1000
 prepare_timeout_ms_for_potential_secondaries = 3000
diff --git a/src/replica/storage/simple_kv/test/case-104.ini 
b/src/replica/storage/simple_kv/test/case-104.ini
index e71811be9..0f601799a 100644
--- a/src/replica/storage/simple_kv/test/case-104.ini
+++ b/src/replica/storage/simple_kv/test/case-104.ini
@@ -156,6 +156,7 @@ partition_count = 1
 max_replica_count = 3
 
 [replication]
+disk_min_available_space_ratio = 10
 empty_write_disabled = true
 prepare_timeout_ms_for_secondaries = 1000
 prepare_timeout_ms_for_potential_secondaries = 3000
diff --git a/src/replica/storage/simple_kv/test/case-105.ini 
b/src/replica/storage/simple_kv/test/case-105.ini
index e71811be9..0f601799a 100644
--- a/src/replica/storage/simple_kv/test/case-105.ini
+++ b/src/replica/storage/simple_kv/test/case-105.ini
@@ -156,6 +156,7 @@ partition_count = 1
 max_replica_count = 3
 
 [replication]
+disk_min_available_space_ratio = 10
 empty_write_disabled = true
 prepare_timeout_ms_for_secondaries = 1000
 prepare_timeout_ms_for_potential_secondaries = 3000
diff --git a/src/replica/storage/simple_kv/test/case-106.ini 
b/src/replica/storage/simple_kv/test/case-106.ini
index e71811be9..0f601799a 100644
--- a/src/replica/storage/simple_kv/test/case-106.ini
+++ b/src/replica/storage/simple_kv/test/case-106.ini
@@ -156,6 +156,7 @@ partition_count = 1
 max_replica_count = 3
 
 [replication]
+disk_min_available_space_ratio = 10
 empty_write_disabled = true
 prepare_timeout_ms_for_secondaries = 1000
 prepare_timeout_ms_for_potential_secondaries = 3000
diff --git a/src/replica/storage/simple_kv/test/case-107.ini 
b/src/replica/storage/simple_kv/test/case-107.ini
index e71811be9..0f601799a 100644
--- a/src/replica/storage/simple_kv/test/case-107.ini
+++ b/src/replica/storage/simple_kv/test/case-107.ini
@@ -156,6 +156,7 @@ partition_count = 1
 max_replica_count = 3
 
 [replication]
+disk_min_available_space_ratio = 10
 empty_write_disabled = true
 prepare_timeout_ms_for_secondaries = 1000
 prepare_timeout_ms_for_potential_secondaries = 3000
diff --git a/src/replica/storage/simple_kv/test/case-108.ini 
b/src/replica/storage/simple_kv/test/case-108.ini
index e71811be9..0f601799a 100644
--- a/src/replica/storage/simple_kv/test/case-108.ini
+++ b/src/replica/storage/simple_kv/test/case-108.ini
@@ -156,6 +156,7 @@ partition_count = 1
 max_replica_count = 3
 
 [replication]
+disk_min_available_space_ratio = 10
 empty_write_disabled = true
 prepare_timeout_ms_for_secondaries = 1000
 prepare_timeout_ms_for_potential_secondaries = 3000
diff --git a/src/replica/storage/simple_kv/test/case-109.ini 
b/src/replica/storage/simple_kv/test/case-109.ini
index b674b1b40..d95415e37 100644
--- a/src/replica/storage/simple_kv/test/case-109.ini
+++ b/src/replica/storage/simple_kv/test/case-109.ini
@@ -156,6 +156,7 @@ partition_count = 1
 max_replica_count = 3
 
 [replication]
+disk_min_available_space_ratio = 10
 empty_write_disabled = true
 prepare_timeout_ms_for_secondaries = 1000
 prepare_timeout_ms_for_potential_secondaries = 3000
diff --git a/src/replica/storage/simple_kv/test/case-200.ini 
b/src/replica/storage/simple_kv/test/case-200.ini
index e71811be9..0f601799a 100644
--- a/src/replica/storage/simple_kv/test/case-200.ini
+++ b/src/replica/storage/simple_kv/test/case-200.ini
@@ -156,6 +156,7 @@ partition_count = 1
 max_replica_count = 3
 
 [replication]
+disk_min_available_space_ratio = 10
 empty_write_disabled = true
 prepare_timeout_ms_for_secondaries = 1000
 prepare_timeout_ms_for_potential_secondaries = 3000
diff --git a/src/replica/storage/simple_kv/test/case-201.ini 
b/src/replica/storage/simple_kv/test/case-201.ini
index e71811be9..0f601799a 100644
--- a/src/replica/storage/simple_kv/test/case-201.ini
+++ b/src/replica/storage/simple_kv/test/case-201.ini
@@ -156,6 +156,7 @@ partition_count = 1
 max_replica_count = 3
 
 [replication]
+disk_min_available_space_ratio = 10
 empty_write_disabled = true
 prepare_timeout_ms_for_secondaries = 1000
 prepare_timeout_ms_for_potential_secondaries = 3000
diff --git a/src/replica/storage/simple_kv/test/case-202-0.ini 
b/src/replica/storage/simple_kv/test/case-202-0.ini
index 0dda324d6..a25eb9145 100644
--- a/src/replica/storage/simple_kv/test/case-202-0.ini
+++ b/src/replica/storage/simple_kv/test/case-202-0.ini
@@ -156,6 +156,7 @@ partition_count = 1
 max_replica_count = 3
 
 [replication]
+disk_min_available_space_ratio = 10
 empty_write_disabled = true
 prepare_timeout_ms_for_secondaries = 1000
 prepare_timeout_ms_for_potential_secondaries = 3000
diff --git a/src/replica/storage/simple_kv/test/case-202-1.ini 
b/src/replica/storage/simple_kv/test/case-202-1.ini
index 0dda324d6..a25eb9145 100644
--- a/src/replica/storage/simple_kv/test/case-202-1.ini
+++ b/src/replica/storage/simple_kv/test/case-202-1.ini
@@ -156,6 +156,7 @@ partition_count = 1
 max_replica_count = 3
 
 [replication]
+disk_min_available_space_ratio = 10
 empty_write_disabled = true
 prepare_timeout_ms_for_secondaries = 1000
 prepare_timeout_ms_for_potential_secondaries = 3000
diff --git a/src/replica/storage/simple_kv/test/case-203-0.ini 
b/src/replica/storage/simple_kv/test/case-203-0.ini
index 28af6cfe9..82d693aa9 100644
--- a/src/replica/storage/simple_kv/test/case-203-0.ini
+++ b/src/replica/storage/simple_kv/test/case-203-0.ini
@@ -156,6 +156,7 @@ partition_count = 1
 max_replica_count = 3
 
 [replication]
+disk_min_available_space_ratio = 10
 empty_write_disabled = true
 prepare_timeout_ms_for_secondaries = 1000
 prepare_timeout_ms_for_potential_secondaries = 3000
diff --git a/src/replica/storage/simple_kv/test/case-204.ini 
b/src/replica/storage/simple_kv/test/case-204.ini
index 7dab9e62e..9fde171e6 100644
--- a/src/replica/storage/simple_kv/test/case-204.ini
+++ b/src/replica/storage/simple_kv/test/case-204.ini
@@ -156,6 +156,7 @@ partition_count = 1
 max_replica_count = 3
 
 [replication]
+disk_min_available_space_ratio = 10
 empty_write_disabled = true
 prepare_timeout_ms_for_secondaries = 1000
 prepare_timeout_ms_for_potential_secondaries = 3000
diff --git a/src/replica/storage/simple_kv/test/case-205.ini 
b/src/replica/storage/simple_kv/test/case-205.ini
index 7dab9e62e..9fde171e6 100644
--- a/src/replica/storage/simple_kv/test/case-205.ini
+++ b/src/replica/storage/simple_kv/test/case-205.ini
@@ -156,6 +156,7 @@ partition_count = 1
 max_replica_count = 3
 
 [replication]
+disk_min_available_space_ratio = 10
 empty_write_disabled = true
 prepare_timeout_ms_for_secondaries = 1000
 prepare_timeout_ms_for_potential_secondaries = 3000
diff --git a/src/replica/storage/simple_kv/test/case-206.ini 
b/src/replica/storage/simple_kv/test/case-206.ini
index 7dab9e62e..9fde171e6 100644
--- a/src/replica/storage/simple_kv/test/case-206.ini
+++ b/src/replica/storage/simple_kv/test/case-206.ini
@@ -156,6 +156,7 @@ partition_count = 1
 max_replica_count = 3
 
 [replication]
+disk_min_available_space_ratio = 10
 empty_write_disabled = true
 prepare_timeout_ms_for_secondaries = 1000
 prepare_timeout_ms_for_potential_secondaries = 3000
diff --git a/src/replica/storage/simple_kv/test/case-207.ini 
b/src/replica/storage/simple_kv/test/case-207.ini
index 7dab9e62e..9fde171e6 100644
--- a/src/replica/storage/simple_kv/test/case-207.ini
+++ b/src/replica/storage/simple_kv/test/case-207.ini
@@ -156,6 +156,7 @@ partition_count = 1
 max_replica_count = 3
 
 [replication]
+disk_min_available_space_ratio = 10
 empty_write_disabled = true
 prepare_timeout_ms_for_secondaries = 1000
 prepare_timeout_ms_for_potential_secondaries = 3000
diff --git a/src/replica/storage/simple_kv/test/case-208.ini 
b/src/replica/storage/simple_kv/test/case-208.ini
index 7dab9e62e..9fde171e6 100644
--- a/src/replica/storage/simple_kv/test/case-208.ini
+++ b/src/replica/storage/simple_kv/test/case-208.ini
@@ -156,6 +156,7 @@ partition_count = 1
 max_replica_count = 3
 
 [replication]
+disk_min_available_space_ratio = 10
 empty_write_disabled = true
 prepare_timeout_ms_for_secondaries = 1000
 prepare_timeout_ms_for_potential_secondaries = 3000
diff --git a/src/replica/storage/simple_kv/test/case-209.ini 
b/src/replica/storage/simple_kv/test/case-209.ini
index 7dab9e62e..9fde171e6 100644
--- a/src/replica/storage/simple_kv/test/case-209.ini
+++ b/src/replica/storage/simple_kv/test/case-209.ini
@@ -156,6 +156,7 @@ partition_count = 1
 max_replica_count = 3
 
 [replication]
+disk_min_available_space_ratio = 10
 empty_write_disabled = true
 prepare_timeout_ms_for_secondaries = 1000
 prepare_timeout_ms_for_potential_secondaries = 3000
diff --git a/src/replica/storage/simple_kv/test/case-210.ini 
b/src/replica/storage/simple_kv/test/case-210.ini
index a3897bb67..23784c15f 100644
--- a/src/replica/storage/simple_kv/test/case-210.ini
+++ b/src/replica/storage/simple_kv/test/case-210.ini
@@ -156,6 +156,7 @@ partition_count = 1
 max_replica_count = 3
 
 [replication]
+disk_min_available_space_ratio = 10
 empty_write_disabled = true
 prepare_timeout_ms_for_secondaries = 1000
 prepare_timeout_ms_for_potential_secondaries = 3000
diff --git a/src/replica/storage/simple_kv/test/case-211.ini 
b/src/replica/storage/simple_kv/test/case-211.ini
index a3897bb67..23784c15f 100644
--- a/src/replica/storage/simple_kv/test/case-211.ini
+++ b/src/replica/storage/simple_kv/test/case-211.ini
@@ -156,6 +156,7 @@ partition_count = 1
 max_replica_count = 3
 
 [replication]
+disk_min_available_space_ratio = 10
 empty_write_disabled = true
 prepare_timeout_ms_for_secondaries = 1000
 prepare_timeout_ms_for_potential_secondaries = 3000
diff --git a/src/replica/storage/simple_kv/test/case-212.ini 
b/src/replica/storage/simple_kv/test/case-212.ini
index 2b43d145a..4582c0787 100644
--- a/src/replica/storage/simple_kv/test/case-212.ini
+++ b/src/replica/storage/simple_kv/test/case-212.ini
@@ -156,6 +156,7 @@ partition_count = 1
 max_replica_count = 3
 
 [replication]
+disk_min_available_space_ratio = 10
 empty_write_disabled = true
 prepare_timeout_ms_for_secondaries = 1000
 prepare_timeout_ms_for_potential_secondaries = 3000
diff --git a/src/replica/storage/simple_kv/test/case-213.ini 
b/src/replica/storage/simple_kv/test/case-213.ini
index 247a8fea5..103a599a6 100644
--- a/src/replica/storage/simple_kv/test/case-213.ini
+++ b/src/replica/storage/simple_kv/test/case-213.ini
@@ -156,6 +156,7 @@ partition_count = 1
 max_replica_count = 3
 
 [replication]
+disk_min_available_space_ratio = 10
 empty_write_disabled = true
 prepare_timeout_ms_for_secondaries = 1000
 prepare_timeout_ms_for_potential_secondaries = 3000
diff --git a/src/replica/storage/simple_kv/test/case-214.ini 
b/src/replica/storage/simple_kv/test/case-214.ini
index 7dab9e62e..9fde171e6 100644
--- a/src/replica/storage/simple_kv/test/case-214.ini
+++ b/src/replica/storage/simple_kv/test/case-214.ini
@@ -156,6 +156,7 @@ partition_count = 1
 max_replica_count = 3
 
 [replication]
+disk_min_available_space_ratio = 10
 empty_write_disabled = true
 prepare_timeout_ms_for_secondaries = 1000
 prepare_timeout_ms_for_potential_secondaries = 3000
diff --git a/src/replica/storage/simple_kv/test/case-215.ini 
b/src/replica/storage/simple_kv/test/case-215.ini
index 7dab9e62e..9fde171e6 100644
--- a/src/replica/storage/simple_kv/test/case-215.ini
+++ b/src/replica/storage/simple_kv/test/case-215.ini
@@ -156,6 +156,7 @@ partition_count = 1
 max_replica_count = 3
 
 [replication]
+disk_min_available_space_ratio = 10
 empty_write_disabled = true
 prepare_timeout_ms_for_secondaries = 1000
 prepare_timeout_ms_for_potential_secondaries = 3000
diff --git a/src/replica/storage/simple_kv/test/case-216.ini 
b/src/replica/storage/simple_kv/test/case-216.ini
index 7dab9e62e..9fde171e6 100644
--- a/src/replica/storage/simple_kv/test/case-216.ini
+++ b/src/replica/storage/simple_kv/test/case-216.ini
@@ -156,6 +156,7 @@ partition_count = 1
 max_replica_count = 3
 
 [replication]
+disk_min_available_space_ratio = 10
 empty_write_disabled = true
 prepare_timeout_ms_for_secondaries = 1000
 prepare_timeout_ms_for_potential_secondaries = 3000
diff --git a/src/replica/storage/simple_kv/test/case-300-0.ini 
b/src/replica/storage/simple_kv/test/case-300-0.ini
index e71811be9..0f601799a 100644
--- a/src/replica/storage/simple_kv/test/case-300-0.ini
+++ b/src/replica/storage/simple_kv/test/case-300-0.ini
@@ -156,6 +156,7 @@ partition_count = 1
 max_replica_count = 3
 
 [replication]
+disk_min_available_space_ratio = 10
 empty_write_disabled = true
 prepare_timeout_ms_for_secondaries = 1000
 prepare_timeout_ms_for_potential_secondaries = 3000
diff --git a/src/replica/storage/simple_kv/test/case-300-1.ini 
b/src/replica/storage/simple_kv/test/case-300-1.ini
index e71811be9..0f601799a 100644
--- a/src/replica/storage/simple_kv/test/case-300-1.ini
+++ b/src/replica/storage/simple_kv/test/case-300-1.ini
@@ -156,6 +156,7 @@ partition_count = 1
 max_replica_count = 3
 
 [replication]
+disk_min_available_space_ratio = 10
 empty_write_disabled = true
 prepare_timeout_ms_for_secondaries = 1000
 prepare_timeout_ms_for_potential_secondaries = 3000
diff --git a/src/replica/storage/simple_kv/test/case-300-2.ini 
b/src/replica/storage/simple_kv/test/case-300-2.ini
index e71811be9..0f601799a 100644
--- a/src/replica/storage/simple_kv/test/case-300-2.ini
+++ b/src/replica/storage/simple_kv/test/case-300-2.ini
@@ -156,6 +156,7 @@ partition_count = 1
 max_replica_count = 3
 
 [replication]
+disk_min_available_space_ratio = 10
 empty_write_disabled = true
 prepare_timeout_ms_for_secondaries = 1000
 prepare_timeout_ms_for_potential_secondaries = 3000
diff --git a/src/replica/storage/simple_kv/test/case-301.ini 
b/src/replica/storage/simple_kv/test/case-301.ini
index e71811be9..0f601799a 100644
--- a/src/replica/storage/simple_kv/test/case-301.ini
+++ b/src/replica/storage/simple_kv/test/case-301.ini
@@ -156,6 +156,7 @@ partition_count = 1
 max_replica_count = 3
 
 [replication]
+disk_min_available_space_ratio = 10
 empty_write_disabled = true
 prepare_timeout_ms_for_secondaries = 1000
 prepare_timeout_ms_for_potential_secondaries = 3000
diff --git a/src/replica/storage/simple_kv/test/case-302.ini 
b/src/replica/storage/simple_kv/test/case-302.ini
index 90681e6b9..38d3a831f 100644
--- a/src/replica/storage/simple_kv/test/case-302.ini
+++ b/src/replica/storage/simple_kv/test/case-302.ini
@@ -156,6 +156,7 @@ partition_count = 1
 max_replica_count = 3
 
 [replication]
+disk_min_available_space_ratio = 10
 empty_write_disabled = true
 prepare_timeout_ms_for_secondaries = 1000
 prepare_timeout_ms_for_potential_secondaries = 3000
diff --git a/src/replica/storage/simple_kv/test/case-303.ini 
b/src/replica/storage/simple_kv/test/case-303.ini
index 0e0e866f8..04932bc94 100644
--- a/src/replica/storage/simple_kv/test/case-303.ini
+++ b/src/replica/storage/simple_kv/test/case-303.ini
@@ -156,6 +156,7 @@ partition_count = 1
 max_replica_count = 3
 
 [replication]
+disk_min_available_space_ratio = 10
 empty_write_disabled = true
 prepare_timeout_ms_for_secondaries = 1000
 prepare_timeout_ms_for_potential_secondaries = 3000
diff --git a/src/replica/storage/simple_kv/test/case-304.ini 
b/src/replica/storage/simple_kv/test/case-304.ini
index e71811be9..0f601799a 100644
--- a/src/replica/storage/simple_kv/test/case-304.ini
+++ b/src/replica/storage/simple_kv/test/case-304.ini
@@ -156,6 +156,7 @@ partition_count = 1
 max_replica_count = 3
 
 [replication]
+disk_min_available_space_ratio = 10
 empty_write_disabled = true
 prepare_timeout_ms_for_secondaries = 1000
 prepare_timeout_ms_for_potential_secondaries = 3000
diff --git a/src/replica/storage/simple_kv/test/case-305.ini 
b/src/replica/storage/simple_kv/test/case-305.ini
index 0e0e866f8..04932bc94 100644
--- a/src/replica/storage/simple_kv/test/case-305.ini
+++ b/src/replica/storage/simple_kv/test/case-305.ini
@@ -156,6 +156,7 @@ partition_count = 1
 max_replica_count = 3
 
 [replication]
+disk_min_available_space_ratio = 10
 empty_write_disabled = true
 prepare_timeout_ms_for_secondaries = 1000
 prepare_timeout_ms_for_potential_secondaries = 3000
diff --git a/src/replica/storage/simple_kv/test/case-306.ini 
b/src/replica/storage/simple_kv/test/case-306.ini
index e71811be9..0f601799a 100644
--- a/src/replica/storage/simple_kv/test/case-306.ini
+++ b/src/replica/storage/simple_kv/test/case-306.ini
@@ -156,6 +156,7 @@ partition_count = 1
 max_replica_count = 3
 
 [replication]
+disk_min_available_space_ratio = 10
 empty_write_disabled = true
 prepare_timeout_ms_for_secondaries = 1000
 prepare_timeout_ms_for_potential_secondaries = 3000
diff --git a/src/replica/storage/simple_kv/test/case-307.ini 
b/src/replica/storage/simple_kv/test/case-307.ini
index e71811be9..0f601799a 100644
--- a/src/replica/storage/simple_kv/test/case-307.ini
+++ b/src/replica/storage/simple_kv/test/case-307.ini
@@ -156,6 +156,7 @@ partition_count = 1
 max_replica_count = 3
 
 [replication]
+disk_min_available_space_ratio = 10
 empty_write_disabled = true
 prepare_timeout_ms_for_secondaries = 1000
 prepare_timeout_ms_for_potential_secondaries = 3000
diff --git a/src/replica/storage/simple_kv/test/case-400.ini 
b/src/replica/storage/simple_kv/test/case-400.ini
index e71811be9..0f601799a 100644
--- a/src/replica/storage/simple_kv/test/case-400.ini
+++ b/src/replica/storage/simple_kv/test/case-400.ini
@@ -156,6 +156,7 @@ partition_count = 1
 max_replica_count = 3
 
 [replication]
+disk_min_available_space_ratio = 10
 empty_write_disabled = true
 prepare_timeout_ms_for_secondaries = 1000
 prepare_timeout_ms_for_potential_secondaries = 3000
diff --git a/src/replica/storage/simple_kv/test/case-401.ini 
b/src/replica/storage/simple_kv/test/case-401.ini
index e71811be9..0f601799a 100644
--- a/src/replica/storage/simple_kv/test/case-401.ini
+++ b/src/replica/storage/simple_kv/test/case-401.ini
@@ -156,6 +156,7 @@ partition_count = 1
 max_replica_count = 3
 
 [replication]
+disk_min_available_space_ratio = 10
 empty_write_disabled = true
 prepare_timeout_ms_for_secondaries = 1000
 prepare_timeout_ms_for_potential_secondaries = 3000
diff --git a/src/replica/storage/simple_kv/test/case-402.ini 
b/src/replica/storage/simple_kv/test/case-402.ini
index e71811be9..0f601799a 100644
--- a/src/replica/storage/simple_kv/test/case-402.ini
+++ b/src/replica/storage/simple_kv/test/case-402.ini
@@ -156,6 +156,7 @@ partition_count = 1
 max_replica_count = 3
 
 [replication]
+disk_min_available_space_ratio = 10
 empty_write_disabled = true
 prepare_timeout_ms_for_secondaries = 1000
 prepare_timeout_ms_for_potential_secondaries = 3000
diff --git a/src/replica/storage/simple_kv/test/case-600.ini 
b/src/replica/storage/simple_kv/test/case-600.ini
index beb1272fc..18e782b77 100644
--- a/src/replica/storage/simple_kv/test/case-600.ini
+++ b/src/replica/storage/simple_kv/test/case-600.ini
@@ -156,6 +156,7 @@ partition_count = 1
 max_replica_count = 3
 
 [replication]
+disk_min_available_space_ratio = 10
 empty_write_disabled = true
 prepare_timeout_ms_for_secondaries = 1000
 prepare_timeout_ms_for_potential_secondaries = 3000
diff --git a/src/replica/storage/simple_kv/test/case-601.ini 
b/src/replica/storage/simple_kv/test/case-601.ini
index 0401980fc..9a25f26cc 100644
--- a/src/replica/storage/simple_kv/test/case-601.ini
+++ b/src/replica/storage/simple_kv/test/case-601.ini
@@ -156,6 +156,7 @@ partition_count = 1
 max_replica_count = 3
 
 [replication]
+disk_min_available_space_ratio = 10
 empty_write_disabled = true
 prepare_timeout_ms_for_secondaries = 1000
 prepare_timeout_ms_for_potential_secondaries = 3000
diff --git a/src/replica/storage/simple_kv/test/case-602.ini 
b/src/replica/storage/simple_kv/test/case-602.ini
index beb1272fc..18e782b77 100644
--- a/src/replica/storage/simple_kv/test/case-602.ini
+++ b/src/replica/storage/simple_kv/test/case-602.ini
@@ -156,6 +156,7 @@ partition_count = 1
 max_replica_count = 3
 
 [replication]
+disk_min_available_space_ratio = 10
 empty_write_disabled = true
 prepare_timeout_ms_for_secondaries = 1000
 prepare_timeout_ms_for_potential_secondaries = 3000
diff --git a/src/replica/storage/simple_kv/test/case-603.ini 
b/src/replica/storage/simple_kv/test/case-603.ini
index 4b171e934..1531c037f 100644
--- a/src/replica/storage/simple_kv/test/case-603.ini
+++ b/src/replica/storage/simple_kv/test/case-603.ini
@@ -158,6 +158,7 @@ partition_count = 1
 max_replica_count = 3
 
 [replication]
+disk_min_available_space_ratio = 10
 empty_write_disabled = true
 prepare_timeout_ms_for_secondaries = 1000
 prepare_timeout_ms_for_potential_secondaries = 3000
diff --git a/src/replica/storage/simple_kv/test/config.ini 
b/src/replica/storage/simple_kv/test/config.ini
index 892a31825..b014b44c3 100644
--- a/src/replica/storage/simple_kv/test/config.ini
+++ b/src/replica/storage/simple_kv/test/config.ini
@@ -179,6 +179,7 @@ max_replica_count = 3
 stateful = true
 
 [replication]
+disk_min_available_space_ratio = 10
 
 prepare_timeout_ms_for_secondaries = 10000
 prepare_timeout_ms_for_potential_secondaries = 20000
diff --git a/src/replica/storage/simple_kv/test/run.sh 
b/src/replica/storage/simple_kv/test/run.sh
index 7737b09c9..b3daa127d 100755
--- a/src/replica/storage/simple_kv/test/run.sh
+++ b/src/replica/storage/simple_kv/test/run.sh
@@ -29,6 +29,26 @@ bin=./dsn.rep_tests.simple_kv
 function run_single()
 {
     prefix=$1
+
+    if [ -n ${TEST_OPTS} ]; then
+        if [ ! -f "./${prefix}.ini" ]; then
+            echo "./${prefix}.ini does not exists"
+            exit 1
+        fi
+
+        OPTS=`echo ${TEST_OPTS} | xargs`
+        config_kvs=(${OPTS//,/ })
+        for config_kv in ${config_kvs[@]}; do
+            config_kv=`echo $config_kv | xargs`
+            kv=(${config_kv//=/ })
+            if [ ! ${#kv[*]} -eq 2 ]; then
+                echo "Invalid config kv !"
+                exit 1
+            fi
+            sed -i '/^\s*'"${kv[0]}"'/c '"${kv[0]}"' = '"${kv[1]}" 
./${prefix}.ini
+        done
+    fi
+
     echo "${bin} ${prefix}.ini ${prefix}.act"
     ${bin} ${prefix}.ini ${prefix}.act
     ret=$?
diff --git a/src/replica/test/config-test.ini b/src/replica/test/config-test.ini
index 1a1997cc9..9d73bb5d0 100644
--- a/src/replica/test/config-test.ini
+++ b/src/replica/test/config-test.ini
@@ -87,6 +87,9 @@ rpc_call_channel = RPC_CHANNEL_TCP
 rpc_message_header_format = dsn
 rpc_timeout_milliseconds = 5000
 
+[replication]
+disk_min_available_space_ratio = 10
+
 [block_service.local_service]
 type = local_service
 args =
diff --git a/src/replica/test/run.sh b/src/replica/test/run.sh
index 6d645f332..12152709d 100755
--- a/src/replica/test/run.sh
+++ b/src/replica/test/run.sh
@@ -1,4 +1,4 @@
-#!/bin/sh
+#!/bin/bash
 # The MIT License (MIT)
 #
 # Copyright (c) 2015 Microsoft Corporation
@@ -28,6 +28,25 @@ if [ -z "${REPORT_DIR}" ]; then
     REPORT_DIR="."
 fi
 
+if [ -n ${TEST_OPTS} ]; then
+    if [ ! -f "./config-test.ini" ]; then
+        echo "./config-test.ini does not exists"
+        exit 1
+    fi
+
+    OPTS=`echo ${TEST_OPTS} | xargs`
+    config_kvs=(${OPTS//,/ })
+    for config_kv in ${config_kvs[@]}; do
+        config_kv=`echo $config_kv | xargs`
+        kv=(${config_kv//=/ })
+        if [ ! ${#kv[*]} -eq 2 ]; then
+            echo "Invalid config kv !"
+            exit 1
+        fi
+        sed -i '/^\s*'"${kv[0]}"'/c '"${kv[0]}"' = '"${kv[1]}" 
./config-test.ini
+    done
+fi
+
 ./clear.sh
 output_xml="${REPORT_DIR}/dsn.replica.test.1.xml"
 GTEST_OUTPUT="xml:${output_xml}" ./dsn.replica.test
diff --git a/src/server/test/config.ini b/src/server/test/config.ini
index a1125b265..018d5b28d 100644
--- a/src/server/test/config.ini
+++ b/src/server/test/config.ini
@@ -144,6 +144,7 @@ max_replica_count = 3
 stateful = true
 
 [replication]
+disk_min_available_space_ratio = 10
 data_dirs_black_list_file = /home/mi/.pegasus_data_dirs_black_list
 cluster_name = onebox
 
diff --git a/src/server/test/run.sh b/src/server/test/run.sh
index 76baf02a0..d8da4db1a 100755
--- a/src/server/test/run.sh
+++ b/src/server/test/run.sh
@@ -1,4 +1,4 @@
-#!/usr/bin/env bash
+#!/bin/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
@@ -23,6 +23,25 @@ exit_if_fail() {
     fi
 }
 
+if [ -n ${TEST_OPTS} ]; then
+    if [ ! -f ./config.ini ]; then
+        echo "./config.ini does not exists !"
+        exit 1
+    fi
+
+    OPTS=`echo ${TEST_OPTS} | xargs`
+    config_kvs=(${OPTS//,/ })
+    for config_kv in ${config_kvs[@]}; do
+        config_kv=`echo $config_kv | xargs`
+        kv=(${config_kv//=/ })
+        if [ ! ${#kv[*]} -eq 2 ]; then
+            echo "Invalid config kv !"
+            exit 1
+        fi
+        sed -i '/^\s*'"${kv[0]}"'/c '"${kv[0]}"' = '"${kv[1]}" ./config.ini
+    done
+fi
+
 ./pegasus_unit_test
 
 exit_if_fail $? "run unit test failed"
diff --git a/src/test/function_test/run.sh b/src/test/function_test/run.sh
index 9bd561386..947cc35f8 100755
--- a/src/test/function_test/run.sh
+++ b/src/test/function_test/run.sh
@@ -26,7 +26,7 @@ fi
 
 if [ -n ${TEST_OPTS} ]; then
     if [ ! -f ./config.ini ]; then
-        echo "./config.ini does not exists !"
+        echo "./config.ini does not exists"
         exit 1
     fi
 
diff --git a/src/utils/filesystem.cpp b/src/utils/filesystem.cpp
index 1954f29b5..8bfe4cfa6 100644
--- a/src/utils/filesystem.cpp
+++ b/src/utils/filesystem.cpp
@@ -694,7 +694,7 @@ bool get_disk_space_info(const std::string &path, 
disk_space_info &info)
     FAIL_POINT_INJECT_F("filesystem_get_disk_space_info", [&info](string_view 
str) {
         info.capacity = 100 * 1024 * 1024;
         if (str.find("insufficient") != string_view::npos) {
-            info.available = 5 * 1024 * 1024;
+            info.available = 512 * 1024;
         } else {
             info.available = 50 * 1024 * 1024;
         }
diff --git a/src/utils/simple_logger.cpp b/src/utils/simple_logger.cpp
index f6a21b16d..53fc3a889 100644
--- a/src/utils/simple_logger.cpp
+++ b/src/utils/simple_logger.cpp
@@ -41,6 +41,7 @@
 #include "utils/filesystem.h"
 #include "utils/flags.h"
 #include "utils/fmt_logging.h"
+#include "utils/ports.h"
 #include "utils/process_utils.h"
 #include "utils/strings.h"
 #include "utils/time_utils.h"


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

Reply via email to