You are viewing an old version of this page. View the current version.

Compare with Current View Page History

« Previous Version 5 Next »

Bad Membership Finder Utility

This document is released alongside Grouper v1.5.0.

The Bad Membership Finder Utility goes through all of your composite groups and verifies that all composite memberships in the grouper_memberships table have been correctly computed from immediate memberships.  In prior versions of Grouper, this utility also checked for bad effective memberships, but since effective memberships are no longer stored in grouper_memberships but rather formed by joining with GroupSets, this utility no longer checks for effective memberships.  Future versions of this utility may check for incorrectly computed GroupSets.

This utility is read-only; it does not make any membership changes in your database.

Usage

As of Grouper 1.5.0, this utility runs with GSH.

$GROUPER_HOME/bin/gsh.sh -findBadMemberships <command line arguments>
usage: FindBadMemberships -all
 -all           Find bad memberships.

This script will find membership records in the database which are invalid and print them on the screen.  It will not make any modifications to the Grouper database.
If bad memberships are found, this script will create a GSH script that will delete and re-add memberships.

To fix your memberships, complete these steps in the order listed:

1.  Review the GSH script before applying any changes to your database.
2.  Run the GSH script.
3.  Re-run the bad membership finder utility to verify that bad memberships have been fixed.


For every bad membership, the utility will print one line.

You will see a message like the following for bad memberships with a group:

FOUND BAD MEMBERSHIP: Bad membership in group with uuid=c59c0b99-a735-4798-841a-a497d31afd0b and name=i2:test.

Resolving bad memberships

If bad memberships are found in your Grouper database, a GSH script called findbadmemberships.gsh will be created to help you resolve the issues.  For each composite group with a bad composite membership, the following will be added to the GSH script.

  1. delComposite() to delete the composite memberships
  2. addComposite() to re-create the composite.

To fix your bad membership, do the following:

  1. Review the GSH script before applying any changes to your database.
  2. Run the GSH script.
  3. Re-run the bad membership finder utility to verify that bad memberships have been fixed

Query for bad composites

(assumes Grouper 2.0 grouper_memberships_lw_v):

Check for bad complements (tested in oracle):

SELECT DISTINCT gcv.owner_group_name, gmlv1.subject_source, gmlv1.subject_id
           FROM grouper_memberships_lw_v gmlv1, grouper_composites_v gcv
          WHERE gcv.composite_type = 'complement'
            AND gmlv1.group_name = gcv.left_factor_group_name
            AND gmlv1.list_name = 'members'
            AND gmlv1.subject_source <> 'g:gsa'
            AND gmlv1.member_id NOT IN (
                   SELECT gmlv2.member_id
                     FROM grouper_memberships_lw_v gmlv2
                    WHERE gmlv2.group_name = gcv.right_factor_group_name
                      AND gmlv2.list_name = 'members'
                      AND gmlv2.subject_source <> 'g:gsa')
            AND gmlv1.member_id NOT IN (
                   SELECT gmlv2.member_id
                     FROM grouper_memberships_lw_v gmlv2
                    WHERE gmlv2.group_name = gcv.owner_group_name
                      AND gmlv2.list_name = 'members'
                      AND gmlv2.subject_source <> 'g:gsa');

Check for bad unions

 SELECT DISTINCT gcv.owner_group_name, gmlv1.subject_source, gmlv1.subject_id
           FROM grouper_memberships_lw_v gmlv1, grouper_composites_v gcv
          WHERE gcv.composite_type = 'union'
            AND gmlv1.group_name = gcv.owner_group_name
            AND gmlv1.list_name = 'members'
            AND gmlv1.subject_source <> 'g:gsa'
            AND gmlv1.member_id NOT IN (
                   SELECT gmlv2.member_id
                     FROM grouper_memberships_lw_v gmlv2
                    WHERE gmlv2.group_name = gcv.left_factor_group_name
                      AND gmlv2.list_name = 'members'
                      AND gmlv2.subject_source <> 'g:gsa')
            AND gmlv1.member_id NOT IN (
                   SELECT gmlv2.member_id
                     FROM grouper_memberships_lw_v gmlv2
                    WHERE gmlv2.group_name = gcv.right_factor_group_name
                      AND gmlv2.list_name = 'members'
                      AND gmlv2.subject_source <> 'g:gsa');

Check for bad intersections

SELECT DISTINCT gcv.owner_group_name, gmlv1.subject_source, gmlv1.subject_id
           FROM grouper_memberships_lw_v gmlv1, grouper_composites_v gcv
          WHERE gcv.composite_type = 'intersection'
            AND gmlv1.group_name = gcv.owner_group_name
            AND gmlv1.list_name = 'members'
            AND gmlv1.subject_source <> 'g:gsa'
            AND (   gmlv1.member_id NOT IN (
                       SELECT gmlv2.member_id
                         FROM grouper_memberships_lw_v gmlv2
                        WHERE gmlv2.group_name = gcv.left_factor_group_name
                          AND gmlv2.list_name = 'members'
                          AND gmlv2.subject_source <> 'g:gsa')
                 OR gmlv1.member_id NOT IN (
                       SELECT gmlv2.member_id
                         FROM grouper_memberships_lw_v gmlv2
                        WHERE gmlv2.group_name = gcv.right_factor_group_name
                          AND gmlv2.list_name = 'members'
                          AND gmlv2.subject_source <> 'g:gsa')
                );

sdf


     (question) Questions or comments? (info) Contact us.

Unable to render {include} The included page could not be found.
  • No labels