This topic is discussed in the "Grouper Maintenance" training video.
As of Grouper v2.4, updates were made to allow deleting subjects after being unresolvable for X days.
As of Grouper v2.5, USDU has been changed to perform other functions as well. See Grouper USDU v2.5+.
The Unresolvable Subject Deletion Utility (USDU) finds and optionally deletes memberships for subjects which can not be found by their source.
An unresolvable subject is a subject that can not be found by its source. A subject may be unresolvable because of a temporary or permanent source failure, or because it was removed from its source before memberships or privileges were deleted or revoked.
This utility attempts to lookup every member's subject. If a subject can not be found, it's immediate memberships are printed and optionally deleted.
A future version may extend the Source class to provide more efficient lookups of subjects.
$GROUPER_HOME/bin/gsh.sh -usdu <command line arguments>
Without any arguments, USDU prints its usage
usage: USDU -all | -source <arg> | -uuid <arg> [-delete] [-start <arg>] -all find unresolvable subjects from all sources -delete delete memberships and privileges -source <arg> find unresolvable subjects from source -start <arg> start session as this subject, default GrouperSystem -uuid <arg> find unresolvable subject with member uuid Unresolvable subjects are printed to stdout. If an unresolvable subject is not a member of any groups: member_uuid='<uuid>' subject='<id>' no_memberships For every group or stem and list that an unresolvable subject is a member of: member_uuid='<uuid>' subject='<id>' group|stem='<name>' list='<name>' [delete]
For every unresolvable subject, usdu prints one line for every immediate membership. If an unresolvable subject is not a member of any groups and has no privileges, usdu prints no_memberships.
Find unresolvable subjects from all sources
$GROUPER_HOME/bin/gsh.sh -usdu -all member_uuid='e58697e4-...' subject='id1'/'source'/'person' group='stem:group1' list='members' member_uuid='e58697e4-...' subject='id2'/'source'/'person' group='stem:group2' list='members' ...
Find unresolvable subjects from a specified source
$GROUPER_HOME/bin/gsh.sh -usdu -source CustomSource
Find unresolvable subject via member uuid
$GROUPER_HOME/bin/gsh.sh -usdu -uuid e58697e4-11a5-4082-b318-cb1e79191923
Delete unresolvable subject from all groups
$GROUPER_HOME/bin/gsh.sh -usdu -uuid e58697e4-... -delete member_uuid='e58697e4-...' subject='id1'/'source'/'person' group='stem:group1' list='members' delete
This utility finds and deletes memberships and privileges. It is possible for an unresolvable subject to be a creator or modifier of a group, in that case, calling Group.getCreateSubject() or Group.getModifySubject() will result in a SubjectNotFoundException.
Unresolvable subjects are not deleted from the grouper_members table. If an unresolvable subject becomes resolvable again, it will retain its member uuid.