chore: removal of transfer solution (#25288)

This commit is contained in:
Manish Kumar 2023-07-11 14:30:10 +05:30 committed by GitHub
parent fe59f0196e
commit e9dae0102d
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
10 changed files with 18 additions and 168 deletions

View File

@ -4,7 +4,6 @@ import com.appsmith.server.helpers.PluginExecutorHelper;
import com.appsmith.server.repositories.DatasourceStorageRepository;
import com.appsmith.server.services.ce.DatasourceStorageServiceCEImpl;
import com.appsmith.server.solutions.DatasourcePermission;
import com.appsmith.server.solutions.DatasourceStorageTransferSolution;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
@ -13,17 +12,10 @@ import org.springframework.stereotype.Service;
public class DatasourceStorageServiceImpl extends DatasourceStorageServiceCEImpl implements DatasourceStorageService {
public DatasourceStorageServiceImpl(
DatasourceStorageRepository repository,
DatasourceStorageTransferSolution datasourceStorageTransferSolution,
DatasourcePermission datasourcePermission,
PluginService pluginService,
PluginExecutorHelper pluginExecutorHelper,
AnalyticsService analyticsService) {
super(
repository,
datasourceStorageTransferSolution,
datasourcePermission,
pluginService,
pluginExecutorHelper,
analyticsService);
super(repository, datasourcePermission, pluginService, pluginExecutorHelper, analyticsService);
}
}

View File

@ -16,11 +16,7 @@ import com.appsmith.server.repositories.DatasourceStorageRepository;
import com.appsmith.server.services.AnalyticsService;
import com.appsmith.server.services.PluginService;
import com.appsmith.server.solutions.DatasourcePermission;
import com.appsmith.server.solutions.DatasourceStorageTransferSolution;
import com.mongodb.MongoServerException;
import lombok.extern.slf4j.Slf4j;
import org.springframework.dao.DuplicateKeyException;
import org.springframework.data.mongodb.UncategorizedMongoDbException;
import org.springframework.util.CollectionUtils;
import org.springframework.util.StringUtils;
import reactor.core.publisher.Flux;
@ -39,7 +35,6 @@ import static java.lang.Boolean.TRUE;
public class DatasourceStorageServiceCEImpl implements DatasourceStorageServiceCE {
protected final DatasourceStorageRepository repository;
private final DatasourceStorageTransferSolution datasourceStorageTransferSolution;
private final DatasourcePermission datasourcePermission;
private final PluginService pluginService;
private final PluginExecutorHelper pluginExecutorHelper;
@ -47,13 +42,11 @@ public class DatasourceStorageServiceCEImpl implements DatasourceStorageServiceC
public DatasourceStorageServiceCEImpl(
DatasourceStorageRepository repository,
DatasourceStorageTransferSolution datasourceStorageTransferSolution,
DatasourcePermission datasourcePermission,
PluginService pluginService,
PluginExecutorHelper pluginExecutorHelper,
AnalyticsService analyticsService) {
this.repository = repository;
this.datasourceStorageTransferSolution = datasourceStorageTransferSolution;
this.datasourcePermission = datasourcePermission;
this.pluginService = pluginService;
this.pluginExecutorHelper = pluginExecutorHelper;
@ -86,21 +79,8 @@ public class DatasourceStorageServiceCEImpl implements DatasourceStorageServiceC
datasourceStorage.prepareTransientFields(datasource);
return datasourceStorage;
})
// TODO: This is a temporary call being made till storage transfer migrations are done
.switchIfEmpty(Mono.defer(() ->
datasourceStorageTransferSolution.transferAndGetDatasourceStorage(datasource, environmentId)))
.onErrorResume(
e -> e instanceof DuplicateKeyException
|| e instanceof MongoServerException
|| e instanceof UncategorizedMongoDbException,
error -> {
if (error.getMessage() != null
&& error.getMessage().contains("datasource_storage_compound_index")) {
// The duplicate key error is because of the `name` field.
return findByDatasourceAndEnvironmentId(datasource, environmentId);
}
return Mono.error(error);
});
.switchIfEmpty(
Mono.error(new AppsmithException(AppsmithError.NO_RESOURCE_FOUND, FieldName.DATASOURCE)));
}
@Override
@ -112,22 +92,12 @@ public class DatasourceStorageServiceCEImpl implements DatasourceStorageServiceC
@Override
public Flux<DatasourceStorage> findByDatasource(Datasource datasource) {
return this.findByDatasourceId(datasource.getId())
// TODO: This is a temporary call being made till storage transfer migrations are done
.switchIfEmpty(Mono.defer(
() -> datasourceStorageTransferSolution.transferToFallbackEnvironmentAndGetDatasourceStorage(
datasource)))
.onErrorResume(
e -> e instanceof DuplicateKeyException
|| e instanceof MongoServerException
|| e instanceof UncategorizedMongoDbException,
error -> {
if (error.getMessage() != null
&& error.getMessage().contains("datasource_storage_compound_index")) {
// The duplicate key error is because of the `name` field.
return findByDatasource(datasource);
}
return Mono.error(error);
});
.map(datasourceStorage -> {
datasourceStorage.prepareTransientFields(datasource);
return datasourceStorage;
})
.switchIfEmpty(
Mono.error(new AppsmithException(AppsmithError.NO_RESOURCE_FOUND, FieldName.DATASOURCE)));
}
protected Mono<DatasourceStorage> findByDatasourceIdAndEnvironmentId(String datasourceId, String environmentId) {

View File

@ -35,8 +35,7 @@ public class ActionExecutionSolutionImpl extends ActionExecutionSolutionCEImpl i
AuthenticationValidator authenticationValidator,
DatasourcePermission datasourcePermission,
AnalyticsService analyticsService,
DatasourceStorageService datasourceStorageService,
DatasourceStorageTransferSolution datasourceStorageTransferSolution) {
DatasourceStorageService datasourceStorageService) {
super(
newActionService,
actionPermission,
@ -53,7 +52,6 @@ public class ActionExecutionSolutionImpl extends ActionExecutionSolutionCEImpl i
authenticationValidator,
datasourcePermission,
analyticsService,
datasourceStorageService,
datasourceStorageTransferSolution);
datasourceStorageService);
}
}

View File

@ -1,5 +0,0 @@
package com.appsmith.server.solutions;
import com.appsmith.server.solutions.ce.DatasourceStorageTransferSolutionCE;
public interface DatasourceStorageTransferSolution extends DatasourceStorageTransferSolutionCE {}

View File

@ -1,20 +0,0 @@
package com.appsmith.server.solutions;
import com.appsmith.server.repositories.DatasourceRepository;
import com.appsmith.server.repositories.DatasourceStorageRepository;
import com.appsmith.server.services.WorkspaceService;
import com.appsmith.server.solutions.ce.DatasourceStorageTransferSolutionCEImpl;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
@Service
@Slf4j
public class DatasourceStorageTransferSolutionImpl extends DatasourceStorageTransferSolutionCEImpl
implements DatasourceStorageTransferSolution {
public DatasourceStorageTransferSolutionImpl(
DatasourceRepository datasourceRepository,
DatasourceStorageRepository datasourceStorageRepository,
WorkspaceService workspaceService) {
super(datasourceRepository, datasourceStorageRepository, workspaceService);
}
}

View File

@ -41,7 +41,6 @@ import com.appsmith.server.services.PluginService;
import com.appsmith.server.services.SessionUserService;
import com.appsmith.server.solutions.ActionPermission;
import com.appsmith.server.solutions.DatasourcePermission;
import com.appsmith.server.solutions.DatasourceStorageTransferSolution;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.core.type.TypeReference;
import com.fasterxml.jackson.databind.JsonNode;
@ -122,7 +121,6 @@ public class ActionExecutionSolutionCEImpl implements ActionExecutionSolutionCE
static final String EXECUTE_ACTION_DTO = "executeActionDTO";
static final String PARAMETER_MAP = "parameterMap";
List<Pattern> patternList = new ArrayList<>();
private DatasourceStorageTransferSolution datasourceStorageTransferSolution;
public ActionExecutionSolutionCEImpl(
NewActionService newActionService,
@ -140,8 +138,7 @@ public class ActionExecutionSolutionCEImpl implements ActionExecutionSolutionCE
AuthenticationValidator authenticationValidator,
DatasourcePermission datasourcePermission,
AnalyticsService analyticsService,
DatasourceStorageService datasourceStorageService,
DatasourceStorageTransferSolution datasourceStorageTransferSolution) {
DatasourceStorageService datasourceStorageService) {
this.newActionService = newActionService;
this.actionPermission = actionPermission;
this.observationRegistry = observationRegistry;
@ -158,7 +155,6 @@ public class ActionExecutionSolutionCEImpl implements ActionExecutionSolutionCE
this.datasourcePermission = datasourcePermission;
this.analyticsService = analyticsService;
this.datasourceStorageService = datasourceStorageService;
this.datasourceStorageTransferSolution = datasourceStorageTransferSolution;
this.patternList.add(Pattern.compile(PARAM_KEY_REGEX));
this.patternList.add(Pattern.compile(BLOB_KEY_REGEX));
@ -508,9 +504,8 @@ public class ActionExecutionSolutionCEImpl implements ActionExecutionSolutionCE
} else if (datasource == null) {
datasourceStorageMono = Mono.empty();
} else {
// For embedded datasources, we are simply relying on datasource configuration property
datasourceStorageMono = Mono.just(datasourceStorageTransferSolution.initializeDatasourceStorage(
datasource, environmentId));
// For embedded datasource, we are simply relying on datasource configuration property
datasourceStorageMono = Mono.just(new DatasourceStorage(datasource, environmentId));
}
return datasourceStorageMono

View File

@ -1,13 +0,0 @@
package com.appsmith.server.solutions.ce;
import com.appsmith.external.models.Datasource;
import com.appsmith.external.models.DatasourceStorage;
import reactor.core.publisher.Mono;
public interface DatasourceStorageTransferSolutionCE {
DatasourceStorage initializeDatasourceStorage(Datasource datasource, String environmentId);
Mono<DatasourceStorage> transferAndGetDatasourceStorage(Datasource datasource, String environmentId);
Mono<DatasourceStorage> transferToFallbackEnvironmentAndGetDatasourceStorage(Datasource datasource);
}

View File

@ -1,62 +0,0 @@
package com.appsmith.server.solutions.ce;
import com.appsmith.external.models.Datasource;
import com.appsmith.external.models.DatasourceStorage;
import com.appsmith.server.constants.FieldName;
import com.appsmith.server.repositories.DatasourceRepository;
import com.appsmith.server.repositories.DatasourceStorageRepository;
import com.appsmith.server.services.WorkspaceService;
import lombok.extern.slf4j.Slf4j;
import org.jetbrains.annotations.NotNull;
import org.springframework.transaction.annotation.Transactional;
import reactor.core.publisher.Mono;
import reactor.util.function.Tuple2;
@Slf4j
public class DatasourceStorageTransferSolutionCEImpl implements DatasourceStorageTransferSolutionCE {
private final DatasourceRepository datasourceRepository;
private final DatasourceStorageRepository datasourceStorageRepository;
private final WorkspaceService workspaceService;
public DatasourceStorageTransferSolutionCEImpl(
DatasourceRepository datasourceRepository,
DatasourceStorageRepository datasourceStorageRepository,
WorkspaceService workspaceService) {
this.datasourceRepository = datasourceRepository;
this.datasourceStorageRepository = datasourceStorageRepository;
this.workspaceService = workspaceService;
}
@Override
public DatasourceStorage initializeDatasourceStorage(Datasource datasource, String environmentId) {
return new DatasourceStorage(datasource, FieldName.UNUSED_ENVIRONMENT_ID);
}
@Transactional
@Override
public Mono<DatasourceStorage> transferAndGetDatasourceStorage(Datasource datasource, String environmentId) {
return this.transferDatasourceStorage(datasource, environmentId);
}
@NotNull private Mono<DatasourceStorage> transferDatasourceStorage(Datasource datasource, String environmentId) {
final DatasourceStorage datasourceStorage = this.initializeDatasourceStorage(datasource, environmentId);
datasource.setDatasourceConfiguration(null);
datasource.setInvalids(null);
datasource.setHasDatasourceStorage(true);
return datasourceStorageRepository
.save(datasourceStorage)
.zipWhen(datasourceStorage1 -> datasourceRepository.save(datasource))
.map(Tuple2::getT1);
}
@Transactional
@Override
public Mono<DatasourceStorage> transferToFallbackEnvironmentAndGetDatasourceStorage(Datasource datasource) {
return workspaceService
.getDefaultEnvironmentId(datasource.getWorkspaceId())
.flatMap(environmentId -> transferDatasourceStorage(datasource, environmentId));
}
}

View File

@ -146,19 +146,19 @@ public class DatasourceTriggerSolutionTest {
Mockito.when(datasourceStructureSolution.getStructure(Mockito.anyString(), Mockito.anyBoolean(), Mockito.any()))
.thenReturn(Mono.just(testStructure));
Datasource datasource = datasourceService
datasourceService
.findById(datasourceId, datasourcePermission.getReadPermission())
.block();
Mockito.doReturn(Mono.just(Boolean.TRUE)).when(featureFlagService).check(Mockito.any());
Mono<TriggerResultDTO> tableNameMono = datasourceTriggerSolution.trigger(
datasourceId,
null,
defaultEnvironmentId,
new TriggerRequestDTO("ENTITY_SELECTOR", Map.of(), ClientDataDisplayType.DROP_DOWN));
Mono<TriggerResultDTO> columnNamesMono = datasourceTriggerSolution.trigger(
datasourceId,
null,
defaultEnvironmentId,
new TriggerRequestDTO(
"ENTITY_SELECTOR", Map.of("tableName", "Table1"), ClientDataDisplayType.DROP_DOWN));

View File

@ -23,7 +23,6 @@ import com.appsmith.server.services.PluginService;
import com.appsmith.server.services.SessionUserService;
import com.appsmith.server.solutions.ActionPermission;
import com.appsmith.server.solutions.DatasourcePermission;
import com.appsmith.server.solutions.DatasourceStorageTransferSolution;
import com.fasterxml.jackson.databind.ObjectMapper;
import io.micrometer.observation.ObservationRegistry;
import org.junit.jupiter.api.BeforeEach;
@ -123,9 +122,6 @@ class ActionExecutionSolutionCEImplTest {
@MockBean
DatasourceStorageService datasourceStorageService;
@MockBean
DatasourceStorageTransferSolution datasourceStorageTransferSolution;
private BodyExtractor.Context context;
private Map<String, Object> hints;
@ -148,8 +144,7 @@ class ActionExecutionSolutionCEImplTest {
authenticationValidator,
datasourcePermission,
analyticsService,
datasourceStorageService,
datasourceStorageTransferSolution);
datasourceStorageService);
ObservationRegistry.ObservationConfig mockObservationConfig =
Mockito.mock(ObservationRegistry.ObservationConfig.class);