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

dataroaring pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/doris.git


The following commit(s) were added to refs/heads/master by this push:
     new 48bfb8e9cf [Enhancement](regression-test)Add regression test for MoW 
backup and restore (#21223)
48bfb8e9cf is described below

commit 48bfb8e9cff686a34c5fa800eb196ebcee7e56ca
Author: abmdocrt <yukang.lian2...@gmail.com>
AuthorDate: Wed Jul 5 15:16:04 2023 +0800

    [Enhancement](regression-test)Add regression test for MoW backup and 
restore (#21223)
---
 .../backup_restore/test_MoW_backup_restore.out     |  46 +++++++
 .../org/apache/doris/regression/suite/Suite.groovy |  19 +++
 .../backup_restore/test_MoW_backup_restore.groovy  | 136 +++++++++++++++++++++
 3 files changed, 201 insertions(+)

diff --git a/regression-test/data/backup_restore/test_MoW_backup_restore.out 
b/regression-test/data/backup_restore/test_MoW_backup_restore.out
new file mode 100644
index 0000000000..76fdfd8a6f
--- /dev/null
+++ b/regression-test/data/backup_restore/test_MoW_backup_restore.out
@@ -0,0 +1,46 @@
+-- This file is automatically generated. You should know what you did if you 
want to edit this
+-- !3 --
+1      1
+2      2
+
+-- !4 --
+1      10
+2      2
+
+-- !5 --
+1      100
+2      2
+
+-- !6 --
+2      2
+
+-- !7 --
+1      1
+2      2
+
+-- !8 --
+1      10
+2      2
+
+-- !9 --
+1      100
+2      2
+
+-- !10 --
+2      2
+
+-- !11 --
+1      1
+2      2
+
+-- !12 --
+1      10
+2      2
+
+-- !13 --
+1      100
+2      2
+
+-- !14 --
+2      2
+
diff --git 
a/regression-test/framework/src/main/groovy/org/apache/doris/regression/suite/Suite.groovy
 
b/regression-test/framework/src/main/groovy/org/apache/doris/regression/suite/Suite.groovy
index c307aba605..bd86471780 100644
--- 
a/regression-test/framework/src/main/groovy/org/apache/doris/regression/suite/Suite.groovy
+++ 
b/regression-test/framework/src/main/groovy/org/apache/doris/regression/suite/Suite.groovy
@@ -589,5 +589,24 @@ class Suite implements GroovyInterceptable {
         }
     }
 
+    Boolean checkSnapshotFinish() {
+        String checkSQL = "SHOW BACKUP FROM " + context.dbName
+        int size = sql(checkSQL).size()
+        logger.info("Now size is ${size}")
+        List<Object> row = sql(checkSQL)[size-1]
+        logger.info("Now row is ${row}")
+
+        return (row[3] as String) == "FINISHED"
+    }
+
+    Boolean checkRestoreFinish() {
+        String checkSQL = "SHOW RESTORE FROM " + context.dbName
+        int size = sql(checkSQL).size()
+        logger.info("Now size is ${size}")
+        List<Object> row = sql(checkSQL)[size-1]
+        logger.info("Now row is ${row}")
+
+        return (row[4] as String) == "FINISHED"
+    }
 }
 
diff --git 
a/regression-test/suites/backup_restore/test_MoW_backup_restore.groovy 
b/regression-test/suites/backup_restore/test_MoW_backup_restore.groovy
new file mode 100644
index 0000000000..7119f3038e
--- /dev/null
+++ b/regression-test/suites/backup_restore/test_MoW_backup_restore.groovy
@@ -0,0 +1,136 @@
+// 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.
+
+package org.apache.doris.regression.suite
+
+suite("test_MoW_backup_restore", "p1") {
+
+    def syncer = getSyncer()
+    def repo = "__keep_on_local__"
+    def tableName = "demo_MoW"
+    sql """drop table if exists ${tableName}"""
+    sql """CREATE TABLE IF NOT EXISTS ${tableName} 
+    ( `user_id` INT NOT NULL, `value` INT NOT NULL)
+    UNIQUE KEY(`user_id`) 
+    DISTRIBUTED BY HASH(`user_id`) 
+    BUCKETS 1 
+    PROPERTIES ("replication_allocation" = "tag.location.default: 1",
+    "disable_auto_compaction" = "true",
+    "enable_unique_key_merge_on_write" = "true");"""
+
+    // version1 (1,1)(2,2)
+    sql """insert into ${tableName} values(1,1),(2,2)"""
+    sql """backup snapshot ${context.dbName}.snapshot1 to ${repo} on 
(${tableName}) properties("type"="full")"""
+    while(checkSnapshotFinish()==false){
+        Thread.sleep(3000)
+    }
+    qt_3 """select * from ${tableName} order by user_id"""
+
+    // version2 (1,10)(2,2)
+    sql """insert into ${tableName} values(1,10)"""
+    sql """backup snapshot ${context.dbName}.snapshot2 to ${repo} on 
(${tableName}) properties("type"="full")"""
+    while(checkSnapshotFinish()==false){
+        Thread.sleep(3000)
+    }
+    qt_4 """select * from ${tableName} order by user_id"""
+
+    // version3 (1,100)(2,2)
+    sql """update ${tableName} set value = 100 where user_id = 1"""
+    sql """backup snapshot ${context.dbName}.snapshot3 to ${repo} on 
(${tableName}) properties("type"="full")"""
+    while(checkSnapshotFinish()==false){
+        Thread.sleep(3000)
+    }
+    qt_5 """select * from ${tableName} order by user_id"""
+
+    // version4 (2,2)
+    sql """delete from ${tableName} where user_id = 1"""
+    sql """backup snapshot ${context.dbName}.snapshot4 to ${repo} on 
(${tableName}) properties("type"="full")"""
+    while(checkSnapshotFinish()==false){
+        Thread.sleep(3000)
+    }
+    qt_6 """select * from ${tableName} order by user_id"""
+
+    // version1 (1,1)(2,2)
+    assertTrue(syncer.getSnapshot("snapshot1", "${tableName}"))
+    assertTrue(syncer.restoreSnapshot())
+    while (checkRestoreFinish() == false) {
+        Thread.sleep(3000)
+    }
+    qt_7 """select * from ${tableName} order by user_id"""
+
+    // version2 (1,10)(2,2)
+    assertTrue(syncer.getSnapshot("snapshot2", "${tableName}"))
+    assertTrue(syncer.restoreSnapshot())
+    while (checkRestoreFinish() == false) {
+        Thread.sleep(3000)
+    }
+    qt_8 """select * from ${tableName} order by user_id"""
+    // version3 (1,100)(2,2)
+    assertTrue(syncer.getSnapshot("snapshot3", "${tableName}"))
+    assertTrue(syncer.restoreSnapshot())
+    while (checkRestoreFinish() == false) {
+        Thread.sleep(3000)
+    }
+    qt_9 """select * from ${tableName} order by user_id"""
+    // version4 (2,2)
+    assertTrue(syncer.getSnapshot("snapshot4", "${tableName}"))
+    assertTrue(syncer.restoreSnapshot())
+    while (checkRestoreFinish() == false) {
+        Thread.sleep(3000)
+    }
+    qt_10 """select * from ${tableName} order by user_id"""
+
+    sql """drop table if exists ${tableName}"""
+    sql """CREATE TABLE IF NOT EXISTS ${tableName} 
+    ( `user_id` INT NOT NULL, `value` INT NOT NULL)
+    UNIQUE KEY(`user_id`) 
+    DISTRIBUTED BY HASH(`user_id`) 
+    BUCKETS 1 
+    PROPERTIES ("replication_allocation" = "tag.location.default: 1",
+    "disable_auto_compaction" = "true",
+    "enable_unique_key_merge_on_write" = "true");""" 
+
+    // version1 (1,1)(2,2)
+    assertTrue(syncer.getSnapshot("snapshot1", "${tableName}"))
+    assertTrue(syncer.restoreSnapshot())
+    while (checkRestoreFinish() == false) {
+        Thread.sleep(3000)
+    }
+    qt_11 """select * from ${tableName} order by user_id"""
+
+    // version2 (1,10)(2,2)
+    assertTrue(syncer.getSnapshot("snapshot2", "${tableName}"))
+    assertTrue(syncer.restoreSnapshot())
+    while (checkRestoreFinish() == false) {
+        Thread.sleep(3000)
+    }
+    qt_12 """select * from ${tableName} order by user_id"""
+    // version3 (1,100)(2,2)
+    assertTrue(syncer.getSnapshot("snapshot3", "${tableName}"))
+    assertTrue(syncer.restoreSnapshot())
+    while (checkRestoreFinish() == false) {
+        Thread.sleep(3000)
+    }
+    qt_13 """select * from ${tableName} order by user_id"""
+    // version4 (2,2)
+    assertTrue(syncer.getSnapshot("snapshot4", "${tableName}"))
+    assertTrue(syncer.restoreSnapshot())
+    while (checkRestoreFinish() == false) {
+        Thread.sleep(3000)
+    }
+    qt_14 """select * from ${tableName} order by user_id"""
+}


---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscr...@doris.apache.org
For additional commands, e-mail: commits-h...@doris.apache.org

Reply via email to