Fix timeout for repository settings api
This commit is contained in:
parent
e000761fac
commit
c4155fb706
@ -29,16 +29,13 @@ import com.google.common.util.concurrent.Futures;
|
|||||||
import com.google.common.util.concurrent.ListenableFuture;
|
import com.google.common.util.concurrent.ListenableFuture;
|
||||||
import com.google.common.util.concurrent.MoreExecutors;
|
import com.google.common.util.concurrent.MoreExecutors;
|
||||||
import io.swagger.v3.oas.annotations.Parameter;
|
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.Cookie;
|
||||||
import jakarta.servlet.http.HttpServletRequest;
|
import jakarta.servlet.http.HttpServletRequest;
|
||||||
import jakarta.servlet.http.HttpServletResponse;
|
import jakarta.servlet.http.HttpServletResponse;
|
||||||
import lombok.RequiredArgsConstructor;
|
import lombok.RequiredArgsConstructor;
|
||||||
import lombok.extern.slf4j.Slf4j;
|
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.HttpStatus;
|
||||||
import org.springframework.http.MediaType;
|
|
||||||
import org.springframework.security.access.prepost.PreAuthorize;
|
import org.springframework.security.access.prepost.PreAuthorize;
|
||||||
import org.springframework.web.bind.annotation.GetMapping;
|
import org.springframework.web.bind.annotation.GetMapping;
|
||||||
import org.springframework.web.bind.annotation.PathVariable;
|
import org.springframework.web.bind.annotation.PathVariable;
|
||||||
@ -120,6 +117,9 @@ public class AdminController extends BaseController {
|
|||||||
private final SystemInfoService systemInfoService;
|
private final SystemInfoService systemInfoService;
|
||||||
private final AuditLogService auditLogService;
|
private final AuditLogService auditLogService;
|
||||||
|
|
||||||
|
@Value("${queue.vc.request-timeout:180000}")
|
||||||
|
private int vcRequestTimeout;
|
||||||
|
|
||||||
@ApiOperation(value = "Get the Administration Settings object using key (getAdminSettings)",
|
@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)
|
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')")
|
@PreAuthorize("hasAuthority('SYS_ADMIN')")
|
||||||
@ -308,7 +308,7 @@ public class AdminController extends BaseController {
|
|||||||
savedSettings.setPrivateKey(null);
|
savedSettings.setPrivateKey(null);
|
||||||
savedSettings.setPrivateKeyPassword(null);
|
savedSettings.setPrivateKeyPassword(null);
|
||||||
return savedSettings;
|
return savedSettings;
|
||||||
}, MoreExecutors.directExecutor()));
|
}, MoreExecutors.directExecutor()), vcRequestTimeout);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ApiOperation(value = "Delete repository settings (deleteRepositorySettings)",
|
@ApiOperation(value = "Delete repository settings (deleteRepositorySettings)",
|
||||||
@ -319,7 +319,7 @@ public class AdminController extends BaseController {
|
|||||||
@ResponseStatus(value = HttpStatus.OK)
|
@ResponseStatus(value = HttpStatus.OK)
|
||||||
public DeferredResult<Void> deleteRepositorySettings() throws Exception {
|
public DeferredResult<Void> deleteRepositorySettings() throws Exception {
|
||||||
accessControlService.checkPermission(getCurrentUser(), Resource.VERSION_CONTROL, Operation.DELETE);
|
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)",
|
@ApiOperation(value = "Check repository access (checkRepositoryAccess)",
|
||||||
@ -331,7 +331,7 @@ public class AdminController extends BaseController {
|
|||||||
@RequestBody RepositorySettings settings) throws Exception {
|
@RequestBody RepositorySettings settings) throws Exception {
|
||||||
accessControlService.checkPermission(getCurrentUser(), Resource.VERSION_CONTROL, Operation.READ);
|
accessControlService.checkPermission(getCurrentUser(), Resource.VERSION_CONTROL, Operation.READ);
|
||||||
settings = checkNotNull(settings);
|
settings = checkNotNull(settings);
|
||||||
return wrapFuture(versionControlService.checkVersionControlAccess(getTenantId(), settings));
|
return wrapFuture(versionControlService.checkVersionControlAccess(getTenantId(), settings), vcRequestTimeout);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ApiOperation(value = "Get auto commit settings (getAutoCommitSettings)",
|
@ApiOperation(value = "Get auto commit settings (getAutoCommitSettings)",
|
||||||
|
|||||||
@ -119,6 +119,7 @@ public class VersionControlTest extends AbstractControllerTest {
|
|||||||
protected User tenantAdmin2;
|
protected User tenantAdmin2;
|
||||||
|
|
||||||
private String repoKey;
|
private String repoKey;
|
||||||
|
private String branch;
|
||||||
|
|
||||||
@Before
|
@Before
|
||||||
public void beforeEach() throws Exception {
|
public void beforeEach() throws Exception {
|
||||||
@ -146,6 +147,7 @@ public class VersionControlTest extends AbstractControllerTest {
|
|||||||
this.tenantAdmin2 = createUser(tenantAdmin2, tenantAdmin2.getEmail());
|
this.tenantAdmin2 = createUser(tenantAdmin2, tenantAdmin2.getEmail());
|
||||||
|
|
||||||
this.repoKey = UUID.randomUUID().toString();
|
this.repoKey = UUID.randomUUID().toString();
|
||||||
|
this.branch = "test_" + repoKey;
|
||||||
configureRepository(tenantId1);
|
configureRepository(tenantId1);
|
||||||
configureRepository(tenantId2);
|
configureRepository(tenantId2);
|
||||||
|
|
||||||
@ -618,7 +620,7 @@ public class VersionControlTest extends AbstractControllerTest {
|
|||||||
private String createVersion(String name, EntityType... entityTypes) throws Exception {
|
private String createVersion(String name, EntityType... entityTypes) throws Exception {
|
||||||
ComplexVersionCreateRequest request = new ComplexVersionCreateRequest();
|
ComplexVersionCreateRequest request = new ComplexVersionCreateRequest();
|
||||||
request.setVersionName(name);
|
request.setVersionName(name);
|
||||||
request.setBranch("test");
|
request.setBranch(branch);
|
||||||
request.setSyncStrategy(SyncStrategy.MERGE);
|
request.setSyncStrategy(SyncStrategy.MERGE);
|
||||||
request.setEntityTypes(Arrays.stream(entityTypes).collect(Collectors.toMap(t -> t, entityType -> {
|
request.setEntityTypes(Arrays.stream(entityTypes).collect(Collectors.toMap(t -> t, entityType -> {
|
||||||
EntityTypeVersionCreateConfig config = new EntityTypeVersionCreateConfig();
|
EntityTypeVersionCreateConfig config = new EntityTypeVersionCreateConfig();
|
||||||
@ -645,7 +647,7 @@ public class VersionControlTest extends AbstractControllerTest {
|
|||||||
private String createVersion(String name, EntityId... entities) throws Exception {
|
private String createVersion(String name, EntityId... entities) throws Exception {
|
||||||
ComplexVersionCreateRequest request = new ComplexVersionCreateRequest();
|
ComplexVersionCreateRequest request = new ComplexVersionCreateRequest();
|
||||||
request.setVersionName(name);
|
request.setVersionName(name);
|
||||||
request.setBranch("test");
|
request.setBranch(branch);
|
||||||
request.setSyncStrategy(SyncStrategy.MERGE);
|
request.setSyncStrategy(SyncStrategy.MERGE);
|
||||||
request.setEntityTypes(new HashMap<>());
|
request.setEntityTypes(new HashMap<>());
|
||||||
Map<EntityType, List<EntityId>> entitiesByType = Arrays.stream(entities)
|
Map<EntityType, List<EntityId>> entitiesByType = Arrays.stream(entities)
|
||||||
@ -677,11 +679,13 @@ public class VersionControlTest extends AbstractControllerTest {
|
|||||||
return result.getVersion().getId();
|
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);
|
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();
|
EntityTypeVersionLoadRequest request = new EntityTypeVersionLoadRequest();
|
||||||
request.setVersionId(versionId);
|
request.setVersionId(versionId);
|
||||||
request.setRollbackOnError(true);
|
request.setRollbackOnError(true);
|
||||||
@ -698,17 +702,14 @@ public class VersionControlTest extends AbstractControllerTest {
|
|||||||
|
|
||||||
UUID requestId = doPost("/api/entities/vc/entity", request, UUID.class);
|
UUID requestId = doPost("/api/entities/vc/entity", request, UUID.class);
|
||||||
VersionLoadResult result = await().atMost(30, TimeUnit.SECONDS)
|
VersionLoadResult result = await().atMost(30, TimeUnit.SECONDS)
|
||||||
.until(() -> doGet("/api/entities/vc/entity/" + requestId + "/status", VersionLoadResult.class), r -> {
|
.until(() -> doGet("/api/entities/vc/entity/" + requestId + "/status", VersionLoadResult.class), VersionLoadResult::isDone);
|
||||||
if (r.getError() != null) {
|
if (result.getError() != null) {
|
||||||
throw new RuntimeException("Failed to load version: " + r.getError());
|
throw new RuntimeException("Failed to load version: " + result);
|
||||||
}
|
}
|
||||||
return r.isDone();
|
|
||||||
});
|
|
||||||
return result.getResult().stream().collect(Collectors.toMap(EntityTypeLoadResult::getEntityType, r -> r));
|
return result.getResult().stream().collect(Collectors.toMap(EntityTypeLoadResult::getEntityType, r -> r));
|
||||||
}
|
}
|
||||||
|
|
||||||
private List<EntityVersion> listVersions() throws Exception {
|
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>>() {});
|
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();
|
return versions.getData();
|
||||||
}
|
}
|
||||||
@ -716,7 +717,7 @@ public class VersionControlTest extends AbstractControllerTest {
|
|||||||
private void configureRepository(TenantId tenantId) throws Exception {
|
private void configureRepository(TenantId tenantId) throws Exception {
|
||||||
RepositorySettings repositorySettings = new RepositorySettings();
|
RepositorySettings repositorySettings = new RepositorySettings();
|
||||||
repositorySettings.setLocalOnly(true);
|
repositorySettings.setLocalOnly(true);
|
||||||
repositorySettings.setDefaultBranch("test");
|
repositorySettings.setDefaultBranch(branch);
|
||||||
repositorySettings.setAuthMethod(RepositoryAuthMethod.USERNAME_PASSWORD);
|
repositorySettings.setAuthMethod(RepositoryAuthMethod.USERNAME_PASSWORD);
|
||||||
repositorySettings.setRepositoryUri(repoKey);
|
repositorySettings.setRepositoryUri(repoKey);
|
||||||
versionControlService.saveVersionControlSettings(tenantId, repositorySettings).get();
|
versionControlService.saveVersionControlSettings(tenantId, repositorySettings).get();
|
||||||
|
|||||||
@ -81,8 +81,6 @@ public class DefaultGitRepositoryService implements GitRepositoryService {
|
|||||||
GitRepository repository = checkRepository(commit.getTenantId());
|
GitRepository repository = checkRepository(commit.getTenantId());
|
||||||
String branch = commit.getBranch();
|
String branch = commit.getBranch();
|
||||||
try {
|
try {
|
||||||
repository.fetch();
|
|
||||||
|
|
||||||
List<String> branches = repository.listBranches().stream().map(BranchInfo::getName).toList();
|
List<String> branches = repository.listBranches().stream().map(BranchInfo::getName).toList();
|
||||||
if (repository.getSettings().isLocalOnly()) {
|
if (repository.getSettings().isLocalOnly()) {
|
||||||
if (branches.contains(commit.getBranch())) {
|
if (branches.contains(commit.getBranch())) {
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user