1
+ package com .datastax .cdm .job
2
+
3
+ import com .datastax .cdm .properties .{KnownProperties , PropertyHelper }
4
+ import com .datastax .spark .connector .cql .CassandraConnector
5
+ import org .apache .spark .{SparkConf , SparkContext }
6
+ import org .slf4j .{Logger , LoggerFactory }
7
+
8
+ class ConnectionFetcher (sparkContext : SparkContext , propertyHelper : PropertyHelper ) {
9
+ val logger : Logger = LoggerFactory .getLogger(this .getClass.getName)
10
+
11
+ def getConnectionDetails (side : String ): ConnectionDetails = {
12
+ if (" ORIGIN" .equals(side.toUpperCase)) {
13
+ ConnectionDetails (
14
+ propertyHelper.getAsString(KnownProperties .ORIGIN_CONNECT_SCB ),
15
+ propertyHelper.getAsString(KnownProperties .ORIGIN_CONNECT_HOST ),
16
+ propertyHelper.getAsString(KnownProperties .ORIGIN_CONNECT_PORT ),
17
+ propertyHelper.getAsString(KnownProperties .ORIGIN_CONNECT_USERNAME ),
18
+ propertyHelper.getAsString(KnownProperties .ORIGIN_CONNECT_PASSWORD ),
19
+ propertyHelper.getAsString(KnownProperties .ORIGIN_TLS_ENABLED ),
20
+ propertyHelper.getAsString(KnownProperties .ORIGIN_TLS_TRUSTSTORE_PATH ),
21
+ propertyHelper.getAsString(KnownProperties .ORIGIN_TLS_TRUSTSTORE_PASSWORD ),
22
+ propertyHelper.getString(KnownProperties .ORIGIN_TLS_TRUSTSTORE_TYPE ),
23
+ propertyHelper.getAsString(KnownProperties .ORIGIN_TLS_KEYSTORE_PATH ),
24
+ propertyHelper.getAsString(KnownProperties .ORIGIN_TLS_KEYSTORE_PASSWORD ),
25
+ propertyHelper.getAsString(KnownProperties .ORIGIN_TLS_ALGORITHMS )
26
+ )
27
+ }
28
+ else {
29
+ ConnectionDetails (
30
+ propertyHelper.getAsString(KnownProperties .TARGET_CONNECT_SCB ),
31
+ propertyHelper.getAsString(KnownProperties .TARGET_CONNECT_HOST ),
32
+ propertyHelper.getAsString(KnownProperties .TARGET_CONNECT_PORT ),
33
+ propertyHelper.getAsString(KnownProperties .TARGET_CONNECT_USERNAME ),
34
+ propertyHelper.getAsString(KnownProperties .TARGET_CONNECT_PASSWORD ),
35
+ propertyHelper.getAsString(KnownProperties .TARGET_TLS_ENABLED ),
36
+ propertyHelper.getAsString(KnownProperties .TARGET_TLS_TRUSTSTORE_PATH ),
37
+ propertyHelper.getAsString(KnownProperties .TARGET_TLS_TRUSTSTORE_PASSWORD ),
38
+ propertyHelper.getString(KnownProperties .TARGET_TLS_TRUSTSTORE_TYPE ),
39
+ propertyHelper.getAsString(KnownProperties .TARGET_TLS_KEYSTORE_PATH ),
40
+ propertyHelper.getAsString(KnownProperties .TARGET_TLS_KEYSTORE_PASSWORD ),
41
+ propertyHelper.getAsString(KnownProperties .TARGET_TLS_ALGORITHMS )
42
+ )
43
+ }
44
+ }
45
+
46
+ def getConnection (side : String , consistencyLevel : String ): CassandraConnector = {
47
+ val connectionDetails = getConnectionDetails(side)
48
+ val config : SparkConf = sparkContext.getConf
49
+
50
+ logger.info(" PARAM -- SSL Enabled: " + connectionDetails.sslEnabled);
51
+
52
+ if (connectionDetails.scbPath.nonEmpty) {
53
+ logger.info(" Connecting to " + side+ " using SCB " + connectionDetails.scbPath);
54
+ return CassandraConnector (config
55
+ .set(" spark.cassandra.auth.username" , connectionDetails.username)
56
+ .set(" spark.cassandra.auth.password" , connectionDetails.password)
57
+ .set(" spark.cassandra.input.consistency.level" , consistencyLevel)
58
+ .set(" spark.cassandra.connection.config.cloud.path" , connectionDetails.scbPath))
59
+ } else if (connectionDetails.trustStorePath.nonEmpty) {
60
+ logger.info(" Connecting to " + side+ " (with truststore) at " + connectionDetails.host+ " :" + connectionDetails.port);
61
+
62
+ // Use defaults when not provided
63
+ var enabledAlgorithmsVar = connectionDetails.enabledAlgorithms
64
+ if (connectionDetails.enabledAlgorithms == null || connectionDetails.enabledAlgorithms.trim.isEmpty) {
65
+ enabledAlgorithmsVar = " TLS_RSA_WITH_AES_128_CBC_SHA, TLS_RSA_WITH_AES_256_CBC_SHA"
66
+ }
67
+
68
+ return CassandraConnector (config
69
+ .set(" spark.cassandra.auth.username" , connectionDetails.username)
70
+ .set(" spark.cassandra.auth.password" , connectionDetails.password)
71
+ .set(" spark.cassandra.input.consistency.level" , consistencyLevel)
72
+ .set(" spark.cassandra.connection.host" , connectionDetails.host)
73
+ .set(" spark.cassandra.connection.port" , connectionDetails.port)
74
+ .set(" spark.cassandra.connection.ssl.enabled" , " true" )
75
+ .set(" spark.cassandra.connection.ssl.enabledAlgorithms" , enabledAlgorithmsVar)
76
+ .set(" spark.cassandra.connection.ssl.trustStore.password" , connectionDetails.trustStorePassword)
77
+ .set(" spark.cassandra.connection.ssl.trustStore.path" , connectionDetails.trustStorePath)
78
+ .set(" spark.cassandra.connection.ssl.keyStore.password" , connectionDetails.keyStorePassword)
79
+ .set(" spark.cassandra.connection.ssl.keyStore.path" , connectionDetails.keyStorePath)
80
+ .set(" spark.cassandra.connection.ssl.trustStore.type" , connectionDetails.trustStoreType)
81
+ .set(" spark.cassandra.connection.ssl.clientAuth.enabled" , " true" )
82
+ )
83
+ } else {
84
+ logger.info(" Connecting to " + side+ " at " + connectionDetails.host+ " :" + connectionDetails.port);
85
+
86
+ return CassandraConnector (config.set(" spark.cassandra.auth.username" , connectionDetails.username)
87
+ .set(" spark.cassandra.connection.ssl.enabled" , connectionDetails.sslEnabled)
88
+ .set(" spark.cassandra.auth.password" , connectionDetails.password)
89
+ .set(" spark.cassandra.input.consistency.level" , consistencyLevel)
90
+ .set(" spark.cassandra.connection.host" , connectionDetails.host)
91
+ .set(" spark.cassandra.connection.port" , connectionDetails.port))
92
+ }
93
+ }
94
+ }
0 commit comments