test case for dml object level load balance support
authorMuhammad Usama <m.usama@highgo.ca>
Tue, 29 Sep 2020 18:31:54 +0000 (23:31 +0500)
committerMuhammad Usama <m.usama@gmail.com>
Tue, 29 Sep 2020 18:32:09 +0000 (23:32 +0500)
src/test/regression/tests/032.dml_adaptive_load_balance/test.sh [new file with mode: 0755]

diff --git a/src/test/regression/tests/032.dml_adaptive_load_balance/test.sh b/src/test/regression/tests/032.dml_adaptive_load_balance/test.sh
new file mode 100755 (executable)
index 0000000..a8cb577
--- /dev/null
@@ -0,0 +1,148 @@
+#!/usr/bin/env bash
+#-------------------------------------------------------------------
+# test script for load balancing.
+#
+source $TESTLIBS
+TESTDIR=testdir
+PSQL=$PGBIN/psql
+export PGHOST=/tmp
+# sleep time after reload in seconds
+st=10
+
+for mode in s
+do
+       rm -fr $TESTDIR
+       mkdir $TESTDIR
+       cd $TESTDIR
+
+# create test environment
+       echo -n "creating test environment..."
+       $PGPOOL_SETUP -m $mode -n 2 || exit 1
+       echo "done."
+
+       source ./bashrc.ports
+       echo "backend_weight0 = 0" >> etc/pgpool.conf
+       echo "backend_weight1 = 1" >> etc/pgpool.conf
+       echo "disable_load_balance_on_write = 'dml_adaptive'" >> etc/pgpool.conf
+       echo "write_function_list = 'currval,lastval,nextval,setval,f1'" >> etc/pgpool.conf
+       echo "dml_adaptive_object_relationship_list= 't1:t2,f1():tF'" >> etc/pgpool.conf
+
+       ./startall
+
+       export PGPORT=$PGPOOL_PORT
+
+       wait_for_pgpool_startup
+
+       $PSQL test <<EOF
+CREATE TABLE t1(i INTEGER);
+CREATE TABLE t2(i INTEGER);
+CREATE TABLE t3(i INTEGER);
+CREATE TABLE tF(i INTEGER);
+CREATE FUNCTION f1(INTEGER) returns INTEGER AS 'SELECT \$1' LANGUAGE SQL;
+EOF
+
+$PSQL test <<EOF
+
+BEGIN;
+SELECT i, 'QUERY ID T1-1' FROM t2;             -- LOAD balance
+INSERT INTO t1 values(1);                      -- NO LOAD balance
+SELECT i, 'QUERY ID T1-2' FROM t1;             -- NO LOAD balance
+SELECT i, 'QUERY ID T1-3' FROM t3;             -- LOAD balance
+SELECT i, 'QUERY ID T1-4' FROM t2;             -- NO LOAD balance
+COMMIT;
+EOF
+
+# check if simple load balance worked
+       fgrep "SELECT i, 'QUERY ID T1-1' FROM t2;" log/pgpool.log |grep "DB node id: 1">/dev/null 2>&1
+       if [ $? != 0 ];then
+       # expected result not found
+               echo fail: "SELECT i, QUERY ID T1-1 FROM t2" was not load balanced.
+               ./shutdownall
+               exit 1
+       fi
+       echo ok: first read was load balanced.
+
+# check if simple load balance worked
+       fgrep "SELECT i, 'QUERY ID T1-2' FROM t1;" log/pgpool.log |grep "DB node id: 0">/dev/null 2>&1
+       if [ $? != 0 ];then
+       # expected result not found
+               echo fail: "SELECT i, QUERY ID T1-2 FROM t1;" was wrongly load balanced.
+               ./shutdownall
+               exit 1
+       fi
+       echo ok: adaptive load balance test 1 works.
+
+# check if simple load balance worked
+       fgrep "SELECT i, 'QUERY ID T1-3' FROM t3;" log/pgpool.log |grep "DB node id: 1">/dev/null 2>&1
+       if [ $? != 0 ];then
+       # expected result not found
+               echo fail: "SELECT i, 'QUERY ID T1-3' FROM t3" was not load balanced.
+               ./shutdownall
+               exit 1
+       fi
+       echo ok: unrelated read was load balanced.
+
+# check if simple load balance worked
+       fgrep "SELECT i, 'QUERY ID T1-4' FROM t2;" log/pgpool.log |grep "DB node id: 0">/dev/null 2>&1
+       if [ $? != 0 ];then
+       # expected result not found
+               echo fail: "SELECT i, 'QUERY ID T1-4' FROM t2;" was wrongly load balanced.
+               ./shutdownall
+               exit 1
+       fi
+       echo ok: adaptive load balance test 2 works.
+
+$PSQL test <<EOF
+BEGIN;
+SELECT i, 'QUERY ID T2-5' FROM tF;                     -- LOAD balance
+SELECT f1(190), 'QUERY ID T2-6';                       -- NO LOAD balance
+SELECT i, 'QUERY ID T2-7' FROM tF;                     -- NO LOAD balance
+SELECT i, 'QUERY ID T2-8' FROM t1;                     -- LOAD balance
+SELECT i, 'QUERY ID T2-9' FROM t3;                     -- LOAD balance
+COMMIT;
+EOF
+
+# check if simple load balance worked
+       fgrep "SELECT i, 'QUERY ID T2-5' FROM tF;" log/pgpool.log |grep "DB node id: 1">/dev/null 2>&1
+       if [ $? != 0 ];then
+       # expected result not found
+               echo fail: "SELECT i, 'QUERY ID T2-5' FROM tF;" was not load balanced.
+               ./shutdownall
+               exit 1
+       fi
+       echo ok: T2 first read was load balanced.
+
+# check if simple load balance worked
+       fgrep "SELECT i, 'QUERY ID T2-7' FROM tF;" log/pgpool.log |grep "DB node id: 0">/dev/null 2>&1
+       if [ $? != 0 ];then
+       # expected result not found
+               echo fail: "SELECT i, 'QUERY ID T2-7' FROM tF;" was wrongly load balanced.
+               ./shutdownall
+               exit 1
+       fi
+       echo ok: adaptive load balance test 3 works.
+
+# check if simple load balance worked
+       fgrep "SELECT i, 'QUERY ID T2-8' FROM t1;" log/pgpool.log |grep "DB node id: 1">/dev/null 2>&1
+       if [ $? != 0 ];then
+       # expected result not found
+               echo fail: "SELECT i, 'QUERY ID T2-8' FROM t1;" was not load balanced.
+               ./shutdownall
+               exit 1
+       fi
+       echo ok: T2 third read was load balanced.
+
+# check if simple load balance worked
+       fgrep "SELECT i, 'QUERY ID T2-9' FROM t3;" log/pgpool.log |grep "DB node id: 1">/dev/null 2>&1
+       if [ $? != 0 ];then
+       # expected result not found
+               echo fail: "SELECT i, 'QUERY ID T2-9' FROM t3;" was not load balanced.
+               ./shutdownall
+               exit 1
+       fi
+       echo ok: T2 final read was load balanced.
+
+        ./shutdownall
+        cd ..
+done
+exit 0