{"record":{"id":"b7ecd1f461909975","repo":"apache/druid","slug":"invalid-druid-storage-transfer-asynchttpclienttype","errorCode":null,"errorMessage":"Invalid druid.storage.transfer.asyncHttpClientType[%s]. Must be 'crt' or 'netty'.","messagePattern":"Invalid druid\\.storage\\.transfer\\.asyncHttpClientType\\[(.+?)\\]\\. Must be 'crt' or 'netty'\\.","errorType":"validation","errorClass":"IllegalStateException (ISE)","httpStatus":null,"severity":"error","filePath":"extensions-core/s3-extensions/src/main/java/org/apache/druid/storage/s3/S3StorageDruidModule.java","lineNumber":188,"sourceCode":"      public SdkAsyncHttpClient.Builder<?> buildBuilder(AWSClientConfig clientConfig)\n      {\n        return NettyNioAsyncHttpClient.builder()\n                                      .connectionTimeout(Duration.ofMillis(clientConfig.getConnectionTimeoutMillis()))\n                                      .readTimeout(Duration.ofMillis(clientConfig.getSocketTimeoutMillis()))\n                                      .maxConcurrency(clientConfig.getMaxConnections());\n      }\n    };\n\n    public abstract SdkAsyncHttpClient.Builder<?> buildBuilder(AWSClientConfig clientConfig);\n\n    public static AsyncHttpClientType fromString(String value)\n    {\n      for (AsyncHttpClientType type : values()) {\n        if (type.name().equals(StringUtils.upperCase(value))) {\n          return type;\n        }\n      }\n      throw new ISE(\"Invalid druid.storage.transfer.asyncHttpClientType[%s]. Must be 'crt' or 'netty'.\", value);\n    }\n  }\n\n  @Nullable\n  private static URI buildEndpointOverride(AWSEndpointConfig endpointConfig, boolean useHttps)\n  {\n    if (StringUtils.isNotEmpty(endpointConfig.getUrl())) {\n      return URI.create(S3Utils.ensureEndpointHasScheme(endpointConfig.getUrl(), useHttps));\n    }\n    return null;\n  }\n\n  // This provides ServerSideEncryptingAmazonS3 built with all default configs from Guice injection\n  /**\n   * Creates {@link ServerSideEncryptingAmazonS3} which may perform config validation immediately.\n   * You may want to avoid immediate config validation but defer it until you actually use the s3 client.\n   * Use {@link #getAmazonS3ClientSupplier} instead in that case.\n   */","sourceCodeStart":170,"sourceCodeEnd":206,"githubUrl":"https://github.com/apache/druid/blob/9b90983fd291f26935af934383ce360473179e4d/extensions-core/s3-extensions/src/main/java/org/apache/druid/storage/s3/S3StorageDruidModule.java#L170-L206","documentation":"AsyncHttpClientType.fromString parses druid.storage.transfer.asyncHttpClientType into the CRT or NETTY enum by case-insensitive name and throws ISE for anything else. The property selects which AWS async HTTP client is used for multipart transfers.","triggerScenarios":"Configuring druid.storage.transfer.asyncHttpClientType to a value other than 'crt' or 'netty' (case-insensitive), e.g. 'apache', 'default', or a typo like 'nett'.","commonSituations":"Users copying configs from other AWS SDK examples; upgrading Druid where only crt/netty are supported; mixing up this property with the SDK's full HttpClient list.","solutions":["Set druid.storage.transfer.asyncHttpClientType to 'crt' or 'netty'.","Remove the property to use the default client.","Ensure the CRT client dependency is on the classpath if choosing 'crt'."],"exampleFix":"// before\ndruid.storage.transfer.asyncHttpClientType=apache\n// after\ndruid.storage.transfer.asyncHttpClientType=netty","handlingStrategy":"validation","validationCode":"String t = props.getProperty(\"druid.storage.transfer.asyncHttpClientType\", \"netty\");\nif (!t.equalsIgnoreCase(\"crt\") && !t.equalsIgnoreCase(\"netty\")) throw new IllegalArgumentException(\"bad asyncHttpClientType: \" + t);","typeGuard":null,"tryCatchPattern":null,"preventionTips":["Only use 'crt' or 'netty'","Default (omit the property) if unsure","Ensure the CRT dependency exists when choosing crt"],"tags":["config","enum","s3","aws"],"backgroundTag":"invalid-enum-value","analyzedSha":"9b90983fd291f26935af934383ce360473179e4d","analyzedAt":"2026-09-07T13:32:30.957Z","contentChangedAt":"2026-09-07T13:32:30.957Z","schemaVersion":2},"datasetVersion":"2026-09-14T05:17:10.506Z"}