package com.sequenceiq.cloudbreak.controller.validation.rds; import java.sql.Connection; import java.sql.DriverManager; import java.sql.SQLException; import java.sql.Statement; import java.util.Properties; import org.postgresql.util.PSQLException; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.stereotype.Component; import com.sequenceiq.cloudbreak.controller.BadRequestException; @Component public class RdsConnectionBuilder { private static final Logger LOGGER = LoggerFactory.getLogger(RdsConnectionBuilder.class); public void buildRdsConnection(String connectionURL, String connectionUserName, String connectionPassword, String clusterName) { Properties connectionProps = new Properties(); connectionProps.put("user", connectionUserName); connectionProps.put("password", connectionPassword); try { Connection conn = DriverManager.getConnection(connectionURL, connectionProps); createDb(conn, clusterName, "hive"); createDb(conn, clusterName, "ranger"); createDb(conn, clusterName, "ambari"); conn.close(); } catch (SQLException e) { throw new BadRequestException("Failed to connect to RDS: " + e.getMessage(), e); } } private void createDb(Connection conn, String clusterName, String service) { try { Statement statement = conn.createStatement(); statement.executeUpdate("CREATE DATABASE " + clusterName + service); } catch (PSQLException ex) { if (ex.getSQLState().equals("42P04")) { LOGGER.warn("The expected database already exist"); } else { throw new BadRequestException("Failed to create database in RDS: " + ex.getMessage(), ex); } } catch (SQLException e) { throw new BadRequestException("Failed to connect to RDS: " + e.getMessage(), e); } } }