@celerispay/hazelcast-client 3.12.7-2 → 3.12.7-3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
|
@@ -115,6 +115,13 @@ export declare class ClusterService {
|
|
|
115
115
|
private tryConnectingToAddresses(index, remainingAttemptLimit, attemptPeriod, cause?);
|
|
116
116
|
private handleMember(member, eventType);
|
|
117
117
|
private handleMemberList(members);
|
|
118
|
+
/**
|
|
119
|
+
* Proactively opens connections to all non-owner cluster members.
|
|
120
|
+
* Required for smart routing: the client needs a live connection to every
|
|
121
|
+
* node so it can route operations to the correct partition owner.
|
|
122
|
+
* Failures are silently ignored — the periodic reconnection task will retry.
|
|
123
|
+
*/
|
|
124
|
+
private connectToNonOwnerMembers(members);
|
|
118
125
|
private detectMembershipEvents(prevMembers);
|
|
119
126
|
private fireMembershipEvent(membershipEvent);
|
|
120
127
|
private handleMemberAttributeChange(uuid, key, operationType, value);
|
|
@@ -467,12 +467,46 @@ var ClusterService = /** @class */ (function () {
|
|
|
467
467
|
this.logger.info('ClusterService', 'Members received.', this.members);
|
|
468
468
|
// Log current state after member list update
|
|
469
469
|
this.logCurrentState();
|
|
470
|
+
// In smart routing mode, proactively open connections to all non-owner members
|
|
471
|
+
// so that partition-aware routing can work across all nodes.
|
|
472
|
+
if (this.client.getConfig().networkConfig.smartRouting) {
|
|
473
|
+
this.connectToNonOwnerMembers(members);
|
|
474
|
+
}
|
|
470
475
|
var events = this.detectMembershipEvents(prevMembers);
|
|
471
476
|
for (var _i = 0, events_1 = events; _i < events_1.length; _i++) {
|
|
472
477
|
var event = events_1[_i];
|
|
473
478
|
this.fireMembershipEvent(event);
|
|
474
479
|
}
|
|
475
480
|
};
|
|
481
|
+
/**
|
|
482
|
+
* Proactively opens connections to all non-owner cluster members.
|
|
483
|
+
* Required for smart routing: the client needs a live connection to every
|
|
484
|
+
* node so it can route operations to the correct partition owner.
|
|
485
|
+
* Failures are silently ignored — the periodic reconnection task will retry.
|
|
486
|
+
*/
|
|
487
|
+
ClusterService.prototype.connectToNonOwnerMembers = function (members) {
|
|
488
|
+
var _this = this;
|
|
489
|
+
var ownerAddress = this.ownerConnection ? this.ownerConnection.getAddress().toString() : null;
|
|
490
|
+
members.forEach(function (member) {
|
|
491
|
+
var memberAddressStr = member.address.toString();
|
|
492
|
+
// Skip the owner — already connected
|
|
493
|
+
if (memberAddressStr === ownerAddress) {
|
|
494
|
+
return;
|
|
495
|
+
}
|
|
496
|
+
// Skip if already connected
|
|
497
|
+
if (_this.client.getConnectionManager().hasConnection(member.address)) {
|
|
498
|
+
return;
|
|
499
|
+
}
|
|
500
|
+
_this.logger.info('ClusterService', "\uD83D\uDD17 SMART-ROUTING: Opening connection to non-owner member " + memberAddressStr);
|
|
501
|
+
_this.client.getConnectionManager().getOrConnect(member.address, false)
|
|
502
|
+
.then(function () {
|
|
503
|
+
_this.logger.info('ClusterService', "\u2705 SMART-ROUTING: Connected to member " + memberAddressStr);
|
|
504
|
+
})
|
|
505
|
+
.catch(function (err) {
|
|
506
|
+
_this.logger.warn('ClusterService', "\u26A0\uFE0F SMART-ROUTING: Could not connect to member " + memberAddressStr + ": " + err.message);
|
|
507
|
+
});
|
|
508
|
+
});
|
|
509
|
+
};
|
|
476
510
|
ClusterService.prototype.detectMembershipEvents = function (prevMembers) {
|
|
477
511
|
var events = [];
|
|
478
512
|
var eventMembers = Array.from(this.members);
|
|
@@ -572,6 +606,7 @@ var ClusterService = /** @class */ (function () {
|
|
|
572
606
|
* @param member The member that was added
|
|
573
607
|
*/
|
|
574
608
|
ClusterService.prototype.handleMemberAdded = function (member) {
|
|
609
|
+
var _this = this;
|
|
575
610
|
this.logger.info('ClusterService', "\u2705 SERVER CONFIRMED: Member[ uuid: " + member.uuid + ", address: " + member.address.toString() + "] added to cluster");
|
|
576
611
|
// SERVER-FIRST: Store server data as credentials
|
|
577
612
|
// The server is the authority - we store what it tells us
|
|
@@ -607,6 +642,22 @@ var ClusterService = /** @class */ (function () {
|
|
|
607
642
|
// Refresh partition table (KEEPING REFRESH METHOD UNTOUCHED as requested)
|
|
608
643
|
this.client.getPartitionService().refresh();
|
|
609
644
|
this.logger.info('ClusterService', "\u2705 SERVER-FIRST: Member " + member.uuid + " at " + member.address.toString() + " credentials stored from server data");
|
|
645
|
+
// In smart routing mode, proactively open a connection to this member
|
|
646
|
+
// so it is immediately available for partition-aware routing.
|
|
647
|
+
if (this.client.getConfig().networkConfig.smartRouting) {
|
|
648
|
+
var ownerAddress = this.ownerConnection ? this.ownerConnection.getAddress().toString() : null;
|
|
649
|
+
var memberAddressStr_1 = member.address.toString();
|
|
650
|
+
if (memberAddressStr_1 !== ownerAddress && !this.client.getConnectionManager().hasConnection(member.address)) {
|
|
651
|
+
this.logger.info('ClusterService', "\uD83D\uDD17 SMART-ROUTING: Opening connection to newly joined member " + memberAddressStr_1);
|
|
652
|
+
this.client.getConnectionManager().getOrConnect(member.address, false)
|
|
653
|
+
.then(function () {
|
|
654
|
+
_this.logger.info('ClusterService', "\u2705 SMART-ROUTING: Connected to newly joined member " + memberAddressStr_1);
|
|
655
|
+
})
|
|
656
|
+
.catch(function (err) {
|
|
657
|
+
_this.logger.warn('ClusterService', "\u26A0\uFE0F SMART-ROUTING: Could not connect to newly joined member " + memberAddressStr_1 + ": " + err.message);
|
|
658
|
+
});
|
|
659
|
+
}
|
|
660
|
+
}
|
|
610
661
|
};
|
|
611
662
|
/**
|
|
612
663
|
* Finds the current owner from the cluster state
|
package/package.json
CHANGED