- Spegnimento
- 23 settembre 2026 alle ore 14:39 UTC
- Autore
- Kamo
- Impegno
- c4924af
Due correzioni relative a MemberRightsAppliedService, entrambi nello stesso file: E' una cosa da fare. incondizionatamente cancellato e reinserito ogni riga di diritto applicato di un membro, ogni volta Sono scappati. Il Servizio di Sicurezza degli Stati membriRightsBackfillService chiama il percorso a livello di org per ogni org su Ogni pod boot (un self-heal, per design - vedere il proprio javadoc), e il ricomputo è idempotent: un boot stabile-stato re-deriva il set identico. Misurato nella produzione pg stat statements: ~12.7M INSERTs contro un tavolo ~30K-row — circa 300 riscritture full-table, uno per boot, quasi tutti loro a scrivere esattamente quello che era già lì. Entrambi i metodi ora diffondono il set appena calcolato contro quello che member rights applied già detiene (una massa letto per un intero pezzo) e solo chiaro + riscrivere i membri i cui diritti in realtà differisce. Un no-op boot ora costa una lettura e zero scrive. 2. calcolareMemberRights (il nucleo del percorso di scrittura sopra e la sola lettura computeMemberRights SessionRefreshController sondaggi su ogni sessione rinfrescante) camminato membro.getRoles(), **************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************** membro.getRights() come collezioni pigre separate — più un ulteriore carico pigro per ruolo distinto, per i diritti di quel ruolo. Unbounded per membro. Sei nuovi campi di repository opzionali (MemberRoleRepository, DepartmentRoleRepository, DepartmentRightRepository, JobTitleRoleRepository, JobTitleRightRepository, MemberRightRepository — il primo e l'ultimo già esistente) sostituiscono quei carichi pigri con un numero fisso, piccolo di rinfuse query, ciascuno con diritti propri di un ruolo JOIN-FETCHed. Deliberatamente NON un @EntityGraph radicato a Membro/TeamMember: entrambi sono @Inheritance(JOINED), e un grafico di entità che fetches ulteriore associazioni fuori un'entità JOINED è la forma esatta che ha preso /leads giù in produzione su Ibernazione 6.2.13 (che respinge l'ingresso DA-clause per la tabella radice — vedi LeadAssigneeRef). Ogni nuovo repository è invece radicato all'entità CHILD (nessuna delle quali trasporta @Inheritance) e filtrato dal medico del genitore. Un campo EntityManager con @PersistenzaContext è stato provato prima e ritorto: è elaborato da Il post-processore JPA di primavera ogni volta che l'orma di primavera è sul sentiero di classe, quindi un nuovo manuale servizio in un contesto senza EntityManagerFactory bean (SignInReadRetry Primavera laminata a mano del test contesto, che esercita @RetryOnDbConflict attraverso un proxy AOP reale) fallito CREAZIONE BEAN D'accordo. I campi opzionali-repository degradano lo stesso modo applicatoModelResolver già fatto: @Autowired (richiesto = falso) li lascia null senza fagiolo di quel tipo, e i sei aiutanti cadono torna al percorso di carico pigro originale, invariato, in ogni test esistente. SessionRefreshController continua a calcolare dal vivo (non dall'istantanea persuasa) — quella di endpoint tutto il punto è "ciò che è vero in questo momento", che esplicitamente non è sempre quello che è stato perseverato.
