Wichtig
Detail
Wichtig
Detail
Detail
#26700
Nicht existierende Gruppen im Security Storage lassen Commits fehlschlagen
In EPP ist es vorgekommen, dass im SecurityStorage auf Gruppen verwiesen wird, die es nie gegeben hat. (Für diese IDs hat es in der Tabelle der Gruppen nie Zeilen gegeben.) Wie es dazu kam, wissen wir nicht und können es auch nicht mehr rausfinden. Das hat aber dazu geführt, dass der Commit eines Imports fehlgeschlagen ist, was direkt in einem Anruf vom Kunden gemündet ist. Die einzige Lösung in dem Fall ist, den SecurityStorage neubauen zu lassen.
Verbesserung
Es ist ausreichend, wenn in dem Fall ein Error geloggt wird. Den gesamten Commit fehlschlagen zu lassen, ist unnötig. Das führt nur zu unnötig panischen Mails und Anrufen des Kunden. Außerdem kann dadurch auch nicht viel kaputt gehen: Gruppen die es nicht gibt, können weder zu viele noch zu wenige Rechte haben.
Stacktrace
Expected 'com.top_logic.tool.boundsec.wrap.Group', found 'null' java.lang.ClassCastException: Expected 'com.top_logic.tool.boundsec.wrap.Group', found 'null' at com.top_logic.basic.CollectionUtil.dynamicCast(CollectionUtil.java:543) at com.top_logic.util.db.DBUtil$ResultAsMapFromStringToWrapperList.resolve(DBUtil.java:463) at com.top_logic.util.db.DBUtil$ResultAsMapFromStringToWrapperList.extractResult(DBUtil.java:451) at com.top_logic.util.db.DBUtil$ResultAsMapFromStringToWrapperList.extractResult(DBUtil.java:417) at com.top_logic.util.db.DBUtil.executeQuery(DBUtil.java:625) at com.top_logic.knowledge.security.SecurityStorage$SecurityStorageExecutor.getGroupsByObject(SecurityStorage.java:1608) at com.top_logic.element.boundsec.ElementSecurityStorage.internalUpdateSecurity(ElementSecurityStorage.java:126) at com.top_logic.knowledge.security.SecurityStorage.updateSecurity(SecurityStorage.java:1123) at com.top_logic.element.boundsec.manager.ElementSecurityUpdateManager.handleSecurityUpdate(ElementSecurityUpdateManager.java:200) at com.top_logic.element.boundsec.manager.StorageAccessManager.doHandleSecurityUpdate(StorageAccessManager.java:424) at com.top_logic.element.boundsec.manager.StorageAccessManager.handleSecurityUpdate(StorageAccessManager.java:417) at com.top_logic.knowledge.service.db2.DefaultDBContext.handleSecurityUdate(DefaultDBContext.java:1176) at com.top_logic.knowledge.service.db2.DefaultDBContext.commitTransaction(DefaultDBContext.java:757) at com.top_logic.knowledge.service.db2.TransactionImpl.internalCommit(TransactionImpl.java:163) at com.top_logic.knowledge.service.AbstractTransaction.commit(AbstractTransaction.java:71)
Test
Kein Test. Der Aufwand diese Situation zu erzeugen ist zu hoch im Verhältnis zu den winzigen Änderungen.