/**
  * 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'));
 }
Beispiel #2
0
 /**
  * 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);
         }
     }
 }
Beispiel #3
0
 /**
  * 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"];
 }