KamoCRM

Member rights applied n'écrit que la différence et lit les rôles en vrac

Performancekamo-shared-library
Expédié
23 septembre 2026 à 14:39 UTC
Auteur
Kamo
Commit
c4924af

Deux corrections liées à MemberRightsAppliedService, toutes deux dans le même fichier: 1. **************** (via RecalcChunk) et **************** supprimé et réinséré sans condition toutes les lignes des droits appliqués d'un membre, à chaque fois Ils ont couru. SecurityService's MemberRightsBackfillService appelle le chemin général pour CHAQUE org sur CHAQUE pod boot (un auto-guérison, par la conception — voir son propre javadoc), et le recalcul est idémpotent: un démarrage à l'état stable redessine le jeu identique. Mesure dans la production pg stat statements: ~12,7M INSERTS contre une table ~30K-row — environ 300 réécritures pleine table, une par boot, presque Ils ont tous écrit exactement ce qui était déjà là. Les deux méthodes diffèrent désormais le jeu nouvellement calculé par rapport à ce que member rights applied détient déjà (un en vrac lu pour un morceau entier) et seulement clair + réécrire les membres dont les droits différent. Un démarrage sans op coûte maintenant une lecture et zéro écrit. 2. calculeMemberRights (le noyau du chemin d'écriture au-dessus et en lecture seule calculMemberRights SessionRefreshController sondages sur chaque session rafraîchissement) marche member.getRoles(), ***************** job-title role()/getRights() et member.getRights() en tant que collections paresseuses distinctes — plus une charge paresseuse supplémentaire par rôle distinct, pour les droits de ce rôle. Non consolidé par membre. Six nouveaux champs de dépôt optionnels (MemberRoleRepository, DepartmentRoleRepository, DépartementRightRepositoire, JobTitleRoleRepositoire, JobTitleRightRepositoire, MemberRightRepositoire — la première et la dernière existent déjà) remplacer ces charges par un petit nombre fixe de vracs questions, chacune avec ses propres droits JOIN-FETCHed. Délibérément PAS un @EntityGraph enraciné à Membre/TeamMember: les deux sont @Héritage(JOINED), et un graphique d'entité qui récupère plus loin associations hors d'une entité JOINED est la forme exacte qui a pris /leads en production sur Hibernate 6.2.13 (à l'exception de l'entrée FROM-clause pour la table racine — voir LeadAssigneeRef). Chaque nouvelle le dépôt est à la place enraciné dans l'entité CHILD (dont aucune ne porte @Héritage) et filtré par l'identité du parent. Un champ EntitéManager avec @PersistanceContext a d'abord été essayé et retourné : il est traité par Le JPA de Spring-aware post-processeur quand le ressort-orm est sur le chemin de classe, donc un nouveau manuel'd service dans un contexte sans EntitéManagerFactory bean (SignInReadRetry Ressort laminé à la main d'essai contexte, qui exercices @RetryOnDbConflict à travers un vrai proxy AOP) a échoué BEAN CREATION Tout à fait. Les champs optionnels-dépôts dégradent la même façon que celle déjà appliquéeModelResolver : @Autowired(required = false) les laisse nuls sans haricot de ce type, et les six aides tombent retour à la trajectoire originale paresseuse, inchangée, dans chaque test existant. SessionRefreshController maintient l'informatique en direct (pas à partir de l'instantané persistant) tout le point est "ce qui est vrai en ce moment", ce qui n'est pas explicitement ce qui a toujours persisté.

Tous les changements

Comme ce que vous voyez l'expédition?

Commencez avec le plan gratuit et lisez à nouveau cette page dans un mois, puis passez à l’abonnement payant pour bénéficier de toutes les fonctionnalités.

Commencez gratuitement pour toujoursVoir la tarification