diff --git a/server-core/src/main/java/io/onedev/server/CoreModule.java b/server-core/src/main/java/io/onedev/server/CoreModule.java index df1a243e77..6f867a45d3 100644 --- a/server-core/src/main/java/io/onedev/server/CoreModule.java +++ b/server-core/src/main/java/io/onedev/server/CoreModule.java @@ -235,10 +235,10 @@ import io.onedev.server.infomanager.CommitInfoManager; import io.onedev.server.infomanager.DefaultCommitInfoManager; import io.onedev.server.infomanager.DefaultIssueInfoManager; import io.onedev.server.infomanager.DefaultPullRequestInfoManager; -import io.onedev.server.infomanager.DefaultUserInfoManager; +import io.onedev.server.infomanager.DefaultVisitInfoManager; import io.onedev.server.infomanager.IssueInfoManager; import io.onedev.server.infomanager.PullRequestInfoManager; -import io.onedev.server.infomanager.UserInfoManager; +import io.onedev.server.infomanager.VisitInfoManager; import io.onedev.server.jetty.DefaultJettyLauncher; import io.onedev.server.jetty.JettyLauncher; import io.onedev.server.job.DefaultJobManager; @@ -443,7 +443,7 @@ public class CoreModule extends AbstractPluginModule { bind(RoleManager.class).to(DefaultRoleManager.class); bind(CommitInfoManager.class).to(DefaultCommitInfoManager.class); bind(IssueInfoManager.class).to(DefaultIssueInfoManager.class); - bind(UserInfoManager.class).to(DefaultUserInfoManager.class); + bind(VisitInfoManager.class).to(DefaultVisitInfoManager.class); bind(BatchWorkManager.class).to(DefaultBatchWorkManager.class); bind(WorkExecutor.class).to(DefaultWorkExecutor.class); bind(GroupManager.class).to(DefaultGroupManager.class); diff --git a/server-core/src/main/java/io/onedev/server/infomanager/DefaultUserInfoManager.java b/server-core/src/main/java/io/onedev/server/infomanager/DefaultUserInfoManager.java deleted file mode 100644 index f2169cfd63..0000000000 --- a/server-core/src/main/java/io/onedev/server/infomanager/DefaultUserInfoManager.java +++ /dev/null @@ -1,228 +0,0 @@ -package io.onedev.server.infomanager; - -import java.io.File; -import java.util.Date; - -import javax.inject.Inject; -import javax.inject.Singleton; - -import org.joda.time.DateTime; - -import com.google.common.collect.Lists; - -import io.onedev.server.event.codecomment.CodeCommentEvent; -import io.onedev.server.event.entity.EntityRemoved; -import io.onedev.server.event.issue.IssueEvent; -import io.onedev.server.event.pubsub.Listen; -import io.onedev.server.event.pullrequest.PullRequestCodeCommentEvent; -import io.onedev.server.event.pullrequest.PullRequestEvent; -import io.onedev.server.model.CodeComment; -import io.onedev.server.model.Issue; -import io.onedev.server.model.PullRequest; -import io.onedev.server.model.User; -import io.onedev.server.persistence.annotation.Transactional; -import io.onedev.server.storage.StorageManager; -import jetbrains.exodus.env.Environment; -import jetbrains.exodus.env.Store; -import jetbrains.exodus.env.Transaction; -import jetbrains.exodus.env.TransactionalComputable; -import jetbrains.exodus.env.TransactionalExecutable; - -/** - * Store project visit information here as we only need to load a single database to sort projects based on user - * visit information - * - * @author robin - * - */ -@Singleton -public class DefaultUserInfoManager extends AbstractMultiEnvironmentManager implements UserInfoManager { - - private static final int INFO_VERSION = 6; - - private static final String PULL_REQUEST_VISIT_STORE = "pullRequestVisit"; - - private static final String PULL_REQUEST_CODE_COMMENTS_VISIT_STORE = "pullRequestCodeCommentsVisit"; - - private static final String CODE_COMMENT_VISIT_STORE = "codeCommentVisit"; - - private static final String ISSUE_VISIT_STORE = "issueVisit"; - - private final StorageManager storageManager; - - @Inject - public DefaultUserInfoManager(StorageManager storageManager) { - this.storageManager = storageManager; - } - - @Transactional - @Listen - public void on(EntityRemoved event) { - if (event.getEntity() instanceof User) - removeEnv(event.getEntity().getId().toString()); - } - - @Override - protected File getEnvDir(String envKey) { - return storageManager.getUserInfoDir(Long.valueOf(envKey)); - } - - @Override - protected int getEnvVersion() { - return INFO_VERSION; - } - - @Override - public void visitIssue(User user, Issue issue) { - Environment env = getEnv(issue.getProject().getId().toString()); - Store store = getStore(env, ISSUE_VISIT_STORE); - env.executeInTransaction(new TransactionalExecutable() { - - @Override - public void execute(Transaction txn) { - long time = new DateTime().plusSeconds(1).getMillis(); - writeLong(store, txn, new LongsByteIterable(Lists.newArrayList(user.getId(), issue.getId())), time); - } - - }); - } - - @Override - public void visitPullRequest(User user, PullRequest request) { - Environment env = getEnv(request.getTargetProject().getId().toString()); - Store store = getStore(env, PULL_REQUEST_VISIT_STORE); - env.executeInTransaction(new TransactionalExecutable() { - - @Override - public void execute(Transaction txn) { - long time = new DateTime().plusSeconds(1).getMillis(); - writeLong(store, txn, new LongsByteIterable(Lists.newArrayList(user.getId(), request.getId())), time); - } - - }); - } - - @Override - public void visitCodeComment(User user, CodeComment comment) { - Environment env = getEnv(comment.getProject().getId().toString()); - Store store = getStore(env, CODE_COMMENT_VISIT_STORE); - env.executeInTransaction(new TransactionalExecutable() { - - @Override - public void execute(Transaction txn) { - long time = new DateTime().plusSeconds(1).getMillis(); - writeLong(store, txn, new LongsByteIterable(Lists.newArrayList(user.getId(), comment.getId())), time); - } - - }); - } - - @Override - public Date getPullRequestVisitDate(User user, PullRequest request) { - Environment env = getEnv(request.getTargetProject().getId().toString()); - Store store = getStore(env, PULL_REQUEST_VISIT_STORE); - return env.computeInTransaction(new TransactionalComputable() { - - @Override - public Date compute(Transaction txn) { - long millis = readLong(store, txn, new LongsByteIterable(Lists.newArrayList(user.getId(), request.getId())), -1); - if (millis != -1) - return new Date(millis); - else - return null; - } - - }); - } - - @Override - public Date getIssueVisitDate(User user, Issue issue) { - Environment env = getEnv(issue.getProject().getId().toString()); - Store store = getStore(env, ISSUE_VISIT_STORE); - return env.computeInTransaction(new TransactionalComputable() { - - @Override - public Date compute(Transaction txn) { - long millis = readLong(store, txn, new LongsByteIterable(Lists.newArrayList(user.getId(), issue.getId())), -1); - if (millis != -1) - return new Date(millis); - else - return null; - } - - }); - } - - @Override - public Date getCodeCommentVisitDate(User user, CodeComment comment) { - Environment env = getEnv(comment.getProject().getId().toString()); - Store store = getStore(env, CODE_COMMENT_VISIT_STORE); - return env.computeInTransaction(new TransactionalComputable() { - - @Override - public Date compute(Transaction txn) { - long millis = readLong(store, txn, new LongsByteIterable(Lists.newArrayList(user.getId(), comment.getId())), -1); - if (millis != -1) - return new Date(millis); - else - return null; - } - - }); - } - - @Listen - public void on(IssueEvent event) { - if (event.getUser() != null) - visitIssue(event.getUser(), event.getIssue()); - } - - @Listen - public void on(CodeCommentEvent event) { - if (event.getUser() != null) - visitCodeComment(event.getUser(), event.getComment()); - } - - @Listen - public void on(PullRequestEvent event) { - if (event.getUser() != null) { - visitPullRequest(event.getUser(), event.getRequest()); - if (event instanceof PullRequestCodeCommentEvent) - visitPullRequestCodeComments(event.getUser(), event.getRequest()); - } - } - - @Override - public void visitPullRequestCodeComments(User user, PullRequest request) { - Environment env = getEnv(request.getTargetProject().getId().toString()); - Store store = getStore(env, PULL_REQUEST_CODE_COMMENTS_VISIT_STORE); - env.executeInTransaction(new TransactionalExecutable() { - - @Override - public void execute(Transaction txn) { - long time = new DateTime().plusSeconds(1).getMillis(); - writeLong(store, txn, new LongsByteIterable(Lists.newArrayList(user.getId(), request.getId())), time); - } - - }); - } - - @Override - public Date getPullRequestCodeCommentsVisitDate(User user, PullRequest request) { - Environment env = getEnv(request.getTargetProject().getId().toString()); - Store store = getStore(env, PULL_REQUEST_CODE_COMMENTS_VISIT_STORE); - return env.computeInTransaction(new TransactionalComputable() { - - @Override - public Date compute(Transaction txn) { - long millis = readLong(store, txn, new LongsByteIterable(Lists.newArrayList(user.getId(), request.getId())), -1); - if (millis != -1) - return new Date(millis); - else - return null; - } - - }); - } - -} diff --git a/server-core/src/main/java/io/onedev/server/infomanager/DefaultVisitInfoManager.java b/server-core/src/main/java/io/onedev/server/infomanager/DefaultVisitInfoManager.java new file mode 100644 index 0000000000..8160a1e842 --- /dev/null +++ b/server-core/src/main/java/io/onedev/server/infomanager/DefaultVisitInfoManager.java @@ -0,0 +1,368 @@ +package io.onedev.server.infomanager; + +import java.io.File; +import java.io.ObjectStreamException; +import java.io.Serializable; +import java.util.Date; +import java.util.UUID; + +import javax.inject.Inject; +import javax.inject.Singleton; + +import org.joda.time.DateTime; + +import com.google.common.collect.Lists; + +import io.onedev.commons.loader.ManagedSerializedForm; +import io.onedev.commons.utils.FileUtils; +import io.onedev.server.cluster.ClusterManager; +import io.onedev.server.cluster.ClusterTask; +import io.onedev.server.entitymanager.ProjectManager; +import io.onedev.server.event.codecomment.CodeCommentEvent; +import io.onedev.server.event.entity.EntityRemoved; +import io.onedev.server.event.issue.IssueEvent; +import io.onedev.server.event.pubsub.Listen; +import io.onedev.server.event.pullrequest.PullRequestCodeCommentEvent; +import io.onedev.server.event.pullrequest.PullRequestEvent; +import io.onedev.server.model.CodeComment; +import io.onedev.server.model.Issue; +import io.onedev.server.model.Project; +import io.onedev.server.model.PullRequest; +import io.onedev.server.model.User; +import io.onedev.server.persistence.annotation.Transactional; +import io.onedev.server.storage.StorageManager; +import jetbrains.exodus.env.Environment; +import jetbrains.exodus.env.Store; +import jetbrains.exodus.env.Transaction; +import jetbrains.exodus.env.TransactionalComputable; +import jetbrains.exodus.env.TransactionalExecutable; + +/** + * Store project visit information here as we only need to load a single database to sort projects based on user + * visit information + * + * @author robin + * + */ +@Singleton +public class DefaultVisitInfoManager extends AbstractMultiEnvironmentManager + implements VisitInfoManager, Serializable { + + private static final int INFO_VERSION = 6; + + private static final String INFO_DIR = "visit"; + + private static final String PULL_REQUEST_STORE = "pullRequest"; + + private static final String PULL_REQUEST_CODE_COMMENT_STORE = "pullRequestCodeComment"; + + private static final String CODE_COMMENT_STORE = "codeComment"; + + private static final String ISSUE_STORE = "issue"; + + private final StorageManager storageManager; + + private final ProjectManager projectManager; + + private final ClusterManager clusterManager; + + @Inject + public DefaultVisitInfoManager(StorageManager storageManager, ProjectManager projectManager, + ClusterManager clusterManager) { + this.storageManager = storageManager; + this.projectManager = projectManager; + this.clusterManager = clusterManager; + } + + public Object writeReplace() throws ObjectStreamException { + return new ManagedSerializedForm(VisitInfoManager.class); + } + + @Transactional + @Listen + public void on(EntityRemoved event) { + if (event.getEntity() instanceof Project) { + Long projectId = event.getEntity().getId(); + UUID storageServerUUID = projectManager.getStorageServerUUID(projectId, false); + if (storageServerUUID != null) { + clusterManager.runOnServer(storageServerUUID, new ClusterTask() { + + private static final long serialVersionUID = 1L; + + @Override + public Void call() throws Exception { + removeEnv(projectId.toString()); + return null; + } + + }); + } + } + } + + @Override + protected File getEnvDir(String envKey) { + File infoDir = new File(storageManager.getProjectInfoDir(Long.valueOf(envKey)), INFO_DIR); + FileUtils.createDir(infoDir); + return infoDir; + } + + @Override + protected int getEnvVersion() { + return INFO_VERSION; + } + + @Override + public void visitIssue(User user, Issue issue) { + Long projectId = issue.getProject().getId(); + Long userId = user.getId(); + Long issueId = issue.getId(); + projectManager.submitToProjectServer(projectId, new ClusterTask() { + + private static final long serialVersionUID = 1L; + + @Override + public Void call() throws Exception { + Environment env = getEnv(projectId.toString()); + Store store = getStore(env, ISSUE_STORE); + env.executeInTransaction(new TransactionalExecutable() { + + @Override + public void execute(Transaction txn) { + long time = new DateTime().plusSeconds(1).getMillis(); + writeLong(store, txn, new LongsByteIterable(Lists.newArrayList(userId, issueId)), time); + } + + }); + return null; + } + + }); + } + + @Override + public void visitPullRequest(User user, PullRequest request) { + Long projectId = request.getProject().getId(); + Long userId = user.getId(); + Long requestId = request.getId(); + projectManager.submitToProjectServer(projectId, new ClusterTask() { + + private static final long serialVersionUID = 1L; + + @Override + public Void call() throws Exception { + Environment env = getEnv(projectId.toString()); + Store store = getStore(env, PULL_REQUEST_STORE); + env.executeInTransaction(new TransactionalExecutable() { + + @Override + public void execute(Transaction txn) { + long time = new DateTime().plusSeconds(1).getMillis(); + writeLong(store, txn, new LongsByteIterable(Lists.newArrayList(userId, requestId)), time); + } + + }); + return null; + } + + }); + } + + @Override + public void visitCodeComment(User user, CodeComment comment) { + Long projectId = comment.getProject().getId(); + Long userId = user.getId(); + Long commentId = comment.getId(); + projectManager.submitToProjectServer(projectId, new ClusterTask() { + + private static final long serialVersionUID = 1L; + + @Override + public Void call() throws Exception { + Environment env = getEnv(projectId.toString()); + Store store = getStore(env, CODE_COMMENT_STORE); + env.executeInTransaction(new TransactionalExecutable() { + + @Override + public void execute(Transaction txn) { + long time = new DateTime().plusSeconds(1).getMillis(); + writeLong(store, txn, new LongsByteIterable(Lists.newArrayList(userId, commentId)), time); + } + + }); + return null; + } + + }); + } + + @Override + public void visitPullRequestCodeComments(User user, PullRequest request) { + Long userId = user.getId(); + Long projectId = request.getProject().getId(); + Long requestId = request.getId(); + projectManager.submitToProjectServer(projectId, new ClusterTask() { + + private static final long serialVersionUID = 1L; + + @Override + public Void call() throws Exception { + Environment env = getEnv(projectId.toString()); + Store store = getStore(env, PULL_REQUEST_CODE_COMMENT_STORE); + env.executeInTransaction(new TransactionalExecutable() { + + @Override + public void execute(Transaction txn) { + long time = new DateTime().plusSeconds(1).getMillis(); + writeLong(store, txn, new LongsByteIterable(Lists.newArrayList(userId, requestId)), time); + } + + }); + return null; + } + + }); + } + + @Override + public Date getPullRequestVisitDate(User user, PullRequest request) { + Long userId = user.getId(); + Long requestId = request.getId(); + Long projectId = request.getProject().getId(); + return projectManager.runOnProjectServer(projectId, new ClusterTask() { + + private static final long serialVersionUID = 1L; + + @Override + public Date call() throws Exception { + Environment env = getEnv(projectId.toString()); + Store store = getStore(env, PULL_REQUEST_STORE); + return env.computeInTransaction(new TransactionalComputable() { + + @Override + public Date compute(Transaction txn) { + long millis = readLong(store, txn, new LongsByteIterable(Lists.newArrayList(userId, requestId)), -1); + if (millis != -1) + return new Date(millis); + else + return null; + } + + }); + } + + }); + } + + @Override + public Date getIssueVisitDate(User user, Issue issue) { + Long userId = user.getId(); + Long projectId = issue.getProject().getId(); + Long issueId = issue.getId(); + return projectManager.runOnProjectServer(projectId, new ClusterTask() { + + private static final long serialVersionUID = 1L; + + @Override + public Date call() throws Exception { + Environment env = getEnv(projectId.toString()); + Store store = getStore(env, ISSUE_STORE); + return env.computeInTransaction(new TransactionalComputable() { + + @Override + public Date compute(Transaction txn) { + long millis = readLong(store, txn, new LongsByteIterable(Lists.newArrayList(userId, issueId)), -1); + if (millis != -1) + return new Date(millis); + else + return null; + } + + }); + } + + }); + } + + @Override + public Date getCodeCommentVisitDate(User user, CodeComment comment) { + Long projectId = comment.getProject().getId(); + Long commentId = comment.getId(); + Long userId = user.getId(); + return projectManager.runOnProjectServer(projectId, new ClusterTask() { + + private static final long serialVersionUID = 1L; + + @Override + public Date call() throws Exception { + Environment env = getEnv(projectId.toString()); + Store store = getStore(env, CODE_COMMENT_STORE); + return env.computeInTransaction(new TransactionalComputable() { + + @Override + public Date compute(Transaction txn) { + long millis = readLong(store, txn, new LongsByteIterable(Lists.newArrayList(userId, commentId)), -1); + if (millis != -1) + return new Date(millis); + else + return null; + } + + }); + } + + }); + } + + @Override + public Date getPullRequestCodeCommentsVisitDate(User user, PullRequest request) { + Long userId = user.getId(); + Long projectId = request.getProject().getId(); + Long requestId = request.getId(); + return projectManager.runOnProjectServer(projectId, new ClusterTask() { + + private static final long serialVersionUID = 1L; + + @Override + public Date call() throws Exception { + Environment env = getEnv(projectId.toString()); + Store store = getStore(env, PULL_REQUEST_CODE_COMMENT_STORE); + return env.computeInTransaction(new TransactionalComputable() { + + @Override + public Date compute(Transaction txn) { + long millis = readLong(store, txn, new LongsByteIterable(Lists.newArrayList(userId, requestId)), -1); + if (millis != -1) + return new Date(millis); + else + return null; + } + + }); + } + + }); + } + + @Listen + public void on(IssueEvent event) { + if (event.getUser() != null) + visitIssue(event.getUser(), event.getIssue()); + } + + @Listen + public void on(CodeCommentEvent event) { + if (event.getUser() != null) + visitCodeComment(event.getUser(), event.getComment()); + } + + @Listen + public void on(PullRequestEvent event) { + if (event.getUser() != null) { + visitPullRequest(event.getUser(), event.getRequest()); + if (event instanceof PullRequestCodeCommentEvent) + visitPullRequestCodeComments(event.getUser(), event.getRequest()); + } + } + +} diff --git a/server-core/src/main/java/io/onedev/server/infomanager/UserInfoManager.java b/server-core/src/main/java/io/onedev/server/infomanager/VisitInfoManager.java similarity index 95% rename from server-core/src/main/java/io/onedev/server/infomanager/UserInfoManager.java rename to server-core/src/main/java/io/onedev/server/infomanager/VisitInfoManager.java index 435b6cf19a..1e124aa2fd 100644 --- a/server-core/src/main/java/io/onedev/server/infomanager/UserInfoManager.java +++ b/server-core/src/main/java/io/onedev/server/infomanager/VisitInfoManager.java @@ -9,7 +9,7 @@ import io.onedev.server.model.Issue; import io.onedev.server.model.PullRequest; import io.onedev.server.model.User; -public interface UserInfoManager { +public interface VisitInfoManager { void visitPullRequest(User user, PullRequest request); diff --git a/server-core/src/main/java/io/onedev/server/model/CodeComment.java b/server-core/src/main/java/io/onedev/server/model/CodeComment.java index fb5bd53708..2ba8aa14d5 100644 --- a/server-core/src/main/java/io/onedev/server/model/CodeComment.java +++ b/server-core/src/main/java/io/onedev/server/model/CodeComment.java @@ -30,7 +30,7 @@ import com.google.common.collect.Lists; import io.onedev.server.OneDev; import io.onedev.server.attachment.AttachmentStorageSupport; import io.onedev.server.git.service.GitService; -import io.onedev.server.infomanager.UserInfoManager; +import io.onedev.server.infomanager.VisitInfoManager; import io.onedev.server.model.support.CompareContext; import io.onedev.server.model.support.LastUpdate; import io.onedev.server.model.support.Mark; @@ -246,7 +246,7 @@ public class CodeComment extends ProjectBelonging implements AttachmentStorageSu public boolean isVisitedAfter(Date date) { User user = SecurityUtils.getUser(); if (user != null) { - Date visitDate = OneDev.getInstance(UserInfoManager.class).getCodeCommentVisitDate(user, this); + Date visitDate = OneDev.getInstance(VisitInfoManager.class).getCodeCommentVisitDate(user, this); return visitDate != null && visitDate.getTime()>date.getTime(); } else { return true; diff --git a/server-core/src/main/java/io/onedev/server/model/Issue.java b/server-core/src/main/java/io/onedev/server/model/Issue.java index 0b7ed0d673..6acdfa5182 100644 --- a/server-core/src/main/java/io/onedev/server/model/Issue.java +++ b/server-core/src/main/java/io/onedev/server/model/Issue.java @@ -61,7 +61,7 @@ import io.onedev.server.entitymanager.UserManager; import io.onedev.server.entityreference.Referenceable; import io.onedev.server.infomanager.CommitInfoManager; import io.onedev.server.infomanager.PullRequestInfoManager; -import io.onedev.server.infomanager.UserInfoManager; +import io.onedev.server.infomanager.VisitInfoManager; import io.onedev.server.model.support.EntityWatch; import io.onedev.server.model.support.LastUpdate; import io.onedev.server.model.support.ProjectBelonging; @@ -570,7 +570,7 @@ public class Issue extends ProjectBelonging implements Referenceable, Attachment public boolean isVisitedAfter(Date date) { User user = SecurityUtils.getUser(); if (user != null) { - Date visitDate = OneDev.getInstance(UserInfoManager.class).getIssueVisitDate(user, this); + Date visitDate = OneDev.getInstance(VisitInfoManager.class).getIssueVisitDate(user, this); return visitDate != null && visitDate.getTime()>date.getTime(); } else { return true; diff --git a/server-core/src/main/java/io/onedev/server/model/PullRequest.java b/server-core/src/main/java/io/onedev/server/model/PullRequest.java index 6eb6c169c1..c6b39f5c93 100644 --- a/server-core/src/main/java/io/onedev/server/model/PullRequest.java +++ b/server-core/src/main/java/io/onedev/server/model/PullRequest.java @@ -53,7 +53,7 @@ import io.onedev.server.entitymanager.UserManager; import io.onedev.server.entityreference.Referenceable; import io.onedev.server.git.GitUtils; import io.onedev.server.git.service.GitService; -import io.onedev.server.infomanager.UserInfoManager; +import io.onedev.server.infomanager.VisitInfoManager; import io.onedev.server.model.support.BranchProtection; import io.onedev.server.model.support.EntityWatch; import io.onedev.server.model.support.LabelSupport; @@ -743,7 +743,7 @@ public class PullRequest extends ProjectBelonging public boolean isVisitedAfter(Date date) { User user = SecurityUtils.getUser(); if (user != null) { - Date visitDate = OneDev.getInstance(UserInfoManager.class).getPullRequestVisitDate(user, this); + Date visitDate = OneDev.getInstance(VisitInfoManager.class).getPullRequestVisitDate(user, this); return visitDate != null && visitDate.getTime()>date.getTime(); } else { return true; @@ -753,7 +753,7 @@ public class PullRequest extends ProjectBelonging public boolean isCodeCommentsVisitedAfter(Date date) { User user = SecurityUtils.getUser(); if (user != null) { - Date visitDate = OneDev.getInstance(UserInfoManager.class).getPullRequestCodeCommentsVisitDate(user, this); + Date visitDate = OneDev.getInstance(VisitInfoManager.class).getPullRequestCodeCommentsVisitDate(user, this); return visitDate != null && visitDate.getTime()>date.getTime(); } else { return true; diff --git a/server-core/src/main/java/io/onedev/server/notification/IssueNotificationManager.java b/server-core/src/main/java/io/onedev/server/notification/IssueNotificationManager.java index 2a572dc2f6..4502c56a46 100644 --- a/server-core/src/main/java/io/onedev/server/notification/IssueNotificationManager.java +++ b/server-core/src/main/java/io/onedev/server/notification/IssueNotificationManager.java @@ -25,7 +25,7 @@ import io.onedev.server.event.issue.IssueCommented; import io.onedev.server.event.issue.IssueEvent; import io.onedev.server.event.issue.IssueOpened; import io.onedev.server.event.pubsub.Listen; -import io.onedev.server.infomanager.UserInfoManager; +import io.onedev.server.infomanager.VisitInfoManager; import io.onedev.server.mail.MailManager; import io.onedev.server.markdown.MarkdownManager; import io.onedev.server.markdown.MentionParser; @@ -55,11 +55,11 @@ public class IssueNotificationManager extends AbstractNotificationManager { private final UserManager userManager; - private final UserInfoManager userInfoManager; + private final VisitInfoManager userInfoManager; @Inject public IssueNotificationManager(MarkdownManager markdownManager, MailManager mailManager, - IssueWatchManager watchManager, UserInfoManager userInfoManager, UserManager userManager, + IssueWatchManager watchManager, VisitInfoManager userInfoManager, UserManager userManager, SettingManager settingManager, IssueAuthorizationManager authorizationManager) { super(markdownManager, settingManager); this.mailManager = mailManager; diff --git a/server-core/src/main/java/io/onedev/server/notification/PullRequestNotificationManager.java b/server-core/src/main/java/io/onedev/server/notification/PullRequestNotificationManager.java index aad24d1af1..50516963c0 100644 --- a/server-core/src/main/java/io/onedev/server/notification/PullRequestNotificationManager.java +++ b/server-core/src/main/java/io/onedev/server/notification/PullRequestNotificationManager.java @@ -34,7 +34,7 @@ import io.onedev.server.event.pullrequest.PullRequestReviewRequested; import io.onedev.server.event.pullrequest.PullRequestReviewerRemoved; import io.onedev.server.event.pullrequest.PullRequestUnassigned; import io.onedev.server.event.pullrequest.PullRequestUpdated; -import io.onedev.server.infomanager.UserInfoManager; +import io.onedev.server.infomanager.VisitInfoManager; import io.onedev.server.mail.MailManager; import io.onedev.server.markdown.MarkdownManager; import io.onedev.server.markdown.MentionParser; @@ -68,13 +68,13 @@ public class PullRequestNotificationManager extends AbstractNotificationManager private final PullRequestWatchManager pullRequestWatchManager; - private final UserInfoManager userInfoManager; + private final VisitInfoManager userInfoManager; private final UserManager userManager; @Inject public PullRequestNotificationManager(MailManager mailManager, MarkdownManager markdownManager, - PullRequestWatchManager pullRequestWatchManager, UserInfoManager userInfoManager, + PullRequestWatchManager pullRequestWatchManager, VisitInfoManager userInfoManager, UserManager userManager, SettingManager settingManager) { super(markdownManager, settingManager); this.mailManager = mailManager; diff --git a/server-core/src/main/java/io/onedev/server/storage/DefaultStorageManager.java b/server-core/src/main/java/io/onedev/server/storage/DefaultStorageManager.java index 7e961b3348..9d2de5fd2a 100644 --- a/server-core/src/main/java/io/onedev/server/storage/DefaultStorageManager.java +++ b/server-core/src/main/java/io/onedev/server/storage/DefaultStorageManager.java @@ -25,7 +25,6 @@ import io.onedev.server.event.pubsub.Listen; import io.onedev.server.event.system.SystemStarting; import io.onedev.server.model.Build; import io.onedev.server.model.Project; -import io.onedev.server.model.User; import io.onedev.server.persistence.TransactionManager; import io.onedev.server.persistence.annotation.Transactional; @@ -70,12 +69,6 @@ public class DefaultStorageManager implements StorageManager, Serializable { return new File(getProjectsDir(), String.valueOf(projectId)); } - private File getUserDir(Long userId) { - File userDir = new File(getUsersDir(), String.valueOf(userId)); - FileUtils.createDir(userDir); - return userDir; - } - private File getProjectSubdir(Long projectId, String subdirName) { File projectDir = getProjectDir(projectId); if (projectDir.exists()) { @@ -106,7 +99,7 @@ public class DefaultStorageManager implements StorageManager, Serializable { public File getProjectAttachmentDir(Long projectId) { return getProjectSubdir(projectId, "attachment"); } - + private File getBuildsDir(Long projectId) { return getProjectSubdir(projectId, "builds"); } @@ -131,13 +124,6 @@ public class DefaultStorageManager implements StorageManager, Serializable { FileUtils.createDir(new File(buildDir, Build.ARTIFACTS_DIR)); } - @Override - public File getInfoDir() { - File infoDir = new File(Bootstrap.getSiteDir(), "info"); - FileUtils.createDir(infoDir); - return infoDir; - } - @Override public File getIndexDir() { File indexDir = new File(Bootstrap.getSiteDir(), "index"); @@ -155,14 +141,6 @@ public class DefaultStorageManager implements StorageManager, Serializable { FileUtils.deleteDir(projectDir); } } - for (File userDir: getUsersDir().listFiles()) { - if (new File(userDir, OLD_DELETE_MARK1).exists() - || new File(userDir, OLD_DELETE_MARK2).exists() - || new File(userDir, DELETE_MARK).exists()) { - logger.info("Deleting directory marked for deletion: " + userDir); - FileUtils.deleteDir(userDir); - } - } } @Transactional @@ -235,22 +213,6 @@ public class DefaultStorageManager implements StorageManager, Serializable { } - if (event.getEntity() instanceof User) { - transactionManager.runAfterCommit(new ClusterRunnable() { - - private static final long serialVersionUID = 1L; - - @Override - public void run() { - try { - new File(getUserDir(id), DELETE_MARK).createNewFile(); - } catch (IOException e) { - throw new RuntimeException(e); - } - } - - }); - } } @Override @@ -261,18 +223,5 @@ public class DefaultStorageManager implements StorageManager, Serializable { throw new RuntimeException(e); } } - - private File getUsersDir() { - File usersDir = new File(Bootstrap.getSiteDir(), "users"); - FileUtils.createDir(usersDir); - return usersDir; - } - @Override - public File getUserInfoDir(Long userId) { - File infoDir = new File(getUserDir(userId), "info"); - FileUtils.createDir(infoDir); - return infoDir; - } - } diff --git a/server-core/src/main/java/io/onedev/server/storage/StorageManager.java b/server-core/src/main/java/io/onedev/server/storage/StorageManager.java index 6c7ada615a..a89966b0f9 100644 --- a/server-core/src/main/java/io/onedev/server/storage/StorageManager.java +++ b/server-core/src/main/java/io/onedev/server/storage/StorageManager.java @@ -36,8 +36,6 @@ public interface StorageManager { void initArtifactsDir(Long projectId, Long buildNumber); - File getInfoDir(); - File getIndexDir(); /** @@ -48,8 +46,6 @@ public interface StorageManager { */ File getProjectAttachmentDir(Long projectId); - File getUserInfoDir(Long userId); - /** * Get directory to store build related files such as logs, artifacts and reports * diff --git a/server-core/src/main/java/io/onedev/server/web/component/codecomment/CodeCommentPanel.java b/server-core/src/main/java/io/onedev/server/web/component/codecomment/CodeCommentPanel.java index 837001bad1..f4e1ae03e3 100644 --- a/server-core/src/main/java/io/onedev/server/web/component/codecomment/CodeCommentPanel.java +++ b/server-core/src/main/java/io/onedev/server/web/component/codecomment/CodeCommentPanel.java @@ -43,7 +43,7 @@ import io.onedev.server.entitymanager.CodeCommentReplyManager; import io.onedev.server.entitymanager.CodeCommentStatusChangeManager; import io.onedev.server.entitymanager.UrlManager; import io.onedev.server.entitymanager.UserManager; -import io.onedev.server.infomanager.UserInfoManager; +import io.onedev.server.infomanager.VisitInfoManager; import io.onedev.server.model.CodeComment; import io.onedev.server.model.CodeCommentReply; import io.onedev.server.model.CodeCommentStatusChange; @@ -431,7 +431,7 @@ public abstract class CodeCommentPanel extends Panel { prevActivityContainer = newActivityContainer; } - OneDev.getInstance(UserInfoManager.class).visitCodeComment(SecurityUtils.getUser(), getComment()); + OneDev.getInstance(VisitInfoManager.class).visitCodeComment(SecurityUtils.getUser(), getComment()); } @Override @@ -447,7 +447,7 @@ public abstract class CodeCommentPanel extends Panel { @Override protected void onBeforeRender() { if (SecurityUtils.getUser() != null) - OneDev.getInstance(UserInfoManager.class).visitCodeComment(SecurityUtils.getUser(), getComment()); + OneDev.getInstance(VisitInfoManager.class).visitCodeComment(SecurityUtils.getUser(), getComment()); super.onBeforeRender(); } diff --git a/server-core/src/main/java/io/onedev/server/web/page/project/issues/boards/CardDetailPanel.java b/server-core/src/main/java/io/onedev/server/web/page/project/issues/boards/CardDetailPanel.java index 6c6b5d4cc7..f221fe9dc8 100644 --- a/server-core/src/main/java/io/onedev/server/web/page/project/issues/boards/CardDetailPanel.java +++ b/server-core/src/main/java/io/onedev/server/web/page/project/issues/boards/CardDetailPanel.java @@ -21,7 +21,7 @@ import org.apache.wicket.request.cycle.RequestCycle; import io.onedev.server.OneDev; import io.onedev.server.entitymanager.IssueManager; import io.onedev.server.entitymanager.SettingManager; -import io.onedev.server.infomanager.UserInfoManager; +import io.onedev.server.infomanager.VisitInfoManager; import io.onedev.server.model.Issue; import io.onedev.server.model.Project; import io.onedev.server.model.support.inputspec.InputContext; @@ -319,7 +319,7 @@ abstract class CardDetailPanel extends GenericPanel implements InputConte @Override public void onEndRequest(RequestCycle cycle) { if (SecurityUtils.getUser() != null) - OneDev.getInstance(UserInfoManager.class).visitIssue(SecurityUtils.getUser(), getIssue()); + OneDev.getInstance(VisitInfoManager.class).visitIssue(SecurityUtils.getUser(), getIssue()); } @Override diff --git a/server-core/src/main/java/io/onedev/server/web/page/project/issues/detail/IssueDetailPage.java b/server-core/src/main/java/io/onedev/server/web/page/project/issues/detail/IssueDetailPage.java index d71e9f5f84..136f33652f 100644 --- a/server-core/src/main/java/io/onedev/server/web/page/project/issues/detail/IssueDetailPage.java +++ b/server-core/src/main/java/io/onedev/server/web/page/project/issues/detail/IssueDetailPage.java @@ -32,7 +32,7 @@ import io.onedev.server.OneDev; import io.onedev.server.entitymanager.IssueLinkManager; import io.onedev.server.entitymanager.IssueManager; import io.onedev.server.entitymanager.SettingManager; -import io.onedev.server.infomanager.UserInfoManager; +import io.onedev.server.infomanager.VisitInfoManager; import io.onedev.server.model.Issue; import io.onedev.server.model.Project; import io.onedev.server.model.support.inputspec.InputContext; @@ -273,7 +273,7 @@ public abstract class IssueDetailPage extends ProjectIssuesPage implements Input @Override public void onEndRequest(RequestCycle cycle) { if (SecurityUtils.getUser() != null) - OneDev.getInstance(UserInfoManager.class).visitIssue(SecurityUtils.getUser(), getIssue()); + OneDev.getInstance(VisitInfoManager.class).visitIssue(SecurityUtils.getUser(), getIssue()); } @Override diff --git a/server-core/src/main/java/io/onedev/server/web/page/project/pullrequests/detail/PullRequestDetailPage.java b/server-core/src/main/java/io/onedev/server/web/page/project/pullrequests/detail/PullRequestDetailPage.java index 0c109eae13..afa5effa33 100644 --- a/server-core/src/main/java/io/onedev/server/web/page/project/pullrequests/detail/PullRequestDetailPage.java +++ b/server-core/src/main/java/io/onedev/server/web/page/project/pullrequests/detail/PullRequestDetailPage.java @@ -67,7 +67,7 @@ import io.onedev.server.entitymanager.PullRequestWatchManager; import io.onedev.server.entityreference.Referenceable; import io.onedev.server.git.GitUtils; import io.onedev.server.git.service.RefFacade; -import io.onedev.server.infomanager.UserInfoManager; +import io.onedev.server.infomanager.VisitInfoManager; import io.onedev.server.model.AbstractEntity; import io.onedev.server.model.Build; import io.onedev.server.model.Project; @@ -680,7 +680,7 @@ public abstract class PullRequestDetailPage extends ProjectPage implements PullR @Override public void onEndRequest(RequestCycle cycle) { if (SecurityUtils.getUser() != null) - OneDev.getInstance(UserInfoManager.class).visitPullRequest(SecurityUtils.getUser(), getPullRequest()); + OneDev.getInstance(VisitInfoManager.class).visitPullRequest(SecurityUtils.getUser(), getPullRequest()); } @Override diff --git a/server-core/src/main/java/io/onedev/server/web/page/project/pullrequests/detail/codecomments/PullRequestCodeCommentsPage.java b/server-core/src/main/java/io/onedev/server/web/page/project/pullrequests/detail/codecomments/PullRequestCodeCommentsPage.java index b62c00f9f1..0b16941f8c 100644 --- a/server-core/src/main/java/io/onedev/server/web/page/project/pullrequests/detail/codecomments/PullRequestCodeCommentsPage.java +++ b/server-core/src/main/java/io/onedev/server/web/page/project/pullrequests/detail/codecomments/PullRequestCodeCommentsPage.java @@ -17,7 +17,7 @@ import org.apache.wicket.request.mapper.parameter.PageParameters; import com.google.common.collect.Sets; import io.onedev.server.OneDev; -import io.onedev.server.infomanager.UserInfoManager; +import io.onedev.server.infomanager.VisitInfoManager; import io.onedev.server.model.Project; import io.onedev.server.model.PullRequest; import io.onedev.server.security.SecurityUtils; @@ -151,7 +151,7 @@ public class PullRequestCodeCommentsPage extends PullRequestDetailPage { @Override public void onEndRequest(RequestCycle cycle) { if (SecurityUtils.getUser() != null) - OneDev.getInstance(UserInfoManager.class).visitPullRequestCodeComments(SecurityUtils.getUser(), getPullRequest()); + OneDev.getInstance(VisitInfoManager.class).visitPullRequestCodeComments(SecurityUtils.getUser(), getPullRequest()); } @Override