1919
2020import Session from './session'
2121import Pool from './internal/pool'
22- import Connection from './internal/connection'
22+ import ChannelConnection from './internal/connection-channel '
2323import { newError , SERVICE_UNAVAILABLE } from './error'
24- import { DirectConnectionProvider } from './internal/connection-providers '
24+ import DirectConnectionProvider from './internal/connection-provider-direct '
2525import Bookmark from './internal/bookmark'
2626import ConnectivityVerifier from './internal/connectivity-verifier'
2727import PoolConfig , {
@@ -76,19 +76,9 @@ class Driver {
7676 this . _id = idGenerator ++
7777 this . _address = address
7878 this . _userAgent = userAgent
79- this . _openConnections = { }
8079 this . _authToken = authToken
8180 this . _config = config
8281 this . _log = Logger . create ( config )
83- this . _pool = new Pool ( {
84- create : this . _createConnection . bind ( this ) ,
85- destroy : this . _destroyConnection . bind ( this ) ,
86- validate : this . _validateConnection . bind ( this ) ,
87- installIdleObserver : this . _installIdleObserverOnConnection . bind ( this ) ,
88- removeIdleObserver : this . _removeIdleObserverOnConnection . bind ( this ) ,
89- config : PoolConfig . fromDriverConfig ( config ) ,
90- log : this . _log
91- } )
9282
9383 /**
9484 * Reference to the connection provider. Initialized lazily by {@link _getOrCreateConnectionProvider}.
@@ -111,73 +101,13 @@ class Driver {
111101
112102 /**
113103 * Verifies connectivity of this driver by trying to open a connection with the provided driver options.
114- * @param {string } [db =''] the target database to verify connectivity for.
104+ * @param {string } [database =''] the target database to verify connectivity for.
115105 * @returns {Promise<object> } promise resolved with server info or rejected with error.
116106 */
117- verifyConnectivity ( { db = '' } = { } ) {
107+ verifyConnectivity ( { database = '' } = { } ) {
118108 const connectionProvider = this . _getOrCreateConnectionProvider ( )
119109 const connectivityVerifier = new ConnectivityVerifier ( connectionProvider )
120- return connectivityVerifier . verify ( { db } )
121- }
122-
123- /**
124- * Create a new connection and initialize it.
125- * @return {Promise<Connection> } promise resolved with a new connection or rejected when failed to connect.
126- * @access private
127- */
128- _createConnection ( address , release ) {
129- const connection = Connection . create (
130- address ,
131- this . _config ,
132- this . _createConnectionErrorHandler ( ) ,
133- this . _log
134- )
135- connection . _release = ( ) => release ( address , connection )
136- this . _openConnections [ connection . id ] = connection
137-
138- return connection . connect ( this . _userAgent , this . _authToken ) . catch ( error => {
139- if ( this . onError ) {
140- // notify Driver.onError callback about connection initialization errors
141- this . onError ( error )
142- }
143- // let's destroy this connection
144- this . _destroyConnection ( connection )
145- // propagate the error because connection failed to connect / initialize
146- throw error
147- } )
148- }
149-
150- /**
151- * Check that a connection is usable
152- * @return {boolean } true if the connection is open
153- * @access private
154- **/
155- _validateConnection ( conn ) {
156- if ( ! conn . isOpen ( ) ) {
157- return false
158- }
159-
160- const maxConnectionLifetime = this . _config . maxConnectionLifetime
161- const lifetime = Date . now ( ) - conn . creationTimestamp
162- return lifetime <= maxConnectionLifetime
163- }
164-
165- _installIdleObserverOnConnection ( conn , observer ) {
166- conn . _queueObserver ( observer )
167- }
168-
169- _removeIdleObserverOnConnection ( conn ) {
170- conn . _updateCurrentObserver ( )
171- }
172-
173- /**
174- * Dispose of a connection.
175- * @return {Connection } the connection to dispose.
176- * @access private
177- */
178- _destroyConnection ( conn ) {
179- delete this . _openConnections [ conn . id ]
180- conn . close ( )
110+ return connectivityVerifier . verify ( { database } )
181111 }
182112
183113 /**
@@ -194,13 +124,13 @@ class Driver {
194124 * @param {string } [defaultAccessMode=WRITE] the access mode of this session, allowed values are {@link READ} and {@link WRITE}.
195125 * @param {string|string[] } [bookmarks=null] the initial reference or references to some previous
196126 * transactions. Value is optional and absence indicates that that the bookmarks do not exist or are unknown.
197- * @param {string } [db =''] the database this session will connect to.
127+ * @param {string } [database =''] the database this session will connect to.
198128 * @return {Session } new session.
199129 */
200130 session ( {
201131 defaultAccessMode = WRITE ,
202132 bookmarks : bookmarkOrBookmarks ,
203- db = ''
133+ database = ''
204134 } = { } ) {
205135 const sessionMode = Driver . _validateSessionMode ( defaultAccessMode )
206136 const connectionProvider = this . _getOrCreateConnectionProvider ( )
@@ -209,7 +139,7 @@ class Driver {
209139 : Bookmark . empty ( )
210140 return new Session ( {
211141 mode : sessionMode ,
212- db ,
142+ database ,
213143 connectionProvider,
214144 bookmark,
215145 config : this . _config
@@ -225,38 +155,27 @@ class Driver {
225155 }
226156
227157 // Extension point
228- _createConnectionProvider ( address , connectionPool , driverOnErrorCallback ) {
229- return new DirectConnectionProvider (
230- address ,
231- connectionPool ,
232- driverOnErrorCallback
233- )
234- }
235-
236- // Extension point
237- _createConnectionErrorHandler ( ) {
238- return new ConnectionErrorHandler ( SERVICE_UNAVAILABLE )
158+ _createConnectionProvider ( address , userAgent , authToken ) {
159+ return new DirectConnectionProvider ( {
160+ id : this . _id ,
161+ config : this . _config ,
162+ log : this . _log ,
163+ address : address ,
164+ userAgent : userAgent ,
165+ authToken : authToken
166+ } )
239167 }
240168
241169 _getOrCreateConnectionProvider ( ) {
242170 if ( ! this . _connectionProvider ) {
243- const driverOnErrorCallback = this . _driverOnErrorCallback . bind ( this )
244171 this . _connectionProvider = this . _createConnectionProvider (
245172 this . _address ,
246- this . _pool ,
247- driverOnErrorCallback
173+ this . _userAgent ,
174+ this . _authToken
248175 )
249176 }
250- return this . _connectionProvider
251- }
252177
253- _driverOnErrorCallback ( error ) {
254- const userDefinedOnErrorCallback = this . onError
255- if ( userDefinedOnErrorCallback && error . code === SERVICE_UNAVAILABLE ) {
256- userDefinedOnErrorCallback ( error )
257- } else {
258- // we don't need to tell the driver about this error
259- }
178+ return this . _connectionProvider
260179 }
261180
262181 /**
@@ -266,18 +185,8 @@ class Driver {
266185 */
267186 close ( ) {
268187 this . _log . info ( `Driver ${ this . _id } closing` )
269-
270- try {
271- // purge all idle connections in the connection pool
272- this . _pool . purgeAll ( )
273- } finally {
274- // then close all connections driver has ever created
275- // it is needed to close connections that are active right now and are acquired from the pool
276- for ( let connectionId in this . _openConnections ) {
277- if ( this . _openConnections . hasOwnProperty ( connectionId ) ) {
278- this . _openConnections [ connectionId ] . close ( )
279- }
280- }
188+ if ( this . _connectionProvider ) {
189+ this . _connectionProvider . close ( )
281190 }
282191 }
283192}
0 commit comments