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

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


The following commit(s) were added to refs/heads/master by this push:
     new 5654eb798c7 [FLINK-32731][e2e] Backup the hive-metastore, hdfs 
namenode and mysql logs (#23155)
5654eb798c7 is described below

commit 5654eb798c744c924aff93d68ec3c4e413e75232
Author: Shengkai <33114724+fsk...@users.noreply.github.com>
AuthorDate: Wed Aug 9 15:46:07 2023 +0800

    [FLINK-32731][e2e] Backup the hive-metastore, hdfs namenode and mysql logs 
(#23155)
---
 .../flink/tests/hive/containers/HiveContainer.java | 58 +++++++++++++++++++++-
 .../table/gateway/containers/HiveContainer.java    | 57 +++++++++++++++++++++
 2 files changed, 113 insertions(+), 2 deletions(-)

diff --git 
a/flink-end-to-end-tests/flink-end-to-end-tests-hive/src/test/java/org/apache/flink/tests/hive/containers/HiveContainer.java
 
b/flink-end-to-end-tests/flink-end-to-end-tests-hive/src/test/java/org/apache/flink/tests/hive/containers/HiveContainer.java
index 716f40d48e1..6edb7f46e8c 100644
--- 
a/flink-end-to-end-tests/flink-end-to-end-tests-hive/src/test/java/org/apache/flink/tests/hive/containers/HiveContainer.java
+++ 
b/flink-end-to-end-tests/flink-end-to-end-tests-hive/src/test/java/org/apache/flink/tests/hive/containers/HiveContainer.java
@@ -19,8 +19,10 @@
 package org.apache.flink.tests.hive.containers;
 
 import org.apache.flink.table.catalog.hive.client.HiveShimLoader;
+import org.apache.flink.test.parameters.ParameterProperty;
 import org.apache.flink.util.DockerImageVersions;
 
+import org.junit.runner.Description;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.testcontainers.containers.GenericContainer;
@@ -31,19 +33,31 @@ import java.io.File;
 import java.io.IOException;
 import java.nio.file.Files;
 import java.nio.file.Path;
+import java.nio.file.Paths;
 import java.util.List;
+import java.util.UUID;
 
 /** Test container for Hive. */
 public class HiveContainer extends GenericContainer<HiveContainer> {
 
     private static final Logger LOG = 
LoggerFactory.getLogger(HiveContainer.class);
     public static final String HOST_NAME = "hadoop-master";
+    public static final int HIVE_METASTORE_PORT = 9083;
 
     private static final boolean HIVE_310_OR_LATER =
             
HiveShimLoader.getHiveVersion().compareTo(HiveShimLoader.HIVE_VERSION_V3_1_0) 
>= 0;
-    private String hiveWarehouseDir;
 
-    public static final int HIVE_METASTORE_PORT = 9083;
+    // Detailed log paths are from
+    // 
https://github.com/prestodb/docker-images/tree/master/prestodb/hdp2.6-hive/files/etc/supervisord.d
+    // 
https://github.com/prestodb/docker-images/blob/master/prestodb/hive3.1-hive/files/etc/supervisord.conf
+    private static final String NAME_NODE_LOG_PATH =
+            "/var/log/hadoop-hdfs/hadoop-hdfs-namenode.log";
+    private static final String METASTORE_LOG_PATH = "/tmp/hive/hive.log";
+    private static final String MYSQL_METASTORE_LOG_PATH = 
"/var/log/mysqld.log";
+    private static final ParameterProperty<Path> 
DISTRIBUTION_LOG_BACKUP_DIRECTORY =
+            new ParameterProperty<>("logBackupDir", Paths::get);
+
+    private String hiveWarehouseDir;
 
     public HiveContainer(List<String> initTableNames) {
         super(
@@ -62,6 +76,12 @@ public class HiveContainer extends 
GenericContainer<HiveContainer> {
         }
     }
 
+    @Override
+    protected void finished(Description description) {
+        backupLogs();
+        super.finished(description);
+    }
+
     public String getHiveMetastoreURL() {
         return String.format("thrift://%s:%s", getHost(), 
getMappedPort(HIVE_METASTORE_PORT));
     }
@@ -101,4 +121,38 @@ public class HiveContainer extends 
GenericContainer<HiveContainer> {
         file.setWritable(true, false);
         file.setExecutable(true, false);
     }
+
+    private void backupLogs() {
+        Path path = DISTRIBUTION_LOG_BACKUP_DIRECTORY.get().orElse(null);
+        if (path == null) {
+            LOG.warn(
+                    "Property {} not set, logs will not be backed up.",
+                    DISTRIBUTION_LOG_BACKUP_DIRECTORY.getPropertyName());
+            return;
+        }
+        try {
+            Path dir =
+                    Files.createDirectory(
+                            Paths.get(
+                                    String.valueOf(path.toAbsolutePath()),
+                                    "hive-" + UUID.randomUUID()));
+            copyFileFromContainer(
+                    NAME_NODE_LOG_PATH,
+                    
Files.createFile(Paths.get(dir.toAbsolutePath().toString(), "namenode.log"))
+                            .toAbsolutePath()
+                            .toString());
+            copyFileFromContainer(
+                    METASTORE_LOG_PATH,
+                    
Files.createFile(Paths.get(dir.toAbsolutePath().toString(), "metastore.log"))
+                            .toAbsolutePath()
+                            .toString());
+            copyFileFromContainer(
+                    MYSQL_METASTORE_LOG_PATH,
+                    
Files.createFile(Paths.get(dir.toAbsolutePath().toString(), "mysql.log"))
+                            .toAbsolutePath()
+                            .toString());
+        } catch (Throwable e) {
+            LOG.warn("Failed to backup logs...", e);
+        }
+    }
 }
diff --git 
a/flink-end-to-end-tests/flink-sql-gateway-test/src/test/java/org/apache/flink/table/gateway/containers/HiveContainer.java
 
b/flink-end-to-end-tests/flink-sql-gateway-test/src/test/java/org/apache/flink/table/gateway/containers/HiveContainer.java
index 35dc6325779..c16aa41b8db 100644
--- 
a/flink-end-to-end-tests/flink-sql-gateway-test/src/test/java/org/apache/flink/table/gateway/containers/HiveContainer.java
+++ 
b/flink-end-to-end-tests/flink-sql-gateway-test/src/test/java/org/apache/flink/table/gateway/containers/HiveContainer.java
@@ -17,14 +17,21 @@
 
 package org.apache.flink.table.gateway.containers;
 
+import org.apache.flink.test.parameters.ParameterProperty;
 import org.apache.flink.util.DockerImageVersions;
 
+import org.junit.runner.Description;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.testcontainers.containers.GenericContainer;
 import org.testcontainers.containers.output.Slf4jLogConsumer;
 import org.testcontainers.utility.DockerImageName;
 
+import java.nio.file.Files;
+import java.nio.file.Path;
+import java.nio.file.Paths;
+import java.util.UUID;
+
 /** Test Container for hive. */
 public class HiveContainer extends GenericContainer<HiveContainer> {
 
@@ -33,6 +40,16 @@ public class HiveContainer extends 
GenericContainer<HiveContainer> {
     public static final String HOST_NAME = "hadoop-master";
     public static final int HIVE_METASTORE_PORT = 9083;
 
+    // Detailed log paths are from
+    // 
https://github.com/prestodb/docker-images/tree/master/prestodb/hdp2.6-hive/files/etc/supervisord.d
+    private static final String NAME_NODE_LOG_PATH =
+            "/var/log/hadoop-hdfs/hadoop-hdfs-namenode.log";
+    private static final String METASTORE_LOG_PATH = "/tmp/hive/hive.log";
+    private static final String MYSQL_METASTORE_LOG_PATH = 
"/var/log/mysqld.log";
+
+    private static final ParameterProperty<Path> 
DISTRIBUTION_LOG_BACKUP_DIRECTORY =
+            new ParameterProperty<>("logBackupDir", Paths::get);
+
     public HiveContainer() {
         super(DockerImageName.parse(DockerImageVersions.HIVE2));
         withExtraHost(HOST_NAME, "127.0.0.1");
@@ -47,7 +64,47 @@ public class HiveContainer extends 
GenericContainer<HiveContainer> {
         }
     }
 
+    @Override
+    protected void finished(Description description) {
+        backupLogs();
+        super.finished(description);
+    }
+
     public String getHiveMetastoreURI() {
         return String.format("thrift://%s:%s", getHost(), 
getMappedPort(HIVE_METASTORE_PORT));
     }
+
+    private void backupLogs() {
+        Path path = DISTRIBUTION_LOG_BACKUP_DIRECTORY.get().orElse(null);
+        if (path == null) {
+            LOG.warn(
+                    "Property {} not set, logs will not be backed up.",
+                    DISTRIBUTION_LOG_BACKUP_DIRECTORY.getPropertyName());
+            return;
+        }
+        try {
+            Path dir =
+                    Files.createDirectory(
+                            Paths.get(
+                                    String.valueOf(path.toAbsolutePath()),
+                                    "hive-" + UUID.randomUUID()));
+            copyFileFromContainer(
+                    NAME_NODE_LOG_PATH,
+                    
Files.createFile(Paths.get(dir.toAbsolutePath().toString(), "namenode.log"))
+                            .toAbsolutePath()
+                            .toString());
+            copyFileFromContainer(
+                    METASTORE_LOG_PATH,
+                    
Files.createFile(Paths.get(dir.toAbsolutePath().toString(), "metastore.log"))
+                            .toAbsolutePath()
+                            .toString());
+            copyFileFromContainer(
+                    MYSQL_METASTORE_LOG_PATH,
+                    
Files.createFile(Paths.get(dir.toAbsolutePath().toString(), "mysql.log"))
+                            .toAbsolutePath()
+                            .toString());
+        } catch (Throwable e) {
+            LOG.warn("Failed to backup logs...", e);
+        }
+    }
 }

Reply via email to