I am having an application in code igniter which makes the connection to cassandra using the cassa DB PHP driver. The code for connection is as follows which is autoloaded.
<?php defined('BASEPATH') OR exit('No direct script access allowed'); class CassaDb { private $CI; public $cassa_db; private $batch; private $schema; private $keyspace_name = "dev"; private $username = ""; private $password = ""; private $hostname = "127.0.0.1"; public function __construct() { if(!$this->cassa_db) { try { $cluster = Cassandra::cluster() ->withContactPoints($this->hostname) ->withDefaultConsistency(Cassandra::CONSISTENCY_LOCAL_QUORUM) ->withCredentials($this->username, $this->password) ->withRequestTimeout(30) ->build(); $this->cassa_db = $cluster->connect($this->keyspace_name); $this->batch = new Cassandra\BatchStatement(); $this->schema = $this->cassa_db->schema(); } catch(Exception $e) { log_message('error', $e->getMessage()); } } } }
The cassandra is in my local machine and uses only a single node.
In the idle case there are no connections to port 9042 which is used by Cassandra.
:~$ sudo lsof -i -P -n | grep '9042 (ESTAB' | wc -l
0
Once I hit the application URL I see some TCP connections made to the port 9042 by apache.
:~$ sudo lsof -i -P -n | grep '9042 (ESTAB'
apache2 17394 www-data 21u IPv4 2685247 0t0 TCP 127.0.0.1:47144->127.0.0.1:9042 (ESTABLISHED)
apache2 17394 www-data 27u IPv4 2685248 0t0 TCP 127.0.0.1:47146->127.0.0.1:9042 (ESTABLISHED)
Again I go on refreshing the application or opening it in new browsers then some more TCP connections are made which goes on increasing to a limit of 20-22. After this limit no more connections are made.
:~$ sudo lsof -i -P -n | grep '9042 (ESTAB' | wc -l
16
:~$ sudo lsof -i -P -n | grep '9042 (ESTAB'
apache2 17395 www-data 21u IPv4 2685782 0t0 TCP 127.0.0.1:47236->127.0.0.1:9042 (ESTABLISHED)
apache2 17395 www-data 27u IPv4 2687278 0t0 TCP 127.0.0.1:47238->127.0.0.1:9042 (ESTABLISHED)
apache2 17398 www-data 21u IPv4 2685511 0t0 TCP 127.0.0.1:47170->127.0.0.1:9042 (ESTABLISHED)
apache2 17398 www-data 27u IPv4 2682226 0t0 TCP 127.0.0.1:47172->127.0.0.1:9042 (ESTABLISHED)
apache2 17400 www-data 21u IPv4 2689101 0t0 TCP 127.0.0.1:47274->127.0.0.1:9042 (ESTABLISHED)
apache2 17400 www-data 27u IPv4 2685815 0t0 TCP 127.0.0.1:47276->127.0.0.1:9042 (ESTABLISHED)
apache2 17552 www-data 21u IPv4 2684269 0t0 TCP 127.0.0.1:47206->127.0.0.1:9042 (ESTABLISHED)
apache2 17552 www-data 27u IPv4 2688683 0t0 TCP 127.0.0.1:47208->127.0.0.1:9042 (ESTABLISHED)
apache2 17553 www-data 21u IPv4 2686408 0t0 TCP 127.0.0.1:47214->127.0.0.1:9042 (ESTABLISHED)
apache2 17553 www-data 27u IPv4 2683890 0t0 TCP 127.0.0.1:47216->127.0.0.1:9042 (ESTABLISHED)
apache2 17851 www-data 21u IPv4 2688980 0t0 TCP 127.0.0.1:47248->127.0.0.1:9042 (ESTABLISHED)
apache2 17851 www-data 27u IPv4 2687319 0t0 TCP 127.0.0.1:47250->127.0.0.1:9042 (ESTABLISHED)
apache2 17853 www-data 21u IPv4 2687432 0t0 TCP 127.0.0.1:47292->127.0.0.1:9042 (ESTABLISHED)
apache2 17853 www-data 27u IPv4 2686531 0t0 TCP 127.0.0.1:47294->127.0.0.1:9042 (ESTABLISHED)
apache2 17948 www-data 21u IPv4 2682435 0t0 TCP 127.0.0.1:47288->127.0.0.1:9042 (ESTABLISHED)
apache2 17948 www-data 27u IPv4 2685831 0t0 TCP 127.0.0.1:47290->127.0.0.1:9042 (ESTABLISHED)
When I look in to the phpinfo() there i see only 1 persistent connection and cluster in cassandra section.
The main point of the question is where did the Cassandra maintain the connection pool. There are multiple tcp connections established and only 1 persistent is being shown in phpinfo.
Also, I connect Cassandra with Java code where I produce Cassandra sessions in a singleton design pattern, where the old session is returned if it is present. Then also there are multiple TCP connections established by Java to port 9042 by Java.
:~$ sudo lsof -i -P -n | grep '9042 (ESTAB'
apache2 17395 www-data 21u IPv4 2685782 0t0 TCP 127.0.0.1:47236->127.0.0.1:9042 (ESTABLISHED)
apache2 17395 www-data 27u IPv4 2687278 0t0 TCP 127.0.0.1:47238->127.0.0.1:9042 (ESTABLISHED)
apache2 17398 www-data 21u IPv4 2685511 0t0 TCP 127.0.0.1:47170->127.0.0.1:9042 (ESTABLISHED)
apache2 17398 www-data 27u IPv4 2682226 0t0 TCP 127.0.0.1:47172->127.0.0.1:9042 (ESTABLISHED)
apache2 17400 www-data 21u IPv4 2689101 0t0 TCP 127.0.0.1:47274->127.0.0.1:9042 (ESTABLISHED)
apache2 17400 www-data 27u IPv4 2685815 0t0 TCP 127.0.0.1:47276->127.0.0.1:9042 (ESTABLISHED)
apache2 17407 www-data 21u IPv4 2687454 0t0 TCP 127.0.0.1:47302->127.0.0.1:9042 (ESTABLISHED)
apache2 17407 www-data 27u IPv4 2689170 0t0 TCP 127.0.0.1:47304->127.0.0.1:9042 (ESTABLISHED)
apache2 17552 www-data 21u IPv4 2684269 0t0 TCP 127.0.0.1:47206->127.0.0.1:9042 (ESTABLISHED)
apache2 17552 www-data 27u IPv4 2688683 0t0 TCP 127.0.0.1:47208->127.0.0.1:9042 (ESTABLISHED)
apache2 17553 www-data 21u IPv4 2686408 0t0 TCP 127.0.0.1:47214->127.0.0.1:9042 (ESTABLISHED)
apache2 17553 www-data 27u IPv4 2683890 0t0 TCP 127.0.0.1:47216->127.0.0.1:9042 (ESTABLISHED)
apache2 17851 www-data 21u IPv4 2688980 0t0 TCP 127.0.0.1:47248->127.0.0.1:9042 (ESTABLISHED)
apache2 17851 www-data 27u IPv4 2687319 0t0 TCP 127.0.0.1:47250->127.0.0.1:9042 (ESTABLISHED)
apache2 17853 www-data 21u IPv4 2687432 0t0 TCP 127.0.0.1:47292->127.0.0.1:9042 (ESTABLISHED)
apache2 17853 www-data 27u IPv4 2686531 0t0 TCP 127.0.0.1:47294->127.0.0.1:9042 (ESTABLISHED)
apache2 17948 www-data 21u IPv4 2682435 0t0 TCP 127.0.0.1:47288->127.0.0.1:9042 (ESTABLISHED)
apache2 17948 www-data 27u IPv4 2685831 0t0 TCP 127.0.0.1:47290->127.0.0.1:9042 (ESTABLISHED)
apache2 17993 www-data 21u IPv4 2687491 0t0 TCP 127.0.0.1:47316->127.0.0.1:9042 (ESTABLISHED)
apache2 17993 www-data 27u IPv4 2690176 0t0 TCP 127.0.0.1:47318->127.0.0.1:9042 (ESTABLISHED)
java 18315 juser 3413u IPv4 2700469 0t0 TCP 127.0.0.1:47376->127.0.0.1:9042 (ESTABLISHED)
java 18315 juser 3414u IPv4 2700470 0t0 TCP 127.0.0.1:47378->127.0.0.1:9042 (ESTABLISHED)
java 18315 juser 3450u IPv4 2696024 0t0 TCP 127.0.0.1:47382->127.0.0.1:9042 (ESTABLISHED)
java 18315 juser 3501u IPv4 2694086 0t0 TCP 127.0.0.1:47384->127.0.0.1:9042 (ESTABLISHED)
java 18315 juser 3525u IPv4 2694087 0t0 TCP 127.0.0.1:47386->127.0.0.1:9042 (ESTABLISHED)
java 18315 juser 3575u IPv4 2692561 0t0 TCP 127.0.0.1:47388->127.0.0.1:9042 (ESTABLISHED)
java 18315 juser 3576u IPv4 2699860 0t0 TCP 127.0.0.1:47390->127.0.0.1:9042 (ESTABLISHED)
java 18315 juser 3577u IPv4 2694999 0t0 TCP 127.0.0.1:47392->127.0.0.1:9042 (ESTABLISHED)
java 18315 juser 3580u IPv4 2697303 0t0 TCP 127.0.0.1:47396->127.0.0.1:9042 (ESTABLISHED)
java 18315 juser 3581u IPv4 2694088 0t0 TCP 127.0.0.1:47398->127.0.0.1:9042 (ESTABLISHED)
java 18315 juser 3682u IPv4 2694089 0t0 TCP 127.0.0.1:47400->127.0.0.1:9042 (ESTABLISHED)
The several TCP connections created above are the multiple Cassandra sessions or connections on a particular session.