Repository navigation
Replies: 3 comments
|
La PR #2448 (correctif de #2445, autosync: true,
clusterId: true,
stageId: true,
+ stage: {
+ select: {
+ name: true,
+ },
+ },Le coût est donc payé par les 8 listeners et par toutes les requêtes projet, pour le besoin d'un seul plugin. Chaque nouveau besoin d'un plugin élargira le même select partagé. Une fois les événements réduits à un identifiant, chaque module charge le projet avec le select dont il a besoin, et ce type de correctif reste local au plugin concerné. |
|
cc @cloud-pi-native/socle |
|
Oui ça me paraît pertinent d'alléger le contrat entre les briques et de ne faire transiter qu'un ID. Ça peut augmenter les requêtes sous-jacentes, mais je trouve ça bien mieux que d'avoir du state qui se balade…et qui pourrait être périmé ou incomplet ! |
Uh oh!
There was an error while loading. Please reload this page.
Uh oh!
There was an error while loading. Please reload this page.
Contexte
AppEventsService.emitProjectEventaccepte aujourd'huistring | ProjectWithDetails(apps/server-nestjs/src/modules/events/app-events.service.ts:72) : le service charge le projet puis émet l'objet complet. Tous les listeners@OnEvent('project.upsert' | 'project.delete')reçoivent donc un instantané partagé qu'ils n'ont pas sélectionné eux-mêmes.Conséquences :
projectSelectest mutualisé : un plugin ne peut pas restreindre ou étendre les champs dont il a besoin.data.args) embarque tout l'objet projet.Le wrapper
@OnEventprendprojectId: string, charge le projet. Les méthodes privéessyncProject/cleanupProjectgardent leur signatureProjectWithDetails:Modules concernés :
argocd,gitlab,keycloak,nexus,observability,registry,sonarqube,vault.Points à arbitrer
data.argsdevient un UUID au lieu de l'objet projet (peut etre chiant a debug).Références
apps/server-nestjs/src/modules/events/app-events.service.tsapps/server-nestjs/src/modules/plugin/plugin.utils.ts(capturePluginResult)apps/server-nestjs/src/modules/registry/registry-datastore.service.tsAll reactions