Skip to content
This repository was archived by the owner on Oct 23, 2024. It is now read-only.

Commit 1246a33

Browse files
authored
Add configuration to enable/disable cascading feature and set cascading logs to debug (#1311)
1 parent 467901c commit 1246a33

File tree

8 files changed

+182
-127
lines changed

8 files changed

+182
-127
lines changed

doc/design/quic-cascading.md

Lines changed: 25 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -214,13 +214,37 @@ node .
214214

215215
This is just a sample to show how cascading clusters control work, please customize your own scheduling and secured deployment in real practice.
216216

217+
### ManagementAPI configuration
218+
219+
management_api module will report restful server info to cluster manager and then report to cloud control, so that cloud control could communicate with cluster management_api for restful API, please configure following items in cascading item in ```management_api/management_api.toml```:
220+
221+
````
222+
[cascading]
223+
enabled: set true to enable cascading feature, disable cascading by default
224+
servicename: service name used to register to cascading cloud for accessing to communicate with this cluster
225+
````
226+
217227
### ClusterManager configuration
218228

219-
The OWT cluster will report cluster info to cloud control service through cluster_manager module in OWT, you need to configure following items in cascading item in cluster_manager/cluster_manager.toml file before starting it:
229+
The OWT cluster will report cluster info to cloud control service through cluster_manager module in OWT, you need to configure following items in cascading item in ```cluster_manager/cluster_manager.toml``` file before starting it:
220230

231+
````
232+
[cascading]
233+
enabled: set true to enable cascading feature, disable cascading by default
221234
url: specify the cloud control url, so that cluster manager module can connect to the url and send cluster info
222235
region: specify the region this OWT cluster locate, this will be used by cloud control service to schedule incoming clients by region
223236
clusterID: specify a unique cluster ID for this cluster in the cloud.
237+
````
238+
239+
### Conference configuration
240+
241+
conference events will be sent to cascaded clusters through ```conference_agent``` and eventbridge, configure following item in cascading item in ```conference_agent/agent.toml``` to enable event cascading:
242+
243+
````
244+
[cascading]
245+
enabled: set true to enable cascading feature, disable cascading by default
246+
````
247+
224248

225249
### Media/event bridge
226250

source/agent/conference/agent.toml

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,3 +33,6 @@ dataBaseURL = "localhost/owtdb" #default: "localhost/owtdb"
3333
[internal]
3434
# tcp/sctp available, tcp is default
3535
protocol = "tcp"
36+
37+
[cascading]
38+
enabled = false # disable cascading feature by default

source/agent/conference/conference.js

Lines changed: 82 additions & 69 deletions
Large diffs are not rendered by default.

source/cluster_manager/clusterManager.js

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -35,8 +35,11 @@ var ClusterManager = function (clusterName, selfId, spec) {
3535

3636
function validateUrl(url) {
3737
try {
38-
new Url.URL(url);
39-
return true;
38+
if (spec.enableCascading) {
39+
new Url.URL(url);
40+
return true;
41+
}
42+
return false;
4043
} catch {
4144
return false;
4245
}

source/cluster_manager/cluster_manager.toml

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,8 @@ analytics = "least-used"
3535
eventbridge = "last-used"
3636
mediabridge = "last-used"
3737

38-
[cloud]
38+
[cascading]
39+
enabled = false #disable cascading feature by default
3940
url = "none" #default none:not connect to cascading cloud, specify cloud service url for the cluster to register to cloud
4041
region = "BJ"
4142
clusterID = "" #A unique cluster ID reporting to cascading cloud

source/cluster_manager/index.js

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -42,9 +42,10 @@ config.rabbit = config.rabbit || {};
4242
config.rabbit.host = config.rabbit.host || 'localhost';
4343
config.rabbit.port = config.rabbit.port || 5672;
4444

45-
config.cloud.url = config.cloud.url;
46-
config.cloud.region = config.cloud.region;
47-
config.cloud.clusterID = config.cloud.clusterID;
45+
config.cascading.enabled = config.cascading.enabled || false;
46+
config.cascading.url = config.cascading.url;
47+
config.cascading.region = config.cascading.region;
48+
config.cascading.clusterID = config.cascading.clusterID;
4849

4950
function startup () {
5051
var id = Math.floor(Math.random() * 1000000000);
@@ -54,7 +55,7 @@ function startup () {
5455
checkAliveCount: config.manager.check_alive_count,
5556
scheduleKeepTime: config.manager.schedule_reserve_time,
5657
strategy: config.strategy,
57-
url: config.cloud.url, region: config.cloud.region, clusterID: config.cloud.clusterID
58+
enableCascading: config.cascading.enabled, url: config.cascading.url, region: config.cascading.region, clusterID: config.cascading.clusterID
5859
};
5960

6061
if (config.manager.enable_grpc) {

source/management_api/api.js

Lines changed: 56 additions & 49 deletions
Original file line numberDiff line numberDiff line change
@@ -119,7 +119,11 @@ var serverConfig = global.config.server || {};
119119
var cluster = require("cluster");
120120
var serverPort = serverConfig.port || 3000;
121121
var numCPUs = serverConfig.numberOfProcess || 1;
122-
var servicename = serverConfig.servicename || 'sampleService';
122+
123+
124+
var cascadingConfig = global.config.cascading || {};
125+
var enableCascading = cascadingConfig.enabled || false;
126+
var servicename = cascadingConfig.servicename || 'sampleService';
123127

124128
var ip_address;
125129
(function getPublicIP() {
@@ -179,62 +183,65 @@ if (cluster.isMaster) {
179183
var dataAccess = require('./data_access');
180184
dataAccess.token.genKey();
181185

182-
var registerInfo = undefined;
183186

184-
amqper.connect(global.config.rabbit, function () {
185-
amqper.asRpcClient(function(rpcCli) {
186-
var keepTrying = true;
187-
var trySendInfo = function(attempts) {
188-
if (attempts <= 0) {
189-
log.info("Send register info to cluster manager timeout");
190-
return
191-
}
192-
log.info("Send restful info to cluster manager:", registerInfo);
193-
rpcCli.remoteCall(cluster_name, 'registerInfo', [registerInfo], { callback : function(result) {
194-
if (result === 'timeout') {
195-
if (keepTrying) {
196-
log.info('Faild to register restful server info, keep trying.');
197-
setTimeout(function() { trySendInfo(attempts - (result === 'timeout' ? 4 : 1)); }, 1000);
198-
}
199-
} else {
200-
log.info('Send register info to cluster manager succeed');
201-
keepTrying = false;
187+
if (enableCascading) {
188+
var registerInfo = undefined;
189+
190+
amqper.connect(global.config.rabbit, function () {
191+
amqper.asRpcClient(function(rpcCli) {
192+
var keepTrying = true;
193+
var trySendInfo = function(attempts) {
194+
if (attempts <= 0) {
195+
log.info("Send register info to cluster manager timeout");
196+
return
202197
}
203-
} }, 1000);
204-
}
198+
log.info("Send restful info to cluster manager:", registerInfo);
199+
rpcCli.remoteCall(cluster_name, 'registerInfo', [registerInfo], { callback : function(result) {
200+
if (result === 'timeout') {
201+
if (keepTrying) {
202+
log.info('Faild to register restful server info, keep trying.');
203+
setTimeout(function() { trySendInfo(attempts - (result === 'timeout' ? 4 : 1)); }, 1000);
204+
}
205+
} else {
206+
log.info('Send register info to cluster manager succeed');
207+
keepTrying = false;
208+
}
209+
} }, 1000);
210+
}
205211

206-
if (registerInfo != undefined) {
207-
trySendInfo(5);
208-
} else {
209-
setTimeout(function() { trySendInfo(5); }, 1000);
210-
}
212+
if (registerInfo != undefined) {
213+
trySendInfo(5);
214+
} else {
215+
setTimeout(function() { trySendInfo(5); }, 1000);
216+
}
217+
}, function(reason) {
218+
log.error('Initializing as rpc client failed, reason:', reason);
219+
process.exit();
220+
});
211221
}, function(reason) {
212-
log.error('Initializing as rpc client failed, reason:', reason);
222+
log.error('Connect to rabbitMQ server failed, reason:', reason);
213223
process.exit();
214-
});
215-
}, function(reason) {
216-
log.error('Connect to rabbitMQ server failed, reason:', reason);
217-
process.exit();
218-
});
224+
});
219225

220-
dataAccess.service.list(function (err, sers) {
221-
if (err) {
222-
log.warn('Failed to get service:', err.message);
223-
} else {
224-
var serviceToCloud = sers.filter((t) => {return t.name === servicename;});
225-
log.info('Representing service ', serviceToCloud);
226-
var key = serviceToCloud[0].key;
227-
if (serviceToCloud[0].encrypted === true) {
228-
key = cipher.decrypt(cipher.k, key);
229-
}
226+
dataAccess.service.list(function (err, sers) {
227+
if (err) {
228+
log.warn('Failed to get service:', err.message);
229+
} else {
230+
var serviceToCloud = sers.filter((t) => {return t.name === servicename;});
231+
log.info('Representing service ', serviceToCloud);
232+
var key = serviceToCloud[0].key;
233+
if (serviceToCloud[0].encrypted === true) {
234+
key = cipher.decrypt(cipher.k, key);
235+
}
230236

231-
registerInfo = {
232-
resturl: url,
233-
servicekey: key,
234-
serviceid: serviceToCloud[0]._id
237+
registerInfo = {
238+
resturl: url,
239+
servicekey: key,
240+
serviceid: serviceToCloud[0]._id
241+
}
235242
}
236-
}
237-
});
243+
});
244+
}
238245

239246
for (var i = 0; i < numCPUs; i++) {
240247
cluster.fork();

source/management_api/management_api.toml

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,6 @@ numberOfProcess = 4 #default: 1
77
enableWebTransport = false #default: false.
88
hostname = "" #default: ""
99
ip_address = "" #default: ""
10-
servicename = "sampleService" #service name used to register to cascading cloud for accessing to communicate with this cluster
1110
#enable_grpc = true
1211

1312
[cluster]
@@ -21,3 +20,7 @@ port = 5672 #default: 5672
2120

2221
[mongo]
2322
dataBaseURL = "localhost/owtdb" #default: "localhost/owtdb"
23+
24+
[cascading]
25+
enabled = false # disable cascading feature by default
26+
servicename = "sampleService" #service name used to register to cascading cloud for accessing to communicate with this cluster

0 commit comments

Comments
 (0)