@@ -12,6 +12,7 @@ var Query = require('./query')
12
12
var defaults = require ( './defaults' )
13
13
var Connection = require ( './connection' )
14
14
const dns = require ( 'dns' )
15
+ const { logger } = require ( './logger' )
15
16
const YB_SERVERS_QUERY = 'SELECT * FROM yb_servers()'
16
17
const DEFAULT_FAILED_HOST_TTL_SECONDS = 5
17
18
@@ -56,6 +57,7 @@ class Lock {
56
57
const lock = new Lock ( )
57
58
class Client extends EventEmitter {
58
59
constructor ( config ) {
60
+ logger . silly ( "Received connection string " + config )
59
61
super ( )
60
62
this . connectionParameters = new ConnectionParameters ( config )
61
63
this . user = this . connectionParameters . user
@@ -152,6 +154,7 @@ class Client extends EventEmitter {
152
154
}
153
155
154
156
getLeastLoadedServer ( hostsList ) {
157
+ logger . silly ( "getLeaseLoadedServer() is called" )
155
158
if ( hostsList . size === 0 ) {
156
159
return this . host
157
160
}
@@ -213,6 +216,8 @@ class Client extends EventEmitter {
213
216
}
214
217
let randomIdx = Math . floor ( Math . random ( ) * leastLoadedHosts . length - 1 ) + 1
215
218
let leastLoadedHost = leastLoadedHosts [ randomIdx ]
219
+ logger . silly ( "Least loaded servers are " + leastLoadedHosts )
220
+ logger . debug ( "Returning " + leastLoadedHost + "as the least loaded host" )
216
221
return leastLoadedHost
217
222
}
218
223
@@ -243,6 +248,7 @@ class Client extends EventEmitter {
243
248
}
244
249
}
245
250
}
251
+ logger . warn ( "Given topology-key " + key + " is invalid" )
246
252
return false
247
253
}
248
254
@@ -255,15 +261,18 @@ class Client extends EventEmitter {
255
261
if ( Client . connectionMap . has ( host ) ) {
256
262
prevCount = Client . connectionMap . get ( host )
257
263
} else if ( Client . failedHosts . has ( host ) ) {
264
+ logger . debug ( "Removing " + host + " from failed host list" )
258
265
let serverInfo = Client . failedHosts . get ( host )
259
266
Client . hostServerInfo . set ( host , serverInfo )
260
267
Client . failedHosts . delete ( host )
261
268
Client . failedHostsTime . delete ( host )
262
269
}
263
270
Client . connectionMap . set ( host , prevCount + 1 )
271
+ logger . debug ( "Increasing connection count of " + host + " by 1" )
264
272
}
265
273
266
274
_connect ( callback ) {
275
+ logger . silly ( "connect() is called" )
267
276
var self = this
268
277
if ( this . connectionParameters . loadBalance && this . _connecting ) {
269
278
this . connection =
@@ -299,16 +308,19 @@ class Client extends EventEmitter {
299
308
if ( Client . connectionMap . size && Client . hostServerInfo . size ) {
300
309
this . host = this . getLeastLoadedServer ( Client . connectionMap )
301
310
this . port = Client . hostServerInfo . get ( this . host ) . port
311
+ logger . silly ( "Least loaded host received " + this . host + " port " + this . port )
302
312
} else if ( Client . failedHosts . size ) {
303
313
this . host = this . getLeastLoadedServer ( Client . failedHosts )
304
314
this . port = Client . failedHosts . get ( this . host ) . port
315
+ logger . silly ( "Least loaded host received " + this . host + " port " + this . port )
305
316
}
306
317
}
307
318
if ( Client . usePublic ) {
308
319
let currentHost = this . host
309
320
let serverInfo = Client . hostServerInfo . get ( currentHost )
310
321
this . prevHostIfUsePublic = currentHost
311
322
this . host = serverInfo . public_ip
323
+ logger . silly ( "Using public ips, host " + this . host )
312
324
}
313
325
if ( this . host && this . host . indexOf ( '/' ) === 0 ) {
314
326
con . connect ( this . host + '/.s.PGSQL.' + this . port )
@@ -362,6 +374,7 @@ class Client extends EventEmitter {
362
374
attachErrorListenerOnClientConnection ( client ) {
363
375
client . on ( 'error' , ( ) => {
364
376
if ( Client . hostServerInfo . has ( client . host ) ) {
377
+ logger . debug ( "Not able to connect to host " + client . host + " adding it to failedHosts" )
365
378
Client . failedHosts . set ( client . host , Client . hostServerInfo . get ( client . host ) )
366
379
let start = new Date ( ) . getTime ( ) ;
367
380
Client . failedHostsTime . set ( client . host , start )
@@ -379,6 +392,7 @@ class Client extends EventEmitter {
379
392
while ( upHost !== undefined && ! hostIsUp ) {
380
393
client . host = upHost . value
381
394
client . connectionParameters . host = client . host
395
+ logger . debug ( "Trying to create control connection to " + client . host )
382
396
await client
383
397
. nowConnect ( )
384
398
. then ( ( res ) => {
@@ -401,6 +415,7 @@ class Client extends EventEmitter {
401
415
}
402
416
403
417
async getConnection ( ) {
418
+ logger . silly ( "Creating control connection..." )
404
419
let currConnectionString = this . connectionString
405
420
var client = new Client ( currConnectionString )
406
421
this . attachErrorListenerOnClientConnection ( client )
@@ -441,10 +456,12 @@ class Client extends EventEmitter {
441
456
}
442
457
} )
443
458
}
459
+ logger . debug ( "Created control connection to host " + client . host )
444
460
return client
445
461
}
446
462
447
463
async getServersInfo ( ) {
464
+ logger . silly ( "Refreshing server info" )
448
465
var client = Client . controlClient
449
466
var result
450
467
await client
@@ -466,6 +483,7 @@ class Client extends EventEmitter {
466
483
}
467
484
468
485
createServersList ( data ) {
486
+ logger . silly ( "Creating servers list" )
469
487
Client . hostServerInfo . clear ( )
470
488
data . forEach ( ( eachServer ) => {
471
489
var placementInfo = eachServer . cloud + '.' + eachServer . region + '.' + eachServer . zone
@@ -477,14 +495,17 @@ class Client extends EventEmitter {
477
495
} else {
478
496
Client . placementInfoHostMap . set ( placementInfo , [ eachServer . host ] )
479
497
}
498
+ logger . debug ( "Updated placementInfoHost Map " + [ ...Client . placementInfoHostMap ] )
480
499
Client . hostServerInfo . set ( eachServer . host , server )
481
500
if ( eachServer . public_ip === this . host ) {
482
501
Client . usePublic = true
483
502
}
503
+ logger . debug ( "Updated hostServerInfo to " + [ ...Client . hostServerInfo ] + " and usePublic to " + Client . usePublic )
484
504
} )
485
505
}
486
506
487
507
createConnectionMap ( data ) {
508
+ logger . silly ( "Creating connection map" )
488
509
const currConnectionMap = new Map ( Client . connectionMap )
489
510
Client . connectionMap . clear ( )
490
511
data . forEach ( ( eachServer ) => {
@@ -496,16 +517,19 @@ class Client extends EventEmitter {
496
517
}
497
518
} else {
498
519
let start = new Date ( ) . getTime ( ) ;
499
- if ( start - Client . failedHostsTime . get ( eachServer . host ) > ( DEFAULT_FAILED_HOST_TTL_SECONDS * 1000 ) ) {
520
+ if ( start - Client . failedHostsTime . get ( eachServer . host ) > ( DEFAULT_FAILED_HOST_TTL_SECONDS * 1000 ) ) {
521
+ logger . debug ( "Removing " + eachServer . host + " from failed host list" )
500
522
Client . connectionMap . set ( eachServer . host , 0 )
501
523
Client . failedHosts . delete ( eachServer . host )
502
524
Client . failedHostsTime . delete ( eachServer . host )
503
525
}
504
526
}
505
527
} )
528
+ logger . debug ( "Updated connection map " + [ ...Client . connectionMap ] )
506
529
}
507
530
508
531
createTopologyKeyMap ( ) {
532
+ logger . silly ( "Creating Topology key map" )
509
533
var seperatedKeys = this . connectionParameters . topologyKeys . split ( ',' )
510
534
for ( let idx = 0 ; idx < seperatedKeys . length ; idx ++ ) {
511
535
let key = seperatedKeys [ idx ]
@@ -526,9 +550,11 @@ class Client extends EventEmitter {
526
550
throw new Error ( 'Bad Topology Key found - ' + key )
527
551
}
528
552
}
553
+ logger . debug ( "Updated topologyKey Map " + [ ...Client . topologyKeyMap ] )
529
554
}
530
555
531
556
createMetaData ( data ) {
557
+ logger . silly ( "Creating metadata ..." )
532
558
this . createServersList ( data )
533
559
Client . lastTimeMetaDataFetched = new Date ( ) . getTime ( ) / 1000
534
560
this . createConnectionMap ( data )
@@ -538,12 +564,14 @@ class Client extends EventEmitter {
538
564
}
539
565
540
566
nowConnect ( callback ) {
567
+ logger . silly ( "nowConnect() is called..." )
541
568
if ( callback ) {
542
569
if ( this . connectionParameters . loadBalance ) {
543
570
this . _connect ( ( error ) => {
544
571
if ( error ) {
545
572
if ( this . connectionParameters . loadBalance ) {
546
573
if ( Client . hostServerInfo . has ( this . host ) ) {
574
+ logger . debug ( "Adding " + this . host + " to failed host list" )
547
575
Client . failedHosts . set ( this . host , Client . hostServerInfo . get ( this . host ) )
548
576
let start = new Date ( ) . getTime ( ) ;
549
577
Client . failedHostsTime . set ( this . host , start )
@@ -579,6 +607,7 @@ class Client extends EventEmitter {
579
607
if ( error ) {
580
608
if ( this . connectionParameters . loadBalance ) {
581
609
if ( Client . hostServerInfo . has ( this . host ) ) {
610
+ logger . debug ( "Adding " + this . host + " to failed host list" )
582
611
Client . failedHosts . set ( this . host , Client . hostServerInfo . get ( this . host ) )
583
612
let start = new Date ( ) . getTime ( ) ;
584
613
Client . failedHostsTime . set ( this . host , start )
@@ -605,14 +634,16 @@ class Client extends EventEmitter {
605
634
}
606
635
607
636
updateConnectionMapAfterRefresh ( ) {
637
+ logger . silly ( "Updating connection map after refresh" )
608
638
let hostsInfoList = Client . hostServerInfo . keys ( )
609
639
for ( let eachHost of hostsInfoList ) {
610
640
if ( ! Client . connectionMap . has ( eachHost ) ) {
611
641
if ( ! Client . failedHosts . has ( eachHost ) ) {
612
642
Client . connectionMap . set ( eachHost , 0 )
613
643
} else {
614
644
let start = new Date ( ) . getTime ( ) ;
615
- if ( start - Client . failedHostsTime . get ( eachHost ) > ( DEFAULT_FAILED_HOST_TTL_SECONDS * 1000 ) ) {
645
+ if ( start - Client . failedHostsTime . get ( eachHost ) > ( DEFAULT_FAILED_HOST_TTL_SECONDS * 1000 ) ) {
646
+ logger . debug ( "Removing" + eachHost + " from failed host list" )
616
647
Client . connectionMap . set ( eachHost , 0 )
617
648
Client . failedHosts . delete ( eachHost )
618
649
Client . failedHostsTime . delete ( eachHost )
@@ -626,9 +657,12 @@ class Client extends EventEmitter {
626
657
Client . connectionMap . delete ( eachHost )
627
658
}
628
659
}
660
+ logger . debug ( "Updated connection Map after refresh " + [ ...Client . connectionMap ] ) ;
661
+ logger . debug ( "Updated failed host list after refresh " + [ ...Client . failedHosts ] ) ;
629
662
}
630
663
631
664
updateMetaData ( data ) {
665
+ logger . silly ( "Updating MetaData" )
632
666
this . createServersList ( data )
633
667
Client . lastTimeMetaDataFetched = new Date ( ) . getTime ( ) / 1000
634
668
this . updateConnectionMapAfterRefresh ( )
@@ -637,7 +671,13 @@ class Client extends EventEmitter {
637
671
isRefreshRequired ( ) {
638
672
let currentTime = new Date ( ) . getTime ( ) / 1000
639
673
let diff = Math . floor ( currentTime - Client . lastTimeMetaDataFetched )
640
- return diff >= this . connectionParameters . ybServersRefreshInterval
674
+ if ( diff >= this . connectionParameters . ybServersRefreshInterval ) {
675
+ logger . silly ( "Refresh is required" )
676
+ return true
677
+ } else {
678
+ logger . silly ( "Refresh is not required" )
679
+ return false
680
+ }
641
681
}
642
682
643
683
connect ( callback ) {
@@ -1127,6 +1167,7 @@ class Client extends EventEmitter {
1127
1167
if ( this . connectionParameters . loadBalance ) {
1128
1168
let prevCount = Client . connectionMap . get ( this . host )
1129
1169
if ( prevCount > 0 ) {
1170
+ logger . debug ( "Decreasing connection count (" + prevCount + ") of " + this . host + " by 1" )
1130
1171
Client . connectionMap . set ( this . host , prevCount - 1 )
1131
1172
}
1132
1173
lock . release ( )
0 commit comments