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����������������������������...下载