This is an automated email from the ASF dual-hosted git repository.
kxiao pushed a commit to branch branch-3.0
in repository https://gitbox.apache.org/repos/asf/doris.git
The following commit(s) were added to refs/heads/branch-3.0 by this push:
new c0e6d1e7b15 [improvement](test)Use show_nested_index_file to check
inverted index (#38443 #39024 #39077) (#39232)
c0e6d1e7b15 is described below
commit c0e6d1e7b157a482153f312535565b093e121267
Author: qiye <[email protected]>
AuthorDate: Mon Aug 12 16:28:42 2024 +0800
[improvement](test)Use show_nested_index_file to check inverted index
(#38443 #39024 #39077) (#39232)
---
.../plugins/plugin_curl_requester.groovy | 131 +++++++++++++++++++++
.../test_add_build_index_with_format_v2.groovy | 36 +-----
.../test_create_table_with_format_v2.groovy | 13 +-
...est_cumulative_compaction_with_format_v2.groovy | 27 +----
.../test_drop_column_with_format_v2.groovy | 42 +------
.../test_drop_index_with_format_v2.groovy | 38 +-----
.../test_mor_table_with_format_v2.groovy | 30 +----
.../test_mow_table_with_format_v2.groovy | 29 +----
.../test_recover_with_format_v2.groovy | 16 +--
.../test_rename_column_with_format_v2.groovy | 39 +-----
...single_replica_compaction_with_format_v2.groovy | 31 +----
11 files changed, 164 insertions(+), 268 deletions(-)
diff --git a/regression-test/plugins/plugin_curl_requester.groovy
b/regression-test/plugins/plugin_curl_requester.groovy
index 77698a6a88f..531b2c192fb 100644
--- a/regression-test/plugins/plugin_curl_requester.groovy
+++ b/regression-test/plugins/plugin_curl_requester.groovy
@@ -18,8 +18,99 @@
import org.apache.doris.regression.suite.Suite
import org.apache.doris.regression.util.Http
import org.apache.doris.regression.util.NodeType
+@Grab(group='org.apache.httpcomponents', module='httpclient', version='4.5.13')
+import org.apache.http.client.methods.*
+import org.apache.http.impl.client.*
+import org.apache.http.util.EntityUtils
+import org.apache.http.client.config.RequestConfig
+import org.apache.http.conn.ConnectTimeoutException
+import org.apache.http.conn.HttpHostConnectException
import org.codehaus.groovy.runtime.IOGroovyMethods
+Suite.metaClass.http_client = { String method, String url /* param */ ->
+ Suite suite = delegate as Suite
+ if (method != "GET" && method != "POST") {
+ throw new Exception("Invalid method: ${method}")
+ }
+ if (!url || !(url =~ /^https?:\/\/.+/)) {
+ throw new Exception("Invalid url: ${url}")
+ }
+
+ Integer timeout = 300 // seconds
+ Integer maxRetries = 10
+ Integer retryCount = 0
+ Integer sleepTime = 1000 // milliseconds
+
+ logger.info("HTTP request: ${method} ${url}")
+
+ CloseableHttpClient httpClient = HttpClients.custom()
+ .setRetryHandler(new DefaultHttpRequestRetryHandler(3, true))
+ .build()
+
+ int code
+ String err
+ String out
+
+ try {
+ while (retryCount < maxRetries) {
+ HttpRequestBase request
+ if (method == "GET") {
+ request = new HttpGet(url)
+ } else if (method == "POST") {
+ request = new HttpPost(url)
+ }
+
+ RequestConfig requestConfig = RequestConfig.custom()
+ .setConnectTimeout(timeout * 1000)
+ .setSocketTimeout(timeout * 1000)
+ .build()
+ request.setConfig(requestConfig)
+
+ try {
+ CloseableHttpResponse response = httpClient.execute(request)
+ try {
+ code = response.getStatusLine().getStatusCode()
+ out = EntityUtils.toString(response.getEntity())
+
+ if (code >= 200 && code < 300) {
+ code = 0 // to be compatible with the old curl function
+ err = ""
+ return [code, out, err]
+ } else if (code == 500) {
+ return [code, out, "Internal Server Error"]
+ } else {
+ logger.warn("HTTP request failed with status code
${code}, response ${out}, retrying (${++retryCount}/${maxRetries})")
+ }
+ } finally {
+ response.close()
+ }
+ } catch (ConnectTimeoutException | HttpHostConnectException e) {
+ logger.warn("Connection failed, retrying
(${++retryCount}/${maxRetries}): ${e.message}")
+ } catch (SocketTimeoutException e) {
+ timeout = timeout + 10
+ logger.warn("Read timed out, retrying
(${++retryCount}/${maxRetries}): ${e.message}")
+ } catch (Exception e) {
+ code = 500 // Internal Server Error
+ logger.error("Error executing HTTP request: ${e.message}")
+ err = e.message
+ return [code, out, err]
+ }
+
+ sleep(sleepTime)
+ sleepTime = Math.min(sleepTime * 2, 60000)
+ }
+
+ logger.error("HTTP request failed after ${maxRetries} attempts")
+ err = "Failed after ${maxRetries} attempts"
+ code = 500 // Internal Server Error
+ return [code, out, err]
+ } finally {
+ httpClient.close()
+ }
+}
+
+logger.info("Added 'http_client' function to Suite")
+
Suite.metaClass.curl = { String method, String url /* param */->
Suite suite = delegate as Suite
if (method != "GET" && method != "POST")
@@ -161,3 +252,43 @@ Suite.metaClass.be_report_task = { String ip, int port ->
}
logger.info("Added 'be_report_task' function to Suite")
+
+// check nested index file api
+Suite.metaClass.check_nested_index_file = { ip, port, tablet_id,
expected_rowsets_count, expected_indices_count, format ->
+ def (code, out, err) = http_client("GET",
String.format("http://%s:%s/api/show_nested_index_file?tablet_id=%s", ip, port,
tablet_id))
+ logger.info("Run show_nested_index_file_on_tablet: code=" + code + ",
out=" + out + ", err=" + err)
+ // only when the expected_indices_count is 0, the tablet may not have the
index file.
+ if (code == 500 && expected_indices_count == 0) {
+ assertEquals("E-6003", parseJson(out.trim()).status)
+ assertTrue(parseJson(out.trim()).msg.contains("not found"))
+ return
+ }
+ assertTrue(code == 0)
+ assertEquals(tablet_id, parseJson(out.trim()).tablet_id.toString())
+ def rowsets_count = parseJson(out.trim()).rowsets.size();
+ assertEquals(expected_rowsets_count, rowsets_count)
+ def index_files_count = 0
+ def segment_files_count = 0
+ for (def rowset in parseJson(out.trim()).rowsets) {
+ assertEquals(format, rowset.index_storage_format)
+ for (int i = 0; i < rowset.segments.size(); i++) {
+ def segment = rowset.segments[i]
+ assertEquals(i, segment.segment_id)
+ def indices_count = segment.indices.size()
+ assertEquals(expected_indices_count, indices_count)
+ if (format == "V1") {
+ index_files_count += indices_count
+ } else {
+ index_files_count++
+ }
+ }
+ segment_files_count += rowset.segments.size()
+ }
+ if (format == "V1") {
+ assertEquals(index_files_count, segment_files_count *
expected_indices_count)
+ } else {
+ assertEquals(index_files_count, segment_files_count)
+ }
+}
+
+logger.info("Added 'check_nested_index_file' function to Suite")
\ No newline at end of file
diff --git
a/regression-test/suites/inverted_index_p0/index_format_v2/test_add_build_index_with_format_v2.groovy
b/regression-test/suites/inverted_index_p0/index_format_v2/test_add_build_index_with_format_v2.groovy
index 430c3a67e0a..dabb3534e32 100644
---
a/regression-test/suites/inverted_index_p0/index_format_v2/test_add_build_index_with_format_v2.groovy
+++
b/regression-test/suites/inverted_index_p0/index_format_v2/test_add_build_index_with_format_v2.groovy
@@ -20,9 +20,6 @@ import org.codehaus.groovy.runtime.IOGroovyMethods
suite("test_add_build_index_with_format_v2", "inverted_index_format_v2"){
def tableName = "test_add_build_index_with_format_v2"
- def calc_file_crc_on_tablet = { ip, port, tablet ->
- return curl("GET",
String.format("http://%s:%s/api/calc_crc?tablet_id=%s", ip, port, tablet))
- }
def backendId_to_backendIP = [:]
def backendId_to_backendHttpPort = [:]
getBackendIpHttpPort(backendId_to_backendIP, backendId_to_backendHttpPort);
@@ -115,22 +112,15 @@ suite("test_add_build_index_with_format_v2",
"inverted_index_format_v2"){
String backend_id = tablets[0].BackendId
String ip = backendId_to_backendIP.get(backend_id)
String port = backendId_to_backendHttpPort.get(backend_id)
- def (code, out, err) = calc_file_crc_on_tablet(ip, port, tablet_id)
- logger.info("Run calc_file_crc_on_tablet: code=" + code + ", out=" + out +
", err=" + err)
- assertTrue(code == 0)
- assertTrue(out.contains("crc_value"))
- assertTrue(out.contains("used_time_ms"))
- assertEquals("0", parseJson(out.trim()).start_version)
- assertEquals("7", parseJson(out.trim()).end_version)
- assertEquals("7", parseJson(out.trim()).rowset_count)
+
// cloud mode is directly schema change, local mode is light schema change.
// cloud mode is 12, local mode is 6
if (isCloudMode()) {
- assertEquals("12", parseJson(out.trim()).file_count)
+ check_nested_index_file(ip, port, tablet_id, 7, 2, "V2")
qt_sql "SELECT * FROM $tableName WHERE name match 'andy' order by id,
name, score;"
return
} else {
- assertEquals("6", parseJson(out.trim()).file_count)
+ check_nested_index_file(ip, port, tablet_id, 7, 0, "V2")
}
// build index
@@ -139,15 +129,7 @@ suite("test_add_build_index_with_format_v2",
"inverted_index_format_v2"){
"""
wait_for_build_index_on_partition_finish(tableName, timeout)
- (code, out, err) = calc_file_crc_on_tablet(ip, port, tablet_id)
- logger.info("Run calc_file_crc_on_tablet: code=" + code + ", out=" + out +
", err=" + err)
- assertTrue(code == 0)
- assertTrue(out.contains("crc_value"))
- assertTrue(out.contains("used_time_ms"))
- assertEquals("0", parseJson(out.trim()).start_version)
- assertEquals("7", parseJson(out.trim()).end_version)
- assertEquals("7", parseJson(out.trim()).rowset_count)
- assertEquals("12", parseJson(out.trim()).file_count)
+ check_nested_index_file(ip, port, tablet_id, 7, 1, "V2")
// build index
sql """
@@ -155,15 +137,7 @@ suite("test_add_build_index_with_format_v2",
"inverted_index_format_v2"){
"""
wait_for_build_index_on_partition_finish(tableName, timeout)
- (code, out, err) = calc_file_crc_on_tablet(ip, port, tablet_id)
- logger.info("Run calc_file_crc_on_tablet: code=" + code + ", out=" + out +
", err=" + err)
- assertTrue(code == 0)
- assertTrue(out.contains("crc_value"))
- assertTrue(out.contains("used_time_ms"))
- assertEquals("0", parseJson(out.trim()).start_version)
- assertEquals("7", parseJson(out.trim()).end_version)
- assertEquals("7", parseJson(out.trim()).rowset_count)
- assertEquals("12", parseJson(out.trim()).file_count)
+ check_nested_index_file(ip, port, tablet_id, 7, 2, "V2")
qt_sql "SELECT * FROM $tableName WHERE name match 'andy' order by id,
name, score;"
}
diff --git
a/regression-test/suites/inverted_index_p0/index_format_v2/test_create_table_with_format_v2.groovy
b/regression-test/suites/inverted_index_p0/index_format_v2/test_create_table_with_format_v2.groovy
index dd87a214e2d..cf31e2ca80f 100644
---
a/regression-test/suites/inverted_index_p0/index_format_v2/test_create_table_with_format_v2.groovy
+++
b/regression-test/suites/inverted_index_p0/index_format_v2/test_create_table_with_format_v2.groovy
@@ -20,9 +20,6 @@ import org.codehaus.groovy.runtime.IOGroovyMethods
suite("test_create_table_with_format_v2", "inverted_index_format_v2"){
def tableName = "test_create_table_with_format_v2"
- def calc_file_crc_on_tablet = { ip, port, tablet ->
- return curl("GET",
String.format("http://%s:%s/api/calc_crc?tablet_id=%s", ip, port, tablet))
- }
def backendId_to_backendIP = [:]
def backendId_to_backendHttpPort = [:]
getBackendIpHttpPort(backendId_to_backendIP, backendId_to_backendHttpPort);
@@ -60,13 +57,5 @@ suite("test_create_table_with_format_v2",
"inverted_index_format_v2"){
String backend_id = tablets[0].BackendId
String ip = backendId_to_backendIP.get(backend_id)
String port = backendId_to_backendHttpPort.get(backend_id)
- def (code, out, err) = calc_file_crc_on_tablet(ip, port, tablet_id)
- logger.info("Run calc_file_crc_on_tablet: code=" + code + ", out=" + out +
", err=" + err)
- assertTrue(code == 0)
- assertTrue(out.contains("crc_value"))
- assertTrue(out.contains("used_time_ms"))
- assertEquals("0", parseJson(out.trim()).start_version)
- assertEquals("7", parseJson(out.trim()).end_version)
- assertEquals("7", parseJson(out.trim()).rowset_count)
- assertEquals("12", parseJson(out.trim()).file_count)
+ check_nested_index_file(ip, port, tablet_id, 7, 2, "V2")
}
diff --git
a/regression-test/suites/inverted_index_p0/index_format_v2/test_cumulative_compaction_with_format_v2.groovy
b/regression-test/suites/inverted_index_p0/index_format_v2/test_cumulative_compaction_with_format_v2.groovy
index f8ae36175a5..65270ebe597 100644
---
a/regression-test/suites/inverted_index_p0/index_format_v2/test_cumulative_compaction_with_format_v2.groovy
+++
b/regression-test/suites/inverted_index_p0/index_format_v2/test_cumulative_compaction_with_format_v2.groovy
@@ -40,10 +40,6 @@ suite("test_cumulative_compaction_with_format_v2",
"inverted_index_format_v2") {
assertTrue(useTime <= OpTimeout, "wait_for_latest_op_on_table_finish
timeout")
}
- def calc_file_crc_on_tablet = { ip, port, tablet ->
- return curl("GET",
String.format("http://%s:%s/api/calc_crc?tablet_id=%s", ip, port, tablet))
- }
-
def calc_segment_count = { tablet ->
int segment_count = 0
String tablet_id = tablet.TabletId
@@ -173,16 +169,7 @@ suite("test_cumulative_compaction_with_format_v2",
"inverted_index_format_v2") {
String port = backendId_to_backendHttpPort.get(backend_id)
int segment_count = calc_segment_count(tablet)
logger.info("TabletId: " + tablet_id + ", segment_count: " +
segment_count)
- def (c, o, e) = calc_file_crc_on_tablet(ip, port, tablet_id)
- logger.info("Run calc_file_crc_on_tablet: code=" + c + ", out=" +
o + ", err=" + e)
- assertTrue(c == 0)
- assertTrue(o.contains("crc_value"))
- assertTrue(o.contains("used_time_ms"))
- assertEquals("0", parseJson(o.trim()).start_version)
- assertEquals("9", parseJson(o.trim()).end_version)
- assertEquals("9", parseJson(o.trim()).rowset_count)
- int file_count = segment_count * 2
- assertEquals(file_count,
Integer.parseInt(parseJson(o.trim()).file_count))
+ check_nested_index_file(ip, port, tablet_id, 9, 3, "V2")
StringBuilder sb = new StringBuilder();
sb.append("curl -X POST http://")
@@ -242,17 +229,7 @@ suite("test_cumulative_compaction_with_format_v2",
"inverted_index_format_v2") {
String port = backendId_to_backendHttpPort.get(backend_id)
int segment_count = calc_segment_count(tablet)
logger.info("TabletId: " + tablet_id + ", segment_count: " +
segment_count)
- def (c, o, e) = calc_file_crc_on_tablet(ip, port, tablet_id)
- logger.info("Run calc_file_crc_on_tablet: code=" + c + ", out=" +
o + ", err=" + e)
- assertTrue(c == 0)
- assertTrue(o.contains("crc_value"))
- assertTrue(o.contains("used_time_ms"))
- assertEquals("0", parseJson(o.trim()).start_version)
- assertEquals("9", parseJson(o.trim()).end_version)
- // after compaction, there are 2 rwosets.
- assertEquals("2", parseJson(o.trim()).rowset_count)
- int file_count = segment_count * 2
- assertEquals(file_count,
Integer.parseInt(parseJson(o.trim()).file_count))
+ check_nested_index_file(ip, port, tablet_id, 2, 3, "V2")
}
int segmentsCount = 0
diff --git
a/regression-test/suites/inverted_index_p0/index_format_v2/test_drop_column_with_format_v2.groovy
b/regression-test/suites/inverted_index_p0/index_format_v2/test_drop_column_with_format_v2.groovy
index 24ac5c6ee6f..1a75137e1e4 100644
---
a/regression-test/suites/inverted_index_p0/index_format_v2/test_drop_column_with_format_v2.groovy
+++
b/regression-test/suites/inverted_index_p0/index_format_v2/test_drop_column_with_format_v2.groovy
@@ -25,9 +25,6 @@ suite("test_drop_column_with_format_v2",
"inverted_index_format_v2"){
}
def tableName = "test_drop_column_with_format_v2"
- def calc_file_crc_on_tablet = { ip, port, tablet ->
- return curl("GET",
String.format("http://%s:%s/api/calc_crc?tablet_id=%s", ip, port, tablet))
- }
def backendId_to_backendIP = [:]
def backendId_to_backendHttpPort = [:]
getBackendIpHttpPort(backendId_to_backendIP, backendId_to_backendHttpPort);
@@ -106,50 +103,23 @@ suite("test_drop_column_with_format_v2",
"inverted_index_format_v2"){
String backend_id = tablets[0].BackendId
String ip = backendId_to_backendIP.get(backend_id)
String port = backendId_to_backendHttpPort.get(backend_id)
- def (code, out, err) = calc_file_crc_on_tablet(ip, port, tablet_id)
- logger.info("Run calc_file_crc_on_tablet: code=" + code + ", out=" + out +
", err=" + err)
- assertTrue(code == 0)
- assertTrue(out.contains("crc_value"))
- assertTrue(out.contains("used_time_ms"))
- assertEquals("0", parseJson(out.trim()).start_version)
- assertEquals("7", parseJson(out.trim()).end_version)
- assertEquals("7", parseJson(out.trim()).rowset_count)
- assertEquals("12", parseJson(out.trim()).file_count)
+ check_nested_index_file(ip, port, tablet_id, 7, 2, "V2")
// drop column
sql """ ALTER TABLE ${tableName} DROP COLUMN score; """
wait_for_latest_op_on_table_finish(tableName, timeout)
- // select to sync rowset meta in cloud mode
- sql """ select * from ${tableName} limit 1; """
-
tablets = sql_return_maparray """ show tablets from ${tableName}; """
tablet_id = tablets[0].TabletId
- (code, out, err) = calc_file_crc_on_tablet(ip, port, tablet_id)
- logger.info("Run calc_file_crc_on_tablet: code=" + code + ", out=" + out +
", err=" + err)
- assertTrue(code == 0)
- assertTrue(out.contains("crc_value"))
- assertTrue(out.contains("used_time_ms"))
- assertEquals("0", parseJson(out.trim()).start_version)
- assertEquals("7", parseJson(out.trim()).end_version)
- assertEquals("7", parseJson(out.trim()).rowset_count)
- assertEquals("12", parseJson(out.trim()).file_count)
+ // when drop column, the index files will not be deleted, so the index
files count is still 2
+ check_nested_index_file(ip, port, tablet_id, 7, 2, "V2")
sql """ ALTER TABLE ${tableName} DROP COLUMN name; """
wait_for_latest_op_on_table_finish(tableName, timeout)
- // select to sync rowset meta in cloud mode
- sql """ select * from ${tableName} limit 1; """
-
tablets = sql_return_maparray """ show tablets from ${tableName}; """
tablet_id = tablets[0].TabletId
- (code, out, err) = calc_file_crc_on_tablet(ip, port, tablet_id)
- logger.info("Run calc_file_crc_on_tablet: code=" + code + ", out=" + out +
", err=" + err)
- assertTrue(code == 0)
- assertTrue(out.contains("crc_value"))
- assertTrue(out.contains("used_time_ms"))
- assertEquals("0", parseJson(out.trim()).start_version)
- assertEquals("7", parseJson(out.trim()).end_version)
- assertEquals("7", parseJson(out.trim()).rowset_count)
- assertEquals("6", parseJson(out.trim()).file_count)
+ // when drop column, the index files will not be deleted, so the index
files count is still 2
+ // when all index columns are dropped, the index files will be deleted by
GC later
+ check_nested_index_file(ip, port, tablet_id, 7, 2, "V2")
}
diff --git
a/regression-test/suites/inverted_index_p0/index_format_v2/test_drop_index_with_format_v2.groovy
b/regression-test/suites/inverted_index_p0/index_format_v2/test_drop_index_with_format_v2.groovy
index c2ce451e857..12877099f38 100644
---
a/regression-test/suites/inverted_index_p0/index_format_v2/test_drop_index_with_format_v2.groovy
+++
b/regression-test/suites/inverted_index_p0/index_format_v2/test_drop_index_with_format_v2.groovy
@@ -25,9 +25,6 @@ suite("test_drop_index_with_format_v2",
"inverted_index_format_v2"){
}
def tableName = "test_drop_index_with_format_v2"
- def calc_file_crc_on_tablet = { ip, port, tablet ->
- return curl("GET",
String.format("http://%s:%s/api/calc_crc?tablet_id=%s", ip, port, tablet))
- }
def backendId_to_backendIP = [:]
def backendId_to_backendHttpPort = [:]
getBackendIpHttpPort(backendId_to_backendIP, backendId_to_backendHttpPort);
@@ -85,44 +82,15 @@ suite("test_drop_index_with_format_v2",
"inverted_index_format_v2"){
String backend_id = tablets[0].BackendId
String ip = backendId_to_backendIP.get(backend_id)
String port = backendId_to_backendHttpPort.get(backend_id)
- def (code, out, err) = calc_file_crc_on_tablet(ip, port, tablet_id)
- logger.info("Run calc_file_crc_on_tablet: code=" + code + ", out=" + out +
", err=" + err)
- assertTrue(code == 0)
- assertTrue(out.contains("crc_value"))
- assertTrue(out.contains("used_time_ms"))
- assertEquals("0", parseJson(out.trim()).start_version)
- assertEquals("7", parseJson(out.trim()).end_version)
- assertEquals("7", parseJson(out.trim()).rowset_count)
- assertEquals("12", parseJson(out.trim()).file_count)
+ check_nested_index_file(ip, port, tablet_id, 7, 2, "V2")
// drop index
sql """ DROP INDEX index_name on ${tableName}; """
wait_for_latest_op_on_table_finish(tableName, timeout)
-
- (code, out, err) = calc_file_crc_on_tablet(ip, port, tablet_id)
- logger.info("Run calc_file_crc_on_tablet: code=" + code + ", out=" + out +
", err=" + err)
- assertTrue(code == 0)
- assertTrue(out.contains("crc_value"))
- assertTrue(out.contains("used_time_ms"))
- assertEquals("0", parseJson(out.trim()).start_version)
- assertEquals("7", parseJson(out.trim()).end_version)
- assertEquals("7", parseJson(out.trim()).rowset_count)
- assertEquals("12", parseJson(out.trim()).file_count)
+ check_nested_index_file(ip, port, tablet_id, 7, 1, "V2")
// drop index
sql """ DROP INDEX index_score on ${tableName}; """
wait_for_latest_op_on_table_finish(tableName, timeout)
-
- // select to sync rowset meta in cloud mode
- sql """ select * from ${tableName} limit 1; """
-
- (code, out, err) = calc_file_crc_on_tablet(ip, port, tablet_id)
- logger.info("Run calc_file_crc_on_tablet: code=" + code + ", out=" + out +
", err=" + err)
- assertTrue(code == 0)
- assertTrue(out.contains("crc_value"))
- assertTrue(out.contains("used_time_ms"))
- assertEquals("0", parseJson(out.trim()).start_version)
- assertEquals("7", parseJson(out.trim()).end_version)
- assertEquals("7", parseJson(out.trim()).rowset_count)
- assertEquals("6", parseJson(out.trim()).file_count)
+ check_nested_index_file(ip, port, tablet_id, 7, 0, "V2")
}
diff --git
a/regression-test/suites/inverted_index_p0/index_format_v2/test_mor_table_with_format_v2.groovy
b/regression-test/suites/inverted_index_p0/index_format_v2/test_mor_table_with_format_v2.groovy
index 700cb6abc32..b20148e8bd5 100644
---
a/regression-test/suites/inverted_index_p0/index_format_v2/test_mor_table_with_format_v2.groovy
+++
b/regression-test/suites/inverted_index_p0/index_format_v2/test_mor_table_with_format_v2.groovy
@@ -40,10 +40,6 @@ suite("test_mor_table_with_format_v2",
"inverted_index_format_v2") {
assertTrue(useTime <= OpTimeout, "wait_for_latest_op_on_table_finish
timeout")
}
- def calc_file_crc_on_tablet = { ip, port, tablet ->
- return curl("GET",
String.format("http://%s:%s/api/calc_crc?tablet_id=%s", ip, port, tablet))
- }
-
def calc_segment_count = { tablet ->
int segment_count = 0
String tablet_id = tablet.TabletId
@@ -175,16 +171,7 @@ suite("test_mor_table_with_format_v2",
"inverted_index_format_v2") {
String port = backendId_to_backendHttpPort.get(backend_id)
int segment_count = calc_segment_count(tablet)
logger.info("TabletId: " + tablet_id + ", segment_count: " +
segment_count)
- def (c, o, e) = calc_file_crc_on_tablet(ip, port, tablet_id)
- logger.info("Run calc_file_crc_on_tablet: code=" + c + ", out=" +
o + ", err=" + e)
- assertTrue(c == 0)
- assertTrue(o.contains("crc_value"))
- assertTrue(o.contains("used_time_ms"))
- assertEquals("0", parseJson(o.trim()).start_version)
- assertEquals("10", parseJson(o.trim()).end_version)
- assertEquals("10", parseJson(o.trim()).rowset_count)
- int file_count = segment_count * 2
- assertEquals(file_count,
Integer.parseInt(parseJson(o.trim()).file_count))
+ check_nested_index_file(ip, port, tablet_id, 10, 3, "V2")
StringBuilder sb = new StringBuilder();
sb.append("curl -X POST http://")
@@ -242,23 +229,12 @@ suite("test_mor_table_with_format_v2",
"inverted_index_format_v2") {
String ip = backendId_to_backendIP.get(backend_id)
String port = backendId_to_backendHttpPort.get(backend_id)
- int segment_count = calc_segment_count(tablet)
- logger.info("TabletId: " + tablet_id + ", segment_count: " +
segment_count)
- def (c, o, e) = calc_file_crc_on_tablet(ip, port, tablet_id)
- logger.info("Run calc_file_crc_on_tablet: code=" + c + ", out=" +
o + ", err=" + e)
- assertTrue(c == 0)
- assertTrue(o.contains("crc_value"))
- assertTrue(o.contains("used_time_ms"))
- assertEquals("0", parseJson(o.trim()).start_version)
- assertEquals("10", parseJson(o.trim()).end_version)
// after compaction, there are 1 rwoset in local mode and 2
rowsets in cloud mode.
if (isCloudMode()) {
- assertEquals("2", parseJson(o.trim()).rowset_count)
+ check_nested_index_file(ip, port, tablet_id, 2, 3, "V2")
} else {
- assertEquals("1", parseJson(o.trim()).rowset_count)
+ check_nested_index_file(ip, port, tablet_id, 1, 3, "V2")
}
- int file_count = segment_count * 2
- assertEquals(file_count,
Integer.parseInt(parseJson(o.trim()).file_count))
}
int segmentsCount = 0
diff --git
a/regression-test/suites/inverted_index_p0/index_format_v2/test_mow_table_with_format_v2.groovy
b/regression-test/suites/inverted_index_p0/index_format_v2/test_mow_table_with_format_v2.groovy
index e38f7bfe5e0..568990c8b4d 100644
---
a/regression-test/suites/inverted_index_p0/index_format_v2/test_mow_table_with_format_v2.groovy
+++
b/regression-test/suites/inverted_index_p0/index_format_v2/test_mow_table_with_format_v2.groovy
@@ -40,10 +40,6 @@ suite("test_mow_table_with_format_v2",
"inverted_index_format_v2") {
assertTrue(useTime <= OpTimeout, "wait_for_latest_op_on_table_finish
timeout")
}
- def calc_file_crc_on_tablet = { ip, port, tablet ->
- return curl("GET",
String.format("http://%s:%s/api/calc_crc?tablet_id=%s", ip, port, tablet))
- }
-
def calc_segment_count = { tablet ->
int segment_count = 0
String tablet_id = tablet.TabletId
@@ -173,16 +169,7 @@ suite("test_mow_table_with_format_v2",
"inverted_index_format_v2") {
String port = backendId_to_backendHttpPort.get(backend_id)
int segment_count = calc_segment_count(tablet)
logger.info("TabletId: " + tablet_id + ", segment_count: " +
segment_count)
- def (c, o, e) = calc_file_crc_on_tablet(ip, port, tablet_id)
- logger.info("Run calc_file_crc_on_tablet: code=" + c + ", out=" +
o + ", err=" + e)
- assertTrue(c == 0)
- assertTrue(o.contains("crc_value"))
- assertTrue(o.contains("used_time_ms"))
- assertEquals("0", parseJson(o.trim()).start_version)
- assertEquals("9", parseJson(o.trim()).end_version)
- assertEquals("9", parseJson(o.trim()).rowset_count)
- int file_count = segment_count * 2
- assertEquals(file_count,
Integer.parseInt(parseJson(o.trim()).file_count))
+ check_nested_index_file(ip, port, tablet_id, 9, 3, "V2")
StringBuilder sb = new StringBuilder();
sb.append("curl -X POST http://")
@@ -240,19 +227,7 @@ suite("test_mow_table_with_format_v2",
"inverted_index_format_v2") {
String ip = backendId_to_backendIP.get(backend_id)
String port = backendId_to_backendHttpPort.get(backend_id)
- int segment_count = calc_segment_count(tablet)
- logger.info("TabletId: " + tablet_id + ", segment_count: " +
segment_count)
- def (c, o, e) = calc_file_crc_on_tablet(ip, port, tablet_id)
- logger.info("Run calc_file_crc_on_tablet: code=" + c + ", out=" +
o + ", err=" + e)
- assertTrue(c == 0)
- assertTrue(o.contains("crc_value"))
- assertTrue(o.contains("used_time_ms"))
- assertEquals("0", parseJson(o.trim()).start_version)
- assertEquals("9", parseJson(o.trim()).end_version)
- // after compaction, there are 2 rwosets.
- assertEquals("2", parseJson(o.trim()).rowset_count)
- int file_count = segment_count * 2
- assertEquals(file_count,
Integer.parseInt(parseJson(o.trim()).file_count))
+ check_nested_index_file(ip, port, tablet_id, 2, 3, "V2")
}
int segmentsCount = 0
diff --git
a/regression-test/suites/inverted_index_p0/index_format_v2/test_recover_with_format_v2.groovy
b/regression-test/suites/inverted_index_p0/index_format_v2/test_recover_with_format_v2.groovy
index ee109817c4c..8de145d7921 100644
---
a/regression-test/suites/inverted_index_p0/index_format_v2/test_recover_with_format_v2.groovy
+++
b/regression-test/suites/inverted_index_p0/index_format_v2/test_recover_with_format_v2.groovy
@@ -20,9 +20,6 @@ import org.codehaus.groovy.runtime.IOGroovyMethods
suite("test_recover_with_format_v2", "inverted_index_format_v2"){
def tableName = "test_recover_with_format_v2"
- def calc_file_crc_on_tablet = { ip, port, tablet ->
- return curl("GET",
String.format("http://%s:%s/api/calc_crc?tablet_id=%s", ip, port, tablet))
- }
def backendId_to_backendIP = [:]
def backendId_to_backendHttpPort = [:]
getBackendIpHttpPort(backendId_to_backendIP, backendId_to_backendHttpPort);
@@ -34,15 +31,7 @@ suite("test_recover_with_format_v2",
"inverted_index_format_v2"){
String backend_id = tablets[i].BackendId
String ip = backendId_to_backendIP.get(backend_id)
String port = backendId_to_backendHttpPort.get(backend_id)
- def (code, out, err) = calc_file_crc_on_tablet(ip, port, tablet_id)
- logger.info("Run calc_file_crc_on_tablet: code=" + code + ", out="
+ out + ", err=" + err)
- assertTrue(code == 0)
- assertTrue(out.contains("crc_value"))
- assertTrue(out.contains("used_time_ms"))
- assertEquals("0", parseJson(out.trim()).start_version)
- assertEquals("3", parseJson(out.trim()).end_version)
- assertEquals("3", parseJson(out.trim()).rowset_count)
- assertEquals("4", parseJson(out.trim()).file_count)
+ check_nested_index_file(ip, port, tablet_id, 3, 2, "V2")
}
}
@@ -78,6 +67,9 @@ suite("test_recover_with_format_v2",
"inverted_index_format_v2"){
sql """ INSERT INTO ${tableName} VALUES (3, "andy", 100); """
sql """ INSERT INTO ${tableName} VALUES (3, "bason", 99); """
+ // select to sync tablet meta in cloud mode
+ sql """ SELECT * FROM ${tableName}; """
+
check_index_file()
// drop table and recover
diff --git
a/regression-test/suites/inverted_index_p0/index_format_v2/test_rename_column_with_format_v2.groovy
b/regression-test/suites/inverted_index_p0/index_format_v2/test_rename_column_with_format_v2.groovy
index 663eb8434a3..38b03510a0c 100644
---
a/regression-test/suites/inverted_index_p0/index_format_v2/test_rename_column_with_format_v2.groovy
+++
b/regression-test/suites/inverted_index_p0/index_format_v2/test_rename_column_with_format_v2.groovy
@@ -20,9 +20,6 @@ import org.codehaus.groovy.runtime.IOGroovyMethods
suite("test_rename_column_with_format_v2", "inverted_index_format_v2"){
def tableName = "test_rename_column_with_format_v2"
- def calc_file_crc_on_tablet = { ip, port, tablet ->
- return curl("GET",
String.format("http://%s:%s/api/calc_crc?tablet_id=%s", ip, port, tablet))
- }
def backendId_to_backendIP = [:]
def backendId_to_backendHttpPort = [:]
getBackendIpHttpPort(backendId_to_backendIP, backendId_to_backendHttpPort);
@@ -78,15 +75,7 @@ suite("test_rename_column_with_format_v2",
"inverted_index_format_v2"){
String backend_id = tablets[0].BackendId
String ip = backendId_to_backendIP.get(backend_id)
String port = backendId_to_backendHttpPort.get(backend_id)
- def (code, out, err) = calc_file_crc_on_tablet(ip, port, tablet_id)
- logger.info("Run calc_file_crc_on_tablet: code=" + code + ", out=" + out +
", err=" + err)
- assertTrue(code == 0)
- assertTrue(out.contains("crc_value"))
- assertTrue(out.contains("used_time_ms"))
- assertEquals("0", parseJson(out.trim()).start_version)
- assertEquals("7", parseJson(out.trim()).end_version)
- assertEquals("7", parseJson(out.trim()).rowset_count)
- assertEquals("12", parseJson(out.trim()).file_count)
+ check_nested_index_file(ip, port, tablet_id, 7, 1, "V2")
// rename column
sql """ ALTER TABLE ${tableName} RENAME COLUMN name name_new; """
@@ -94,30 +83,12 @@ suite("test_rename_column_with_format_v2",
"inverted_index_format_v2"){
qt_sql "SELECT * FROM $tableName WHERE name_new match 'andy' order by id,
name_new, score;"
- (code, out, err) = calc_file_crc_on_tablet(ip, port, tablet_id)
- logger.info("Run calc_file_crc_on_tablet: code=" + code + ", out=" + out +
", err=" + err)
- assertTrue(code == 0)
- assertTrue(out.contains("crc_value"))
- assertTrue(out.contains("used_time_ms"))
- assertEquals("0", parseJson(out.trim()).start_version)
- assertEquals("7", parseJson(out.trim()).end_version)
- assertEquals("7", parseJson(out.trim()).rowset_count)
- assertEquals("12", parseJson(out.trim()).file_count)
+ check_nested_index_file(ip, port, tablet_id, 7, 1, "V2")
// drop column
sql """ ALTER TABLE ${tableName} DROP COLUMN name_new; """
wait_for_latest_op_on_table_finish(tableName, timeout)
-
- (code, out, err) = calc_file_crc_on_tablet(ip, port, tablet_id)
- logger.info("Run calc_file_crc_on_tablet: code=" + code + ", out=" + out +
", err=" + err)
- assertTrue(code == 0)
- assertTrue(out.contains("crc_value"))
- assertTrue(out.contains("used_time_ms"))
- assertEquals("0", parseJson(out.trim()).start_version)
- assertEquals("7", parseJson(out.trim()).end_version)
- assertEquals("7", parseJson(out.trim()).rowset_count)
- // 6 files are expected after dropping the column
- // Since we do not support change light_schema_change from true to false,
so we can not do directly schema change.
- // As a result, the rowset schema will not remove the index info, so the
file count will not decrease.
- assertEquals("12", parseJson(out.trim()).file_count)
+ // when drop column, the index files will not be deleted, so the index
files count is still 1
+ // when all index columns are dropped, the index files will be deleted by
GC later
+ check_nested_index_file(ip, port, tablet_id, 7, 1, "V2")
}
diff --git
a/regression-test/suites/inverted_index_p0/index_format_v2/test_single_replica_compaction_with_format_v2.groovy
b/regression-test/suites/inverted_index_p0/index_format_v2/test_single_replica_compaction_with_format_v2.groovy
index 453fcd91226..7826702fa7e 100644
---
a/regression-test/suites/inverted_index_p0/index_format_v2/test_single_replica_compaction_with_format_v2.groovy
+++
b/regression-test/suites/inverted_index_p0/index_format_v2/test_single_replica_compaction_with_format_v2.groovy
@@ -46,10 +46,6 @@ suite("test_single_replica_compaction_with_format_v2",
"inverted_index_format_v2
assertTrue(useTime <= OpTimeout, "wait_for_latest_op_on_table_finish
timeout")
}
- def calc_file_crc_on_tablet = { ip, port, tablet ->
- return curl("GET",
String.format("http://%s:%s/api/calc_crc?tablet_id=%s", ip, port, tablet))
- }
-
def calc_segment_count = { tablet ->
int segment_count = 0
String tablet_id = tablet.TabletId
@@ -175,18 +171,7 @@ suite("test_single_replica_compaction_with_format_v2",
"inverted_index_format_v2
backend_id = tablet.BackendId
String ip = backendId_to_backendIP.get(backend_id)
String port = backendId_to_backendHttpPort.get(backend_id)
- int segment_count = calc_segment_count(tablet)
- logger.info("TabletId: " + tablet_id + ", segment_count: " +
segment_count)
- def (c, o, e) = calc_file_crc_on_tablet(ip, port, tablet_id)
- logger.info("Run calc_file_crc_on_tablet: code=" + c + ", out=" +
o + ", err=" + e)
- assertTrue(c == 0)
- assertTrue(o.contains("crc_value"))
- assertTrue(o.contains("used_time_ms"))
- assertEquals("0", parseJson(o.trim()).start_version)
- assertEquals("9", parseJson(o.trim()).end_version)
- assertEquals("9", parseJson(o.trim()).rowset_count)
- int file_count = segment_count * 2
- assertEquals(file_count,
Integer.parseInt(parseJson(o.trim()).file_count))
+ check_nested_index_file(ip, port, tablet_id, 9, 3, "V2")
StringBuilder sb = new StringBuilder();
sb.append("curl -X POST http://")
@@ -244,19 +229,7 @@ suite("test_single_replica_compaction_with_format_v2",
"inverted_index_format_v2
String ip = backendId_to_backendIP.get(backend_id)
String port = backendId_to_backendHttpPort.get(backend_id)
- int segment_count = calc_segment_count(tablet)
- logger.info("TabletId: " + tablet_id + ", segment_count: " +
segment_count)
- def (c, o, e) = calc_file_crc_on_tablet(ip, port, tablet_id)
- logger.info("Run calc_file_crc_on_tablet: code=" + c + ", out=" +
o + ", err=" + e)
- assertTrue(c == 0)
- assertTrue(o.contains("crc_value"))
- assertTrue(o.contains("used_time_ms"))
- assertEquals("0", parseJson(o.trim()).start_version)
- assertEquals("9", parseJson(o.trim()).end_version)
- // after compaction, there are 2 rwosets.
- assertEquals("2", parseJson(o.trim()).rowset_count)
- int file_count = segment_count * 2
- assertEquals(file_count,
Integer.parseInt(parseJson(o.trim()).file_count))
+ check_nested_index_file(ip, port, tablet_id, 2, 3, "V2")
}
int segmentsCount = 0
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]