[Groonga-commit] droonga/express-droonga at 6c0099d [master] Support multiple connections for multiple droonga-engine hosts

Back to archive index

YUKI Hiroshi null+****@clear*****
Fri Oct 17 17:16:04 JST 2014


YUKI Hiroshi	2014-10-17 17:16:04 +0900 (Fri, 17 Oct 2014)

  New Revision: 6c0099dd6a1cb8ad3283d126c8973618d929120e
  https://github.com/droonga/express-droonga/commit/6c0099dd6a1cb8ad3283d126c8973618d929120e

  Message:
    Support multiple connections for multiple droonga-engine hosts

  Modified files:
    index.js
    lib/adapter/http.js
    lib/adapter/socket.io.js
    lib/droonga-protocol/connections.js
    test/adapter/api/groonga/basic.test.js
    test/adapter/api/groonga/load.test.js
    test/adapter/http.test.js
    test/adapter/http/register.test.js
    test/adapter/socket.io.test.js
    test/express-adapter.test.js
    test/test-utils.js

  Modified: index.js (+7 -8)
===================================================================
--- index.js    2014-10-17 17:00:26 +0900 (02f204c)
+++ index.js    2014-10-17 17:16:04 +0900 (753de64)
@@ -1,5 +1,5 @@
 var express = require('express');
-var Connection = require('./lib/droonga-protocol/connection').Connection;
+var Connections = require('./lib/droonga-protocol/connections').Connections;
 var httpAdapter = require('./lib/adapter/http');
 var socketIoAdapter = require('./lib/adapter/socket.io');
 var dashboardUI = require('./lib/ui/dashboard');
@@ -10,8 +10,8 @@ function droonga(application, params) {
 
   params.logger = params.logger || new ConsoleLogger();
 
-  params.connection = params.connection || new Connection(params);
-  var connection = params.connection;
+  params.connections = params.connections || new Connections(params);
+  var connections = params.connections;
 
   params.prefix = params.prefix || '';
   params.prefix = params.prefix.replace(/\/$/, '');
@@ -21,20 +21,19 @@ function droonga(application, params) {
   if (params.server) {
     socketIoAdapter.register(application, params.server, params);
     params.server.on('error', function(error) {
-      connection.close();
+      connections.closeAll();
     });
     params.server.on('close', function() {
       // The connection can be mocked/stubbed. We don't need to close
       // such a fake connection.
-      if (typeof connection.close == 'function')
-        connection.close();
+      if (typeof connections.closeAll == 'function')
+        connections.closeAll();
     });
   }
 
   dashboardUI.register(application, params);
 
-  application.connection = connection;
-  application.emitMessage = connection.emitMessage.bind(connection); // shorthand
+  application.connections = connections;
 }
 
 exports.initialize = droonga;

  Modified: lib/adapter/http.js (+11 -9)
===================================================================
--- lib/adapter/http.js    2014-10-17 17:00:26 +0900 (1edd6c0)
+++ lib/adapter/http.js    2014-10-17 17:16:04 +0900 (d449e14)
@@ -5,7 +5,7 @@ var ConsoleLogger = require('../console-logger').ConsoleLogger;
 
 function createRequestResponseHandler(params) {
   params = params || {};
-  var connection = params.connection;
+  var connections = params.connections;
   var commandName = params.name;
   var definition = params.definition;
   var logger = definition.logger;
@@ -23,7 +23,7 @@ function createRequestResponseHandler(params) {
         if (error) {
           logger.debug('adapter.http.createRequestResponseHandler.handle.response.error:', error);
           var body = message && message.body || null;
-          response.jsonp(error, body);
+          response.status(error).jsonp(body);
         } else {
           logger.debug('adapter.http.createRequestResponseHandler.handle.response.success');
           var body = message.body;
@@ -45,6 +45,7 @@ function createRequestResponseHandler(params) {
         response.jsonp(error.code || 500, errorBody);
         return;
       }
+      var connection = connections.get();
       var wrappedConnection = new wrapper.DroongaProtocolConnectionWrapper(connection, callback, options);
       if (definition.onRequest) {
         try {
@@ -67,7 +68,7 @@ exports.createRequestResponseHandler = createRequestResponseHandler;
 
 function createGenericHandler(params) {
   params = params || {};
-  var connection = params.connection;
+  var connections = params.connections;
   var commandName = params.name;
   var definition = params.definition;
 
@@ -85,15 +86,16 @@ function createGenericHandler(params) {
         };
         if (error.detail)
           errorBody.detail = error.detail;
-        response.jsonp(error.code || 500, errorBody);
+        response.status(error.code || 500).jsonp(errorBody);
         return;
       }
+      var connection = connections.get();
       var wrappedConnection = new wrapper.DroongaProtocolConnectionWrapper(connection, options);
       try {
         definition.onHandle(request, response, wrappedConnection);
       } catch(error) {
         wrappedConnection.destroy();
-        response.jsonp(500, { error: error.message });
+        response.status(500).jsonp({ error: error.message });
       }
     };
     if (typeof definition.authorize == 'function')
@@ -117,9 +119,9 @@ exports.getRegistrationMethod = getRegistrationMethod;
 
 exports.register = function(application, params) {
   params = params || {};
-  var connection = params.connection;
-  if (!connection)
-    throw new Error('Connection to the backend is required!');
+  var connections = params.connections;
+  if (!connections)
+    throw new Error('Connections to the backend is required!');
 
   var prefix = params.prefix || '';
   prefix = prefix.replace(/\/$/, '');
@@ -158,7 +160,7 @@ exports.register = function(application, params) {
     }
 
     var handler = creator({
-        connection:  connection,
+        connections: connections,
         name:        definition.command || commandName,
         definition:  definition
       });

  Modified: lib/adapter/socket.io.js (+7 -3)
===================================================================
--- lib/adapter/socket.io.js    2014-10-17 17:00:26 +0900 (2d9b01f)
+++ lib/adapter/socket.io.js    2014-10-17 17:16:04 +0900 (d8e1301)
@@ -28,9 +28,13 @@ exports.sanitizeBackendMessage = sanitizeBackendMessage;
 
 exports.register = function(application, server, params) {
   params = params || {};
-  var connection = params.connection;
-  if (!connection)
-    throw new Error('Connection to the backend is required!');
+  var connections = params.connections;
+  if (!connections)
+    throw new Error('Connections to the backend is required!');
+
+  //TODO: we have to support multiple connections!!
+  //      this is just workaround: use the first connection always.
+  var connection = connections.get();
 
   function createClientMessageHandler(commandName, commandDefinition, socket, handlerOptions) {
     handlerOptions = handlerOptions || {};

  Modified: lib/droonga-protocol/connections.js (+3 -2)
===================================================================
--- lib/droonga-protocol/connections.js    2014-10-17 17:00:26 +0900 (7cd92de)
+++ lib/droonga-protocol/connections.js    2014-10-17 17:16:04 +0900 (4343552)
@@ -20,10 +20,10 @@ function Connections(params) {
                     this._params.hostName ||
                     Connection.DEFAULT_FLUENT_HOST_NAME;
   if (!Array.isArray(hostNames))
-    this._params.hostNames = [hostNames];
+    hostNames = [hostNames];
 
   var uniqueHostNames = {};
-  this._params.hostNames = this._params.hostNames.filter(function(hostName) {
+  hostNames.forEach(function(hostName) {
     if (hostName in uniqueHostNames) {
       return false;
     }
@@ -32,6 +32,7 @@ function Connections(params) {
       return true;
     }
   });
+  this._params.hostNames = Object.keys(uniqueHostNames);
 
   if (this._params.hostNames.length == 0)
     throw new Error('Connections: you must give one or more host name(s)!');

  Modified: test/adapter/api/groonga/basic.test.js (+4 -4)
===================================================================
--- test/adapter/api/groonga/basic.test.js    2014-10-17 17:00:26 +0900 (1d1230e)
+++ test/adapter/api/groonga/basic.test.js    2014-10-17 17:16:04 +0900 (e6f1948)
@@ -9,7 +9,7 @@ var httpAdapter = require('../../../../lib/adapter/http');
 var groongaAPI = require('../../../../lib/adapter/api/groonga');
 
 suite('adapter/api/groonga: basic commands', function() {
-  var connection;
+  var connections;
   var application;
   var server;
   var backend;
@@ -19,11 +19,11 @@ suite('adapter/api/groonga: basic commands', function() {
       .then(function(result) {
         backend = result.backend;
         server = result.server;
-        connection = result.connection;
+        connections = result.connections;
         application = result.application;
         httpAdapter.register(application, {
           prefix: '',
-          connection: connection,
+          connections: connections,
           plugins: [groongaAPI]
         });
         done();
@@ -35,7 +35,7 @@ suite('adapter/api/groonga: basic commands', function() {
     utils.teardownApplication({
       backend:    backend,
       server:     server,
-      connection: connection
+      connections: connections
     });
   });
 

  Modified: test/adapter/api/groonga/load.test.js (+4 -4)
===================================================================
--- test/adapter/api/groonga/load.test.js    2014-10-17 17:00:26 +0900 (255df68)
+++ test/adapter/api/groonga/load.test.js    2014-10-17 17:16:04 +0900 (98deb95)
@@ -9,7 +9,7 @@ var httpAdapter = require('../../../../lib/adapter/http');
 var groongaAPI = require('../../../../lib/adapter/api/groonga');
 
 suite('adapter/api/groonga: load', function() {
-  var connection;
+  var connections;
   var application;
   var server;
   var backend;
@@ -21,11 +21,11 @@ suite('adapter/api/groonga: load', function() {
       .then(function(result) {
         backend = result.backend;
         server = result.server;
-        connection = result.connection;
+        connections = result.connections;
         application = result.application;
         httpAdapter.register(application, {
           prefix: '',
-          connection: connection,
+          connections: connections,
           plugins: [groongaAPI]
         });
         done();
@@ -37,7 +37,7 @@ suite('adapter/api/groonga: load', function() {
     utils.teardownApplication({
       backend:    backend,
       server:     server,
-      connection: connection
+      connections: connections
     });
   });
 

  Modified: test/adapter/http.test.js (+12 -10)
===================================================================
--- test/adapter/http.test.js    2014-10-17 17:00:26 +0900 (ad80a6a)
+++ test/adapter/http.test.js    2014-10-17 17:16:04 +0900 (ff81627)
@@ -16,7 +16,7 @@ suite('HTTP Adapter', function() {
     var application = express();
     var registeredCommands = httpAdapter.register(application, {
       prefix:     '',
-      connection: utils.createStubbedBackendConnection(),
+      connections: utils.createStubbedBackendConnections(),
       plugins: [
         api.API_REST,
         api.API_SOCKET_IO,
@@ -59,7 +59,7 @@ suite('HTTP Adapter', function() {
       })
     };
 
-    var connection;
+    var connections;
     var application;
     var server;
     var backend;
@@ -69,7 +69,7 @@ suite('HTTP Adapter', function() {
         .then(function(result) {
           backend = result.backend;
           server = result.server;
-          connection = result.connection;
+          connections = result.connections;
           application = result.application;
           done();
         })
@@ -79,13 +79,13 @@ suite('HTTP Adapter', function() {
     teardown(function() {
       utils.teardownApplication({ backend:    backend,
                                   server:     server,
-                                  connection: connection });
+                                  connections: connections });
     });
 
     test('to the document root', function(done) {
       httpAdapter.register(application, {
         prefix:     '',
-        connection: connection,
+        connections: connections,
         plugins:    [
           api.API_REST,
           api.API_SOCKET_IO,
@@ -118,7 +118,7 @@ suite('HTTP Adapter', function() {
     test('under specified path', function(done) {
       httpAdapter.register(application, {
         prefix:     '/path/to/droonga',
-        connection: connection,
+        connections: connections,
         plugins:    [
           api.API_REST,
           api.API_SOCKET_IO,
@@ -161,11 +161,12 @@ suite('HTTP Adapter', function() {
 
     test('search', function(done) {
       var receiverCallback = {};
-      var connection = utils.createStubbedBackendConnection();
+      var connections = utils.createStubbedBackendConnections();
+      var connection = connections.get();
       var application = express();
       httpAdapter.register(application, {
         prefix:     '',
-        connection: connection,
+        connections: connections,
         plugins: [
           api.API_REST,
           api.API_SOCKET_IO,
@@ -207,11 +208,12 @@ suite('HTTP Adapter', function() {
 
     test('droonga', function(done) {
       var receiverCallback = {};
-      var connection = utils.createStubbedBackendConnection();
+      var connections = utils.createStubbedBackendConnections();
+      var connection = connections.get();
       var application = express();
       httpAdapter.register(application, {
         prefix:     '',
-        connection: connection,
+        connections: connections,
         plugins: [
           api.API_REST,
           api.API_SOCKET_IO,

  Modified: test/adapter/http/register.test.js (+1 -1)
===================================================================
--- test/adapter/http/register.test.js    2014-10-17 17:00:26 +0900 (df8b183)
+++ test/adapter/http/register.test.js    2014-10-17 17:16:04 +0900 (c3fb4b6)
@@ -52,7 +52,7 @@ suite('adapter/http.register', function() {
       var application = new StubApplication();
       httpAdapter.register(application, {
         prefix:     '',
-        connection: utils.createStubbedBackendConnection(),
+        connections: utils.createStubbedBackendConnections(),
         plugins: plugins
       });
       return application.paths();

  Modified: test/adapter/socket.io.test.js (+20 -13)
===================================================================
--- test/adapter/socket.io.test.js    2014-10-17 17:00:26 +0900 (818c88e)
+++ test/adapter/socket.io.test.js    2014-10-17 17:16:04 +0900 (2364ee7)
@@ -10,6 +10,7 @@ var api = require('../../lib/adapter/api');
 var scoketIoAPI = require('../../lib/adapter/api/socket.io');
 
 suite('Socket.IO Adapter', function() {
+  var connections;
   var connection;
   var server;
   var clientSockets;
@@ -85,7 +86,7 @@ suite('Socket.IO Adapter', function() {
     }
     utils.teardownApplication({ backend:    backend,
                                 server:     server,
-                                connection: connection });
+                                connections: connections });
   }
 
   suite('registration', function() {
@@ -109,9 +110,10 @@ suite('Socket.IO Adapter', function() {
       utils.setupServer(application)
         .then(function(newServer) {
           server = newServer;
-          connection = utils.createStubbedBackendConnection();
+          connections = utils.createStubbedBackendConnections();
+          connection = connections.get();
           var registeredCommands = socketIoAdapter.register(application, server, {
-            connection: connection,
+            connections: connections,
             plugins: [
               api.API_REST,
               api.API_SOCKET_IO,
@@ -158,9 +160,10 @@ suite('Socket.IO Adapter', function() {
       utils.setupServer(application)
         .then(function(newServer) {
           server = newServer;
-          connection = utils.createStubbedBackendConnection();
+          connections = utils.createStubbedBackendConnections();
+          connection = connections.get();
           socketIoAdapter.register(application, server, {
-            connection: connection,
+            connections: connections,
             plugins: [
               api.API_REST,
               api.API_SOCKET_IO,
@@ -190,11 +193,12 @@ suite('Socket.IO Adapter', function() {
       utils.setupApplication()
         .then(function(result) {
           server     = result.server;
-          connection = result.connection;
+          connections = result.connections;
+          connection = connections.get();
           backend    = result.backend;
           socketIoAdapter.register(result.application, server, {
             tag:      utils.testTag,
-            connection: connection,
+            connections: connections,
             plugins: [
               api.API_REST,
               api.API_SOCKET_IO,
@@ -284,11 +288,12 @@ suite('Socket.IO Adapter', function() {
       utils.setupApplication()
         .then(function(result) {
           server     = result.server;
-          connection = result.connection;
+          connections = result.connections;
+          connection = connections.get();
           backend    = result.backend;
           socketIoAdapter.register(result.application, server, {
             tag:      utils.testTag,
-            connection: connection,
+            connections: connections,
             plugins: [
               api.API_REST,
               api.API_SOCKET_IO,
@@ -362,11 +367,12 @@ suite('Socket.IO Adapter', function() {
       utils.setupApplication()
         .then(function(result) {
           server     = result.server;
-          connection = result.connection;
+          connections = result.connections;
+          connection = connections.get();
           backend    = result.backend;
           socketIoAdapter.register(result.application, server, {
             tag:      utils.testTag,
-            connection: connection,
+            connections: connections,
             plugins: [
               api.API_REST,
               api.API_SOCKET_IO,
@@ -460,11 +466,12 @@ suite('Socket.IO Adapter', function() {
       utils.setupApplication()
         .then(function(result) {
           server     = result.server;
-          connection = result.connection;
+          connections = result.connections;
+          connection = connections.get();
           backend    = result.backend;
           socketIoAdapter.register(result.application, server, {
             tag:      utils.testTag,
-            connection: connection,
+            connections: connections,
             plugins: [
               api.API_REST,
               api.API_SOCKET_IO,

  Modified: test/express-adapter.test.js (+9 -9)
===================================================================
--- test/express-adapter.test.js    2014-10-17 17:00:26 +0900 (08cb508)
+++ test/express-adapter.test.js    2014-10-17 17:16:04 +0900 (f3143ee)
@@ -32,7 +32,7 @@ suite('Adaption for express application', function() {
 
   suite('REST API registeration', function() {
     var backend;
-    var connection;
+    var connections;
     var application;
     var server;
 
@@ -41,7 +41,7 @@ suite('Adaption for express application', function() {
         .then(function(result) {
           backend = result.backend;
           server = result.server;
-          connection = result.connection;
+          connections = result.connections;
           application = result.application;
           done();
         })
@@ -51,13 +51,13 @@ suite('Adaption for express application', function() {
     teardown(function() {
       utils.teardownApplication({ backend:    backend,
                                   server:     server,
-                                  connection: connection });
+                                  connections: connections });
     });
 
     test('to the document root', function(done) {
       application.droonga({
         prefix:     '',
-        connection: connection,
+        connections: connections,
         plugins:    [testRestPlugin, testSocketPlugin]
       });
 
@@ -82,7 +82,7 @@ suite('Adaption for express application', function() {
     test('under specified path', function(done) {
       application.droonga({
         prefix:     '/path/to/droonga',
-        connection: connection,
+        connections: connections,
         plugins:    [testRestPlugin, testSocketPlugin]
       });
 
@@ -112,7 +112,7 @@ suite('Adaption for express application', function() {
 
   suite('Socket.IO API registeration', function() {
     var application;
-    var connection;
+    var connections;
     var server;
     var clientSocket;
     var backend;
@@ -122,7 +122,7 @@ suite('Adaption for express application', function() {
         .then(function(result) {
           backend = result.backend;
           server = result.server;
-          connection = result.connection;
+          connections = result.connections;
           application = result.application;
           done();
         })
@@ -136,12 +136,12 @@ suite('Adaption for express application', function() {
       }
       utils.teardownApplication({ backend:    backend,
                                   server:     server,
-                                  connection: connection });
+                                  connections: connections });
     });
 
     test('request-response', function(done) {
       application.droonga({
-        connection: connection,
+        connections: connections,
         server:     server,
         plugins:    [testRestPlugin, testSocketPlugin]
       });

  Modified: test/test-utils.js (+10 -8)
===================================================================
--- test/test-utils.js    2014-10-17 17:00:26 +0900 (0c87a78)
+++ test/test-utils.js    2014-10-17 17:16:04 +0900 (1b4fc46)
@@ -12,6 +12,7 @@ var FluentReceiver = require('../lib/droonga-protocol/receiver').FluentReceiver;
 exports.FluentReceiver = FluentReceiver;
 
 var Connection = require('../lib/droonga-protocol/connection').Connection;
+var Connections = require('../lib/droonga-protocol/connections').Connections;
 
 var ConsoleLogger = require('../lib/console-logger').ConsoleLogger;
 var logger = new ConsoleLogger();
@@ -228,6 +229,7 @@ function createStubbedBackendConnections(count) {
   for (var i = 0; i < count; i++) {
     connections.push(createStubbedBackendConnection('127.0.0.' + (i + 1)));
   }
+  var index = 0;
   return {
     count: count,
     get: function() {
@@ -253,10 +255,10 @@ function setupApplication() {
     .then(exports.createBackendCb())
     .then(function(newBackend) {
       backend = newBackend;
-      var connection = new Connection({
+      var connections = new Connections({
         tag:      testTag,
         defaultDataset: 'test-dataset',
-        hostName: '127.0.0.1',
+        hostName: ['127.0.0.1'],
         port:     testSendPort,
         receivePort: testReceivePort,
         maxRetyrCount: 3,
@@ -266,7 +268,7 @@ function setupApplication() {
         backend:     backend,
         server:      server,
         application: application,
-        connection:  connection
+        connections: connections
       };
     });
 }
@@ -279,12 +281,12 @@ function teardownApplication(params) {
     params.backend.close();
     params.backend = undefined;
   }
-  if (params.application && params.application.connection) {
-    params.application.connection.close();
+  if (params.application && params.application.connections) {
+    params.application.connections.closeAll();
     params.application = undefined;
-  } else if (params.connection) {
-    params.connection.close();
-    params.connection = undefined;
+  } else if (params.connections) {
+    params.connections.closeAll();
+    params.connections = undefined;
   }
   if (params.server) {
     params.server.close();
-------------- next part --------------
HTML����������������������������...
下载 



More information about the Groonga-commit mailing list
Back to archive index