hive-issues mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "ASF GitHub Bot (JIRA)" <j...@apache.org>
Subject [jira] [Work logged] (HIVE-21286) Hive should support clean-up of previously bootstrapped tables when retry from different dump.
Date Mon, 04 Mar 2019 16:53:00 GMT

     [ https://issues.apache.org/jira/browse/HIVE-21286?focusedWorklogId=207282&page=com.atlassian.jira.plugin.system.issuetabpanels:worklog-tabpanel#worklog-207282
]

ASF GitHub Bot logged work on HIVE-21286:
-----------------------------------------

                Author: ASF GitHub Bot
            Created on: 04/Mar/19 16:52
            Start Date: 04/Mar/19 16:52
    Worklog Time Spent: 10m 
      Work Description: ashutosh-bapat commented on pull request #551: HIVE-21286: Hive should
support clean-up of previously bootstrapped tables when retry from different dump.
URL: https://github.com/apache/hive/pull/551#discussion_r262120754
 
 

 ##########
 File path: itests/hive-unit/src/test/java/org/apache/hadoop/hive/ql/parse/TestReplicationScenariosExternalTables.java
 ##########
 @@ -534,6 +536,90 @@ public void bootstrapExternalTablesDuringIncrementalPhase() throws Throwable
{
             .verifyResults(Arrays.asList("10", "20"));
   }
 
+  @Test
+  public void retryBootstrapExternalTablesFromDifferentDump() throws Throwable {
+    List<String> loadWithClause = new ArrayList<>();
+    loadWithClause.addAll(externalTableBasePathWithClause());
+
+    List<String> dumpWithClause = Collections.singletonList(
+            "'" + HiveConf.ConfVars.REPL_INCLUDE_EXTERNAL_TABLES.varname + "'='false'"
+    );
+
+    WarehouseInstance.Tuple tupleBootstrapWithoutExternal = primary
+            .run("use " + primaryDbName)
+            .run("create external table t1 (id int)")
+            .run("insert into table t1 values (1)")
+            .run("create external table t2 (place string) partitioned by (country string)")
+            .run("insert into table t2 partition(country='india') values ('bangalore')")
+            .run("insert into table t2 partition(country='us') values ('austin')")
+            .run("create table t3 as select * from t1")
+            .dump(primaryDbName, null, dumpWithClause);
+
+    replica.load(replicatedDbName, tupleBootstrapWithoutExternal.dumpLocation, loadWithClause)
+            .status(replicatedDbName)
+            .verifyResult(tupleBootstrapWithoutExternal.lastReplicationId)
+            .run("use " + replicatedDbName)
+            .run("show tables")
+            .verifyResult("t3")
+            .run("select id from t3")
+            .verifyResult("1");
+
+    dumpWithClause = Arrays.asList("'" + HiveConf.ConfVars.REPL_INCLUDE_EXTERNAL_TABLES.varname
+ "'='true'",
+            "'" + HiveConf.ConfVars.REPL_BOOTSTRAP_EXTERNAL_TABLES.varname + "'='true'");
+    WarehouseInstance.Tuple tupleIncWithExternalBootstrap = primary.run("use " + primaryDbName)
+            .run("drop table t1")
+            .run("create external table t4 (id int)")
+            .run("insert into table t4 values (10)")
+            .run("create table t5 as select * from t4")
+            .dump(primaryDbName, tupleBootstrapWithoutExternal.lastReplicationId, dumpWithClause);
+
+    // Verify if bootstrapping with same dump is idempotent and return same result
+    for (int i = 0; i < 2; i++) {
+      replica.load(replicatedDbName, tupleIncWithExternalBootstrap.dumpLocation, loadWithClause)
+              .status(replicatedDbName)
+              .verifyResult(tupleIncWithExternalBootstrap.lastReplicationId)
+              .run("use " + replicatedDbName)
+              .run("show tables like 't1'")
+              .verifyFailure(new String[]{"t1"})
+              .run("select place from t2 where country = 'us'")
+              .verifyResult("austin")
+              .run("select id from t4")
+              .verifyResult("10")
+              .run("select id from t5")
+              .verifyResult("10");
+    }
+
+    // Drop an external table, add another managed table with same name, insert into existing
external table
+    // and dump another bootstrap dump for external tables.
+    WarehouseInstance.Tuple tupleNewIncWithExternalBootstrap = primary.run("use " + primaryDbName)
+            .run("insert into table t2 partition(country='india') values ('chennai')")
+            .run("drop table t2")
+            .run("create table t2 as select * from t4")
+            .run("insert into table t4 values (20)")
+            .dump(primaryDbName, tupleIncWithExternalBootstrap.lastReplicationId, dumpWithClause);
+
+    // Set previous dump as bootstrap to be rolled-back. Now, new bootstrap should overwrite
the old one.
+    loadWithClause.add("'" + REPL_ROLLBACK_BOOTSTRAP_LOAD_CONFIG + "'='"
+            + tupleIncWithExternalBootstrap.dumpLocation + "'");
 
 Review comment:
   Please add a testcase which tests the bootstrapping when the previous bootstrap has failed
halfway i.e. it has loaded some external tables but not all. This way we will know what happens
when the re-bootstrap tries to remove an external table which wasn't loaded in the previous
bootstrap load.
 
----------------------------------------------------------------
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
 
For queries about this service, please contact Infrastructure at:
users@infra.apache.org


Issue Time Tracking
-------------------

    Worklog Id:     (was: 207282)
    Time Spent: 20m  (was: 10m)

> Hive should support clean-up of previously bootstrapped tables when retry from different
dump.
> ----------------------------------------------------------------------------------------------
>
>                 Key: HIVE-21286
>                 URL: https://issues.apache.org/jira/browse/HIVE-21286
>             Project: Hive
>          Issue Type: Bug
>          Components: repl
>    Affects Versions: 4.0.0
>            Reporter: Sankar Hariappan
>            Assignee: Sankar Hariappan
>            Priority: Major
>              Labels: DR, Replication, pull-request-available
>         Attachments: HIVE-21286.01.patch
>
>          Time Spent: 20m
>  Remaining Estimate: 0h
>
> If external tables are enabled for replication on an existing repl policy, then bootstrapping
of external tables are combined with incremental dump.
> If incremental bootstrap load fails with non-retryable error for which user will have
to manually drop all the external tables before trying with another bootstrap dump. For full
bootstrap, to retry with different dump, we suggested user to drop the DB but in this case
they need to manually drop all the external tables which is not so user friendly. So, need
to handle it in Hive side as follows.
> REPL LOAD takes additional config (passed by user in WITH clause) that says, drop all
the tables which are bootstrapped from previous dump. 
> hive.repl.rollback.bootstrap.load=<previous_bootstrap_dump_dir>
> Hive will use this config only if the current dump is bootstrap dump or combined bootstrap
in incremental dump.
> Caution to be taken by user that this config should not be passed if previous REPL LOAD
(with bootstrap) was successful or any successful incremental dump+load happened after "previous_bootstrap_dump_dir".



--
This message was sent by Atlassian JIRA
(v7.6.3#76005)

Mime
View raw message