Fix timeout for repository settings api

This commit is contained in:
ViacheslavKlimov 2024-06-21 14:48:35 +03:00
parent e000761fac
commit c4155fb706
3 changed files with 20 additions and 21 deletions

View File

@ -29,16 +29,13 @@ import com.google.common.util.concurrent.Futures;
import com.google.common.util.concurrent.ListenableFuture;
import com.google.common.util.concurrent.MoreExecutors;
import io.swagger.v3.oas.annotations.Parameter;
import io.swagger.v3.oas.annotations.media.Content;
import io.swagger.v3.oas.annotations.responses.ApiResponse;
import jakarta.servlet.http.Cookie;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.context.annotation.Lazy;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.http.HttpStatus;
import org.springframework.http.MediaType;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
@ -120,6 +117,9 @@ public class AdminController extends BaseController {
private final SystemInfoService systemInfoService;
private final AuditLogService auditLogService;
@Value("${queue.vc.request-timeout:180000}")
private int vcRequestTimeout;
@ApiOperation(value = "Get the Administration Settings object using key (getAdminSettings)",
notes = "Get the Administration Settings object using specified string key. Referencing non-existing key will cause an error." + SYSTEM_AUTHORITY_PARAGRAPH)
@PreAuthorize("hasAuthority('SYS_ADMIN')")
@ -308,7 +308,7 @@ public class AdminController extends BaseController {
savedSettings.setPrivateKey(null);
savedSettings.setPrivateKeyPassword(null);
return savedSettings;
}, MoreExecutors.directExecutor()));
}, MoreExecutors.directExecutor()), vcRequestTimeout);
}
@ApiOperation(value = "Delete repository settings (deleteRepositorySettings)",
@ -319,7 +319,7 @@ public class AdminController extends BaseController {
@ResponseStatus(value = HttpStatus.OK)
public DeferredResult<Void> deleteRepositorySettings() throws Exception {
accessControlService.checkPermission(getCurrentUser(), Resource.VERSION_CONTROL, Operation.DELETE);
return wrapFuture(versionControlService.deleteVersionControlSettings(getTenantId()));
return wrapFuture(versionControlService.deleteVersionControlSettings(getTenantId()), vcRequestTimeout);
}
@ApiOperation(value = "Check repository access (checkRepositoryAccess)",
@ -331,7 +331,7 @@ public class AdminController extends BaseController {
@RequestBody RepositorySettings settings) throws Exception {
accessControlService.checkPermission(getCurrentUser(), Resource.VERSION_CONTROL, Operation.READ);
settings = checkNotNull(settings);
return wrapFuture(versionControlService.checkVersionControlAccess(getTenantId(), settings));
return wrapFuture(versionControlService.checkVersionControlAccess(getTenantId(), settings), vcRequestTimeout);
}
@ApiOperation(value = "Get auto commit settings (getAutoCommitSettings)",

View File

@ -119,6 +119,7 @@ public class VersionControlTest extends AbstractControllerTest {
protected User tenantAdmin2;
private String repoKey;
private String branch;
@Before
public void beforeEach() throws Exception {
@ -146,6 +147,7 @@ public class VersionControlTest extends AbstractControllerTest {
this.tenantAdmin2 = createUser(tenantAdmin2, tenantAdmin2.getEmail());
this.repoKey = UUID.randomUUID().toString();
this.branch = "test_" + repoKey;
configureRepository(tenantId1);
configureRepository(tenantId2);
@ -618,7 +620,7 @@ public class VersionControlTest extends AbstractControllerTest {
private String createVersion(String name, EntityType... entityTypes) throws Exception {
ComplexVersionCreateRequest request = new ComplexVersionCreateRequest();
request.setVersionName(name);
request.setBranch("test");
request.setBranch(branch);
request.setSyncStrategy(SyncStrategy.MERGE);
request.setEntityTypes(Arrays.stream(entityTypes).collect(Collectors.toMap(t -> t, entityType -> {
EntityTypeVersionCreateConfig config = new EntityTypeVersionCreateConfig();
@ -645,7 +647,7 @@ public class VersionControlTest extends AbstractControllerTest {
private String createVersion(String name, EntityId... entities) throws Exception {
ComplexVersionCreateRequest request = new ComplexVersionCreateRequest();
request.setVersionName(name);
request.setBranch("test");
request.setBranch(branch);
request.setSyncStrategy(SyncStrategy.MERGE);
request.setEntityTypes(new HashMap<>());
Map<EntityType, List<EntityId>> entitiesByType = Arrays.stream(entities)
@ -677,11 +679,13 @@ public class VersionControlTest extends AbstractControllerTest {
return result.getVersion().getId();
}
private Map<EntityType, EntityTypeLoadResult> loadVersion(String versionId, EntityType... entityTypes) {
private Map<EntityType, EntityTypeLoadResult> loadVersion(String versionId, EntityType... entityTypes) throws Exception {
return loadVersion(versionId, config -> {}, entityTypes);
}
private Map<EntityType, EntityTypeLoadResult> loadVersion(String versionId, Consumer<EntityTypeVersionLoadConfig> configModifier, EntityType... entityTypes) {
private Map<EntityType, EntityTypeLoadResult> loadVersion(String versionId, Consumer<EntityTypeVersionLoadConfig> configModifier, EntityType... entityTypes) throws Exception {
assertThat(listVersions()).extracting(EntityVersion::getId).contains(versionId);
EntityTypeVersionLoadRequest request = new EntityTypeVersionLoadRequest();
request.setVersionId(versionId);
request.setRollbackOnError(true);
@ -698,17 +702,14 @@ public class VersionControlTest extends AbstractControllerTest {
UUID requestId = doPost("/api/entities/vc/entity", request, UUID.class);
VersionLoadResult result = await().atMost(30, TimeUnit.SECONDS)
.until(() -> doGet("/api/entities/vc/entity/" + requestId + "/status", VersionLoadResult.class), r -> {
if (r.getError() != null) {
throw new RuntimeException("Failed to load version: " + r.getError());
}
return r.isDone();
});
.until(() -> doGet("/api/entities/vc/entity/" + requestId + "/status", VersionLoadResult.class), VersionLoadResult::isDone);
if (result.getError() != null) {
throw new RuntimeException("Failed to load version: " + result);
}
return result.getResult().stream().collect(Collectors.toMap(EntityTypeLoadResult::getEntityType, r -> r));
}
private List<EntityVersion> listVersions() throws Exception {
String branch = "test";
PageData<EntityVersion> versions = doGetAsyncTyped("/api/entities/vc/version?branch=" + branch + "&pageSize=100&page=0&sortProperty=timestamp&sortOrder=DESC", new TypeReference<PageData<EntityVersion>>() {});
return versions.getData();
}
@ -716,7 +717,7 @@ public class VersionControlTest extends AbstractControllerTest {
private void configureRepository(TenantId tenantId) throws Exception {
RepositorySettings repositorySettings = new RepositorySettings();
repositorySettings.setLocalOnly(true);
repositorySettings.setDefaultBranch("test");
repositorySettings.setDefaultBranch(branch);
repositorySettings.setAuthMethod(RepositoryAuthMethod.USERNAME_PASSWORD);
repositorySettings.setRepositoryUri(repoKey);
versionControlService.saveVersionControlSettings(tenantId, repositorySettings).get();

View File

@ -81,8 +81,6 @@ public class DefaultGitRepositoryService implements GitRepositoryService {
GitRepository repository = checkRepository(commit.getTenantId());
String branch = commit.getBranch();
try {
repository.fetch();
List<String> branches = repository.listBranches().stream().map(BranchInfo::getName).toList();
if (repository.getSettings().isLocalOnly()) {
if (branches.contains(commit.getBranch())) {