use of com.google.api.generator.gapic.model.GapicLroRetrySettings in project gapic-generator-java by googleapis.
the class RetrySettingsComposer method createLroRetrySettingsExpr.
private static Expr createLroRetrySettingsExpr(Service service, Method method, GapicServiceConfig serviceConfig) {
Expr lroRetrySettingsExpr = MethodInvocationExpr.builder().setStaticReferenceType(FIXED_TYPESTORE.get("RetrySettings")).setMethodName("newBuilder").build();
long initialPollDelayMillis = LRO_DEFAULT_INITIAL_POLL_DELAY_MILLIS;
double pollDelayMultiplier = LRO_DEFAULT_POLL_DELAY_MULTIPLIER;
long maxPollDelayMillis = LRO_DEFAULT_MAX_POLL_DELAY_MILLIS;
long totalPollTimeoutMillis = LRO_DEFAULT_TOTAL_POLL_TIMEOUT_MILLIS;
if (serviceConfig.hasLroRetrySetting(service, method)) {
Optional<GapicLroRetrySettings> lroRetrySettingsOpt = serviceConfig.getLroRetrySetting(service, method);
if (lroRetrySettingsOpt.isPresent()) {
GapicLroRetrySettings lroRetrySettings = lroRetrySettingsOpt.get();
initialPollDelayMillis = lroRetrySettings.initialPollDelayMillis();
pollDelayMultiplier = lroRetrySettings.pollDelayMultiplier();
maxPollDelayMillis = lroRetrySettings.maxPollDelayMillis();
totalPollTimeoutMillis = lroRetrySettings.totalPollTimeoutMillis();
}
}
lroRetrySettingsExpr = MethodInvocationExpr.builder().setExprReferenceExpr(lroRetrySettingsExpr).setMethodName("setInitialRetryDelay").setArguments(createDurationOfMillisExpr(toValExpr(initialPollDelayMillis))).build();
lroRetrySettingsExpr = MethodInvocationExpr.builder().setExprReferenceExpr(lroRetrySettingsExpr).setMethodName("setRetryDelayMultiplier").setArguments(toValExpr(pollDelayMultiplier)).build();
lroRetrySettingsExpr = MethodInvocationExpr.builder().setExprReferenceExpr(lroRetrySettingsExpr).setMethodName("setMaxRetryDelay").setArguments(createDurationOfMillisExpr(toValExpr(maxPollDelayMillis))).build();
Expr zeroDurationExpr = EnumRefExpr.builder().setType(FIXED_TYPESTORE.get("Duration")).setName("ZERO").build();
// TODO(miraleung): Add an "// ignored" comment here.
lroRetrySettingsExpr = MethodInvocationExpr.builder().setExprReferenceExpr(lroRetrySettingsExpr).setMethodName("setInitialRpcTimeout").setArguments(zeroDurationExpr).build();
// TODO(miraleung): Add an "// ignored" comment here.
lroRetrySettingsExpr = MethodInvocationExpr.builder().setExprReferenceExpr(lroRetrySettingsExpr).setMethodName("setRpcTimeoutMultiplier").setArguments(toValExpr(LRO_DEFAULT_MAX_RPC_TIMEOUT)).build();
// TODO(miraleung): Add an "// ignored" comment here.
lroRetrySettingsExpr = MethodInvocationExpr.builder().setExprReferenceExpr(lroRetrySettingsExpr).setMethodName("setMaxRpcTimeout").setArguments(zeroDurationExpr).build();
lroRetrySettingsExpr = MethodInvocationExpr.builder().setExprReferenceExpr(lroRetrySettingsExpr).setMethodName("setTotalTimeout").setArguments(createDurationOfMillisExpr(toValExpr(totalPollTimeoutMillis))).build();
lroRetrySettingsExpr = MethodInvocationExpr.builder().setExprReferenceExpr(lroRetrySettingsExpr).setMethodName("build").build();
return lroRetrySettingsExpr;
}
use of com.google.api.generator.gapic.model.GapicLroRetrySettings in project gapic-generator-java by googleapis.
the class GapicLroRetrySettingsParserTest method parseLroRetrySettings_lroRetrySettingsPresent.
@Test
public void parseLroRetrySettings_lroRetrySettingsPresent() {
String filename = "dataproc_gapic.yaml";
Path path = Paths.get(YAML_DIRECTORY, filename);
Optional<List<GapicLroRetrySettings>> settingsOpt = GapicLroRetrySettingsParser.parse(path.toString());
List<GapicLroRetrySettings> lroRetrySettings = settingsOpt.get();
assertEquals(6, lroRetrySettings.size());
// This LRO setting has a max_poll_delay_millis that will be parsed as an integer.
GapicLroRetrySettings setting = lroRetrySettings.get(0);
assertEquals("google.cloud.dataproc.v1", setting.protoPakkage());
assertEquals("ClusterController", setting.serviceName());
assertEquals("CreateCluster", setting.methodName());
assertEquals(1000, setting.initialPollDelayMillis());
assertEquals(2, setting.pollDelayMultiplier(), DELTA);
assertEquals(10000, setting.maxPollDelayMillis());
assertEquals(900000, setting.totalPollTimeoutMillis());
// Sanity-check on a different service and method.
// The list element order is coupled to the definition order in the gapic.yaml file.
// This LRO setting has a max_poll_delay_millis that will be parsed as a double.
setting = lroRetrySettings.get(4);
assertEquals("google.cloud.dataproc.v1", setting.protoPakkage());
assertEquals("WorkflowTemplateService", setting.serviceName());
assertEquals("InstantiateWorkflowTemplate", setting.methodName());
assertEquals(1000, setting.initialPollDelayMillis());
assertEquals(2.5, setting.pollDelayMultiplier(), DELTA);
assertEquals(10000, setting.maxPollDelayMillis());
assertEquals(43200000, setting.totalPollTimeoutMillis());
}
use of com.google.api.generator.gapic.model.GapicLroRetrySettings in project gapic-generator-java by googleapis.
the class Parser method parse.
public static GapicContext parse(CodeGeneratorRequest request) {
Optional<String> gapicYamlConfigPathOpt = PluginArgumentParser.parseGapicYamlConfigPath(request);
Optional<List<GapicBatchingSettings>> batchingSettingsOpt = BatchingSettingsConfigParser.parse(gapicYamlConfigPathOpt);
Optional<List<GapicLroRetrySettings>> lroRetrySettingsOpt = GapicLroRetrySettingsParser.parse(gapicYamlConfigPathOpt);
Optional<GapicLanguageSettings> languageSettingsOpt = GapicLanguageSettingsParser.parse(gapicYamlConfigPathOpt);
Optional<String> transportOpt = PluginArgumentParser.parseTransport(request);
boolean willGenerateMetadata = PluginArgumentParser.hasMetadataFlag(request);
Optional<String> serviceConfigPathOpt = PluginArgumentParser.parseJsonConfigPath(request);
Optional<GapicServiceConfig> serviceConfigOpt = ServiceConfigParser.parse(serviceConfigPathOpt.orElse(null));
if (serviceConfigOpt.isPresent()) {
GapicServiceConfig serviceConfig = serviceConfigOpt.get();
serviceConfig.setLroRetrySettings(lroRetrySettingsOpt);
serviceConfig.setBatchingSettings(batchingSettingsOpt);
serviceConfig.setLanguageSettings(languageSettingsOpt);
serviceConfigOpt = Optional.of(serviceConfig);
}
Optional<String> serviceYamlConfigPathOpt = PluginArgumentParser.parseServiceYamlConfigPath(request);
Optional<com.google.api.Service> serviceYamlProtoOpt = serviceYamlConfigPathOpt.flatMap(ServiceYamlParser::parse);
// Collect the resource references seen in messages.
Set<ResourceReference> outputResourceReferencesSeen = new HashSet<>();
// Keep message and resource name parsing separate for cleaner logic.
// While this takes an extra pass through the protobufs, the extra time is relatively trivial
// and is worth the larger reduced maintenance cost.
Map<String, Message> messages = parseMessages(request, outputResourceReferencesSeen);
Map<String, ResourceName> resourceNames = parseResourceNames(request);
messages = updateResourceNamesInMessages(messages, resourceNames.values());
// Contains only resource names that are actually used. Usage refers to the presence of a
// request message's field in an RPC's method_signature annotation. That is, resource name
// definitions
// or references that are simply defined, but not used in such a manner, will not have
// corresponding Java helper
// classes generated.
Set<ResourceName> outputArgResourceNames = new HashSet<>();
List<Service> mixinServices = new ArrayList<>();
Transport transport = Transport.parse(transportOpt.orElse(Transport.GRPC.toString()));
List<Service> services = parseServices(request, messages, resourceNames, outputArgResourceNames, serviceYamlProtoOpt, serviceConfigOpt, mixinServices, transport);
Preconditions.checkState(!services.isEmpty(), "No services found to generate");
// Temporary workaround for Ads, who still need these resource names.
if (services.get(0).protoPakkage().startsWith("google.ads.googleads.v")) {
Function<ResourceName, String> typeNameFn = r -> r.resourceTypeString().substring(r.resourceTypeString().indexOf("/") + 1);
Function<Set<ResourceName>, Set<String>> typeStringSetFn = sr -> sr.stream().map(typeNameFn).collect(Collectors.toSet());
// Include all resource names present in message types for backwards-compatibility with the
// monolith. In the future, this should be removed on a client library major semver update.
// Resolve type name collisions with the ones present in the method arguments.
final Set<String> typeStringSet = typeStringSetFn.apply(outputArgResourceNames);
outputArgResourceNames.addAll(resourceNames.values().stream().filter(r -> r.hasParentMessageName() && !typeStringSet.contains(typeNameFn.apply(r))).collect(Collectors.toSet()));
String servicePackage = services.get(0).pakkage();
Map<String, ResourceName> patternsToResourceNames = ResourceParserHelpers.createPatternResourceNameMap(resourceNames);
for (ResourceReference resourceReference : outputResourceReferencesSeen) {
final Set<String> interimTypeStringSet = typeStringSetFn.apply(outputArgResourceNames);
outputArgResourceNames.addAll(ResourceReferenceParser.parseResourceNames(resourceReference, servicePackage, null, resourceNames, patternsToResourceNames).stream().filter(r -> !interimTypeStringSet.contains(typeNameFn.apply(r))).collect(Collectors.toSet()));
}
}
return GapicContext.builder().setServices(services).setMixinServices(mixinServices).setMessages(messages).setResourceNames(resourceNames).setHelperResourceNames(outputArgResourceNames).setServiceConfig(serviceConfigOpt.orElse(null)).setGapicMetadataEnabled(willGenerateMetadata).setServiceYamlProto(serviceYamlProtoOpt.orElse(null)).setTransport(transport).build();
}
Aggregations