diff --git a/provider/partition-gcp/pom.xml b/provider/partition-gcp/pom.xml index 5f44919f6716475668107cf823296969c7b27ae7..02a62c3524385ed8ac5738a925734847b5011a23 100644 --- a/provider/partition-gcp/pom.xml +++ b/provider/partition-gcp/pom.xml @@ -55,12 +55,6 @@ <groupId>org.springframework.security</groupId> <artifactId>spring-security-oauth2-jose</artifactId> </dependency> - <dependency> - <groupId>org.springframework.data</groupId> - <artifactId>spring-data-commons</artifactId> - <version>2.1.10.RELEASE</version> - <scope>compile</scope> - </dependency> <dependency> <groupId>javax.inject</groupId> <artifactId>javax.inject</artifactId> @@ -70,11 +64,6 @@ <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> </dependency> - <dependency> - <groupId>org.springframework.cloud</groupId> - <artifactId>spring-cloud-gcp-starter-data-datastore</artifactId> - <version>1.2.5.RELEASE</version> - </dependency> <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-databind</artifactId> diff --git a/provider/partition-gcp/src/main/java/org/opengroup/osdu/partition/provider/gcp/PartitionGcpApplication.java b/provider/partition-gcp/src/main/java/org/opengroup/osdu/partition/provider/gcp/PartitionGcpApplication.java index d24a172c16d353242320bf53a26acdb9d7a661db..d61b123c99cb61348aab54d642aeed74fc366742 100644 --- a/provider/partition-gcp/src/main/java/org/opengroup/osdu/partition/provider/gcp/PartitionGcpApplication.java +++ b/provider/partition-gcp/src/main/java/org/opengroup/osdu/partition/provider/gcp/PartitionGcpApplication.java @@ -20,17 +20,13 @@ package org.opengroup.osdu.partition.provider.gcp; import org.opengroup.osdu.core.gcp.di.GcpPartitionClientFactory; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; -import org.springframework.cloud.gcp.data.datastore.repository.config.EnableDatastoreRepositories; import org.springframework.context.annotation.ComponentScan; import org.springframework.context.annotation.FilterType; -import org.springframework.transaction.annotation.EnableTransactionManagement; @ComponentScan(basePackages = {"org.opengroup.osdu"}, excludeFilters = @ComponentScan.Filter(type = FilterType.ASSIGNABLE_TYPE, classes = {GcpPartitionClientFactory.class}) ) @SpringBootApplication -@EnableDatastoreRepositories -@EnableTransactionManagement public class PartitionGcpApplication { public static void main(String[] args) { diff --git a/provider/partition-gcp/src/main/java/org/opengroup/osdu/partition/provider/gcp/osm/config/resolver/OsmDatastoreDestinationResolver.java b/provider/partition-gcp/src/main/java/org/opengroup/osdu/partition/provider/gcp/osm/config/resolver/OsmDatastoreDestinationResolver.java index 45533358c4db83dcd6dd5456d9e075581b9b3ea1..faeb51096b563f9a574e65c08c2a841175e1b1c5 100644 --- a/provider/partition-gcp/src/main/java/org/opengroup/osdu/partition/provider/gcp/osm/config/resolver/OsmDatastoreDestinationResolver.java +++ b/provider/partition-gcp/src/main/java/org/opengroup/osdu/partition/provider/gcp/osm/config/resolver/OsmDatastoreDestinationResolver.java @@ -32,6 +32,7 @@ import org.springframework.stereotype.Component; import org.threeten.bp.Duration; import java.io.IOException; +import java.util.Map; import static org.springframework.beans.factory.config.BeanDefinition.SCOPE_SINGLETON; @@ -43,7 +44,7 @@ public class OsmDatastoreDestinationResolver implements DsDestinationResolver { protected static final RetrySettings RETRY_SETTINGS = RetrySettings.newBuilder().setMaxAttempts(6).setInitialRetryDelay(Duration.ofSeconds(10L)).setMaxRetryDelay(Duration.ofSeconds(32L)).setRetryDelayMultiplier(2.0D).setTotalTimeout(Duration.ofSeconds(50L)).setInitialRpcTimeout(Duration.ofSeconds(50L)).setRpcTimeoutMultiplier(1.0D).setMaxRpcTimeout(Duration.ofSeconds(50L)).build(); protected static final TransportOptions TRANSPORT_OPTIONS = HttpTransportOptions.newBuilder().setReadTimeout(30000).build(); - private final Datastore partitionDatastore; + private final Map<String, Datastore> datastoreCache; /** * Takes provided Destination with partitionId set to needed tenantId, returns its TenantInfo.projectId. @@ -54,17 +55,7 @@ public class OsmDatastoreDestinationResolver implements DsDestinationResolver { @Override public DsDestinationResolution resolve(Destination destination) { String projectId = destination.getPartitionId(); - - Datastore datastore = - partitionDatastore == null - ? DatastoreOptions.newBuilder() - .setRetrySettings(RETRY_SETTINGS) - .setTransportOptions(TRANSPORT_OPTIONS) - .setProjectId(projectId) - .setNamespace(destination.getNamespace().getName()) - .build() - .getService() - : partitionDatastore; + Datastore datastore = datastoreCache.computeIfAbsent(projectId, key -> getDatastoreFor(destination, key, projectId)); return DsDestinationResolution.builder() .projectId(datastore.getOptions().getProjectId()) @@ -72,6 +63,17 @@ public class OsmDatastoreDestinationResolver implements DsDestinationResolver { .build(); } + private Datastore getDatastoreFor(Destination destination, String key, String projectId) { + return datastoreCache.computeIfAbsent(key, k -> + DatastoreOptions.newBuilder() + .setRetrySettings(RETRY_SETTINGS) + .setTransportOptions(TRANSPORT_OPTIONS) + .setProjectId(projectId) + .setNamespace(destination.getNamespace().getName()) + .build() + .getService()); + } + @Override public void close() throws IOException { //Method stub diff --git a/provider/partition-gcp/src/main/java/org/opengroup/osdu/partition/provider/gcp/security/AuthorizationService.java b/provider/partition-gcp/src/main/java/org/opengroup/osdu/partition/provider/gcp/security/AuthorizationService.java index 2fe2c6198a81c525f74177f41581db8da604f360..7c60fad2c8d1ffb11d914653b23cce9a4cd6a0bc 100644 --- a/provider/partition-gcp/src/main/java/org/opengroup/osdu/partition/provider/gcp/security/AuthorizationService.java +++ b/provider/partition-gcp/src/main/java/org/opengroup/osdu/partition/provider/gcp/security/AuthorizationService.java @@ -71,7 +71,7 @@ public class AuthorizationService implements IAuthorizationService { } catch (AppException e){ throw e; } catch (Exception ex) { - log.warn(String.format("User %s is not unauthorized. %s.", email, ex)); + log.warn(String.format("User %s unauthorized. %s.", email, ex)); throw AppException.createUnauthorized("Unauthorized. The JWT token could not be validated"); } } diff --git a/provider/partition-gcp/src/main/java/org/opengroup/osdu/partition/provider/gcp/service/PartitionServiceImpl.java b/provider/partition-gcp/src/main/java/org/opengroup/osdu/partition/provider/gcp/service/PartitionServiceImpl.java index f625d9524ddd8e60c705f13b0898da0c4c636cb5..f564d236f71da8a7e7b63cbee4caf94b9ca24cf9 100644 --- a/provider/partition-gcp/src/main/java/org/opengroup/osdu/partition/provider/gcp/service/PartitionServiceImpl.java +++ b/provider/partition-gcp/src/main/java/org/opengroup/osdu/partition/provider/gcp/service/PartitionServiceImpl.java @@ -29,16 +29,10 @@ import org.opengroup.osdu.partition.provider.gcp.model.PartitionPropertyEntity; import org.opengroup.osdu.partition.provider.gcp.osm.repository.OsmPartitionPropertyRepository; import org.opengroup.osdu.partition.provider.interfaces.IPartitionService; import org.springframework.stereotype.Service; -import org.springframework.transaction.annotation.Transactional; +import org.springframework.util.CollectionUtils; import java.io.IOException; -import java.util.ArrayList; -import java.util.Collections; -import java.util.HashMap; -import java.util.List; -import java.util.Map; -import java.util.Objects; -import java.util.Optional; +import java.util.*; @Service @RequiredArgsConstructor @@ -178,7 +172,6 @@ public class PartitionServiceImpl implements IPartitionService { } } - @Transactional @Override public boolean deletePartition(String partitionId) { if (!this.partitionPropertyEntityRepository.findByPartitionId(partitionId).isPresent()) { @@ -195,16 +188,15 @@ public class PartitionServiceImpl implements IPartitionService { return true; } - @Transactional @Override public List<String> getAllPartitions() { List<String> partitions = partitionListCache.get(PARTITION_LIST_KEY); if (partitions == null) { List<String> allPartitions = this.partitionPropertyEntityRepository.getAllPartitions(); - partitions = (allPartitions.isEmpty() ? null : allPartitions); + partitions = (allPartitions.isEmpty() ? Collections.emptyList() : allPartitions); - if (partitions != null) { + if (!CollectionUtils.isEmpty(partitions)) { partitionListCache.put(PARTITION_LIST_KEY, partitions); } }