mschaefers
2012-11-30 e2013b91626a4c693053e9859add68ff371f2298
significantly reduce write operations to backing user system.
5 files modified
46 ■■■■■ changed files
src/com/gitblit/ConfigUserService.java 6 ●●●● patch | view | raw | blame | history
src/com/gitblit/FileUserService.java 7 ●●●●● patch | view | raw | blame | history
src/com/gitblit/GitblitUserService.java 5 ●●●●● patch | view | raw | blame | history
src/com/gitblit/IUserService.java 5 ●●●●● patch | view | raw | blame | history
src/com/gitblit/LdapUserService.java 23 ●●●●● patch | view | raw | blame | history
src/com/gitblit/ConfigUserService.java
@@ -20,6 +20,7 @@
import java.text.MessageFormat;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
import java.util.Collections;
import java.util.HashSet;
import java.util.List;
@@ -286,7 +287,7 @@
     * @since 1.2.0
     */
    @Override
    public boolean updateUserModels(List<UserModel> models) {
    public boolean updateUserModels(Collection<UserModel> models) {
        try {
            read();
            for (UserModel model : models) {
@@ -562,7 +563,7 @@
     * @since 1.2.0
     */
    @Override
    public boolean updateTeamModels(List<TeamModel> models) {
    public boolean updateTeamModels(Collection<TeamModel> models) {
        try {
            read();
            for (TeamModel team : models) {
@@ -804,7 +805,6 @@
    /**
     * Writes the properties file.
     * 
     * @param properties
     * @throws IOException
     */
    private synchronized void write() throws IOException {
src/com/gitblit/FileUserService.java
@@ -20,6 +20,7 @@
import java.io.IOException;
import java.text.MessageFormat;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
import java.util.HashSet;
import java.util.List;
@@ -270,12 +271,12 @@
    /**
     * Updates/writes all specified user objects.
     * 
     * @param model a list of user models
     * @param models a list of user models
     * @return true if update is successful
     * @since 1.2.0
     */
    @Override
    public boolean updateUserModels(List<UserModel> models) {
    public boolean updateUserModels(Collection<UserModel> models) {
        try {            
            Properties allUsers = read();
            for (UserModel model : models) {
@@ -997,7 +998,7 @@
     * @return true if update is successful
     * @since 1.2.0
     */
    public boolean updateTeamModels(List<TeamModel> models) {
    public boolean updateTeamModels(Collection<TeamModel> models) {
        try {
            Properties allUsers = read();
            for (TeamModel model : models) {
src/com/gitblit/GitblitUserService.java
@@ -18,6 +18,7 @@
import java.io.File;
import java.io.IOException;
import java.text.MessageFormat;
import java.util.Collection;
import java.util.List;
import org.slf4j.Logger;
@@ -168,7 +169,7 @@
    }
    @Override
    public boolean updateUserModels(List<UserModel> models) {
    public boolean updateUserModels(Collection<UserModel> models) {
        return serviceImpl.updateUserModels(models);
    }
@@ -253,7 +254,7 @@
    }
    @Override
    public boolean updateTeamModels(List<TeamModel> models) {
    public boolean updateTeamModels(Collection<TeamModel> models) {
        return serviceImpl.updateTeamModels(models);
    }
src/com/gitblit/IUserService.java
@@ -15,6 +15,7 @@
 */
package com.gitblit;
import java.util.Collection;
import java.util.List;
import com.gitblit.models.TeamModel;
@@ -133,7 +134,7 @@
     * @return true if update is successful
     * @since 1.2.0
     */
    boolean updateUserModels(List<UserModel> models);
    boolean updateUserModels(Collection<UserModel> models);
    
    /**
     * Adds/updates a user object keyed by username. This method allows for
@@ -243,7 +244,7 @@
     * @return true if update is successful
     * @since 1.2.0
     */    
    boolean updateTeamModels(List<TeamModel> models);
    boolean updateTeamModels(Collection<TeamModel> models);
    
    /**
     * Updates/writes and replaces a complete team object keyed by teamname.
src/com/gitblit/LdapUserService.java
@@ -24,6 +24,9 @@
import java.util.List;
import java.util.Map;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import com.gitblit.models.TeamModel;
import com.gitblit.models.UserModel;
import com.gitblit.utils.ArrayUtils;
@@ -40,8 +43,6 @@
import com.unboundid.ldap.sdk.extensions.StartTLSExtendedRequest;
import com.unboundid.util.ssl.SSLUtil;
import com.unboundid.util.ssl.TrustAllTrustManager;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
/**
 * Implementation of an LDAP user service.
@@ -122,15 +123,17 @@
                        }
                    }
                    for (UserModel user : ldapUsers.values()) {
                        // Push the ldap looked up values to backing file
                        super.updateUserModel(user);
                        if (!supportsTeamMembershipChanges()) {
                            for (TeamModel userTeam : user.teams)
                                updateTeamModel(userTeam);
                        }
                    }
                    super.updateUserModels(ldapUsers.values());
                    if (!supportsTeamMembershipChanges()) {
                        final Map<String, TeamModel> userTeams = new HashMap<String, TeamModel>();
                        for (UserModel user : ldapUsers.values()) {
                            for (TeamModel userTeam : user.teams) {
                                userTeams.put(userTeam.name, userTeam);
                            }
                        }
                        updateTeamModels(userTeams.values());
                    }
                }
            } finally {
                ldapConnection.close();