Skip to content

Revert "Merge pull request #1602 from aws/millem/global-service-error-improvements" #1604

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 1 commit into from
Jan 21, 2020
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 0 additions & 5 deletions .changes/next-release/feature-AWSSDKforJavav2-2d730bf.json

This file was deleted.

5 changes: 0 additions & 5 deletions .changes/next-release/feature-AWSSDKforJavav2-f60cd7d.json

This file was deleted.

Original file line number Diff line number Diff line change
Expand Up @@ -94,7 +94,11 @@ public void generateServiceMetadata(Path baseSourcesDirectory, Partitions partit
Set<String> services = new HashSet<>();
partitions.getPartitions().forEach(p -> services.addAll(p.getServices().keySet()));

services.forEach(s -> new CodeGenerator(sourcesDirectory.toString(), new ServiceMetadataGenerator(partitions,
services.stream()
// Use hardcoded file for elasticache until the incorrect fips endpoint is fixed
//TODO Remove once elasticache endpoints are fixed at source
.filter(s -> !"elasticache".equals(s))
.forEach(s -> new CodeGenerator(sourcesDirectory.toString(), new ServiceMetadataGenerator(partitions,
s,
SERVICE_METADATA_BASE,
REGION_BASE))
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -50,16 +50,16 @@
public class ServiceMetadataGenerator implements PoetClass {

private final Partitions partitions;
private final String serviceEndpointPrefix;
private final String service;
private final String basePackage;
private final String regionBasePackage;

public ServiceMetadataGenerator(Partitions partitions,
String serviceEndpointPrefix,
String service,
String basePackage,
String regionBasePackage) {
this.partitions = partitions;
this.serviceEndpointPrefix = serviceEndpointPrefix;
this.service = service;
this.basePackage = basePackage;
this.regionBasePackage = regionBasePackage;
}
Expand All @@ -68,8 +68,6 @@ public ServiceMetadataGenerator(Partitions partitions,
public TypeSpec poetClass() {
TypeName listOfRegions = ParameterizedTypeName.get(ClassName.get(List.class), ClassName.get(regionBasePackage, "Region"));
TypeName mapOfStringString = ParameterizedTypeName.get(Map.class, String.class, String.class);
TypeName listOfServicePartitionMetadata =
ParameterizedTypeName.get(ClassName.get(List.class), ClassName.get(regionBasePackage, "ServicePartitionMetadata"));

return TypeSpec.classBuilder(className())
.addModifiers(Modifier.PUBLIC)
Expand All @@ -81,7 +79,7 @@ public TypeSpec poetClass() {
.addSuperinterface(ClassName.get(regionBasePackage, "ServiceMetadata"))
.addField(FieldSpec.builder(String.class, "ENDPOINT_PREFIX")
.addModifiers(PRIVATE, FINAL, STATIC)
.initializer("$S", serviceEndpointPrefix)
.initializer("$S", service)
.build())
.addField(FieldSpec.builder(mapOfStringString, "PARTITION_OVERRIDDEN_ENDPOINTS")
.addModifiers(PRIVATE, FINAL, STATIC)
Expand All @@ -99,20 +97,15 @@ public TypeSpec poetClass() {
.addModifiers(PRIVATE, FINAL, STATIC)
.initializer(signingRegionOverrides(partitions))
.build())
.addField(FieldSpec.builder(listOfServicePartitionMetadata, "PARTITIONS")
.addModifiers(PRIVATE, FINAL, STATIC)
.initializer(servicePartitions(partitions))
.build())
.addMethod(regions())
.addMethod(endpointFor())
.addMethod(signingRegion())
.addMethod(partitions(listOfServicePartitionMetadata))
.build();
}

@Override
public ClassName className() {
String sanitizedServiceName = serviceEndpointPrefix.replace(".", "-");
String sanitizedServiceName = service.replace(".", "-");
return ClassName.get(basePackage, Stream.of(sanitizedServiceName.split("-"))
.map(Utils::capitalize)
.collect(Collectors.joining()) + "ServiceMetadata");
Expand Down Expand Up @@ -157,8 +150,8 @@ private CodeBlock regionsField(Partitions partitions) {

partitions.getPartitions()
.stream()
.filter(p -> p.getServices().containsKey(serviceEndpointPrefix))
.forEach(p -> regions.addAll(p.getServices().get(serviceEndpointPrefix).getEndpoints().keySet()
.filter(p -> p.getServices().containsKey(service))
.forEach(p -> regions.addAll(p.getServices().get(service).getEndpoints().keySet()
.stream()
.filter(r -> RegionValidationUtil.validRegion(r, p.getRegionRegex()))
.collect(Collectors.toList())));
Expand Down Expand Up @@ -192,39 +185,6 @@ private CodeBlock signingRegionOverrides(Partitions partitions) {
return builder.add(".build()").build();
}

private CodeBlock servicePartitions(Partitions partitions) {
return CodeBlock.builder()
.add("$T.unmodifiableList($T.asList(", Collections.class, Arrays.class)
.add(commaSeparatedServicePartitions(partitions))
.add("))")
.build();
}

private CodeBlock commaSeparatedServicePartitions(Partitions partitions) {
ClassName defaultServicePartitionMetadata = ClassName.get(regionBasePackage + ".internal",
"DefaultServicePartitionMetadata");
return partitions.getPartitions()
.stream()
.filter(p -> p.getServices().containsKey(serviceEndpointPrefix))
.map(p -> CodeBlock.of("new $T($S, $L)",
defaultServicePartitionMetadata,
p.getPartition(),
globalRegion(p)))
.collect(CodeBlock.joining(","));
}

private CodeBlock globalRegion(Partition partition) {
ClassName region = ClassName.get(regionBasePackage, "Region");
Service service = partition.getServices().get(this.serviceEndpointPrefix);
boolean hasGlobalRegionForPartition = service.isRegionalized() != null &&
!service.isRegionalized() &&
service.isPartitionWideEndpointAvailable();
String globalRegionForPartition = hasGlobalRegionForPartition ? service.getPartitionEndpoint() : null;
return globalRegionForPartition == null
? CodeBlock.of("null")
: CodeBlock.of("$T.of($S)", region, globalRegionForPartition);
}

private MethodSpec regions() {
TypeName listOfRegions = ParameterizedTypeName.get(ClassName.get(List.class),
ClassName.get(regionBasePackage, "Region"));
Expand Down Expand Up @@ -259,23 +219,14 @@ private MethodSpec signingRegion() {
.build();
}

private MethodSpec partitions(TypeName listOfServicePartitionMetadata) {
return MethodSpec.methodBuilder("servicePartitions")
.addModifiers(Modifier.PUBLIC)
.addAnnotation(Override.class)
.returns(listOfServicePartitionMetadata)
.addStatement("return $L", "PARTITIONS")
.build();
}

private Map<Partition, Service> getServiceData(Partitions partitions) {
Map<Partition, Service> serviceData = new TreeMap<>(Comparator.comparing(Partition::getPartition));

partitions.getPartitions()
.forEach(p -> p.getServices()
.entrySet()
.stream()
.filter(s -> s.getKey().equalsIgnoreCase(serviceEndpointPrefix))
.filter(s -> s.getKey().equalsIgnoreCase(service))
.forEach(s -> serviceData.put(p, s.getValue())));

return serviceData;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -45,7 +45,7 @@ public final class Service {
/**
* Returns true if the service is regionalized.
*/
private Boolean isRegionalized;
private boolean isRegionalized;

public Service() {}

Expand Down Expand Up @@ -99,15 +99,15 @@ public void setPartitionEndpoint(String partitionEndpoint) {
/**
* returns true if the service is regionalized.
*/
public Boolean isRegionalized() {
public boolean isRegionalized() {
return isRegionalized;
}

/**
* sets the regionalized property for a service..
*/
@JsonProperty(value = "isRegionalized")
public void setIsRegionalized(Boolean regionalized) {
public void setIsRegionalized(boolean regionalized) {
isRegionalized = regionalized;
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,8 +9,6 @@
import software.amazon.awssdk.annotations.SdkPublicApi;
import software.amazon.awssdk.regions.Region;
import software.amazon.awssdk.regions.ServiceMetadata;
import software.amazon.awssdk.regions.ServicePartitionMetadata;
import software.amazon.awssdk.regions.internal.DefaultServicePartitionMetadata;
import software.amazon.awssdk.utils.ImmutableMap;

@Generated("software.amazon.awssdk:codegen")
Expand All @@ -21,26 +19,22 @@ public final class S3ServiceMetadata implements ServiceMetadata {
private static final Map<String, String> PARTITION_OVERRIDDEN_ENDPOINTS = ImmutableMap.<String, String> builder().build();

private static final Map<String, String> REGION_OVERRIDDEN_ENDPOINTS = ImmutableMap.<String, String> builder()
.put("ap-northeast-1", "s3.ap-northeast-1.amazonaws.com").put("ap-southeast-1", "s3.ap-southeast-1.amazonaws.com")
.put("ap-southeast-2", "s3.ap-southeast-2.amazonaws.com").put("eu-west-1", "s3.eu-west-1.amazonaws.com")
.put("sa-east-1", "s3.sa-east-1.amazonaws.com").put("us-east-1", "s3.amazonaws.com")
.put("us-west-1", "s3.us-west-1.amazonaws.com").put("us-west-2", "s3.us-west-2.amazonaws.com")
.put("fips-us-gov-west-1", "s3-fips-us-gov-west-1.amazonaws.com")
.put("us-gov-west-1", "s3.us-gov-west-1.amazonaws.com").build();
.put("ap-northeast-1", "s3.ap-northeast-1.amazonaws.com").put("ap-southeast-1", "s3.ap-southeast-1.amazonaws.com")
.put("ap-southeast-2", "s3.ap-southeast-2.amazonaws.com").put("eu-west-1", "s3.eu-west-1.amazonaws.com")
.put("sa-east-1", "s3.sa-east-1.amazonaws.com").put("us-east-1", "s3.amazonaws.com")
.put("us-west-1", "s3.us-west-1.amazonaws.com").put("us-west-2", "s3.us-west-2.amazonaws.com")
.put("fips-us-gov-west-1", "s3-fips-us-gov-west-1.amazonaws.com")
.put("us-gov-west-1", "s3.us-gov-west-1.amazonaws.com").build();

private static final List<Region> REGIONS = Collections.unmodifiableList(Arrays.asList(Region.of("ap-northeast-1"),
Region.of("ap-northeast-2"), Region.of("ap-northeast-3"), Region.of("ap-south-1"), Region.of("ap-southeast-1"),
Region.of("ap-southeast-2"), Region.of("ca-central-1"), Region.of("eu-central-1"), Region.of("eu-west-1"),
Region.of("eu-west-2"), Region.of("eu-west-3"), Region.of("sa-east-1"), Region.of("us-east-1"),
Region.of("us-east-2"), Region.of("us-west-1"), Region.of("us-west-2"), Region.of("cn-north-1"),
Region.of("cn-northwest-1"), Region.of("fips-us-gov-west-1"), Region.of("us-gov-west-1")));
Region.of("ap-northeast-2"), Region.of("ap-northeast-3"), Region.of("ap-south-1"), Region.of("ap-southeast-1"),
Region.of("ap-southeast-2"), Region.of("ca-central-1"), Region.of("eu-central-1"), Region.of("eu-west-1"),
Region.of("eu-west-2"), Region.of("eu-west-3"), Region.of("sa-east-1"), Region.of("us-east-1"),
Region.of("us-east-2"), Region.of("us-west-1"), Region.of("us-west-2"), Region.of("cn-north-1"),
Region.of("cn-northwest-1"), Region.of("fips-us-gov-west-1"), Region.of("us-gov-west-1")));

private static final Map<String, String> SIGNING_REGION_OVERRIDES = ImmutableMap.<String, String> builder()
.put("fips-us-gov-west-1", "us-gov-west-1").build();

private static final List<ServicePartitionMetadata> PARTITIONS = Collections.unmodifiableList(Arrays.asList(
new DefaultServicePartitionMetadata("aws", null), new DefaultServicePartitionMetadata("aws-cn", null),
new DefaultServicePartitionMetadata("aws-us-gov", null)));
.put("fips-us-gov-west-1", "us-gov-west-1").build();

@Override
public List<Region> regions() {
Expand All @@ -50,16 +44,11 @@ public List<Region> regions() {
@Override
public URI endpointFor(Region region) {
return URI.create(REGION_OVERRIDDEN_ENDPOINTS.containsKey(region.id()) ? REGION_OVERRIDDEN_ENDPOINTS.get(region.id())
: computeEndpoint(ENDPOINT_PREFIX, PARTITION_OVERRIDDEN_ENDPOINTS, region));
: computeEndpoint(ENDPOINT_PREFIX, PARTITION_OVERRIDDEN_ENDPOINTS, region));
}

@Override
public Region signingRegion(Region region) {
return Region.of(SIGNING_REGION_OVERRIDES.getOrDefault(region.id(), region.id()));
}

@Override
public List<ServicePartitionMetadata> servicePartitions() {
return PARTITIONS;
}
}
Original file line number Diff line number Diff line change
@@ -1,3 +1,18 @@
/*
* Copyright 2010-2020 Amazon.com, Inc. or its affiliates. All Rights Reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License").
* You may not use this file except in compliance with the License.
* A copy of the License is located at
*
* http://aws.amazon.com/apache2.0
*
* or in the "license" file accompanying this file. This file is distributed
* on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either
* express or implied. See the License for the specific language governing
* permissions and limitations under the License.
*/

package software.amazon.awssdk.regions.servicemetadata;

import java.net.URI;
Expand All @@ -9,8 +24,6 @@
import software.amazon.awssdk.annotations.SdkPublicApi;
import software.amazon.awssdk.regions.Region;
import software.amazon.awssdk.regions.ServiceMetadata;
import software.amazon.awssdk.regions.ServicePartitionMetadata;
import software.amazon.awssdk.regions.internal.DefaultServicePartitionMetadata;
import software.amazon.awssdk.utils.ImmutableMap;

@Generated("software.amazon.awssdk:codegen")
Expand Down Expand Up @@ -38,10 +51,6 @@ public final class StsServiceMetadata implements ServiceMetadata {
.put("ap-northeast-2", "ap-northeast-2").put("us-east-1-fips", "us-east-1").put("us-east-2-fips", "us-east-2")
.put("us-west-1-fips", "us-west-1").put("us-west-2-fips", "us-west-2").build();

private static final List<ServicePartitionMetadata> PARTITIONS = Collections.unmodifiableList(Arrays.asList(
new DefaultServicePartitionMetadata("aws", null), new DefaultServicePartitionMetadata("aws-cn", null),
new DefaultServicePartitionMetadata("aws-us-gov", null)));

@Override
public List<Region> regions() {
return REGIONS;
Expand All @@ -57,9 +66,4 @@ public URI endpointFor(Region region) {
public Region signingRegion(Region region) {
return Region.of(SIGNING_REGION_OVERRIDES.getOrDefault(region.id(), region.id()));
}

@Override
public List<ServicePartitionMetadata> servicePartitions() {
return PARTITIONS;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,6 @@

import software.amazon.awssdk.annotations.SdkPublicApi;
import software.amazon.awssdk.auth.signer.AwsSignerExecutionAttribute;
import software.amazon.awssdk.awscore.client.config.AwsClientOption;
import software.amazon.awssdk.core.interceptor.ExecutionAttribute;
import software.amazon.awssdk.core.interceptor.ExecutionInterceptor;
import software.amazon.awssdk.core.interceptor.SdkExecutionAttribute;
Expand All @@ -34,10 +33,5 @@ public final class AwsExecutionAttribute extends SdkExecutionAttribute {
*/
public static final ExecutionAttribute<Region> AWS_REGION = new ExecutionAttribute<>("AwsRegion");

/**
* The {@link AwsClientOption#ENDPOINT_PREFIX} for the client.
*/
public static final ExecutionAttribute<String> ENDPOINT_PREFIX = new ExecutionAttribute<>("AwsEndpointPrefix");

private AwsExecutionAttribute() {}
}
Loading