Skip to content

Commit 5255c93

Browse files
committed
Merge branch 'improvement/ZENKO-760-no-cluster' into q/8.0
2 parents 0c3763d + 4c138ef commit 5255c93

4 files changed

Lines changed: 48 additions & 31 deletions

File tree

lib/metadata/wrapper.js

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,4 @@ if (clientName === 'mem') {
4040

4141
const metadata = new MetadataWrapper(config.backends.metadata, params,
4242
bucketclient, logger);
43-
// call setup
44-
metadata.setup(() => {});
45-
4643
module.exports = metadata;

lib/server.js

Lines changed: 40 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
const http = require('http');
22
const https = require('https');
33
const cluster = require('cluster');
4+
const { series } = require('async');
45
const arsenal = require('arsenal');
56
const { RedisClient, StatsClient } = require('arsenal').metrics;
67
const monitoringClient = require('./utilities/monitoringHandler');
@@ -12,6 +13,7 @@ const _config = require('./Config').config;
1213
const { blacklistedPrefixes } = require('../constants');
1314
const api = require('./api/api');
1415
const data = require('./data/wrapper');
16+
const metadata = require('./metadata/wrapper');
1517
const { initManagement } = require('./management');
1618

1719
const routes = arsenal.s3routes.routes;
@@ -48,6 +50,7 @@ class S3Server {
4850
*/
4951
constructor(worker) {
5052
this.worker = worker;
53+
this.cluster = true;
5154
http.globalAgent.keepAlive = true;
5255

5356
process.on('SIGINT', this.cleanUp.bind(this));
@@ -67,6 +70,7 @@ class S3Server {
6770
});
6871
this.caughtExceptionShutdown();
6972
});
73+
this.started = false;
7074
}
7175

7276
routeRequest(req, res) {
@@ -165,47 +169,62 @@ class S3Server {
165169
}
166170

167171
caughtExceptionShutdown() {
172+
if (!this.cluster) {
173+
process.exit(1);
174+
}
168175
logger.error('shutdown of worker due to exception', {
169176
workerId: this.worker ? this.worker.id : undefined,
170177
workerPid: this.worker ? this.worker.process.pid : undefined,
171178
});
172179
// Will close all servers, cause disconnect event on master and kill
173180
// worker process with 'SIGTERM'.
174-
this.worker.kill();
181+
if (this.worker) {
182+
this.worker.kill();
183+
}
175184
}
176185

177186
initiateStartup(log) {
178-
clientCheck(true, log, (err, results) => {
187+
series([
188+
next => metadata.setup(next),
189+
next => clientCheck(true, log, next),
190+
], (err, results) => {
179191
if (err) {
180192
log.info('initial health check failed, delaying startup', {
181193
error: err,
182194
healthStatus: results,
183195
});
184196
setTimeout(() => this.initiateStartup(log), 2000);
185-
} else {
186-
log.debug('initial health check succeeded');
187-
if (_config.listenOn.length > 0) {
188-
_config.listenOn.forEach(item => {
189-
this.startup(item.port, item.ip);
190-
});
191-
} else {
192-
this.startup(_config.port);
193-
}
197+
return;
198+
}
199+
log.debug('initial health check succeeded');
200+
if (_config.listenOn.length > 0) {
201+
_config.listenOn.forEach(item => {
202+
this.startup(item.port, item.ip);
203+
});
204+
return;
205+
}
206+
if (!this.started) {
207+
this.startup(_config.port);
208+
this.started = true;
194209
}
195210
});
196211
}
197212
}
198213

199214
function main() {
200-
let clusters = _config.clusters || 1;
215+
// TODO: change config to use workers prop. name for clarity
216+
let workers = _config.clusters || 1;
201217
if (process.env.S3BACKEND === 'mem') {
202-
clusters = 1;
218+
workers = 1;
203219
}
204-
if (cluster.isMaster) {
205-
// Make sure all workers use the same report token
220+
this.cluster = workers > 1;
221+
if (!this.cluster) {
206222
process.env.REPORT_TOKEN = _config.reportToken;
207-
208-
for (let n = 0; n < clusters; n++) {
223+
const server = new S3Server();
224+
server.initiateStartup(logger.newRequestLogger());
225+
}
226+
if (this.cluster && cluster.isMaster) {
227+
for (let n = 0; n < workers; n++) {
209228
const worker = cluster.fork();
210229
logger.info('new worker forked', {
211230
workerId: worker.id,
@@ -214,8 +233,8 @@ function main() {
214233
}
215234
setInterval(() => {
216235
const len = Object.keys(cluster.workers).length;
217-
if (len < clusters) {
218-
for (let i = len; i < clusters; i++) {
236+
if (len < workers) {
237+
for (let i = len; i < workers; i++) {
219238
const newWorker = cluster.fork();
220239
logger.info('new worker forked', {
221240
workerId: newWorker.id,
@@ -245,7 +264,8 @@ function main() {
245264
workerPid: worker.process.pid,
246265
});
247266
});
248-
} else {
267+
}
268+
if (this.cluster && cluster.isWorker) {
249269
const server = new S3Server(cluster.worker);
250270
server.initiateStartup(logger.newRequestLogger());
251271
}

package-lock.json

Lines changed: 7 additions & 7 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@
1919
},
2020
"homepage": "https://github.com/scality/S3#readme",
2121
"dependencies": {
22-
"arsenal": "github:scality/Arsenal#241338b",
22+
"arsenal": "github:scality/Arsenal#dfcdea4",
2323
"async": "~2.5.0",
2424
"aws-sdk": "2.28.0",
2525
"azure-storage": "^2.1.0",

0 commit comments

Comments
 (0)