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

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


The following commit(s) were added to refs/heads/master by this push:
     new a72db99  HIVE-25675: Intermittent PSQLException when trying to connect 
to Postgres in tests (Stamatis Zampetakis, reviewed by Peter Vary)
a72db99 is described below

commit a72db99676ca6a79b414906ab78963a3e955ae69
Author: Stamatis Zampetakis <[email protected]>
AuthorDate: Fri Nov 5 14:50:29 2021 +0100

    HIVE-25675: Intermittent PSQLException when trying to connect to Postgres 
in tests (Stamatis Zampetakis, reviewed by Peter Vary)
    
    Sometimes when we try to connect to Postgres, the database is not yet
    completely ready despite the fact that the respective port is open thus
    leading to the following exception.
    
    PSQLException: FATAL: the database system is starting up
    
    1. Ensure the database is ready by checking a certain message appears
    two times in the logs.
    2. Remove the now unused logger.
    
    Closes #2767
---
 .../hive/ql/externalDB/PostgresExternalDB.java      | 16 ++--------------
 .../hive/metastore/dbinstall/rules/Postgres.java    | 21 ++-------------------
 2 files changed, 4 insertions(+), 33 deletions(-)

diff --git 
a/itests/util/src/main/java/org/apache/hadoop/hive/ql/externalDB/PostgresExternalDB.java
 
b/itests/util/src/main/java/org/apache/hadoop/hive/ql/externalDB/PostgresExternalDB.java
index eaa427b..8f118d6 100644
--- 
a/itests/util/src/main/java/org/apache/hadoop/hive/ql/externalDB/PostgresExternalDB.java
+++ 
b/itests/util/src/main/java/org/apache/hadoop/hive/ql/externalDB/PostgresExternalDB.java
@@ -17,10 +17,6 @@
  */
 package org.apache.hadoop.hive.ql.externalDB;
 
-import java.io.IOException;
-import java.net.InetSocketAddress;
-import java.net.Socket;
-
 /**
  * MySQLExternalDB is a extension of abstractExternalDB
  * Designed for MySQL external database connection
@@ -52,16 +48,8 @@ public class PostgresExternalDB extends AbstractExternalDB {
     }
 
     public boolean isContainerReady(ProcessResults pr) {
-        if (pr.stdout.contains("PostgreSQL init process complete; ready for 
start up")) {
-            try (Socket socket = new Socket()) {
-                socket.connect(new 
InetSocketAddress(getContainerHostAddress(), 5432), 1000);
-                return true;
-            } catch (IOException e) {
-                LOG.info("cant connect to postgres; {}", e.getMessage());
-                return false;
-            }
-        }
-        return false;
+        return pr.stdout.contains("database system is ready to accept 
connections") &&
+            pr.stderr.contains("database system is ready to accept 
connections");
     }
 
 }
\ No newline at end of file
diff --git 
a/standalone-metastore/metastore-server/src/test/java/org/apache/hadoop/hive/metastore/dbinstall/rules/Postgres.java
 
b/standalone-metastore/metastore-server/src/test/java/org/apache/hadoop/hive/metastore/dbinstall/rules/Postgres.java
index dc43fb0..eda1f97 100644
--- 
a/standalone-metastore/metastore-server/src/test/java/org/apache/hadoop/hive/metastore/dbinstall/rules/Postgres.java
+++ 
b/standalone-metastore/metastore-server/src/test/java/org/apache/hadoop/hive/metastore/dbinstall/rules/Postgres.java
@@ -17,19 +17,10 @@
  */
 package org.apache.hadoop.hive.metastore.dbinstall.rules;
 
-import java.io.IOException;
-import java.net.InetSocketAddress;
-import java.net.Socket;
-
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
 /**
  * JUnit TestRule for Postgres.
  */
 public class Postgres extends DatabaseRule {
-  private static final Logger LOG = LoggerFactory.getLogger(Postgres.class);
-
   @Override
   public String getDockerImageName() {
     return "postgres:11.6";
@@ -72,16 +63,8 @@ public class Postgres extends DatabaseRule {
 
   @Override
   public boolean isContainerReady(ProcessResults pr) {
-    if (pr.stdout.contains("PostgreSQL init process complete; ready for start 
up")) {
-      try (Socket socket = new Socket()) {
-        socket.connect(new InetSocketAddress(getContainerHostAddress(), 5432), 
1000);
-        return true;
-      } catch (IOException e) {
-        LOG.info("cant connect to postgres; {}", e.getMessage());
-        return false;
-      }
-    }
-    return false;
+    return pr.stdout.contains("database system is ready to accept 
connections") &&
+        pr.stderr.contains("database system is ready to accept connections");
   }
 
   @Override

Reply via email to