From d5df0db18b29b1db2577ac5ed388966c0eb203b0 Mon Sep 17 00:00:00 2001 From: Joseph Fernandes Date: Mon, 30 Nov 2015 16:51:35 +0530 Subject: tier/libgfdb/sql: Correcting logic in sql query for read Correcting query in the where clause from "a & b | c" to "a & (b | c)" where "a" is the condition to join the gf_file_tb and gf_flink_tb through gfids "b" is the condition for the write heat and "c" is the condition for read heat Backport of http://review.gluster.org/12823 > Change-Id: I99226d82b0efb68fbef3a40f02b215bb2b4370d6 > BUG: 1286656 > Signed-off-by: Joseph Fernandes > Signed-off-by: Dan Lambright > Reviewed-on: http://review.gluster.org/12823 > Tested-by: NetBSD Build System > Tested-by: Gluster Build System Signed-off-by: Joseph Fernandes Change-Id: I70533c8589a6cd67e8737e110af0a23abed9013d BUG: 1287583 Reviewed-on: http://review.gluster.org/12868 Tested-by: NetBSD Build System Tested-by: Gluster Build System Reviewed-by: Dan Lambright Tested-by: Dan Lambright --- libglusterfs/src/gfdb/gfdb_sqlite3.c | 16 ++++++++-------- tests/basic/tier/frequency-counters.t | 15 +++++++++------ 2 files changed, 17 insertions(+), 14 deletions(-) diff --git a/libglusterfs/src/gfdb/gfdb_sqlite3.c b/libglusterfs/src/gfdb/gfdb_sqlite3.c index c4ce86d9ef0..4d46ff64c6e 100644 --- a/libglusterfs/src/gfdb/gfdb_sqlite3.c +++ b/libglusterfs/src/gfdb/gfdb_sqlite3.c @@ -708,12 +708,12 @@ gf_sqlite3_find_recently_changed_files(void *db_conn, ret = gf_asprintf (&query_str, "%s AND" /*First condition: For writes*/ - "((" GF_COL_TB_WSEC " * " TOSTRING(GFDB_MICROSEC) " + " + "( ((" GF_COL_TB_WSEC " * " TOSTRING(GFDB_MICROSEC) " + " GF_COL_TB_WMSEC ") >= ? )" " OR " /*Second condition: For reads*/ "((" GF_COL_TB_RWSEC " * " TOSTRING(GFDB_MICROSEC) " + " - GF_COL_TB_RWMSEC ") >= ?)", base_query_str); + GF_COL_TB_RWMSEC ") >= ?) )", base_query_str); if (ret < 0) { gf_msg (GFDB_STR_SQLITE3, GF_LOG_ERROR, 0, LG_MSG_QUERY_FAILED, @@ -804,12 +804,12 @@ gf_sqlite3_find_unchanged_for_time (void *db_conn, ret = gf_asprintf (&query_str, "%s AND " /*First condition: For writes*/ - "((" GF_COL_TB_WSEC " * " TOSTRING(GFDB_MICROSEC) " + " + "( ((" GF_COL_TB_WSEC " * " TOSTRING(GFDB_MICROSEC) " + " GF_COL_TB_WMSEC ") <= ? )" " AND " /*Second condition: For reads*/ "((" GF_COL_TB_RWSEC " * " TOSTRING(GFDB_MICROSEC) " + " - GF_COL_TB_RWMSEC ") <= ?)", base_query_str); + GF_COL_TB_RWMSEC ") <= ?) )", base_query_str); if (ret < 0) { gf_msg (GFDB_STR_SQLITE3, GF_LOG_ERROR, 0, LG_MSG_QUERY_FAILED, @@ -909,14 +909,14 @@ gf_sqlite3_find_recently_changed_files_freq (void *db_conn, } ret = gf_asprintf (&query_str, "%s AND " /*First condition: For Writes*/ - "( ((" GF_COL_TB_WSEC " * " TOSTRING(GFDB_MICROSEC) " + " + "( ( ((" GF_COL_TB_WSEC " * " TOSTRING(GFDB_MICROSEC) " + " GF_COL_TB_WMSEC ") >= ? )" " AND "" (" GF_COL_TB_WFC " >= ? ) )" " OR " /*Second condition: For Reads */ "( ((" GF_COL_TB_RWSEC " * " TOSTRING(GFDB_MICROSEC) " + " GF_COL_TB_RWMSEC ") >= ?)" - " AND "" (" GF_COL_TB_RFC " >= ? ) )", base_query_str); + " AND "" (" GF_COL_TB_RFC " >= ? ) ) )", base_query_str); if (ret < 0) { gf_msg (GFDB_STR_SQLITE3, GF_LOG_ERROR, 0, LG_MSG_QUERY_FAILED, @@ -1054,7 +1054,7 @@ gf_sqlite3_find_unchanged_for_time_freq (void *db_conn, * OR * File that have write wind time greater than for_time, * but write_frequency less than freq_write_cnt*/ - "( ((" GF_COL_TB_WSEC " * " TOSTRING(GFDB_MICROSEC) " + " + "( ( ((" GF_COL_TB_WSEC " * " TOSTRING(GFDB_MICROSEC) " + " GF_COL_TB_WMSEC ") < ? )" " OR " "( (" GF_COL_TB_WFC " < ? ) AND" @@ -1071,7 +1071,7 @@ gf_sqlite3_find_unchanged_for_time_freq (void *db_conn, " OR " "( (" GF_COL_TB_RFC " < ? ) AND" "((" GF_COL_TB_RWSEC " * " TOSTRING(GFDB_MICROSEC) " + " - GF_COL_TB_RWMSEC ") >= ? ) ) )", base_query_str); + GF_COL_TB_RWMSEC ") >= ? ) ) ) )", base_query_str); if (ret < 0) { gf_msg (GFDB_STR_SQLITE3, GF_LOG_ERROR, 0, LG_MSG_QUERY_FAILED, diff --git a/tests/basic/tier/frequency-counters.t b/tests/basic/tier/frequency-counters.t index 707b8b4bbc6..51c7ab4a700 100644 --- a/tests/basic/tier/frequency-counters.t +++ b/tests/basic/tier/frequency-counters.t @@ -40,7 +40,6 @@ TEST glusterd #Create and start a tiered volume create_dist_vol $NUM_BRICKS -$CLI volume set $V0 diagnostics.client-log-level DEBUG # Mount FUSE TEST glusterfs -s $H0 --volfile-id $V0 $M0 @@ -48,7 +47,8 @@ TEST glusterfs -s $H0 --volfile-id $V0 $M0 mkdir $M0/$TEST_DIR cd $M0/${TEST_DIR} -touch file{1..2} +date > file1 +touch file2 # attach tier create_dist_tier_vol $NUM_BRICKS @@ -56,19 +56,22 @@ create_dist_tier_vol $NUM_BRICKS sleep_until_mid_cycle $PROMOTE_FREQ # check if promotion on single hit, should fail -echo "hi" >> file2 +date >> file2 +cat file1 drop_cache $M0 sleep $PROMOTE_FREQ EXPECT "0" check_counters 0 0 # check if promotion on double hit, should suceed sleep_until_mid_cycle $PROMOTE_FREQ -echo "hi" >> file2 +date >> file2 drop_cache $M0 -echo "hi" >> file2 +cat file1 +date >> file2 drop_cache $M0 +cat file1 -EXPECT_WITHIN $PROMOTE_FREQ "0" check_counters 1 0 +EXPECT_WITHIN $PROMOTE_FREQ "0" check_counters 2 0 TEST ! $CLI volume set $V0 features.record-counters off -- cgit