2 new revisions:
Revision: 13d6ce57e0ae
Author: Tomaz Muraus <to...@tomaz.me>
Date: Fri Nov 11 11:26:49 2011
Log: Use async for login, learn, use.
http://code.google.com/a/apache-extras.org/p/cassandra-node/source/detail?r=13d6ce57e0ae
Revision: 9a4cff4f04a8
Author: Tomaz Muraus <to...@tomaz.me>
Date: Fri Nov 11 13:07:28 2011
Log: Use async in PooledConnection.execute.
http://code.google.com/a/apache-extras.org/p/cassandra-node/source/detail?r=9a4cff4f04a8
==============================================================================
Revision: 13d6ce57e0ae
Author: Tomaz Muraus <to...@tomaz.me>
Date: Fri Nov 11 11:26:49 2011
Log: Use async for login, learn, use.
http://code.google.com/a/apache-extras.org/p/cassandra-node/source/detail?r=13d6ce57e0ae
Modified:
/lib/driver.js
=======================================
--- /lib/driver.js Fri Nov 11 08:57:42 2011
+++ /lib/driver.js Fri Nov 11 11:26:49 2011
@@ -26,6 +26,7 @@
var EventEmitter = require('events').EventEmitter;
var thrift = require('thrift');
+var async = require('async');
var Cassandra = require('./gen-nodejs/Cassandra');
var ttypes = require('./gen-nodejs/cassandra_types');
@@ -402,30 +403,19 @@
cb(err);
});
};
-
- // put it all together, checking for errors along the way.
- login(function(loginErr) {
- if (loginErr) {
- callback(loginErr);
+
+ async.series([
+ login,
+ learn,
+ use
+ ],
+
+ function(err) {
+ if (err) {
self.close();
- } else {
- learn(function(learnErr) {
- if (learnErr) {
- callback(learnErr);
- self.close();
- } else {
- use(function(useErr) {
- if (useErr) {
- callback(useErr);
- self.close();
- } else {
- // this connection is finally ready to use.
- callback(null);
- }
- });
- }
- });
- }
+ }
+
+ callback(err);
});
});
==============================================================================
Revision: 9a4cff4f04a8
Author: Tomaz Muraus <to...@tomaz.me>
Date: Fri Nov 11 13:07:28 2011
Log: Use async in PooledConnection.execute.
http://code.google.com/a/apache-extras.org/p/cassandra-node/source/detail?r=9a4cff4f04a8
Modified:
/lib/driver.js
=======================================
--- /lib/driver.js Fri Nov 11 11:26:49 2011
+++ /lib/driver.js Fri Nov 11 13:07:28 2011
@@ -278,47 +278,59 @@
PooledConnection.prototype.execute = function(query, args, callback) {
var self = this;
var seen = false;
-
+
var exe = function(errback) {
- self.pool.acquire(function(err, conn) {
- if (err) {
- log.err("Unable to acquire connection from the pool: " +
err.toString());
- callback(amendError(err));
- } else {
+ async.waterfall([
+ function acquireConnFromPool(callback) {
+ self.pool.acquire(function(err, conn) {
+ callback(err, conn);
+ });
+ },
+
+ function executeQuery(conn, callback) {
conn.execute(query, args, function(err, res) {
- if (err) {
- if (contains(appExceptions, err.name)) {
- self.pool.release(conn);
- callback(err, null);
- } else {
- if (!seen) {
- errback();
- } else {
- self.pool.release(conn);
- callback(err, null);
- }
- }
- } else {
- self.pool.release(conn);
+ callback(err, res, conn);
+ });
+ }
+ ],
+
+ function(err, res, conn) {
+ if (conn) {
+ self.pool.release(conn);
+ }
+
+ if (err) {
+ if (err.hasOwnProperty('name') && contains(appExceptions,
err.name)) {
+ callback(err, null);
+ }
+ else {
+ if (!seen) {
+ errback();
+ }
+ else {
+ err = amendError(err);
callback(err, res);
}
- });
+ }
+ }
+ else {
+ callback(err, res);
}
});
};
-
+
var retry = function() {
seen = true;
exe(retry);
};
-
+
exe(retry);
};
/**
* Signal the pool to shutdown. Once called, no new requests (read:
execute())
* can be made. When all pending requests have terminated, the callback is
run.
- *
+ *
* @param callback called when the pool is fully shutdown
*/
PooledConnection.prototype.shutdown = function(callback) {