Remove cache for ChangesetsCommand since we do not want to use stale data here

This commit is contained in:
Eduard Heimbuch
2022-08-29 16:53:22 +02:00
parent 4b92959b9c
commit 6055ba145f
2 changed files with 3 additions and 35 deletions

View File

@@ -24,24 +24,17 @@
package sonia.scm.repository.api; package sonia.scm.repository.api;
import com.google.common.collect.Iterables;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
import sonia.scm.cache.Cache;
import sonia.scm.cache.CacheManager;
import sonia.scm.repository.Changeset; import sonia.scm.repository.Changeset;
import sonia.scm.repository.Repository; import sonia.scm.repository.Repository;
import sonia.scm.repository.RepositoryCacheKey;
import sonia.scm.repository.spi.ChangesetsCommand; import sonia.scm.repository.spi.ChangesetsCommand;
import sonia.scm.repository.spi.ChangesetsCommandRequest; import sonia.scm.repository.spi.ChangesetsCommandRequest;
import java.io.Serializable;
import java.util.Optional; import java.util.Optional;
public class ChangesetsCommandBuilder { public class ChangesetsCommandBuilder {
static final String CACHE_NAME = "sonia.cache.cmd.changesets";
private final Cache<CacheKey, Iterable<Changeset>> cache;
private static final Logger LOG = LoggerFactory.getLogger(ChangesetsCommandBuilder.class); private static final Logger LOG = LoggerFactory.getLogger(ChangesetsCommandBuilder.class);
private final Repository repository; private final Repository repository;
@@ -49,43 +42,18 @@ public class ChangesetsCommandBuilder {
private final ChangesetsCommandRequest request = new ChangesetsCommandRequest(); private final ChangesetsCommandRequest request = new ChangesetsCommandRequest();
public ChangesetsCommandBuilder(CacheManager cacheManager, Repository repository, ChangesetsCommand changesetsCommand) { public ChangesetsCommandBuilder( Repository repository, ChangesetsCommand changesetsCommand) {
this.repository = repository; this.repository = repository;
this.changesetsCommand = changesetsCommand; this.changesetsCommand = changesetsCommand;
this.cache = cacheManager.getCache(CACHE_NAME);
} }
public Iterable<Changeset> getChangesets() { public Iterable<Changeset> getChangesets() {
CacheKey cacheKey = new CacheKey(repository);
Iterable<Changeset> changesets = cache.get(cacheKey);
if (changesets == null || Iterables.isEmpty(changesets)) {
LOG.debug("Retrieve all changesets from {{}}", repository); LOG.debug("Retrieve all changesets from {{}}", repository);
changesets = changesetsCommand.getChangesets(request); return changesetsCommand.getChangesets(request);
cache.put(cacheKey, changesets);
} else {
LOG.debug("Use cached changesets from {{}}", repository);
}
return changesets;
} }
public Optional<Changeset> getLatestChangeset() { public Optional<Changeset> getLatestChangeset() {
LOG.debug("Retrieve latest changeset from {{}}", repository); LOG.debug("Retrieve latest changeset from {{}}", repository);
return changesetsCommand.getLatestChangeset(); return changesetsCommand.getLatestChangeset();
} }
static class CacheKey implements RepositoryCacheKey, Serializable {
private final Repository repository;
CacheKey(Repository repository) {
this.repository = repository;
}
@Override
public String getRepositoryId() {
return repository.getId();
}
}
} }

View File

@@ -506,7 +506,7 @@ public final class RepositoryService implements Closeable {
public ChangesetsCommandBuilder getChangesetsCommand() { public ChangesetsCommandBuilder getChangesetsCommand() {
LOG.debug("create changesets command for repository {}", repository); LOG.debug("create changesets command for repository {}", repository);
return new ChangesetsCommandBuilder(cacheManager, repository, provider.getChangesetsCommand()); return new ChangesetsCommandBuilder(repository, provider.getChangesetsCommand());
} }
/** /**