KamoCRM

Member_rights_applied schreibt nur den Unterschied und liest Rollen in großen Mengen

Performancekamo-shared-library
Verschickt
23. September 2026 um 14:39 UTC
Autor
Kamo
Commit
c4924af

Zwei damit zusammenhängende Korrekturen an MemberRightsAppliedService, beide in der gleichen Datei: 1. ************ (via recalcChunk) und ************ Jede einzelne Reihe der angewandten Rechte eines Mitglieds muss bedingungslos gestrichen und wieder eingefügt werden Sie liefen. SecurityService's MemberRightsBackfillService ruft den org-weiten Pfad für JE-Org auf JEDE Pod-Boot (eine Selbstheilung, durch Design - siehe seinen eigenen javadoc), und die Recompute ist idempotent: ein stetiger Boot-Boot-Re-dert das identische Set wieder. Gemessen in der Produktion pg_stat_Aussagen: 12,7M INSERTs gegen eine Tabelle mit 30K-Reihen, ca. 300 Volltisch-Neufassungen, eine pro Boot, fast alle schreiben genau zurück, was schon da war. Beide Methoden unterscheiden nun die frisch-computed Set gegen das, was member_rights_applied bereits hält (eine Masse lesen für einen ganzen Brocken) und nur klar + klar + neu schreiben + neu schreiben die Mitglieder, deren Rechte tatsächlich unterschiedliche. Ein No-op-Boot kostet jetzt einen Lektüre und null schreibt. 2. rechnenMemberRechte (der Kern sowohl des Schreibpfades oben als auch des Nur-Lese-only computeMemberRights SessionRefreshController Umfragen zu jeder Sitzung refresh) ging member.getRoles(), ************ Job-Titelrollen()/getRights() und member.getRights() als separate faule Kollektionen - plus eine weitere faule Last pro unterschiedlicher Rolle, für die eigenen Rechte dieser Rolle. Ungebunden pro Mitglied. Sechs neue optionale Repository-Felder (MemberRoleRepository, DepartmentRoleRepository, DepartmentRightRepository, JobTitleRoleRepository, JobTitleRightRepository, MemberRightRepository Die erste und letzte bereits existierte) ersetzen diese faulen Lasten mit einer festen, kleinen Anzahl von Schüttgut Abfragen, jeder mit den eigenen Rechten JOIN-FETCHed. Bewusst NICHT ein @EntityGraph verwurzelt an Mitglied/Teammitglied: Beide sind @Inheritance(JOINED), und eine Entitätsgrafik, die weiter holt Verbände aus einem JOINED Einheit ist die genaue Form, die nahm / führt in der Produktion auf Hibernate 6.2.13 (fehlende FROM-Klausel-Eingabe für die Wurzeltabelle . siehe LeadAssigneeRef). Jede neue Repository wird stattdessen an der CHILD Entität verwurzelt (von denen keines trägt @Erbschaft) und gefiltert durch die ID des Elternteils. Ein EntityManager-Feld mit @PersistenceContext wurde zuerst ausprobiert und zurückgesetzt: es wird bearbeitet von Spring JPA-bewusste Postprozessor, wenn Spring-orm ist auf dem Klassenpfad, so ein manuell neu-neu'd Service in einem Kontext ohne EntityManagerFactory Bean (SignInReadRetryTest's handgerollter Frühling kontext, der @RetryOnDbConflict durch einen echten AOP-Proxy ausübt) gescheitert BEAN CREATION Vor sich. Die optionalen Repot-Felder degradieren die gleiche Weise angewendet ModellResolver bereits: @Autowired(erfordert = falsch) lässt sie null ohne Bohnen dieser Art, und die sechs Helfer fallen zurück zum ursprünglichen Faulen-Lay-Pfad, unverändert, in jedem bestehenden Test. SessionRefreshController hält Computing live (nicht von der persisted snapshot) - dieser Endpunkt Der ganze Punkt ist "was im Moment wahr ist", was explizit nicht immer das ist, was zuletzt beharrte.

Alle Änderungen anzeigen

Wie das, was Sie sehen Versand?

Beginnen Sie mit dem kostenlosen Plan und lesen Sie diese Seite in einem Monat erneut, um zu sehen, ob Sie die neuen Funktionen nutzen möchten.

Kostenlos für immer startenPreise anzeigen