Skip to content

Commit

Permalink
Remove ConnectionManagerState
Browse files Browse the repository at this point in the history
  • Loading branch information
alexpenev-s committed Jan 10, 2018
1 parent 58be327 commit 33f6c94
Show file tree
Hide file tree
Showing 6 changed files with 31 additions and 312 deletions.
3 changes: 1 addition & 2 deletions lib/Client.js
Original file line number Diff line number Diff line change
Expand Up @@ -121,8 +121,7 @@ Client.prototype.connect = function connect(options, cb) {
options = {};
}

this._connManager.updateState(options);
var connectOptions = this._connManager.getConnectOptions();
var connectOptions = this._connManager.updateConnectOptions(options);

// SAML assertion can only be used once
if (this._settings.assertion) {
Expand Down
60 changes: 28 additions & 32 deletions lib/protocol/ConnectionManager.js
Original file line number Diff line number Diff line change
Expand Up @@ -13,52 +13,49 @@
// language governing permissions and limitations under the License.
'use strict';

var State = require('./ConnectionManagerState');
var util = require('../util');
var debug = util.debuglog('hdb_conn');

module.exports = ConnectionManager;

function ConnectionManager(settings) {
this.state = new State(settings);
this._settings = settings;
}

ConnectionManager.prototype.updateState = function updateState(newOptions) {
this.state.update(newOptions);
};

ConnectionManager.prototype.getConnectOptions = function getConnectOptions() {
return this.state.options.connect;
ConnectionManager.prototype.updateConnectOptions = function updateConnectOptions(settings) {
return util.extend(this._settings, settings);
};

ConnectionManager.prototype.openConnection = function openConnection(conn, cb) {
var dbHosts = this.state.dbHosts;
var s = this._settings;
var dbHosts = (Array.isArray(s.hosts) && s.hosts.slice()) || [{'host': s.host, 'port': s.port}]
debug('Opening connection. Hosts:', dbHosts);

this._openConnectionToHost(conn, dbHosts, 0, [], cb);
};
var errorStats = [];
var self = this;

ConnectionManager.prototype._openConnectionToHost = function _openConnectionToHost(conn, dbHosts, whichHost, errorStats, cb) {
if (whichHost === dbHosts.length) {
return cb(couldNotOpenConnectionError(errorStats));
function _tryConnect() {
if (dbHosts.length === 0) {
return cb(couldNotOpenConnectionError(errorStats));
}
var settings = util.extend({}, self._settings, dbHosts.shift());
self._openConnection(conn, settings, function (err) {
if (err) {
debug('Connection to %s:%d failed with:', settings.host, settings.port, err.message);
errorStats.push({ host: settings.host, port: settings.port, err: err });
_tryConnect();
} else {
debug('Successful connection to %s:%d', settings.host, settings.port);
return cb(null);
}
});
}

var self = this;
var currentHostOptions = dbHosts[whichHost];
var openOptions = util.extend({}, currentHostOptions, this.state.options.encryption);
this._openConnection(conn, openOptions, function (err) {
if (!err) {
debug('Successful connection to %s:%d', openOptions.host, openOptions.port);
return cb(null);
}
debug('Connection to %s:%d failed with:', openOptions.host, openOptions.port, err.message);
errorStats.push({ host: openOptions.host, port: openOptions.port, err: err });
self._openConnectionToHost(conn, dbHosts, (whichHost + 1), errorStats, cb);
});
_tryConnect();
};

ConnectionManager.prototype._openConnection = function _openConnection(conn, openOptions, cb) {
var dbName = this.state.options.multiDb.databaseName;
var dbName = openOptions.databaseName;
if (util.isString(dbName) && dbName.length) {
this._openConnectionMultiDbCase(conn, openOptions, cb);
} else {
Expand All @@ -67,10 +64,8 @@ ConnectionManager.prototype._openConnection = function _openConnection(conn, ope
};

ConnectionManager.prototype._openConnectionMultiDbCase = function _openConnectionMultiDbCase(conn, openOptions, cb) {
var multiDbOptions = this.state.options.multiDb;

if (!openOptions.port) {
var instanceNum = extractInstanceNumber(multiDbOptions.instanceNumber);
var instanceNum = extractInstanceNumber(openOptions.instanceNumber);
if (isNaN(instanceNum)) {
return cb(new Error('Instance Number is not valid'));
} else {
Expand All @@ -88,7 +83,8 @@ ConnectionManager.prototype._openConnectionMultiDbCase = function _openConnectio
return handleError(err);
}

conn.fetchDbConnectInfo(multiDbOptions, function (err, info) {
var self = this;
conn.fetchDbConnectInfo({databaseName: openOptions.databaseName}, function (err, info) {
if (err) {
return handleError(err);
}
Expand All @@ -99,7 +95,7 @@ ConnectionManager.prototype._openConnectionMultiDbCase = function _openConnectio
conn._closeSilently();
openOptions.host = info.host;
openOptions.port = info.port;
debug('Connecting to tenant-db %s on %s:%d', multiDbOptions.databaseName, openOptions.host, openOptions.port);
debug('Connecting to tenant-db %s on %s:%d', openOptions.databaseName, openOptions.host, openOptions.port);
conn.open(openOptions, cb);
}
});
Expand Down
70 changes: 0 additions & 70 deletions lib/protocol/ConnectionManagerState.js

This file was deleted.

2 changes: 1 addition & 1 deletion lib/protocol/request/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -186,7 +186,7 @@ function prepare(options) {
}

function dbConnectInfo(options) {
var segment = createSegment(MessageType.DB_CONNECT_INFO, options);
var segment = createSegment(MessageType.DB_CONNECT_INFO);
segment.add(PartKind.DB_CONNECT_INFO, [{
name: DbConnectInfoOption.DATABASE_NAME,
type: TypeCode.STRING,
Expand Down
1 change: 1 addition & 0 deletions test/hdb.Client.js
Original file line number Diff line number Diff line change
Expand Up @@ -716,6 +716,7 @@ describe('hdb', function () {
instanceNumber: 4,
databaseName: 'DB0'
});
client._settings.port = undefined;
client._connection.errors.open = true;

client.connect(function (err) {
Expand Down

0 comments on commit 33f6c94

Please sign in to comment.