Skip to content

Commit a608c83

Browse files
authored
Fix for statistics test failure (#438)
* Fix for statistics test failure StatisticsTest gets client statistics of the first client from cluster. The assumption that the server must have only 1 client should be true in isolation but when there are hanging clients from other tests, these may authenticate to the cluster as well. In that case, server may send the statistics of a wrong client which is null mostly. Adds logging to partition table request failure Fixes hanging clients in LoggingTest, FactoriesTest, SemaphoreProxyTest, CustomSerializerTest Various test refactors * Refactors StatisticsTest to use specific clientUuids StatisticsTest is enhanced to request for a specific client's statistcs
1 parent 93d8dfe commit a608c83

File tree

15 files changed

+101
-79
lines changed

15 files changed

+101
-79
lines changed

src/HazelcastClient.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -373,13 +373,13 @@ export default class HazelcastClient {
373373
* Shuts down this client instance.
374374
*/
375375
shutdown(): void {
376+
this.lifecycleService.emitLifecycleEvent(LifecycleEvent.shuttingDown);
376377
if (this.mapRepairingTask !== undefined) {
377378
this.mapRepairingTask.shutdown();
378379
}
379380
this.nearCacheManager.destroyAllNearCaches();
380381
this.statistics.stop();
381382
this.partitionService.shutdown();
382-
this.lifecycleService.emitLifecycleEvent(LifecycleEvent.shuttingDown);
383383
this.heartbeat.cancel();
384384
this.connectionManager.shutdown();
385385
this.listenerService.shutdown();

src/PartitionService.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -71,7 +71,8 @@ export class PartitionService {
7171
this.partitionCount = Object.keys(this.partitionMap).length;
7272
}).catch((e) => {
7373
if (this.client.getLifecycleService().isRunning()) {
74-
this.logger.warn('PartitionService', 'Error while fetching cluster partition table!', e);
74+
this.logger.warn('PartitionService', 'Error while fetching cluster partition table from'
75+
+ this.client.getClusterService().ownerUuid, e);
7576
}
7677
});
7778
}

src/invocation/ClusterService.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -102,11 +102,11 @@ export class ClusterService {
102102

103103
let providerAddresses: Set<string> = new Set();
104104
const promises: Array<Promise<void>> = [];
105-
this.client.getConnectionManager().addressProviders.forEach(function (addressProvider): void {
105+
this.client.getConnectionManager().addressProviders.forEach((addressProvider) => {
106106
promises.push(addressProvider.loadAddresses().then((res) => {
107107
providerAddresses = new Set([...Array.from(providerAddresses), ...res]);
108108
}).catch((err) => {
109-
this.logger.warning('Error from AddressProvider: ' + addressProvider, err);
109+
this.logger.warn('Error from AddressProvider: ' + addressProvider, err);
110110
}));
111111
});
112112
return Promise.all(promises).then(() => {

src/statistics/Statistics.ts

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -112,8 +112,9 @@ export class Statistics {
112112

113113
sendStats(newStats: string, ownerConnection: ClientConnection): void {
114114
const request = ClientStatisticsCodec.encodeRequest(newStats);
115-
116-
this.client.getInvocationService().invokeOnTarget(request, ownerConnection.getAddress()).catch((err) => {
115+
this.logger.trace('Statistics', 'Trying to send statistics to ' +
116+
this.client.getClusterService().ownerUuid + ' from ' + ownerConnection.getLocalAddress().toString());
117+
this.client.getInvocationService().invokeOnConnection(ownerConnection, request).catch((err) => {
117118
this.logger.trace('Statistics', 'Could not send stats ', err);
118119
});
119120
}

test/ClusterServiceTest.js

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -61,7 +61,7 @@ describe('ClusterService', function () {
6161
expect(client.clusterService.getSize()).to.be.eq(2);
6262
done();
6363
}
64-
}
64+
};
6565

6666
client.clusterService.addMembershipListener(membershipListener);
6767

@@ -78,7 +78,7 @@ describe('ClusterService', function () {
7878
expect(client.getClusterService().getSize()).to.be.eq(1);
7979
done();
8080
}
81-
}
81+
};
8282

8383
client.clusterService.addMembershipListener(membershipListener);
8484

@@ -101,7 +101,7 @@ describe('ClusterService', function () {
101101
expect(remainingMemberList[1].address.port).to.equal(member3.port);
102102
done();
103103
}
104-
}
104+
};
105105

106106
client.clusterService.addMembershipListener(membershipListener);
107107

test/LoggingTest.js

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -134,23 +134,26 @@ describe('Logging Test', function () {
134134

135135
it('default logging, default level', function () {
136136
var cfg = new Config.ClientConfig();
137-
return HazelcastClient.newHazelcastClient(cfg).then(function () {
137+
return HazelcastClient.newHazelcastClient(cfg).then(function (cl) {
138+
client = cl;
138139
return sinon.assert.calledWithMatch(console.log, '[DefaultLogger] %s at %s: %s', 'INFO');
139140
});
140141
});
141142

142143
it('default logging, error level', function () {
143144
var cfg = new Config.ClientConfig();
144145
cfg.properties['hazelcast.logging.level'] = LogLevel.ERROR;
145-
return HazelcastClient.newHazelcastClient(cfg).then(function () {
146+
return HazelcastClient.newHazelcastClient(cfg).then(function (cl) {
147+
client = cl;
146148
return sinon.assert.notCalled(console.log);
147149
});
148150
});
149151

150152
it('default logging, trace level', function () {
151153
var cfg = new Config.ClientConfig();
152154
cfg.properties['hazelcast.logging.level'] = LogLevel.TRACE;
153-
return HazelcastClient.newHazelcastClient(cfg).then(function () {
155+
return HazelcastClient.newHazelcastClient(cfg).then(function (cl) {
156+
client = cl;
154157
return sinon.assert.calledWithMatch(console.log, '[DefaultLogger] %s at %s: %s', 'INFO');
155158
return sinon.assert.calledWithMatch(console.log, '[DefaultLogger] %s at %s: %s', 'DEBUG');
156159
return sinon.assert.calledWithMatch(console.log, '[DefaultLogger] %s at %s: %s', 'TRACE');

test/LostConnectionTest.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -63,7 +63,7 @@ describe('Lost connection', function () {
6363
}
6464
});
6565
}
66-
}
66+
};
6767

6868
client.clusterService.addMembershipListener(membershipListener);
6969
Controller.startMember(cluster.id).then(function (m) {

test/MembershipListenerTest.js

Lines changed: 8 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -58,7 +58,7 @@ describe('MembershipListener', function () {
5858
memberAdded: function (membershipEvent) {
5959
listenerCalledResolver.resolve(membershipEvent);
6060
}
61-
}
61+
};
6262
client.clusterService.addMembershipListener(membershipListener);
6363

6464
Controller.startMember(cluster.id).then(function (res) {
@@ -89,13 +89,13 @@ describe('MembershipListener', function () {
8989
memberAdded: function (membershipEvent) {
9090
listenerCalledResolver.resolve(membershipEvent);
9191
}
92-
}
92+
};
9393

9494
var membershipListener2 = {
9595
memberAdded: function (membershipEvent) {
9696
listenedSecondListener = true;
9797
}
98-
}
98+
};
9999
client.clusterService.addMembershipListener(membershipListener);
100100
client.clusterService.addMembershipListener(membershipListener2);
101101

@@ -126,7 +126,7 @@ describe('MembershipListener', function () {
126126
memberAdded: function (membershipEvent) {
127127
counter++;
128128
}
129-
}
129+
};
130130
client.clusterService.addMembershipListener(membershipListener);
131131
client.clusterService.addMembershipListener(membershipListener);
132132

@@ -148,7 +148,7 @@ describe('MembershipListener', function () {
148148
memberRemoved: function (membershipEvent) {
149149
listenerCalledResolver.resolve(membershipEvent);
150150
}
151-
}
151+
};
152152

153153
client.clusterService.addMembershipListener(membershipListener);
154154

@@ -182,8 +182,7 @@ describe('MembershipListener', function () {
182182
}
183183
},
184184
};
185-
client.clusterService.addMembershipListener(membershipListener)
186-
185+
client.clusterService.addMembershipListener(membershipListener);
187186

188187
var script = 'function attrs() { ' +
189188
'return instance_0.getCluster().getLocalMember().setIntAttribute("test", 123); }; result=attrs();';
@@ -199,8 +198,8 @@ describe('MembershipListener', function () {
199198
done();
200199
}
201200
}
202-
}
203-
client.clusterService.addMembershipListener(membershipListener)
201+
};
202+
client.clusterService.addMembershipListener(membershipListener);
204203

205204
var addScript = 'function attrs() { ' +
206205
'return instance_0.getCluster().getLocalMember().setIntAttribute("test", 123); }; result=attrs();';

test/declarative_config/ConfigLocationTest.js

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -80,7 +80,6 @@ describe('ConfigLocationTest', function () {
8080
expect(RuntimeUtil.resolvePath('..')).to.equal(process.cwd());
8181
process.env[ENV_VARIABLE_NAME] = '/anAbsoluteBase/config.json';
8282
var root = path.parse(process.cwd()).root;
83-
console.log(root);
8483
expect(RuntimeUtil.resolvePath('.')).to.equal(path.join(root, 'anAbsoluteBase'));
8584
expect(RuntimeUtil.resolvePath('filename')).to.equal(path.join(root, 'anAbsoluteBase', 'filename'));
8685
expect(RuntimeUtil.resolvePath('..')).to.equal(root);

test/semaphore/SemaphoreProxyTest.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -53,6 +53,7 @@ describe("Semaphore Proxy", function () {
5353

5454
after(function () {
5555
client1.shutdown();
56+
client2.shutdown();
5657
return Controller.shutdownCluster(cluster.id);
5758
});
5859

0 commit comments

Comments
 (0)