/** * Create a new connection instance with the provided configuration */ public function __construct() { // Set up connection details $builder = \Cassandra::cluster(); // Fetch configured port and set it, if it's provided $port = config('cassandra.port'); if (!empty($port)) { $builder->withPort($port); } // Fetch configured default page size and set it, if it's provided $defaultPageSize = config('cassandra.defaultPageSize'); if (!empty($defaultPageSize)) { $builder->withDefaultPageSize($defaultPageSize); } // Fetch configured default consistency level and set it, if it's provided $defaultConsistency = config('cassandra.withDefaultConsistency'); if (!empty($defaultConsistency)) { $builder->withDefaultConsistency($defaultConsistency); } // Set contact end points call_user_func_array([$builder, "withContactPoints"], config('cassandra.contactpoints')); // Connect to cluster $this->cluster = $builder->build(); // Create a connect to the keyspace on cluster $this->session = $this->cluster->connect(config('cassandra.keyspace')); }
/** * Connect! * * @param string $keyspace * @param bool $throw * @throws ApiException */ public function connect($keyspace = null, $throw = true) { try { $this->session = $this->cluster->connect(); } catch (\Cassandra\Exception\RuntimeException $e) { LogException::e($e); if ($throw) { throw new ApiException('Unable to connect to cassandra node ', r_server); } } }
/** * Create the integration helper instance. * * @param $className Name of the class for the executed test. * @param string $testName Name of the test being executed. * @param int $numberDC1Nodes Number of nodes in data center one * (DEFAULT: 1). * @param int $numberDC2Nodes Number of nodes in data center two * (DEFAULT: 0). * @param int $replicationFactor Replication factor override; default is * calculated based on number of data center * nodes; single data center is (nodes / 2) * rounded up. * @param bool $isClientAuthentication True if client authentication * should be enabled; false * otherwise (DEFAULT: false). * @param bool $isSSL True if SSL should be enabled; false otherwise * (DEFAULT: false). * @param bool $isUserDefinedAggregatesFunctions True if UDA/UDF * functionality should be * enabled; false otherwise * (DEFAULT: false). * @return Integration Instance of the Integration class created. */ public function __construct($className, $testName = "", $numberDC1Nodes = 1, $numberDC2Nodes = 0, $replicationFactor = -1, $isClientAuthentication = false, $isSSL = false, $isUserDefinedAggregatesFunctions = false) { // Generate the keyspace name for the test $this->keyspaceName = $this->getShortName($className); if (!empty($testName)) { $this->keyspaceName = $this->keyspaceName . "_" . $testName; } // Make all strings lowercase for case insensitive O/S (e.g. Windows) $this->keyspaceName = strtolower($this->keyspaceName); //Ensure the keyspace does not contain more to many characters if (strlen($this->keyspaceName) > self::KEYSPACE_MAXIMUM_LENGTH) { // Update the keyspace name with a unique ID $uniqueID = uniqid(); $this->keyspaceName = substr($this->keyspaceName, 0, self::KEYSPACE_MAXIMUM_LENGTH - strlen($uniqueID)) . $uniqueID; } // Create the Cassandra cluster for the test //TODO: Need to add the ability to switch the Cassandra version (command line) $this->ccm = new \CCM(self::DEFAULT_CASSANDRA_VERSION, self::DEFAULT_IS_CCM_SILENT); $this->ccm->setup($numberDC1Nodes, $numberDC2Nodes); if ($isClientAuthentication) { $this->ccm->setupClientVerification(); } if ($isSSL) { $this->ccm->setupSSL(); } if ($isUserDefinedAggregatesFunctions) { $this->ccm->setupUserDefinedFunctions(); } $this->ccm->start(); // Determine replication strategy and generate the query $replicationStrategy = "'SimpleStrategy', 'replication_factor': "; if ($numberDC2Nodes > 0) { $replicationStrategy = "'NetworkTopologyStrategy', 'dc1': " . $numberDC1Nodes . ", " . "'dc2': " . $numberDC2Nodes; } else { if ($replicationFactor < 0) { $replicationFactor = $numberDC1Nodes % 2 == 0 ? $numberDC1Nodes / 2 : ($numberDC1Nodes + 1) / 2; } $replicationStrategy .= $replicationFactor; } $query = sprintf(Integration::SIMPLE_KEYSPACE_FORMAT, $this->keyspaceName, $replicationStrategy); if (self::isDebug() && self::isVerbose()) { fprintf(STDOUT, "Creating Keyspace: %s" . PHP_EOL, $query); } // Create the session and keyspace for the integration test $this->cluster = \Cassandra::cluster()->withContactPoints($this->getContactPoints(Integration::IP_ADDRESS, $numberDC1Nodes + $numberDC2Nodes))->withPersistentSessions(false)->build(); $this->session = $this->cluster->connect(); $statement = new SimpleStatement($query); $this->session->execute($statement); // Update the session to use the new keyspace by default $statement = new SimpleStatement("USE " . $this->keyspaceName); $this->session->execute($statement); // Get the server version the session is connected to $statement = new SimpleStatement(self::SELECT_SERVER_VERSION); $rows = $this->session->execute($statement); $this->serverVersion = $rows->first()["release_version"]; }