@@ -107,7 +107,24 @@ public function handleKnownGroups(array $groups): void {
107107 continue ;
108108 }
109109 foreach (array_diff ($ knownUsers , $ actualUsers ) as $ removedUser ) {
110- $ this ->groupMembershipMapper ->delete ($ groupMemberships [$ removedUser ]);
110+ try {
111+ $ this ->groupMembershipMapper ->delete ($ groupMemberships [$ removedUser ]);
112+ } catch (Exception $ e ) {
113+ if ($ e ->getReason () !== Exception::REASON_DATABASE_OBJECT_NOT_FOUND ) {
114+ /* If reason is not found something else removed the membership, that’s fine */
115+ $ this ->logger ->error (
116+ __CLASS__ . ' – group {group} membership failed to be removed (user {user}) ' ,
117+ [
118+ 'app ' => 'user_ldap ' ,
119+ 'user ' => $ removedUser ,
120+ 'group ' => $ group ,
121+ 'exception ' => $ e ,
122+ ]
123+ );
124+ }
125+ /* We failed to delete the groupmembership so we do not want to advertise it */
126+ continue ;
127+ }
111128 $ userObject = $ this ->userManager ->get ($ removedUser );
112129 if ($ userObject instanceof IUser) {
113130 $ this ->dispatcher ->dispatchTyped (new UserRemovedEvent ($ groupObject , $ userObject ));
@@ -121,7 +138,24 @@ public function handleKnownGroups(array $groups): void {
121138 );
122139 }
123140 foreach (array_diff ($ actualUsers , $ knownUsers ) as $ addedUser ) {
124- $ this ->groupMembershipMapper ->insert (GroupMembership::fromParams (['groupid ' => $ group ,'userid ' => $ addedUser ]));
141+ try {
142+ $ this ->groupMembershipMapper ->insert (GroupMembership::fromParams (['groupid ' => $ group ,'userid ' => $ addedUser ]));
143+ } catch (Exception $ e ) {
144+ if ($ e ->getReason () !== Exception::REASON_UNIQUE_CONSTRAINT_VIOLATION ) {
145+ /* If reason is unique constraint something else added the membership, that’s fine */
146+ $ this ->logger ->error (
147+ __CLASS__ . ' – group {group} membership failed to be added (user {user}) ' ,
148+ [
149+ 'app ' => 'user_ldap ' ,
150+ 'user ' => $ addedUser ,
151+ 'group ' => $ group ,
152+ 'exception ' => $ e ,
153+ ]
154+ );
155+ }
156+ /* We failed to insert the groupmembership so we do not want to advertise it */
157+ continue ;
158+ }
125159 $ userObject = $ this ->userManager ->get ($ addedUser );
126160 if ($ userObject instanceof IUser) {
127161 $ this ->dispatcher ->dispatchTyped (new UserAddedEvent ($ groupObject , $ userObject ));
@@ -151,7 +185,23 @@ public function handleCreatedGroups(array $createdGroups): void {
151185 $ users = $ this ->groupBackend ->usersInGroup ($ createdGroup );
152186 $ groupObject = $ this ->groupManager ->get ($ createdGroup );
153187 foreach ($ users as $ user ) {
154- $ this ->groupMembershipMapper ->insert (GroupMembership::fromParams (['groupid ' => $ createdGroup ,'userid ' => $ user ]));
188+ try {
189+ $ this ->groupMembershipMapper ->insert (GroupMembership::fromParams (['groupid ' => $ createdGroup ,'userid ' => $ user ]));
190+ } catch (Exception $ e ) {
191+ if ($ e ->getReason () !== Exception::REASON_UNIQUE_CONSTRAINT_VIOLATION ) {
192+ $ this ->logger ->error (
193+ __CLASS__ . ' – group {group} membership failed to be added (user {user}) ' ,
194+ [
195+ 'app ' => 'user_ldap ' ,
196+ 'user ' => $ user ,
197+ 'group ' => $ createdGroup ,
198+ 'exception ' => $ e ,
199+ ]
200+ );
201+ }
202+ /* We failed to insert the groupmembership so we do not want to advertise it */
203+ continue ;
204+ }
155205 if ($ groupObject instanceof IGroup) {
156206 $ userObject = $ this ->userManager ->get ($ user );
157207 if ($ userObject instanceof IUser) {
0 commit comments