@celerispay/hazelcast-client 3.12.5-5 → 3.12.5-7
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.
|
@@ -47,6 +47,10 @@ export declare class ClusterService {
|
|
|
47
47
|
*/
|
|
48
48
|
connectToCluster(): Promise<void>;
|
|
49
49
|
getPossibleMemberAddresses(): Promise<string[]>;
|
|
50
|
+
/**
|
|
51
|
+
* Returns the owner connection if available
|
|
52
|
+
*/
|
|
53
|
+
getOwnerConnection(): ClientConnection | null;
|
|
50
54
|
/**
|
|
51
55
|
* Returns the list of members in the cluster.
|
|
52
56
|
* @returns
|
|
@@ -63,11 +67,6 @@ export declare class ClusterService {
|
|
|
63
67
|
* @returns {ClientInfo}
|
|
64
68
|
*/
|
|
65
69
|
getClientInfo(): ClientInfo;
|
|
66
|
-
/**
|
|
67
|
-
* Returns the connection associated with owner node of this client.
|
|
68
|
-
* @returns {ClientConnection}
|
|
69
|
-
*/
|
|
70
|
-
getOwnerConnection(): ClientConnection;
|
|
71
70
|
/**
|
|
72
71
|
* Adds MembershipListener to listen for membership updates. There is no check for duplicate registrations,
|
|
73
72
|
* so if you register the listener twice, it will get events twice.
|
|
@@ -103,6 +103,12 @@ var ClusterService = /** @class */ (function () {
|
|
|
103
103
|
return Array.from(new Set(Array.from(addresses).concat(Array.from(providerAddresses))));
|
|
104
104
|
});
|
|
105
105
|
};
|
|
106
|
+
/**
|
|
107
|
+
* Returns the owner connection if available
|
|
108
|
+
*/
|
|
109
|
+
ClusterService.prototype.getOwnerConnection = function () {
|
|
110
|
+
return this.ownerConnection;
|
|
111
|
+
};
|
|
106
112
|
/**
|
|
107
113
|
* Returns the list of members in the cluster.
|
|
108
114
|
* @returns
|
|
@@ -144,16 +150,15 @@ var ClusterService = /** @class */ (function () {
|
|
|
144
150
|
ClusterService.prototype.getClientInfo = function () {
|
|
145
151
|
var info = new ClientInfo_1.ClientInfo();
|
|
146
152
|
info.uuid = this.uuid;
|
|
147
|
-
|
|
153
|
+
var ownerConnection = this.getOwnerConnection();
|
|
154
|
+
if (ownerConnection) {
|
|
155
|
+
info.localAddress = ownerConnection.getLocalAddress();
|
|
156
|
+
}
|
|
157
|
+
else {
|
|
158
|
+
info.localAddress = null;
|
|
159
|
+
}
|
|
148
160
|
return info;
|
|
149
161
|
};
|
|
150
|
-
/**
|
|
151
|
-
* Returns the connection associated with owner node of this client.
|
|
152
|
-
* @returns {ClientConnection}
|
|
153
|
-
*/
|
|
154
|
-
ClusterService.prototype.getOwnerConnection = function () {
|
|
155
|
-
return this.ownerConnection;
|
|
156
|
-
};
|
|
157
162
|
/**
|
|
158
163
|
* Adds MembershipListener to listen for membership updates. There is no check for duplicate registrations,
|
|
159
164
|
* so if you register the listener twice, it will get events twice.
|
|
@@ -185,7 +190,11 @@ var ClusterService = /** @class */ (function () {
|
|
|
185
190
|
var handleAttributeChange = _this.handleMemberAttributeChange.bind(_this);
|
|
186
191
|
ClientAddMembershipListenerCodec_1.ClientAddMembershipListenerCodec.handle(m, handleMember, handleMemberList, handleAttributeChange, null);
|
|
187
192
|
};
|
|
188
|
-
|
|
193
|
+
var ownerConnection = this.getOwnerConnection();
|
|
194
|
+
if (!ownerConnection) {
|
|
195
|
+
return Promise.reject(new Error('Cannot initialize membership listener: no owner connection available'));
|
|
196
|
+
}
|
|
197
|
+
return this.client.getInvocationService().invokeOnConnection(ownerConnection, request, handler)
|
|
189
198
|
.then(function (resp) {
|
|
190
199
|
_this.logger.trace('ClusterService', 'Registered listener with id '
|
|
191
200
|
+ ClientAddMembershipListenerCodec_1.ClientAddMembershipListenerCodec.decodeResponse(resp).response);
|
|
@@ -603,7 +612,7 @@ var ClusterService = /** @class */ (function () {
|
|
|
603
612
|
// Check if we're already trying to connect to this address
|
|
604
613
|
var connectionManager = this.client.getConnectionManager();
|
|
605
614
|
var establishedConnections = connectionManager.getEstablishedConnections();
|
|
606
|
-
var pendingConnections = Object.keys(connectionManager.getPendingConnections
|
|
615
|
+
var pendingConnections = Object.keys(connectionManager.getPendingConnections()).length;
|
|
607
616
|
if (pendingConnections > 0) {
|
|
608
617
|
this.logger.debug('ClusterService', "Already have pending connections, skipping reconnection to " + addressStr);
|
|
609
618
|
return;
|
|
@@ -91,6 +91,9 @@ var ProxyManager = /** @class */ (function () {
|
|
|
91
91
|
if (createAtServer) {
|
|
92
92
|
this.createProxy(newProxy).then(function () {
|
|
93
93
|
deferred.resolve(newProxy);
|
|
94
|
+
}).catch(function (error) {
|
|
95
|
+
_this.logger.error('ProxyManager', 'Failed to create proxy for ' + name + ': ' + error);
|
|
96
|
+
deferred.reject(error);
|
|
94
97
|
});
|
|
95
98
|
}
|
|
96
99
|
this.proxies[fullName] = deferred.promise;
|
|
@@ -130,20 +133,32 @@ var ProxyManager = /** @class */ (function () {
|
|
|
130
133
|
};
|
|
131
134
|
ProxyManager.prototype.findNextAddress = function () {
|
|
132
135
|
var members = this.client.getClusterService().getMembers();
|
|
136
|
+
// If no members available, return null but log the issue
|
|
137
|
+
if (!members || members.length === 0) {
|
|
138
|
+
this.logger.warn('ProxyManager', 'No cluster members available for proxy creation');
|
|
139
|
+
return null;
|
|
140
|
+
}
|
|
133
141
|
var liteMember = null;
|
|
142
|
+
var dataMember = null;
|
|
134
143
|
for (var _i = 0, members_1 = members; _i < members_1.length; _i++) {
|
|
135
144
|
var member = members_1[_i];
|
|
136
145
|
if (member != null && member.isLiteMember === false) {
|
|
137
|
-
|
|
146
|
+
dataMember = member;
|
|
147
|
+
break; // Prefer data members
|
|
138
148
|
}
|
|
139
149
|
else if (member != null && member.isLiteMember) {
|
|
140
150
|
liteMember = member;
|
|
141
151
|
}
|
|
142
152
|
}
|
|
143
|
-
if
|
|
153
|
+
// Return data member if available, otherwise lite member, otherwise null
|
|
154
|
+
if (dataMember != null) {
|
|
155
|
+
return dataMember.address;
|
|
156
|
+
}
|
|
157
|
+
else if (liteMember != null) {
|
|
144
158
|
return liteMember.address;
|
|
145
159
|
}
|
|
146
160
|
else {
|
|
161
|
+
this.logger.warn('ProxyManager', 'No valid members found for proxy creation');
|
|
147
162
|
return null;
|
|
148
163
|
}
|
|
149
164
|
};
|
|
@@ -151,6 +166,12 @@ var ProxyManager = /** @class */ (function () {
|
|
|
151
166
|
var _this = this;
|
|
152
167
|
if (Date.now() <= deadline) {
|
|
153
168
|
var address = this.findNextAddress();
|
|
169
|
+
if (!address) {
|
|
170
|
+
var error = new Error('No cluster members available for proxy creation: ' + proxyObject.getName());
|
|
171
|
+
this.logger.error('ProxyManager', error.message);
|
|
172
|
+
promise.reject(error);
|
|
173
|
+
return;
|
|
174
|
+
}
|
|
154
175
|
var request = ClientCreateProxyCodec_1.ClientCreateProxyCodec.encodeRequest(proxyObject.getName(), proxyObject.getServiceName(), address);
|
|
155
176
|
var invocation = new InvocationService_1.Invocation(this.client, request);
|
|
156
177
|
invocation.address = address;
|
|
@@ -160,10 +181,13 @@ var ProxyManager = /** @class */ (function () {
|
|
|
160
181
|
if (_this.isRetryable(error)) {
|
|
161
182
|
_this.logger.warn('ProxyManager', 'Create proxy request for ' + proxyObject.getName() +
|
|
162
183
|
' failed. Retrying in ' + _this.invocationRetryPauseMillis + 'ms. ' + error);
|
|
163
|
-
setTimeout(
|
|
184
|
+
setTimeout(function () {
|
|
185
|
+
_this.initializeProxy(proxyObject, promise, deadline);
|
|
186
|
+
}, _this.invocationRetryPauseMillis);
|
|
164
187
|
}
|
|
165
188
|
else {
|
|
166
|
-
_this.logger.
|
|
189
|
+
_this.logger.error('ProxyManager', 'Create proxy request for ' + proxyObject.getName() + ' failed ' + error);
|
|
190
|
+
promise.reject(error);
|
|
167
191
|
}
|
|
168
192
|
});
|
|
169
193
|
}
|
package/package.json
CHANGED