Skip to content

Commit

Permalink
clean up dependency on static IssueStorage#insertChanges
Browse files Browse the repository at this point in the history
and move IssueStorage to server-common
  • Loading branch information
sns-seb authored and sonartech committed Jul 9, 2018
1 parent 9fe9567 commit 12349c8
Show file tree
Hide file tree
Showing 23 changed files with 209 additions and 751 deletions.
Expand Up @@ -40,14 +40,16 @@ public class PersistIssuesStep implements ComputationStep {
private final UpdateConflictResolver conflictResolver; private final UpdateConflictResolver conflictResolver;
private final RuleRepository ruleRepository; private final RuleRepository ruleRepository;
private final IssueCache issueCache; private final IssueCache issueCache;
private final IssueStorage issueStorage;


public PersistIssuesStep(DbClient dbClient, System2 system2, UpdateConflictResolver conflictResolver, public PersistIssuesStep(DbClient dbClient, System2 system2, UpdateConflictResolver conflictResolver,
RuleRepository ruleRepository, IssueCache issueCache) { RuleRepository ruleRepository, IssueCache issueCache, IssueStorage issueStorage) {
this.dbClient = dbClient; this.dbClient = dbClient;
this.system2 = system2; this.system2 = system2;
this.conflictResolver = conflictResolver; this.conflictResolver = conflictResolver;
this.ruleRepository = ruleRepository; this.ruleRepository = ruleRepository;
this.issueCache = issueCache; this.issueCache = issueCache;
this.issueStorage = issueStorage;
} }


@Override @Override
Expand All @@ -61,7 +63,7 @@ public void execute() {
DefaultIssue issue = issues.next(); DefaultIssue issue = issues.next();
boolean saved = persistIssueIfRequired(mapper, issue); boolean saved = persistIssueIfRequired(mapper, issue);
if (saved) { if (saved) {
IssueStorage.insertChanges(changeMapper, issue); issueStorage.insertChanges(changeMapper, issue);
} }
} }
dbSession.flushStatements(); dbSession.flushStatements();
Expand Down
Expand Up @@ -50,6 +50,7 @@
import org.sonar.db.rule.RuleDefinitionDto; import org.sonar.db.rule.RuleDefinitionDto;
import org.sonar.db.rule.RuleTesting; import org.sonar.db.rule.RuleTesting;
import org.sonar.scanner.protocol.output.ScannerReport; import org.sonar.scanner.protocol.output.ScannerReport;
import org.sonar.server.issue.IssueStorage;
import org.sonar.server.rule.ExternalRuleCreator; import org.sonar.server.rule.ExternalRuleCreator;
import org.sonar.server.util.cache.DiskCache; import org.sonar.server.util.cache.DiskCache;


Expand Down Expand Up @@ -79,7 +80,6 @@ public class PersistIssuesStepTest extends BaseStepTest {


private DbSession session = db.getSession(); private DbSession session = db.getSession();
private DbClient dbClient = db.getDbClient(); private DbClient dbClient = db.getDbClient();
private System2 system2;
private IssueCache issueCache; private IssueCache issueCache;
private ComputationStep step; private ComputationStep step;


Expand All @@ -93,11 +93,11 @@ protected ComputationStep step() {
@Before @Before
public void setup() throws Exception { public void setup() throws Exception {
issueCache = new IssueCache(temp.newFile(), System2.INSTANCE); issueCache = new IssueCache(temp.newFile(), System2.INSTANCE);
system2 = mock(System2.class); System2 system2 = mock(System2.class);
when(system2.now()).thenReturn(NOW); when(system2.now()).thenReturn(NOW);
reportReader.setMetadata(ScannerReport.Metadata.getDefaultInstance()); reportReader.setMetadata(ScannerReport.Metadata.getDefaultInstance());


step = new PersistIssuesStep(dbClient, system2, new UpdateConflictResolver(), new RuleRepositoryImpl(externalRuleCreator, dbClient, analysisMetadataHolder), issueCache); step = new PersistIssuesStep(dbClient, system2, new UpdateConflictResolver(), new RuleRepositoryImpl(externalRuleCreator, dbClient, analysisMetadataHolder), issueCache, new IssueStorage());
} }


@After @After
Expand Down
Expand Up @@ -95,6 +95,7 @@
import org.sonar.server.extension.CoreExtensionStopper; import org.sonar.server.extension.CoreExtensionStopper;
import org.sonar.server.favorite.FavoriteUpdater; import org.sonar.server.favorite.FavoriteUpdater;
import org.sonar.server.issue.IssueFieldsSetter; import org.sonar.server.issue.IssueFieldsSetter;
import org.sonar.server.issue.IssueStorage;
import org.sonar.server.issue.index.IssueIndex; import org.sonar.server.issue.index.IssueIndex;
import org.sonar.server.issue.index.IssueIndexer; import org.sonar.server.issue.index.IssueIndexer;
import org.sonar.server.issue.index.IssueIteratorFactory; import org.sonar.server.issue.index.IssueIteratorFactory;
Expand Down Expand Up @@ -404,6 +405,7 @@ private static void populateLevel4(ComponentContainer container, Props props) {
ViewIndex.class, ViewIndex.class,


// issues // issues
IssueStorage.class,
IssueIndexer.class, IssueIndexer.class,
IssueIteratorFactory.class, IssueIteratorFactory.class,
PermissionIndexer.class, PermissionIndexer.class,
Expand Down
Expand Up @@ -97,7 +97,7 @@ public void test_real_start() throws IOException {
assertThat(picoContainer.getComponentAdapters()) assertThat(picoContainer.getComponentAdapters())
.hasSize( .hasSize(
CONTAINER_ITSELF CONTAINER_ITSELF
+ 71 // level 4 + 72 // level 4
+ 6 // content of CeConfigurationModule + 6 // content of CeConfigurationModule
+ 4 // content of CeQueueModule + 4 // content of CeQueueModule
+ 4 // content of CeHttpModule + 4 // content of CeHttpModule
Expand Down
@@ -0,0 +1,47 @@
/*
* SonarQube
* Copyright (C) 2009-2018 SonarSource SA
* mailto:info AT sonarsource DOT com
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 3 of the License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public License
* along with this program; if not, write to the Free Software Foundation,
* Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*/
package org.sonar.server.issue;

import org.sonar.core.issue.DefaultIssue;
import org.sonar.core.issue.DefaultIssueComment;
import org.sonar.core.issue.FieldDiffs;
import org.sonar.db.issue.IssueChangeDto;
import org.sonar.db.issue.IssueChangeMapper;

public class IssueStorage {
public void insertChanges(IssueChangeMapper mapper, DefaultIssue issue) {
for (DefaultIssueComment comment : issue.defaultIssueComments()) {
if (comment.isNew()) {
IssueChangeDto changeDto = IssueChangeDto.of(comment);
mapper.insert(changeDto);
}
}
FieldDiffs diffs = issue.currentChange();
if (issue.isCopied()) {
for (FieldDiffs d : issue.changes()) {
IssueChangeDto changeDto = IssueChangeDto.of(issue.key(), d);
mapper.insert(changeDto);
}
} else if (!issue.isNew() && diffs != null) {
IssueChangeDto changeDto = IssueChangeDto.of(issue.key(), diffs);
mapper.insert(changeDto);
}
}
}
Expand Up @@ -45,12 +45,12 @@
public class IssueUpdater { public class IssueUpdater {


private final DbClient dbClient; private final DbClient dbClient;
private final IssueStorage issueStorage; private final WebIssueStorage issueStorage;
private final NotificationManager notificationService; private final NotificationManager notificationService;
private final IssueChangePostProcessor issueChangePostProcessor; private final IssueChangePostProcessor issueChangePostProcessor;


public IssueUpdater(DbClient dbClient, IssueStorage issueStorage, NotificationManager notificationService, public IssueUpdater(DbClient dbClient, WebIssueStorage issueStorage, NotificationManager notificationService,
IssueChangePostProcessor issueChangePostProcessor) { IssueChangePostProcessor issueChangePostProcessor) {
this.dbClient = dbClient; this.dbClient = dbClient;
this.issueStorage = issueStorage; this.issueStorage = issueStorage;
this.notificationService = notificationService; this.notificationService = notificationService;
Expand Down

This file was deleted.

Expand Up @@ -29,16 +29,16 @@
import org.sonar.api.issue.Issue; import org.sonar.api.issue.Issue;
import org.sonar.api.rules.Rule; import org.sonar.api.rules.Rule;
import org.sonar.api.rules.RuleFinder; import org.sonar.api.rules.RuleFinder;
import org.sonar.api.server.ServerSide;
import org.sonar.api.utils.System2; import org.sonar.api.utils.System2;
import org.sonar.core.issue.DefaultIssue; import org.sonar.core.issue.DefaultIssue;
import org.sonar.core.issue.DefaultIssueComment;
import org.sonar.core.issue.FieldDiffs;
import org.sonar.db.BatchSession; import org.sonar.db.BatchSession;
import org.sonar.db.DbClient; import org.sonar.db.DbClient;
import org.sonar.db.DbSession; import org.sonar.db.DbSession;
import org.sonar.db.issue.IssueChangeDto; import org.sonar.db.component.ComponentDto;
import org.sonar.db.issue.IssueChangeMapper; import org.sonar.db.issue.IssueChangeMapper;
import org.sonar.db.issue.IssueDto; import org.sonar.db.issue.IssueDto;
import org.sonar.server.issue.index.IssueIndexer;


import static com.google.common.base.MoreObjects.firstNonNull; import static com.google.common.base.MoreObjects.firstNonNull;
import static com.google.common.collect.Lists.newArrayList; import static com.google.common.collect.Lists.newArrayList;
Expand All @@ -51,19 +51,20 @@
* <li>once at the end of scan, even on multi-module projects</li> * <li>once at the end of scan, even on multi-module projects</li>
* <li>on each server-side action initiated by UI or web service</li> * <li>on each server-side action initiated by UI or web service</li>
* </ul> * </ul>
*
* @since 3.6
*/ */
public abstract class IssueStorage { @ServerSide
public class WebIssueStorage extends IssueStorage {


private final System2 system2; private final System2 system2;
private final RuleFinder ruleFinder; private final RuleFinder ruleFinder;
private final DbClient dbClient; private final DbClient dbClient;
private final IssueIndexer indexer;


protected IssueStorage(System2 system2, DbClient dbClient, RuleFinder ruleFinder) { public WebIssueStorage(System2 system2, DbClient dbClient, RuleFinder ruleFinder, IssueIndexer indexer) {
this.system2 = system2; this.system2 = system2;
this.dbClient = dbClient; this.dbClient = dbClient;
this.ruleFinder = ruleFinder; this.ruleFinder = ruleFinder;
this.indexer = indexer;
} }


protected DbClient getDbClient() { protected DbClient getDbClient() {
Expand Down Expand Up @@ -103,8 +104,8 @@ private Collection<IssueDto> doSave(DbSession dbSession, Iterable<DefaultIssue>
.collect(toSet(issuesToInsert.size() + issuesToUpdate.size())); .collect(toSet(issuesToInsert.size() + issuesToUpdate.size()));
} }


protected void doAfterSave(DbSession dbSession, Collection<IssueDto> issues) { private void doAfterSave(DbSession dbSession, Collection<IssueDto> issues) {
// overridden on server-side to index ES indexer.commitAndIndexIssues(dbSession, issues);
} }


/** /**
Expand All @@ -128,7 +129,23 @@ private Collection<IssueDto> insert(DbSession session, Iterable<DefaultIssue> is
return inserted; return inserted;
} }


protected abstract IssueDto doInsert(DbSession batchSession, long now, DefaultIssue issue); private IssueDto doInsert(DbSession session, long now, DefaultIssue issue) {
ComponentDto component = component(session, issue);
ComponentDto project = project(session, issue);
int ruleId = rule(issue).getId();
IssueDto dto = IssueDto.toDtoForServerInsert(issue, component, project, ruleId, now);

getDbClient().issueDao().insert(session, dto);
return dto;
}

ComponentDto component(DbSession session, DefaultIssue issue) {
return getDbClient().componentDao().selectOrFailByUuid(session, issue.componentUuid());
}

ComponentDto project(DbSession session, DefaultIssue issue) {
return getDbClient().componentDao().selectOrFailByUuid(session, issue.projectUuid());
}


/** /**
* @return the keys of the updated issues * @return the keys of the updated issues
Expand All @@ -149,25 +166,10 @@ private Collection<IssueDto> update(List<DefaultIssue> issuesToUpdate, long now)
return updated; return updated;
} }


protected abstract IssueDto doUpdate(DbSession batchSession, long now, DefaultIssue issue); private IssueDto doUpdate(DbSession session, long now, DefaultIssue issue) {

IssueDto dto = IssueDto.toDtoForUpdate(issue, now);
public static void insertChanges(IssueChangeMapper mapper, DefaultIssue issue) { getDbClient().issueDao().update(session, dto);
for (DefaultIssueComment comment : issue.defaultIssueComments()) { return dto;
if (comment.isNew()) {
IssueChangeDto changeDto = IssueChangeDto.of(comment);
mapper.insert(changeDto);
}
}
FieldDiffs diffs = issue.currentChange();
if (issue.isCopied()) {
for (FieldDiffs d : issue.changes()) {
IssueChangeDto changeDto = IssueChangeDto.of(issue.key(), d);
mapper.insert(changeDto);
}
} else if (!issue.isNew() && diffs != null) {
IssueChangeDto changeDto = IssueChangeDto.of(issue.key(), diffs);
mapper.insert(changeDto);
}
} }


protected Rule rule(Issue issue) { protected Rule rule(Issue issue) {
Expand Down
Expand Up @@ -55,7 +55,7 @@
import org.sonar.server.issue.AddTagsAction; import org.sonar.server.issue.AddTagsAction;
import org.sonar.server.issue.AssignAction; import org.sonar.server.issue.AssignAction;
import org.sonar.server.issue.IssueChangePostProcessor; import org.sonar.server.issue.IssueChangePostProcessor;
import org.sonar.server.issue.IssueStorage; import org.sonar.server.issue.WebIssueStorage;
import org.sonar.server.issue.RemoveTagsAction; import org.sonar.server.issue.RemoveTagsAction;
import org.sonar.server.issue.notification.IssueChangeNotification; import org.sonar.server.issue.notification.IssueChangeNotification;
import org.sonar.server.notification.NotificationManager; import org.sonar.server.notification.NotificationManager;
Expand Down Expand Up @@ -107,12 +107,12 @@ public class BulkChangeAction implements IssuesWsAction {
private final System2 system2; private final System2 system2;
private final UserSession userSession; private final UserSession userSession;
private final DbClient dbClient; private final DbClient dbClient;
private final IssueStorage issueStorage; private final WebIssueStorage issueStorage;
private final NotificationManager notificationService; private final NotificationManager notificationService;
private final List<Action> actions; private final List<Action> actions;
private final IssueChangePostProcessor issueChangePostProcessor; private final IssueChangePostProcessor issueChangePostProcessor;


public BulkChangeAction(System2 system2, UserSession userSession, DbClient dbClient, IssueStorage issueStorage, public BulkChangeAction(System2 system2, UserSession userSession, DbClient dbClient, WebIssueStorage issueStorage,
NotificationManager notificationService, List<Action> actions, NotificationManager notificationService, List<Action> actions,
IssueChangePostProcessor issueChangePostProcessor) { IssueChangePostProcessor issueChangePostProcessor) {
this.system2 = system2; this.system2 = system2;
Expand Down
Expand Up @@ -23,8 +23,8 @@
import org.sonar.server.issue.IssueFieldsSetter; import org.sonar.server.issue.IssueFieldsSetter;
import org.sonar.server.issue.IssueFinder; import org.sonar.server.issue.IssueFinder;
import org.sonar.server.issue.IssueQueryFactory; import org.sonar.server.issue.IssueQueryFactory;
import org.sonar.server.issue.WebIssueStorage;
import org.sonar.server.issue.IssueUpdater; import org.sonar.server.issue.IssueUpdater;
import org.sonar.server.issue.ServerIssueStorage;
import org.sonar.server.issue.TransitionService; import org.sonar.server.issue.TransitionService;
import org.sonar.server.issue.workflow.FunctionExecutor; import org.sonar.server.issue.workflow.FunctionExecutor;
import org.sonar.server.issue.workflow.IssueWorkflow; import org.sonar.server.issue.workflow.IssueWorkflow;
Expand All @@ -40,7 +40,7 @@ protected void configureModule() {
IssueUpdater.class, IssueUpdater.class,
IssueFinder.class, IssueFinder.class,
TransitionService.class, TransitionService.class,
ServerIssueStorage.class, WebIssueStorage.class,
IssueFieldsSetter.class, IssueFieldsSetter.class,
FunctionExecutor.class, FunctionExecutor.class,
IssueWorkflow.class, IssueWorkflow.class,
Expand Down

0 comments on commit 12349c8

Please sign in to comment.