Juan Hernandez has posted comments on this change. Change subject: [WIP] Introduce new directory interface ......................................................................
Patch Set 1: (7 inline comments) .................................................... File backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/directory/DirectoryManager.java Line 55: /** Line 56: * Loads the directory implementations that are available in the class path Line 57: * using the service loader mechanism. Line 58: */ Line 59: private void loadImplementations() { No this needs to go in the class path, together with the .jar file that provides the implementation. If you want to enable/disable a provider then you just need to add/remove the .jar file from the class path. Line 60: ServiceLoader<DirectorySpi> loader = Line 61: ServiceLoader.load(DirectorySpi.class); Line 62: for (DirectorySpi implementation : loader) { Line 63: implementations.add(implementation); .................................................... File backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/users/DirectoryEntryStatus.java Line 10: * check performed by the engine. Line 11: */ Line 12: public enum DirectoryEntryStatus implements Identifiable { Line 13: INACTIVE(0), Line 14: ACTIVE(1); I will change this. Line 15: Line 16: private int value; Line 17: Line 18: private static Map<Integer, DirectoryEntryStatus> mappings = new HashMap<Integer, DirectoryEntryStatus>(); .................................................... File backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/users/Directory.java Line 26: * @param name the name of the user Line 27: * @return the user corresponding to the given name or Line 28: * <code>null</code> if no such user can be found Line 29: */ Line 30: DirectoryUser findUserByName(String name); We don't do searches by random attributes in the engine, only by name and by id. The rest of the searches are done using the query mechanism, and that already supports all kinds of attributes. The search by name is currently used only in one place: when authentication fails we use this search to find the entry for the user (assuming it is unique) and check for password expiration. Actually the code that does this doesn't currently work, so I am in favor of removing it, and this method. Line 31: Line 32: /** Line 33: * Retrieves an user from the directory given its identifier. Note that this Line 34: * identifier is the one assigned by the engine to the user, not the one Line 50: * with no particular order, note that the returned set may contain less Line 51: * elements than the given set of identifiers and that it may be in a Line 52: * different order Line 53: */ Line 54: Set<DirectoryUser> findUsersById(Set<Guid> ids); The UUIDs are the standard identifiers uses all over the engine. As I explain in the comment these ids aren't the ones used by the directory, but the ones used by the engine (by the directory implementation in this case). It is up to the directory implementation to use directly the identifiers provided by the directory or to use a mapping, so using UUIDs here doesn't dictate in any way which identifiers should be used internally by the directory. All the LDAP providers that we currently support (AD, IPA, RHDS, ITDS and OpenLDAP) use 128 bit internal unique identifiers, so in these cases we can just use them directly. For other kind of directories we may be able or not to squeeze their internal identifiers into the 128 bits of the UUID, but even if we can't the directory implementation can always use its own mapping table. Strings, specially if they have a common prefix like "uuid:", are expensive and make bad indexes. Line 55: Line 56: /** Line 57: * Retrieves a group from the directory given its identifier. Note that this Line 58: * identifier is the one assigned by the engine to the group, not the one Line 72: * @param query the query Line 73: * @return a list containing the users that match the given query Line 74: */ Line 75: Set<DirectoryUser> findUsersByQuery(String query); Line 76: What do you propose for that query interface? Line 77: /** Line 78: * Search the directory looking for groups that match the given search Line 79: * query. Line 80: * Line 80: * Line 81: * @param query the query Line 82: * @return a list containing the groups that match the given query Line 83: */ Line 84: Set<DirectoryGroup> findGroupsByQuery(String query); The query language used by the engine is not an implementation detail, it is already part of the interface of the engine, even part of the contract between the human users and the engine, as they can type queries in the GUI. What we shouldn't have here is anything that is specific of the directory implementation, for example, we shouldn't have here LDAP specific queries. It is the responsibility of the directory implementation to translate the engine queries into whatever the underlying directory supports. .................................................... File backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/users/DirectoryUser.java Line 15: private String firstName; Line 16: private String lastName; Line 17: private String title; Line 18: private String email; Line 19: private String department; Hash maps are expensive data structures, in this case it would require approx 160 additional bytes per directory entry. Line 20: Line 21: // Flag indicating if this user has the administrator role: Line 22: private boolean isAdmin = false; Line 23: -- To view, visit http://gerrit.ovirt.org/15596 To unsubscribe, visit http://gerrit.ovirt.org/settings Gerrit-MessageType: comment Gerrit-Change-Id: If84a0c9d6553d81cdbbe224972696f169cca90d4 Gerrit-PatchSet: 1 Gerrit-Project: ovirt-engine Gerrit-Branch: master Gerrit-Owner: Juan Hernandez <juan.hernan...@redhat.com> Gerrit-Reviewer: Alon Bar-Lev <alo...@redhat.com> Gerrit-Reviewer: Juan Hernandez <juan.hernan...@redhat.com> Gerrit-Reviewer: Oved Ourfali <oourf...@redhat.com> Gerrit-Reviewer: Yair Zaslavsky <yzasl...@redhat.com> Gerrit-Reviewer: oVirt Jenkins CI Server _______________________________________________ Engine-patches mailing list Engine-patches@ovirt.org http://lists.ovirt.org/mailman/listinfo/engine-patches