Yair Zaslavsky has posted comments on this change. Change subject: aaa: Fix sync ......................................................................
Patch Set 12: (13 comments) http://gerrit.ovirt.org/#/c/28561/12/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/DbUserCacheManager.java File backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/DbUserCacheManager.java: Line 49: // 2. Resolve the groups of users (get 1st level groups) Line 50: // 3. Fetch groups from DB Line 51: // 4. Resolve the fetched groups (for each group that was not already resolved) Line 52: // 5. Resolve recursively all groups Line 53: // 6. Compare the user from db and the fetched user from the directory + store in DB if there is a change > comment should go with code? Done Line 54: @OnTimerMethodAnnotation("refreshAllUsers") Line 55: public void refreshAllUsers() { Line 56: sync.refreshAllUsers(DbFacade.getInstance().getDbUserDao().getAll()); Line 57: } http://gerrit.ovirt.org/#/c/28561/12/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/SyncAAAEntries.java File backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/SyncAAAEntries.java: Line 29: public class SyncAAAEntries { Line 30: Line 31: private static final Log log = LogFactory.getLog(SyncAAAEntries.class); Line 32: Line 33: public void refreshAllUsers(List<DbUser> dbUsers) { > s/All//? you mean at usersPerAuthz? like allUsersPerAuthz? Line 34: final Map<String, List<DbUser>> usersPerAuthz = new HashMap<>(); Line 35: final Map<String, List<DbGroup>> groupsPerAuthz = new HashMap<>(); Line 36: Line 37: for (DbUser dbUser : dbUsers) { Line 33: public void refreshAllUsers(List<DbUser> dbUsers) { Line 34: final Map<String, List<DbUser>> usersPerAuthz = new HashMap<>(); Line 35: final Map<String, List<DbGroup>> groupsPerAuthz = new HashMap<>(); Line 36: Line 37: for (DbUser dbUser : dbUsers) { > why not do the isActive magic here? Done Line 38: MultiValueMapUtils.addToMap(dbUser.getDomain(), dbUser, usersPerAuthz); Line 39: } Line 40: Line 41: for (DbGroup dbGroup : DbFacade.getInstance().getDbGroupDao().getAll()) { Line 37: for (DbUser dbUser : dbUsers) { Line 38: MultiValueMapUtils.addToMap(dbUser.getDomain(), dbUser, usersPerAuthz); Line 39: } Line 40: Line 41: for (DbGroup dbGroup : DbFacade.getInstance().getDbGroupDao().getAll()) { > this should not run when we sync addUser, right? why not? i must modify the group membership correctly, so i must sync according to groups as well. Line 42: MultiValueMapUtils.addToMap(dbGroup.getDomain(), dbGroup, groupsPerAuthz); Line 43: } Line 44: Line 45: Set<String> authzNames = new HashSet<String>() { Line 38: MultiValueMapUtils.addToMap(dbUser.getDomain(), dbUser, usersPerAuthz); Line 39: } Line 40: Line 41: for (DbGroup dbGroup : DbFacade.getInstance().getDbGroupDao().getAll()) { Line 42: MultiValueMapUtils.addToMap(dbGroup.getDomain(), dbGroup, groupsPerAuthz); > also here add the isActive magic Done Line 43: } Line 44: Line 45: Set<String> authzNames = new HashSet<String>() { Line 46: { Line 53: for (String authzName : authzNames) { Line 54: ExtensionProxy extension = null; Line 55: try { Line 56: extension = EngineExtensionsManager.getInstance().getExtensionByName(authzName); Line 57: } catch (Exception ex) { > catch specific exception? Done Line 58: log.warn(String.format("The extension %1$s could not be found. Users associated with this authz extension will not be refreshed.", Line 59: authzName)); Line 60: } Line 61: refreshedUsers.addAll(refreshAllUsers(extension, Line 59: authzName)); Line 60: } Line 61: refreshedUsers.addAll(refreshAllUsers(extension, Line 62: usersPerAuthz.get(authzName), Line 63: groupsPerAuthz.get(authzName))); > shouldn't this be within the try? no, i think what should be done is include "continue" at the exception. Line 64: } Line 65: Line 66: for (DbUser dbUser : refreshedUsers) { Line 67: DbFacade.getInstance().getDbUserDao().update(dbUser); Line 62: usersPerAuthz.get(authzName), Line 63: groupsPerAuthz.get(authzName))); Line 64: } Line 65: Line 66: for (DbUser dbUser : refreshedUsers) { > this refreshed term is confusing as these are to be refresh not already ref why? the users were refreshed (or synched). now it's time to update in db. Line 67: DbFacade.getInstance().getDbUserDao().update(dbUser); Line 68: } Line 69: } Line 70: Line 81: Map<String, List<String>> usersToFetchPerNamesace = new HashMap<>(); Line 82: Set<String> activeGroupIds = new HashSet<>(); Line 83: Line 84: for (DbUser dbUser : dbUsers) { Line 85: if (dbUser.isActive()) { > this is way too late for isActive() ok Line 86: MultiValueMapUtils.addToMap(dbUser.getNamespace(), dbUser.getExternalId(), usersToFetchPerNamesace); Line 87: } Line 88: } Line 89: Line 87: } Line 88: } Line 89: Line 90: for (DbGroup dbGroup : dbGroups) { Line 91: if (dbGroup.isActive()) { > way too late for isActive ok Line 92: activeGroupIds.add(dbGroup.getExternalId()); Line 93: } Line 94: } Line 95: boolean supportRecursiveGroupResolution = Line 138: cache.put(group.getId(), group); Line 139: addGroupsToFetch(activeGroupIds, cache, groupsToFetch, group.getGroups()); Line 140: } Line 141: } Line 142: groupIdsToFetch = getIdsFromGroups(groupsToFetch, cache); > if you override this variable, you do not need to remove the namespace abov Done Line 143: } Line 144: List<DbUser> refreshed = new ArrayList<>(); Line 145: for (DbUser dbUser : dbUsers) { Line 146: DirectoryUser directoryUser = directoryUsersByIds.get(dbUser.getExternalId()); Line 247: // the flag that indicates that the database needs to be updated: Line 248: if (!StringUtils.equals(dbUser.getFirstName(), directoryUser.getFirstName())) { Line 249: dbUser.setFirstName(directoryUser.getFirstName()); Line 250: update = true; Line 251: } > strange... what is the cost to just update all if anything (equals/hash) ch this can be done. Line 252: if (!StringUtils.equals(dbUser.getLastName(), directoryUser.getLastName())) { Line 253: dbUser.setLastName(directoryUser.getLastName()); Line 254: update = true; Line 255: } http://gerrit.ovirt.org/#/c/28561/12/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/businessentities/DbGroup.java File backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/businessentities/DbGroup.java: Line 40: setId(new Guid(directoryGroup.getId().getBytes(), true)); Line 41: namespace = directoryGroup.getNamespace(); Line 42: domain = directoryGroup.getDirectoryName(); Line 43: name = directoryGroup.getName(); Line 44: active = true; > so it is supported? but you wrote me that schema should be modified... yes , my bad Line 45: } Line 46: Line 47: public Guid getId() { Line 48: return id; -- To view, visit http://gerrit.ovirt.org/28561 To unsubscribe, visit http://gerrit.ovirt.org/settings Gerrit-MessageType: comment Gerrit-Change-Id: Id49b51517a967c7a83e8e73f52181673baa31700 Gerrit-PatchSet: 12 Gerrit-Project: ovirt-engine Gerrit-Branch: master Gerrit-Owner: Yair Zaslavsky <yzasl...@redhat.com> Gerrit-Reviewer: Alon Bar-Lev <alo...@redhat.com> Gerrit-Reviewer: Yair Zaslavsky <yzasl...@redhat.com> Gerrit-Reviewer: automat...@ovirt.org Gerrit-Reviewer: oVirt Jenkins CI Server Gerrit-HasComments: Yes _______________________________________________ Engine-patches mailing list Engine-patches@ovirt.org http://lists.ovirt.org/mailman/listinfo/engine-patches