Interesting! Thanks for sharing

Have you considered instead of retrying the failing node, to iterate through other nodes in your cluster?

If one node is failing (let's assume it's overloaded for a minute), you're probably going to be better off having the client send the insert to the next node in line.

Thoughts?

On 8/30/2010 9:17 AM, Juho Mäkinen wrote:

Yes, I've already planning to do so. The class has still some
dependencies into our other functions which I need to first clear out.

Basically each api call is wrapped inside a retry loop as we can
assume that each operation can be retried as many times as needed:
                $tries = 0;
                $this->last_exception = null;
                $delay = 1000; // start with 1ms retry delay
                do {
                        try {
                                $this->client->insert($this->keyspace, $key, 
$column_path, $value,
$timestamp, $consistency_level);
                                return;
                        } catch (cassandra_InvalidRequestException $e) {
                                Logger::error("InvalidRequestException: " . 
$e->why . ',
stacktrace: ' . $e->getMessage());
                                throw $e;
                        } catch (Exception $e) {
                                $this->last_exception = $e;
                                $tries++;

                                // sleep for some time and try again
                                usleep($delay);
                                $delay = $delay * 3;
                                $this->connect(); // Drop current server and 
reopen a connection
into another server
                        }



                } while ($tries<  4);
                // Give up and throw the last exception
                throw $this->last_exception;


  - Juho Mäkinen

On Mon, Aug 30, 2010 at 3:48 PM, Mike Peters
<cassan...@softwareprojects.com>  wrote:
Juho, do you mind sharing your implementation with the group?

We'd love to help as well with rewriting the thrift interface, specificaly
TSocket.php which seems to be where the majority of the problems are
lurking.

Has anyone tried compiling native thrift support as described here
https://wiki.fourkitchens.com/display/PF/Using+Cassandra+with+PHP
https://wiki.fourkitchens.com/display/PF/Using+Cassandra+with+PHP
--
View this message in context: 
http://cassandra-user-incubator-apache-org.3065146.n2.nabble.com/Thrift-PHP-help-tp5437314p5478057.html
Sent from the cassandra-u...@incubator.apache.org mailing list archive at 
Nabble.com.



Reply via email to