Skip to content

Commit d378ada

Browse files
kkopanidisRenc17
andcommitted
refactor: introduce grpc client params to enable LB, fix state storing inconsistencies. (#1157)
* fix(authentication, authorization): teamMembers count, remove default pagination from rpc routes (#1161) * fix(authentication): count members users instead of relations * fix(authorization): remove rpc default limit * fix(admin,core,router): state publishing inconsistency * feat(grpc-sdk,hermes): round robin lb for grpc connections --------- Co-authored-by: Rena Tsagka <[email protected]>
1 parent d5d7199 commit d378ada

File tree

5 files changed

+23
-9
lines changed

5 files changed

+23
-9
lines changed

libraries/grpc-sdk/src/classes/ConduitModule.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -73,7 +73,9 @@ export class ConduitModule<T extends CompatServiceDefinition> {
7373
this.channel = createChannel(this._serviceUrl, undefined, {
7474
'grpc.max_receive_message_length': 1024 * 1024 * 100,
7575
'grpc.max_send_message_length': 1024 * 1024 * 100,
76+
'grpc.service_config': '{"loadBalancingConfig":[{"round_robin":{}}]}',
7677
});
78+
7779
let clientFactory = createClientFactory()
7880
.use(
7981
this._grpcToken

libraries/hermes/src/utils/GrpcConverter.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -67,6 +67,7 @@ export function grpcToConduitRoute(
6767
{
6868
'grpc.max_receive_message_length': 1024 * 1024 * 100,
6969
'grpc.max_send_message_length': 1024 * 1024 * 100,
70+
'grpc.service_config': '{"loadBalancingConfig":[{"round_robin":{}}]}',
7071
},
7172
);
7273

modules/router/src/Router.ts

Lines changed: 16 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,7 @@ import * as adminRoutes from './admin/routes/index.js';
4444
import metricsSchema from './metrics/index.js';
4545
import { ConfigController, ManagedModule } from '@conduitplatform/module-tools';
4646
import { fileURLToPath } from 'node:url';
47+
4748
const __filename = fileURLToPath(import.meta.url);
4849
const __dirname = path.dirname(__filename);
4950

@@ -161,9 +162,9 @@ export default class ConduitDefaultRouter extends ManagedModule<Config> {
161162
const messageParsed = JSON.parse(message);
162163
try {
163164
this.internalRegisterRoute(
164-
messageParsed.protofile,
165165
messageParsed.routes,
166166
messageParsed.url,
167+
messageParsed.moduleName,
167168
);
168169
} catch (err) {
169170
ConduitGrpcSdk.Logger.error(err as Error);
@@ -172,7 +173,11 @@ export default class ConduitDefaultRouter extends ManagedModule<Config> {
172173
this.scheduleMiddlewareApply();
173174
}
174175

175-
updateState(routes: RegisterConduitRouteRequest_PathDefinition[], url: string) {
176+
updateState(
177+
routes: RegisterConduitRouteRequest_PathDefinition[],
178+
url: string,
179+
moduleName: string,
180+
) {
176181
this.grpcSdk
177182
.state!.modifyState(async (existingState: Indexable) => {
178183
const state = existingState ?? {};
@@ -189,12 +194,13 @@ export default class ConduitDefaultRouter extends ManagedModule<Config> {
189194
state.routes.push({
190195
routes,
191196
url,
197+
moduleName,
192198
});
193199
}
194200
return state;
195201
})
196202
.then(() => {
197-
this.publishRouteData(routes, url);
203+
this.publishRouteData(routes, url, moduleName);
198204
ConduitGrpcSdk.Logger.log('Updated routes state');
199205
})
200206
.catch(e => {
@@ -203,12 +209,17 @@ export default class ConduitDefaultRouter extends ManagedModule<Config> {
203209
});
204210
}
205211

206-
publishRouteData(routes: RegisterConduitRouteRequest_PathDefinition[], url: string) {
212+
publishRouteData(
213+
routes: RegisterConduitRouteRequest_PathDefinition[],
214+
url: string,
215+
moduleName: string,
216+
) {
207217
this.grpcSdk.bus!.publish(
208218
'router',
209219
JSON.stringify({
210220
routes,
211221
url,
222+
moduleName,
212223
}),
213224
);
214225
}
@@ -253,7 +264,7 @@ export default class ConduitDefaultRouter extends ManagedModule<Config> {
253264
moduleName as string,
254265
);
255266

256-
this.updateState(call.request.routes, call.request.routerUrl);
267+
this.updateState(call.request.routes, call.request.routerUrl, moduleName as string);
257268
this.scheduleMiddlewareApply();
258269
} catch (err) {
259270
ConduitGrpcSdk.Logger.error(err as Error);

packages/admin/src/index.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -383,7 +383,7 @@ export default class AdminModule extends IConduitAdmin {
383383
}
384384
});
385385
}
386-
return this.internalRegisterRoute(r.protofile, r.routes, r.url);
386+
return this.internalRegisterRoute(r.routes, r.url);
387387
} catch (err) {
388388
ConduitGrpcSdk.Logger.error(err as Error);
389389
}
@@ -418,9 +418,9 @@ export default class AdminModule extends IConduitAdmin {
418418
const messageParsed = JSON.parse(message);
419419
try {
420420
this.internalRegisterRoute(
421-
messageParsed.protofile,
422421
messageParsed.routes,
423422
messageParsed.url,
423+
messageParsed.moduleName,
424424
);
425425
} catch (err) {
426426
ConduitGrpcSdk.Logger.error(err as Error);

packages/core/src/config-manager/service-discovery/index.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -77,7 +77,7 @@ export class ServiceDiscovery {
7777
});
7878
}
7979
}
80-
this.grpcSdk.bus!.subscribe('config', (message: string) => {
80+
this.grpcSdk.bus!.subscribe('service-discover', (message: string) => {
8181
const parsedMessage = JSON.parse(message);
8282
if (parsedMessage.type === 'module-health') {
8383
this._serviceMonitor.updateModuleHealth(
@@ -233,7 +233,7 @@ export class ServiceDiscovery {
233233
status?: HealthCheckStatus,
234234
) {
235235
this.grpcSdk.bus!.publish(
236-
'config',
236+
'service-discover',
237237
JSON.stringify({
238238
type,
239239
name,

0 commit comments

Comments
 (0)