diff options
Diffstat (limited to 'openecomp-be/lib/openecomp-core-lib/openecomp-nosqldb-lib/openecomp-nosqldb-core/src/main/java/org/openecomp/core/nosqldb/impl')
3 files changed, 48 insertions, 98 deletions
diff --git a/openecomp-be/lib/openecomp-core-lib/openecomp-nosqldb-lib/openecomp-nosqldb-core/src/main/java/org/openecomp/core/nosqldb/impl/cassandra/CassandraNoSqlDbFactoryImpl.java b/openecomp-be/lib/openecomp-core-lib/openecomp-nosqldb-lib/openecomp-nosqldb-core/src/main/java/org/openecomp/core/nosqldb/impl/cassandra/CassandraNoSqlDbFactoryImpl.java index 134d341d05..b62689d955 100644 --- a/openecomp-be/lib/openecomp-core-lib/openecomp-nosqldb-lib/openecomp-nosqldb-core/src/main/java/org/openecomp/core/nosqldb/impl/cassandra/CassandraNoSqlDbFactoryImpl.java +++ b/openecomp-be/lib/openecomp-core-lib/openecomp-nosqldb-lib/openecomp-nosqldb-core/src/main/java/org/openecomp/core/nosqldb/impl/cassandra/CassandraNoSqlDbFactoryImpl.java @@ -7,9 +7,9 @@ * Licensed 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. @@ -17,28 +17,25 @@ * limitations under the License. * ============LICENSE_END========================================================= */ - package org.openecomp.core.nosqldb.impl.cassandra; - import com.datastax.driver.core.Session; import org.openecomp.core.nosqldb.api.NoSqlDb; import org.openecomp.core.nosqldb.factory.NoSqlDbFactory; public class CassandraNoSqlDbFactoryImpl extends NoSqlDbFactory { - @Override - public NoSqlDb createInterface() { - + @Override + public NoSqlDb createInterface() { + return new CassandraNoSqlDbImpl(ReferenceHolder.CASSANDRA); + } - return new CassandraNoSqlDbImpl(ReferenceHolder.CASSANDRA); - } + protected void stop() { + ReferenceHolder.CASSANDRA.close(); + } - protected void stop() { - ReferenceHolder.CASSANDRA.close(); - } + private static class ReferenceHolder { - private static class ReferenceHolder { - private static final Session CASSANDRA = CassandraSessionFactory.getSession(); - } + private static final Session CASSANDRA = CassandraSessionFactory.getSession(); + } } diff --git a/openecomp-be/lib/openecomp-core-lib/openecomp-nosqldb-lib/openecomp-nosqldb-core/src/main/java/org/openecomp/core/nosqldb/impl/cassandra/CassandraNoSqlDbImpl.java b/openecomp-be/lib/openecomp-core-lib/openecomp-nosqldb-lib/openecomp-nosqldb-core/src/main/java/org/openecomp/core/nosqldb/impl/cassandra/CassandraNoSqlDbImpl.java index 539fbcd92f..237c48d013 100644 --- a/openecomp-be/lib/openecomp-core-lib/openecomp-nosqldb-lib/openecomp-nosqldb-core/src/main/java/org/openecomp/core/nosqldb/impl/cassandra/CassandraNoSqlDbImpl.java +++ b/openecomp-be/lib/openecomp-core-lib/openecomp-nosqldb-lib/openecomp-nosqldb-core/src/main/java/org/openecomp/core/nosqldb/impl/cassandra/CassandraNoSqlDbImpl.java @@ -12,18 +12,17 @@ * 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.openecomp.core.nosqldb.impl.cassandra; -import com.datastax.driver.mapping.MappingManager; import com.datastax.driver.core.BoundStatement; import com.datastax.driver.core.Host; import com.datastax.driver.core.PreparedStatement; import com.datastax.driver.core.ResultSet; import com.datastax.driver.core.Session; - - +import com.datastax.driver.mapping.MappingManager; +import java.util.Set; +import java.util.stream.Collectors; import org.openecomp.core.nosqldb.api.NoSqlDb; import org.openecomp.core.nosqldb.util.CassandraUtils; import org.openecomp.core.utilities.CommonMethods; @@ -33,49 +32,34 @@ import org.openecomp.sdc.common.errors.ErrorCode; import org.openecomp.sdc.logging.api.Logger; import org.openecomp.sdc.logging.api.LoggerFactory; -import java.util.Set; -import java.util.stream.Collectors; - class CassandraNoSqlDbImpl implements NoSqlDb { private final Session session; private final String keySpace; private final MappingManager mappingManager; - private final Logger log = LoggerFactory.getLogger(this.getClass().getName()); - public CassandraNoSqlDbImpl(Session session) { this.session = session; this.keySpace = this.session.getLoggedKeyspace(); this.mappingManager = new MappingManager(this.session); - } @Override public void insert(String tableName, String[] colNames, Object[] values) { if (colNames.length != values.length) { - throw new CoreException((new ErrorCode.ErrorCodeBuilder()).withMessage( - "number of colmuns[" + colNames.length + "] is not equal to the number of values[" - + values.length + "].").withId("E0005").withCategory(ErrorCategory.APPLICATION) - .build()); + throw new CoreException((new ErrorCode.ErrorCodeBuilder()) + .withMessage("number of colmuns[" + colNames.length + "] is not equal to the number of values[" + values.length + "].") + .withId("E0005").withCategory(ErrorCategory.APPLICATION).build()); } - StringBuilder sb = new StringBuilder(); - sb.append("insert into ") - .append(tableName) - .append(" (") - .append(CommonMethods.arrayToCommaSeparatedString(colNames)) - .append(") values (") - .append(CommonMethods.duplicateStringWithDelimiter("?", ',', values.length)) - .append(")"); + sb.append("insert into ").append(tableName).append(" (").append(CommonMethods.arrayToCommaSeparatedString(colNames)).append(") values (") + .append(CommonMethods.duplicateStringWithDelimiter("?", ',', values.length)).append(")"); log.info(sb.toString()); PreparedStatement prepared = session.prepare(sb.toString()); - BoundStatement bound; bound = prepared.bind(values); session.execute(bound); - } @Override @@ -85,21 +69,18 @@ class CassandraNoSqlDbImpl implements NoSqlDb { @Override public ResultSet execute(String statementName, Object... values) { - String statement = CassandraUtils.getStatement(statementName); if (statement == null) { statement = statementName; } if (values != null) { PreparedStatement prepared = session.prepare(statement); - BoundStatement bound; bound = prepared.bind(values); return session.execute(bound); } else { return session.execute(statement); } - } @Override @@ -111,10 +92,9 @@ class CassandraNoSqlDbImpl implements NoSqlDb { public String getVersion() { try { Set<Host> allHosts = this.session.getCluster().getMetadata().getAllHosts(); - Set<String> versions = allHosts.stream().map(host -> host.getCassandraVersion().toString()) - .collect(Collectors.toSet()); + Set<String> versions = allHosts.stream().map(host -> host.getCassandraVersion().toString()).collect(Collectors.toSet()); return versions.stream().collect(Collectors.joining(",")); - } catch (Exception e){ + } catch (Exception e) { log.error("Failed to retrieve version", e); return "Failed to retrieve version"; } diff --git a/openecomp-be/lib/openecomp-core-lib/openecomp-nosqldb-lib/openecomp-nosqldb-core/src/main/java/org/openecomp/core/nosqldb/impl/cassandra/CassandraSessionFactory.java b/openecomp-be/lib/openecomp-core-lib/openecomp-nosqldb-lib/openecomp-nosqldb-core/src/main/java/org/openecomp/core/nosqldb/impl/cassandra/CassandraSessionFactory.java index a507017888..8f3d51d618 100644 --- a/openecomp-be/lib/openecomp-core-lib/openecomp-nosqldb-lib/openecomp-nosqldb-core/src/main/java/org/openecomp/core/nosqldb/impl/cassandra/CassandraSessionFactory.java +++ b/openecomp-be/lib/openecomp-core-lib/openecomp-nosqldb-lib/openecomp-nosqldb-core/src/main/java/org/openecomp/core/nosqldb/impl/cassandra/CassandraSessionFactory.java @@ -13,7 +13,6 @@ * See the License for the specific language governing permissions and * limitations under the License. */ - package org.openecomp.core.nosqldb.impl.cassandra; import com.datastax.driver.core.Cluster; @@ -22,22 +21,23 @@ import com.datastax.driver.core.QueryOptions; import com.datastax.driver.core.RemoteEndpointAwareJdkSSLOptions; import com.datastax.driver.core.SSLOptions; import com.datastax.driver.core.Session; - - -import com.datastax.driver.core.policies.*; -import org.openecomp.core.nosqldb.util.CassandraUtils; -import org.openecomp.sdc.common.errors.SdcConfigurationException; -import org.openecomp.sdc.common.session.SessionContextProviderFactory; -import org.openecomp.sdc.logging.api.Logger; -import org.openecomp.sdc.logging.api.LoggerFactory; - -import javax.net.ssl.SSLContext; -import javax.net.ssl.TrustManagerFactory; +import com.datastax.driver.core.policies.ConstantReconnectionPolicy; +import com.datastax.driver.core.policies.DCAwareRoundRobinPolicy; +import com.datastax.driver.core.policies.DefaultRetryPolicy; +import com.datastax.driver.core.policies.LoadBalancingPolicy; +import com.datastax.driver.core.policies.TokenAwarePolicy; import java.io.FileInputStream; import java.security.KeyStore; import java.security.SecureRandom; import java.util.Objects; import java.util.Optional; +import javax.net.ssl.SSLContext; +import javax.net.ssl.TrustManagerFactory; +import org.openecomp.core.nosqldb.util.CassandraUtils; +import org.openecomp.sdc.common.errors.SdcConfigurationException; +import org.openecomp.sdc.common.session.SessionContextProviderFactory; +import org.openecomp.sdc.logging.api.Logger; +import org.openecomp.sdc.logging.api.LoggerFactory; public class CassandraSessionFactory { @@ -60,57 +60,42 @@ public class CassandraSessionFactory { String[] addresses = CassandraUtils.getAddresses(); int cassandraPort = CassandraUtils.getCassandraPort(); Long reconnectTimeout = CassandraUtils.getReconnectTimeout(); - Cluster.Builder builder = Cluster.builder(); - - if(null != reconnectTimeout) { - builder.withReconnectionPolicy(new ConstantReconnectionPolicy(reconnectTimeout)) - .withRetryPolicy(DefaultRetryPolicy.INSTANCE); + if (null != reconnectTimeout) { + builder.withReconnectionPolicy(new ConstantReconnectionPolicy(reconnectTimeout)).withRetryPolicy(DefaultRetryPolicy.INSTANCE); } - builder.withPort(cassandraPort); - for (String address : addresses) { builder.addContactPoint(address); } - //Check if ssl Boolean isSsl = CassandraUtils.isSsl(); if (isSsl) { builder.withSSL(getSslOptions()); } - //Check if user/pass Boolean isAuthenticate = CassandraUtils.isAuthenticate(); if (isAuthenticate) { builder.withCredentials(CassandraUtils.getUser(), CassandraUtils.getPassword()); } - setConsistencyLevel(builder, addresses); - setLocalDataCenter(builder); - Cluster cluster = builder.build(); - String keyStore = SessionContextProviderFactory.getInstance().createInterface().get() - .getTenant(); - LOGGER.info("Cassandra client created hosts: {} port: {} SSL enabled: {} reconnectTimeout", - addresses, cassandraPort, isSsl, reconnectTimeout); + String keyStore = SessionContextProviderFactory.getInstance().createInterface().get().getTenant(); + LOGGER + .info("Cassandra client created hosts: {} port: {} SSL enabled: {} reconnectTimeout", addresses, cassandraPort, isSsl, reconnectTimeout); return cluster.connect(keyStore); } private static void setLocalDataCenter(Cluster.Builder builder) { String localDataCenter = CassandraUtils.getLocalDataCenter(); if (Objects.nonNull(localDataCenter)) { - LOGGER.info("localDatacenter was provided, setting Cassndra client to use datacenter: {} as local.", - localDataCenter); - - LoadBalancingPolicy tokenAwarePolicy = new TokenAwarePolicy( - DCAwareRoundRobinPolicy.builder().withLocalDc(localDataCenter).build()); + LOGGER.info("localDatacenter was provided, setting Cassndra client to use datacenter: {} as local.", localDataCenter); + LoadBalancingPolicy tokenAwarePolicy = new TokenAwarePolicy(DCAwareRoundRobinPolicy.builder().withLocalDc(localDataCenter).build()); builder.withLoadBalancingPolicy(tokenAwarePolicy); } else { - LOGGER.info( - "localDatacenter was provided, the driver will use the datacenter of the first contact " + - "point that was reached at initialization"); + LOGGER.info("localDatacenter was provided, the driver will use the datacenter of the first contact " + + "point that was reached at initialization"); } } @@ -118,54 +103,42 @@ public class CassandraSessionFactory { if (addresses != null && addresses.length > 1) { String consistencyLevel = CassandraUtils.getConsistencyLevel(); if (Objects.nonNull(consistencyLevel)) { - LOGGER.info( - "consistencyLevel was provided, setting Cassandra client to use consistencyLevel: {}" + - " as " - , consistencyLevel); - builder.withQueryOptions(new QueryOptions().setConsistencyLevel(ConsistencyLevel.valueOf - (consistencyLevel))); + LOGGER.info("consistencyLevel was provided, setting Cassandra client to use consistencyLevel: {}" + " as ", consistencyLevel); + builder.withQueryOptions(new QueryOptions().setConsistencyLevel(ConsistencyLevel.valueOf(consistencyLevel))); } } } private static SSLOptions getSslOptions() { - Optional<String> trustStorePath = Optional.ofNullable(CassandraUtils.getTruststore()); if (!trustStorePath.isPresent()) { throw new SdcConfigurationException("Missing configuration for Cassandra trustStorePath"); } - Optional<String> trustStorePassword = Optional.ofNullable(CassandraUtils.getTruststorePassword()); if (!trustStorePassword.isPresent()) { throw new SdcConfigurationException("Missing configuration for Cassandra trustStorePassword"); } - SSLContext context = getSslContext(trustStorePath.get(), trustStorePassword.get()); String[] css = new String[]{"TLS_RSA_WITH_AES_128_CBC_SHA"}; return RemoteEndpointAwareJdkSSLOptions.builder().withSSLContext(context).withCipherSuites(css).build(); } private static SSLContext getSslContext(String truststorePath, String trustStorePassword) { - try (FileInputStream tsf = new FileInputStream(truststorePath)) { - SSLContext ctx = SSLContext.getInstance("TLS"); - KeyStore ts = KeyStore.getInstance("JKS"); ts.load(tsf, trustStorePassword.toCharArray()); - TrustManagerFactory tmf = - TrustManagerFactory.getInstance(TrustManagerFactory.getDefaultAlgorithm()); + TrustManagerFactory tmf = TrustManagerFactory.getInstance(TrustManagerFactory.getDefaultAlgorithm()); tmf.init(ts); - ctx.init(null, tmf.getTrustManagers(), new SecureRandom()); return ctx; - } catch (Exception exception) { throw new SdcConfigurationException("Failed to get SSL Contexts for Cassandra connection", exception); } } private static class ReferenceHolder { + private static final Session CASSANDRA = newCassandraSession(); private ReferenceHolder() { |