Collect metrics over lifetime of working copies (#1591)

Capture metrics about the lifetime of working copies used, for example, by the merge and modify commands. Working copies are internal repository clones that can place a large load on the server. Therefore, these metrics can be helpful in identifying sources of large server load.

Co-authored-by: Sebastian Sdorra <sebastian.sdorra@cloudogu.com>
This commit is contained in:
Eduard Heimbuch
2021-03-24 13:03:20 +01:00
committed by GitHub
parent 3ec499d22c
commit c5720b36b5
17 changed files with 105 additions and 30 deletions

View File

@@ -0,0 +1,2 @@
- type: added
description: Adds metrics over lifetime duration of working copies ([#1591](https://github.com/scm-manager/scm-manager/pull/1591))

View File

@@ -26,6 +26,7 @@ package sonia.scm.metrics;
import io.micrometer.core.instrument.MeterRegistry;
import io.micrometer.core.instrument.Tag;
import io.micrometer.core.instrument.Timer;
import io.micrometer.core.instrument.binder.jvm.ExecutorServiceMetrics;
import java.util.Collections;
@@ -56,4 +57,17 @@ public final class Metrics {
Collections.singleton(Tag.of("type", type))
).bindTo(registry);
}
/**
* Collect metrics from an {@link sonia.scm.repository.work.WorkingCopy}.
*
* @param registry meter registry
* @param type type of repository
*/
public static Timer workingCopyTimer(MeterRegistry registry, String type) {
return Timer.builder("scm.workingcopy.duration")
.description("Duration of temporary working copy lifetime")
.tags("type", type)
.register(registry);
}
}

View File

@@ -24,8 +24,12 @@
package sonia.scm.repository.work;
import io.micrometer.core.instrument.MeterRegistry;
import io.micrometer.core.instrument.Timer;
import io.micrometer.core.instrument.composite.CompositeMeterRegistry;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import sonia.scm.metrics.Metrics;
import sonia.scm.repository.Repository;
import sonia.scm.repository.RepositoryProvider;
@@ -100,9 +104,28 @@ public abstract class SimpleWorkingCopyFactory<R, W, C extends RepositoryProvide
private static final Logger LOG = LoggerFactory.getLogger(SimpleWorkingCopyFactory.class);
private final WorkingCopyPool workingCopyPool;
private final MeterRegistry meterRegistry;
/**
* Constructs a new {@link SimpleWorkingCopyFactory}
*
* @param workingCopyPool pool which provides working copies
* @deprecated since 2.16.0 use {@link SimpleWorkingCopyFactory(WorkingCopyPool, MeterRegistry)} instead
*/
@Deprecated
public SimpleWorkingCopyFactory(WorkingCopyPool workingCopyPool) {
this(workingCopyPool, new CompositeMeterRegistry());
}
/**
* Constructs a new {@link SimpleWorkingCopyFactory}
*
* @param workingCopyPool pool which provides working copies
* @param meterRegistry registry to collect metrics
*/
public SimpleWorkingCopyFactory(WorkingCopyPool workingCopyPool, MeterRegistry meterRegistry) {
this.workingCopyPool = workingCopyPool;
this.meterRegistry = meterRegistry;
}
@Override
@@ -181,10 +204,12 @@ public abstract class SimpleWorkingCopyFactory<R, W, C extends RepositoryProvide
public class WorkingCopyContext {
private final String requestedBranch;
private final C repositoryContext;
private final Timer.Sample sample;
public WorkingCopyContext(String requestedBranch, C repositoryContext) {
this.requestedBranch = requestedBranch;
this.repositoryContext = repositoryContext;
sample = Timer.start(meterRegistry);
}
public Repository getScmRepository() {
@@ -204,6 +229,14 @@ public abstract class SimpleWorkingCopyFactory<R, W, C extends RepositoryProvide
}
private void close(ParentAndClone<R, W> parentAndClone) {
try {
closeResources(parentAndClone);
} finally {
sample.stop(Metrics.workingCopyTimer(meterRegistry, repositoryContext.get().getType()));
}
}
private void closeResources(ParentAndClone<R, W> parentAndClone) {
try {
closeWorkingCopy(parentAndClone.getClone());
} catch (Exception e) {

View File

@@ -24,6 +24,9 @@
package sonia.scm.repository.work;
import io.micrometer.core.instrument.Meter;
import io.micrometer.core.instrument.MeterRegistry;
import io.micrometer.core.instrument.simple.SimpleMeterRegistry;
import org.junit.Before;
import org.junit.Rule;
import org.junit.Test;
@@ -62,8 +65,11 @@ public class SimpleWorkingCopyFactoryTest {
private boolean workdirIsCached = false;
private File workdir;
private MeterRegistry meterRegistry;
@Before
public void initFactory() throws IOException {
meterRegistry = new SimpleMeterRegistry();
WorkdirProvider workdirProvider = new WorkdirProvider(temporaryFolder.newFolder(), repositoryLocationResolver, false);
WorkingCopyPool configurableTestWorkingCopyPool = new WorkingCopyPool() {
@Override
@@ -83,7 +89,7 @@ public class SimpleWorkingCopyFactoryTest {
public void shutdown() {
}
};
simpleWorkingCopyFactory = new SimpleWorkingCopyFactory<Closeable, Closeable, Context>(configurableTestWorkingCopyPool) {
simpleWorkingCopyFactory = new SimpleWorkingCopyFactory<Closeable, Closeable, Context>(configurableTestWorkingCopyPool, meterRegistry) {
@Override
protected void closeRepository(Closeable repository) throws IOException {
repository.close();
@@ -126,6 +132,10 @@ public class SimpleWorkingCopyFactoryTest {
try (WorkingCopy<Closeable, Closeable> workingCopy = simpleWorkingCopyFactory.createWorkingCopy(context, null)) {}
verify(parent).close();
assertThat(meterRegistry.getMeters()).hasSize(1);
Meter.Id meterId = meterRegistry.getMeters().get(0).getId();
assertThat(meterId.getName()).isEqualTo("scm.workingcopy.duration");
assertThat(meterId.getTag("type")).isEqualTo("git");
}
@Test
@@ -134,6 +144,10 @@ public class SimpleWorkingCopyFactoryTest {
try (WorkingCopy<Closeable, Closeable> workingCopy = simpleWorkingCopyFactory.createWorkingCopy(context, null)) {}
verify(clone).close();
assertThat(meterRegistry.getMeters()).hasSize(1);
Meter.Id meterId = meterRegistry.getMeters().get(0).getId();
assertThat(meterId.getName()).isEqualTo("scm.workingcopy.duration");
assertThat(meterId.getTag("type")).isEqualTo("git");
}
@Test

View File

@@ -24,6 +24,7 @@
package sonia.scm.repository.spi;
import io.micrometer.core.instrument.MeterRegistry;
import org.eclipse.jgit.lib.Repository;
import org.eclipse.jgit.transport.ScmTransportProtocol;
import sonia.scm.repository.GitWorkingCopyFactory;
@@ -37,8 +38,8 @@ import java.io.File;
public class SimpleGitWorkingCopyFactory extends SimpleWorkingCopyFactory<Repository, Repository, GitContext> implements GitWorkingCopyFactory {
@Inject
public SimpleGitWorkingCopyFactory(WorkingCopyPool workdirProvider) {
super(workdirProvider);
public SimpleGitWorkingCopyFactory(WorkingCopyPool workdirProvider, MeterRegistry meterRegistry) {
super(workdirProvider, meterRegistry);
}
@Override

View File

@@ -26,6 +26,7 @@ package sonia.scm.repository.spi;
import com.github.sdorra.shiro.ShiroRule;
import com.github.sdorra.shiro.SubjectAware;
import io.micrometer.core.instrument.simple.SimpleMeterRegistry;
import org.apache.shiro.subject.SimplePrincipalCollection;
import org.apache.shiro.subject.Subject;
import org.eclipse.jgit.api.Git;
@@ -516,7 +517,7 @@ public class GitMergeCommandTest extends AbstractGitCommandTestBase {
}
private GitMergeCommand createCommand(Consumer<Git> interceptor) {
return new GitMergeCommand(createContext(), new SimpleGitWorkingCopyFactory(new NoneCachingWorkingCopyPool(new WorkdirProvider(repositoryLocationResolver)))) {
return new GitMergeCommand(createContext(), new SimpleGitWorkingCopyFactory(new NoneCachingWorkingCopyPool(new WorkdirProvider(repositoryLocationResolver)), new SimpleMeterRegistry())) {
@Override
<R, W extends GitCloneWorker<R>> R inClone(Function<Git, W> workerSupplier, GitWorkingCopyFactory workingCopyFactory, String initialBranch) {
Function<Git, W> interceptedWorkerSupplier = git -> {

View File

@@ -24,6 +24,7 @@
package sonia.scm.repository.spi;
import io.micrometer.core.instrument.simple.SimpleMeterRegistry;
import org.junit.Rule;
import org.junit.Test;
import sonia.scm.repository.spi.MergeConflictResult.SingleMergeConflict;
@@ -92,7 +93,7 @@ public class GitMergeCommand_Conflict_Test extends AbstractGitCommandTestBase {
}
private MergeConflictResult computeMergeConflictResult(String branchToMerge, String targetBranch) {
GitMergeCommand gitMergeCommand = new GitMergeCommand(createContext(), new SimpleGitWorkingCopyFactory(new NoneCachingWorkingCopyPool(new WorkdirProvider(repositoryLocationResolver))));
GitMergeCommand gitMergeCommand = new GitMergeCommand(createContext(), new SimpleGitWorkingCopyFactory(new NoneCachingWorkingCopyPool(new WorkdirProvider(repositoryLocationResolver)), new SimpleMeterRegistry()));
MergeCommandRequest mergeCommandRequest = new MergeCommandRequest();
mergeCommandRequest.setBranchToMerge(branchToMerge);
mergeCommandRequest.setTargetBranch(targetBranch);

View File

@@ -26,6 +26,7 @@ package sonia.scm.repository.spi;
import com.github.sdorra.shiro.ShiroRule;
import com.github.sdorra.shiro.SubjectAware;
import io.micrometer.core.instrument.simple.SimpleMeterRegistry;
import org.eclipse.jgit.api.Git;
import org.eclipse.jgit.api.errors.GitAPIException;
import org.eclipse.jgit.errors.CorruptObjectException;
@@ -72,7 +73,7 @@ class GitModifyCommandTestBase extends AbstractGitCommandTestBase {
GitModifyCommand createCommand() {
return new GitModifyCommand(
createContext(),
new SimpleGitWorkingCopyFactory(new NoneCachingWorkingCopyPool(new WorkdirProvider(repositoryLocationResolver))),
new SimpleGitWorkingCopyFactory(new NoneCachingWorkingCopyPool(new WorkdirProvider(repositoryLocationResolver)), new SimpleMeterRegistry()),
lfsBlobStoreFactory,
createGitRepositoryConfigStoreProvider());
}

View File

@@ -82,7 +82,7 @@ public class SimpleGitWorkingCopyFactoryTest extends AbstractGitCommandTestBase
@Test
public void emptyPoolShouldCreateNewWorkdir() {
SimpleGitWorkingCopyFactory factory = new SimpleGitWorkingCopyFactory(new NoneCachingWorkingCopyPool(workdirProvider));
SimpleGitWorkingCopyFactory factory = new SimpleGitWorkingCopyFactory(new NoneCachingWorkingCopyPool(workdirProvider), new SimpleMeterRegistry());
File masterRepo = createRepositoryDirectory();
try (WorkingCopy<Repository, Repository> workingCopy = factory.createWorkingCopy(createContext(), null)) {
@@ -100,7 +100,7 @@ public class SimpleGitWorkingCopyFactoryTest extends AbstractGitCommandTestBase
@Test
public void shouldCheckoutInitialBranch() {
SimpleGitWorkingCopyFactory factory = new SimpleGitWorkingCopyFactory(new NoneCachingWorkingCopyPool(workdirProvider));
SimpleGitWorkingCopyFactory factory = new SimpleGitWorkingCopyFactory(new NoneCachingWorkingCopyPool(workdirProvider), new SimpleMeterRegistry());
try (WorkingCopy<Repository, Repository> workingCopy = factory.createWorkingCopy(createContext(), "test-branch")) {
assertThat(new File(workingCopy.getWorkingRepository().getWorkTree(), "a.txt"))
@@ -112,7 +112,7 @@ public class SimpleGitWorkingCopyFactoryTest extends AbstractGitCommandTestBase
@Test
public void shouldCheckoutDefaultBranch() {
SimpleGitWorkingCopyFactory factory = new SimpleGitWorkingCopyFactory(new NoneCachingWorkingCopyPool(workdirProvider));
SimpleGitWorkingCopyFactory factory = new SimpleGitWorkingCopyFactory(new NoneCachingWorkingCopyPool(workdirProvider), new SimpleMeterRegistry());
try (WorkingCopy<Repository, Repository> workingCopy = factory.createWorkingCopy(createContext(), null)) {
assertThat(new File(workingCopy.getWorkingRepository().getWorkTree(), "a.txt"))
@@ -124,7 +124,7 @@ public class SimpleGitWorkingCopyFactoryTest extends AbstractGitCommandTestBase
@Test
public void cloneFromPoolShouldNotBeReused() {
SimpleGitWorkingCopyFactory factory = new SimpleGitWorkingCopyFactory(new NoneCachingWorkingCopyPool(workdirProvider));
SimpleGitWorkingCopyFactory factory = new SimpleGitWorkingCopyFactory(new NoneCachingWorkingCopyPool(workdirProvider), new SimpleMeterRegistry());
File firstDirectory;
try (WorkingCopy<Repository, Repository> workingCopy = factory.createWorkingCopy(createContext(), null)) {
@@ -138,7 +138,7 @@ public class SimpleGitWorkingCopyFactoryTest extends AbstractGitCommandTestBase
@Test
public void cloneFromPoolShouldBeDeletedOnClose() {
SimpleGitWorkingCopyFactory factory = new SimpleGitWorkingCopyFactory(new NoneCachingWorkingCopyPool(workdirProvider));
SimpleGitWorkingCopyFactory factory = new SimpleGitWorkingCopyFactory(new NoneCachingWorkingCopyPool(workdirProvider), new SimpleMeterRegistry());
File directory;
try (WorkingCopy<Repository, Repository> workingCopy = factory.createWorkingCopy(createContext(), null)) {
@@ -149,7 +149,7 @@ public class SimpleGitWorkingCopyFactoryTest extends AbstractGitCommandTestBase
@Test
public void shouldReclaimCleanDirectoryWithSameBranch() throws Exception {
SimpleGitWorkingCopyFactory factory = new SimpleGitWorkingCopyFactory(new NoneCachingWorkingCopyPool(workdirProvider));
SimpleGitWorkingCopyFactory factory = new SimpleGitWorkingCopyFactory(new NoneCachingWorkingCopyPool(workdirProvider), new SimpleMeterRegistry());
File workdir = createExistingClone(factory);
factory.reclaim(createContext(), workdir, "master");
@@ -159,7 +159,7 @@ public class SimpleGitWorkingCopyFactoryTest extends AbstractGitCommandTestBase
@Test
public void shouldReclaimCleanDirectoryWithOtherBranch() throws Exception {
SimpleGitWorkingCopyFactory factory = new SimpleGitWorkingCopyFactory(new NoneCachingWorkingCopyPool(workdirProvider));
SimpleGitWorkingCopyFactory factory = new SimpleGitWorkingCopyFactory(new NoneCachingWorkingCopyPool(workdirProvider), new SimpleMeterRegistry());
File workdir = createExistingClone(factory);
factory.reclaim(createContext(), workdir, "test-branch");
@@ -169,7 +169,7 @@ public class SimpleGitWorkingCopyFactoryTest extends AbstractGitCommandTestBase
@Test
public void shouldReclaimDirectoryWithDeletedFileInIndex() throws Exception {
SimpleGitWorkingCopyFactory factory = new SimpleGitWorkingCopyFactory(new NoneCachingWorkingCopyPool(workdirProvider));
SimpleGitWorkingCopyFactory factory = new SimpleGitWorkingCopyFactory(new NoneCachingWorkingCopyPool(workdirProvider), new SimpleMeterRegistry());
File workdir = createExistingClone(factory);
Git.open(workdir).rm().addFilepattern("a.txt").call();
@@ -180,7 +180,7 @@ public class SimpleGitWorkingCopyFactoryTest extends AbstractGitCommandTestBase
@Test
public void shouldReclaimDirectoryWithDeletedFileInDirectory() throws Exception {
SimpleGitWorkingCopyFactory factory = new SimpleGitWorkingCopyFactory(new NoneCachingWorkingCopyPool(workdirProvider));
SimpleGitWorkingCopyFactory factory = new SimpleGitWorkingCopyFactory(new NoneCachingWorkingCopyPool(workdirProvider), new SimpleMeterRegistry());
File workdir = createExistingClone(factory);
Files.delete(workdir.toPath().resolve("a.txt"));
@@ -191,7 +191,7 @@ public class SimpleGitWorkingCopyFactoryTest extends AbstractGitCommandTestBase
@Test
public void shouldReclaimDirectoryWithAdditionalFileInDirectory() throws Exception {
SimpleGitWorkingCopyFactory factory = new SimpleGitWorkingCopyFactory(new NoneCachingWorkingCopyPool(workdirProvider));
SimpleGitWorkingCopyFactory factory = new SimpleGitWorkingCopyFactory(new NoneCachingWorkingCopyPool(workdirProvider), new SimpleMeterRegistry());
File workdir = createExistingClone(factory);
Path newDirectory = workdir.toPath().resolve("new");
Files.createDirectories(newDirectory);

View File

@@ -32,6 +32,7 @@ import com.aragost.javahg.commands.PullCommand;
import com.aragost.javahg.commands.StatusCommand;
import com.aragost.javahg.commands.UpdateCommand;
import com.aragost.javahg.commands.flags.CloneCommandFlags;
import io.micrometer.core.instrument.MeterRegistry;
import sonia.scm.repository.HgExtensions;
import sonia.scm.repository.InternalRepositoryException;
import sonia.scm.repository.work.SimpleWorkingCopyFactory;
@@ -45,8 +46,8 @@ import java.io.IOException;
public class SimpleHgWorkingCopyFactory extends SimpleWorkingCopyFactory<Repository, Repository, HgCommandContext> implements HgWorkingCopyFactory {
@Inject
public SimpleHgWorkingCopyFactory(WorkingCopyPool workdirProvider) {
super(workdirProvider);
public SimpleHgWorkingCopyFactory(WorkingCopyPool workdirProvider, MeterRegistry meterRegistry) {
super(workdirProvider, meterRegistry);
}
@Override

View File

@@ -25,6 +25,7 @@
package sonia.scm.repository.spi;
import com.aragost.javahg.commands.PullCommand;
import io.micrometer.core.instrument.simple.SimpleMeterRegistry;
import org.junit.Before;
import org.junit.Test;
import sonia.scm.repository.Branch;
@@ -45,7 +46,7 @@ public class HgBranchCommandTest extends AbstractHgCommandTestBase {
@Before
public void initWorkingCopyFactory() {
workingCopyFactory = new SimpleHgWorkingCopyFactory(new NoneCachingWorkingCopyPool(new WorkdirProvider(repositoryLocationResolver))) {
workingCopyFactory = new SimpleHgWorkingCopyFactory(new NoneCachingWorkingCopyPool(new WorkdirProvider(repositoryLocationResolver)), new SimpleMeterRegistry()) {
@Override
public void configure(PullCommand pullCommand) {
// we do not want to configure http hooks in this unit test

View File

@@ -24,6 +24,7 @@
package sonia.scm.repository.spi;
import io.micrometer.core.instrument.simple.SimpleMeterRegistry;
import org.junit.Before;
import org.junit.Rule;
import org.junit.Test;
@@ -51,7 +52,7 @@ public class HgModifyCommandTest extends AbstractHgCommandTestBase {
@Before
public void initHgModifyCommand() {
SimpleHgWorkingCopyFactory workingCopyFactory = new SimpleHgWorkingCopyFactory(new NoneCachingWorkingCopyPool(new WorkdirProvider(repositoryLocationResolver))) {
SimpleHgWorkingCopyFactory workingCopyFactory = new SimpleHgWorkingCopyFactory(new NoneCachingWorkingCopyPool(new WorkdirProvider(repositoryLocationResolver)), new SimpleMeterRegistry()) {
@Override
public void configure(com.aragost.javahg.commands.PullCommand pullCommand) {
// we do not want to configure http hooks in this unit test

View File

@@ -25,6 +25,7 @@
package sonia.scm.repository.spi;
import com.aragost.javahg.commands.PullCommand;
import io.micrometer.core.instrument.simple.SimpleMeterRegistry;
import org.junit.Before;
import org.junit.Test;
import sonia.scm.repository.Tag;
@@ -44,7 +45,7 @@ public class HgTagCommandTest extends AbstractHgCommandTestBase {
@Before
public void initWorkingCopyFactory() {
workingCopyFactory = new SimpleHgWorkingCopyFactory(new NoneCachingWorkingCopyPool(new WorkdirProvider(repositoryLocationResolver))) {
workingCopyFactory = new SimpleHgWorkingCopyFactory(new NoneCachingWorkingCopyPool(new WorkdirProvider(repositoryLocationResolver)), new SimpleMeterRegistry()) {
@Override
public void configure(PullCommand pullCommand) {
// we do not want to configure http hooks in this unit test

View File

@@ -25,6 +25,7 @@
package sonia.scm.repository.spi;
import com.aragost.javahg.Repository;
import io.micrometer.core.instrument.simple.SimpleMeterRegistry;
import org.junit.Before;
import org.junit.Rule;
import org.junit.Test;
@@ -53,7 +54,7 @@ public class SimpleHgWorkingCopyFactoryTest extends AbstractHgCommandTestBase {
@Before
public void bindScmProtocol() throws IOException {
workdirProvider = new WorkdirProvider(temporaryFolder.newFolder(), repositoryLocationResolver, false);
workingCopyFactory = new SimpleHgWorkingCopyFactory(new SimpleCachingWorkingCopyPool(workdirProvider)) {
workingCopyFactory = new SimpleHgWorkingCopyFactory(new SimpleCachingWorkingCopyPool(workdirProvider), new SimpleMeterRegistry()) {
@Override
public void configure(com.aragost.javahg.commands.PullCommand pullCommand) {
// we do not want to configure http hooks in this unit test

View File

@@ -24,6 +24,7 @@
package sonia.scm.repository.spi;
import io.micrometer.core.instrument.MeterRegistry;
import sonia.scm.repository.SvnWorkingCopyFactory;
import sonia.scm.repository.work.SimpleWorkingCopyFactory;
import sonia.scm.repository.work.WorkingCopyPool;
@@ -34,8 +35,8 @@ import java.io.File;
public class SimpleSvnWorkingCopyFactory extends SimpleWorkingCopyFactory<File, File, SvnContext> implements SvnWorkingCopyFactory {
@Inject
public SimpleSvnWorkingCopyFactory(WorkingCopyPool workingCopyPool) {
super(workingCopyPool);
public SimpleSvnWorkingCopyFactory(WorkingCopyPool workingCopyPool, MeterRegistry meterRegistry) {
super(workingCopyPool, meterRegistry);
}
@Override

View File

@@ -24,6 +24,7 @@
package sonia.scm.repository.spi;
import io.micrometer.core.instrument.simple.SimpleMeterRegistry;
import org.junit.Before;
import org.junit.Rule;
import org.junit.Test;
@@ -54,7 +55,7 @@ public class SimpleSvnWorkingCopyFactoryTest extends AbstractSvnCommandTestBase
@Test
public void shouldCheckoutLatestRevision() throws SVNException, IOException {
SimpleSvnWorkingCopyFactory factory = new SimpleSvnWorkingCopyFactory(new NoneCachingWorkingCopyPool(workdirProvider));
SimpleSvnWorkingCopyFactory factory = new SimpleSvnWorkingCopyFactory(new NoneCachingWorkingCopyPool(workdirProvider), new SimpleMeterRegistry());
try (WorkingCopy<File, File> workingCopy = factory.createWorkingCopy(createContext(), null)) {
assertThat(new File(workingCopy.getWorkingRepository(), "a.txt"))
@@ -66,7 +67,7 @@ public class SimpleSvnWorkingCopyFactoryTest extends AbstractSvnCommandTestBase
@Test
public void cloneFromPoolShouldNotBeReused() {
SimpleSvnWorkingCopyFactory factory = new SimpleSvnWorkingCopyFactory(new NoneCachingWorkingCopyPool(workdirProvider));
SimpleSvnWorkingCopyFactory factory = new SimpleSvnWorkingCopyFactory(new NoneCachingWorkingCopyPool(workdirProvider), new SimpleMeterRegistry());
File firstDirectory;
try (WorkingCopy<File, File> workingCopy = factory.createWorkingCopy(createContext(), null)) {
@@ -80,7 +81,7 @@ public class SimpleSvnWorkingCopyFactoryTest extends AbstractSvnCommandTestBase
@Test
public void shouldDeleteCloneOnClose() {
SimpleSvnWorkingCopyFactory factory = new SimpleSvnWorkingCopyFactory(new NoneCachingWorkingCopyPool(workdirProvider));
SimpleSvnWorkingCopyFactory factory = new SimpleSvnWorkingCopyFactory(new NoneCachingWorkingCopyPool(workdirProvider), new SimpleMeterRegistry());
File directory;
File workingRepository;
@@ -95,7 +96,7 @@ public class SimpleSvnWorkingCopyFactoryTest extends AbstractSvnCommandTestBase
@Test
public void shouldDeleteUntrackedFileOnReclaim() throws IOException {
SimpleSvnWorkingCopyFactory factory = new SimpleSvnWorkingCopyFactory(new SimpleCachingWorkingCopyPool(workdirProvider));
SimpleSvnWorkingCopyFactory factory = new SimpleSvnWorkingCopyFactory(new SimpleCachingWorkingCopyPool(workdirProvider), new SimpleMeterRegistry());
WorkingCopy<File, File> workingCopy = factory.createWorkingCopy(createContext(), null);
File directory = workingCopy.getWorkingRepository();
@@ -113,7 +114,7 @@ public class SimpleSvnWorkingCopyFactoryTest extends AbstractSvnCommandTestBase
@Test
public void shouldRestoreDeletedFileOnReclaim() throws IOException {
SimpleSvnWorkingCopyFactory factory = new SimpleSvnWorkingCopyFactory(new SimpleCachingWorkingCopyPool(workdirProvider));
SimpleSvnWorkingCopyFactory factory = new SimpleSvnWorkingCopyFactory(new SimpleCachingWorkingCopyPool(workdirProvider), new SimpleMeterRegistry());
WorkingCopy<File, File> workingCopy = factory.createWorkingCopy(createContext(), null);
File directory = workingCopy.getWorkingRepository();

View File

@@ -24,6 +24,7 @@
package sonia.scm.repository.spi;
import io.micrometer.core.instrument.simple.SimpleMeterRegistry;
import org.apache.shiro.subject.Subject;
import org.apache.shiro.util.ThreadContext;
import org.junit.After;
@@ -57,7 +58,7 @@ public class SvnModifyCommandTest extends AbstractSvnCommandTestBase {
@Before
public void initSvnModifyCommand() {
context = createContext();
workingCopyFactory = new SimpleSvnWorkingCopyFactory(new NoneCachingWorkingCopyPool(new WorkdirProvider(context.getDirectory(), repositoryLocationResolver, false)));
workingCopyFactory = new SimpleSvnWorkingCopyFactory(new NoneCachingWorkingCopyPool(new WorkdirProvider(context.getDirectory(), repositoryLocationResolver, false)), new SimpleMeterRegistry());
svnModifyCommand = new SvnModifyCommand(context, workingCopyFactory);
}