This is an automated email from the ASF dual-hosted git repository.
tpalfy pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/nifi.git
The following commit(s) were added to refs/heads/main by this push:
new a93b4945fb NIFI-14281 Added Connect Timeout and Read Timeout
properties in Google Drive processors
a93b4945fb is described below
commit a93b4945fb8e41976da140a115f9a31cdd4ec2f4
Author: Peter Turcsanyi <[email protected]>
AuthorDate: Wed Feb 19 16:57:43 2025 +0100
NIFI-14281 Added Connect Timeout and Read Timeout properties in Google
Drive processors
This closes #9732.
Signed-off-by: Tamas Palfy <[email protected]>
---
.../processors/gcp/drive/FetchGoogleDrive.java | 16 ++++----
.../processors/gcp/drive/GoogleDriveTrait.java | 48 ++++++++++++++++++++--
.../nifi/processors/gcp/drive/ListGoogleDrive.java | 4 +-
.../nifi/processors/gcp/drive/PutGoogleDrive.java | 4 +-
.../gcp/drive/AbstractGoogleDriveIT.java | 2 +-
5 files changed, 60 insertions(+), 14 deletions(-)
diff --git
a/nifi-extension-bundles/nifi-gcp-bundle/nifi-gcp-processors/src/main/java/org/apache/nifi/processors/gcp/drive/FetchGoogleDrive.java
b/nifi-extension-bundles/nifi-gcp-bundle/nifi-gcp-processors/src/main/java/org/apache/nifi/processors/gcp/drive/FetchGoogleDrive.java
index 0ea90a01e6..118acf70f3 100644
---
a/nifi-extension-bundles/nifi-gcp-bundle/nifi-gcp-processors/src/main/java/org/apache/nifi/processors/gcp/drive/FetchGoogleDrive.java
+++
b/nifi-extension-bundles/nifi-gcp-bundle/nifi-gcp-processors/src/main/java/org/apache/nifi/processors/gcp/drive/FetchGoogleDrive.java
@@ -234,13 +234,15 @@ public class FetchGoogleDrive extends AbstractProcessor
implements GoogleDriveTr
.build();
private static final List<PropertyDescriptor> PROPERTY_DESCRIPTORS =
List.of(
- GoogleUtils.GCP_CREDENTIALS_PROVIDER_SERVICE,
- FILE_ID,
-
ProxyConfiguration.createProxyConfigPropertyDescriptor(ProxyAwareTransportFactory.PROXY_SPECS),
- GOOGLE_DOC_EXPORT_TYPE,
- GOOGLE_SPREADSHEET_EXPORT_TYPE,
- GOOGLE_PRESENTATION_EXPORT_TYPE,
- GOOGLE_DRAWING_EXPORT_TYPE
+ GoogleUtils.GCP_CREDENTIALS_PROVIDER_SERVICE,
+ FILE_ID,
+ GOOGLE_DOC_EXPORT_TYPE,
+ GOOGLE_SPREADSHEET_EXPORT_TYPE,
+ GOOGLE_PRESENTATION_EXPORT_TYPE,
+ GOOGLE_DRAWING_EXPORT_TYPE,
+
ProxyConfiguration.createProxyConfigPropertyDescriptor(ProxyAwareTransportFactory.PROXY_SPECS),
+ CONNECT_TIMEOUT,
+ READ_TIMEOUT
);
private static final Set<Relationship> RELATIONSHIPS = Set.of(
diff --git
a/nifi-extension-bundles/nifi-gcp-bundle/nifi-gcp-processors/src/main/java/org/apache/nifi/processors/gcp/drive/GoogleDriveTrait.java
b/nifi-extension-bundles/nifi-gcp-bundle/nifi-gcp-processors/src/main/java/org/apache/nifi/processors/gcp/drive/GoogleDriveTrait.java
index 8b4a6f97ad..a8b06ef789 100644
---
a/nifi-extension-bundles/nifi-gcp-bundle/nifi-gcp-processors/src/main/java/org/apache/nifi/processors/gcp/drive/GoogleDriveTrait.java
+++
b/nifi-extension-bundles/nifi-gcp-bundle/nifi-gcp-processors/src/main/java/org/apache/nifi/processors/gcp/drive/GoogleDriveTrait.java
@@ -16,6 +16,8 @@
*/
package org.apache.nifi.processors.gcp.drive;
+import com.google.api.client.http.HttpRequest;
+import com.google.api.client.http.HttpRequestInitializer;
import com.google.api.client.http.HttpTransport;
import com.google.api.client.json.JsonFactory;
import com.google.api.client.json.gson.GsonFactory;
@@ -23,14 +25,21 @@ import com.google.api.services.drive.Drive;
import com.google.api.services.drive.model.File;
import com.google.auth.http.HttpCredentialsAdapter;
import com.google.auth.oauth2.GoogleCredentials;
+
+import java.io.IOException;
import java.util.HashMap;
import java.util.Map;
+
+import org.apache.nifi.components.PropertyDescriptor;
+import org.apache.nifi.expression.ExpressionLanguageScope;
import org.apache.nifi.gcp.credentials.service.GCPCredentialsService;
import org.apache.nifi.processor.ProcessContext;
+import org.apache.nifi.processor.util.StandardValidators;
import org.apache.nifi.processors.gcp.util.GoogleUtils;
import java.util.Arrays;
import java.util.Collection;
+import java.util.concurrent.TimeUnit;
public interface GoogleDriveTrait {
@@ -40,11 +49,31 @@ public interface GoogleDriveTrait {
JsonFactory JSON_FACTORY = GsonFactory.getDefaultInstance();
+ PropertyDescriptor CONNECT_TIMEOUT = new PropertyDescriptor.Builder()
+ .name("connect-timeout")
+ .displayName("Connect Timeout")
+ .description("Maximum wait time for connection to Google Drive
service.")
+ .required(true)
+ .defaultValue("20 sec")
+ .addValidator(StandardValidators.TIME_PERIOD_VALIDATOR)
+ .expressionLanguageSupported(ExpressionLanguageScope.ENVIRONMENT)
+ .build();
+
+ PropertyDescriptor READ_TIMEOUT = new PropertyDescriptor.Builder()
+ .name("read-timeout")
+ .displayName("Read Timeout")
+ .description("Maximum wait time for response from Google Drive
service.")
+ .required(true)
+ .defaultValue("60 sec")
+ .addValidator(StandardValidators.TIME_PERIOD_VALIDATOR)
+ .expressionLanguageSupported(ExpressionLanguageScope.ENVIRONMENT)
+ .build();
+
default Drive createDriveService(ProcessContext context, HttpTransport
httpTransport, String... scopes) {
Drive driveService = new Drive.Builder(
httpTransport,
JSON_FACTORY,
- getHttpCredentialsAdapter(
+ createHttpRequestInitializer(
context,
Arrays.asList(scopes)
)
@@ -55,13 +84,24 @@ public interface GoogleDriveTrait {
return driveService;
}
- default HttpCredentialsAdapter getHttpCredentialsAdapter(
+ default HttpRequestInitializer createHttpRequestInitializer(
final ProcessContext context,
final Collection<String> scopes
) {
- GoogleCredentials googleCredentials = getGoogleCredentials(context);
+ final GoogleCredentials googleCredentials =
getGoogleCredentials(context).createScoped(scopes);
+
+ final HttpCredentialsAdapter httpCredentialsAdapter = new
HttpCredentialsAdapter(googleCredentials) {
+ @Override
+ public void initialize(HttpRequest request) throws IOException {
+ super.initialize(request);
+
+ final int connectTimeout =
context.getProperty(CONNECT_TIMEOUT).asTimePeriod(TimeUnit.MILLISECONDS).intValue();
+ final int readTimeout =
context.getProperty(READ_TIMEOUT).asTimePeriod(TimeUnit.MILLISECONDS).intValue();
- HttpCredentialsAdapter httpCredentialsAdapter = new
HttpCredentialsAdapter(googleCredentials.createScoped(scopes));
+ request.setConnectTimeout(connectTimeout);
+ request.setReadTimeout(readTimeout);
+ }
+ };
return httpCredentialsAdapter;
}
diff --git
a/nifi-extension-bundles/nifi-gcp-bundle/nifi-gcp-processors/src/main/java/org/apache/nifi/processors/gcp/drive/ListGoogleDrive.java
b/nifi-extension-bundles/nifi-gcp-bundle/nifi-gcp-processors/src/main/java/org/apache/nifi/processors/gcp/drive/ListGoogleDrive.java
index 82f5fef2e2..bc36177860 100644
---
a/nifi-extension-bundles/nifi-gcp-bundle/nifi-gcp-processors/src/main/java/org/apache/nifi/processors/gcp/drive/ListGoogleDrive.java
+++
b/nifi-extension-bundles/nifi-gcp-bundle/nifi-gcp-processors/src/main/java/org/apache/nifi/processors/gcp/drive/ListGoogleDrive.java
@@ -161,7 +161,9 @@ public class ListGoogleDrive extends
AbstractListProcessor<GoogleDriveFileInfo>
TRACKING_TIME_WINDOW,
INITIAL_LISTING_TARGET,
RECORD_WRITER,
-
ProxyConfiguration.createProxyConfigPropertyDescriptor(ProxyAwareTransportFactory.PROXY_SPECS)
+
ProxyConfiguration.createProxyConfigPropertyDescriptor(ProxyAwareTransportFactory.PROXY_SPECS),
+ CONNECT_TIMEOUT,
+ READ_TIMEOUT
);
private volatile Drive driveService;
diff --git
a/nifi-extension-bundles/nifi-gcp-bundle/nifi-gcp-processors/src/main/java/org/apache/nifi/processors/gcp/drive/PutGoogleDrive.java
b/nifi-extension-bundles/nifi-gcp-bundle/nifi-gcp-processors/src/main/java/org/apache/nifi/processors/gcp/drive/PutGoogleDrive.java
index 07797ed603..45a4c7f78f 100644
---
a/nifi-extension-bundles/nifi-gcp-bundle/nifi-gcp-processors/src/main/java/org/apache/nifi/processors/gcp/drive/PutGoogleDrive.java
+++
b/nifi-extension-bundles/nifi-gcp-bundle/nifi-gcp-processors/src/main/java/org/apache/nifi/processors/gcp/drive/PutGoogleDrive.java
@@ -168,7 +168,9 @@ public class PutGoogleDrive extends AbstractProcessor
implements GoogleDriveTrai
CONFLICT_RESOLUTION,
CHUNKED_UPLOAD_THRESHOLD,
CHUNKED_UPLOAD_SIZE,
-
ProxyConfiguration.createProxyConfigPropertyDescriptor(ProxyAwareTransportFactory.PROXY_SPECS)
+
ProxyConfiguration.createProxyConfigPropertyDescriptor(ProxyAwareTransportFactory.PROXY_SPECS),
+ CONNECT_TIMEOUT,
+ READ_TIMEOUT
);
public static final Relationship REL_SUCCESS =
diff --git
a/nifi-extension-bundles/nifi-gcp-bundle/nifi-gcp-processors/src/test/java/org/apache/nifi/processors/gcp/drive/AbstractGoogleDriveIT.java
b/nifi-extension-bundles/nifi-gcp-bundle/nifi-gcp-processors/src/test/java/org/apache/nifi/processors/gcp/drive/AbstractGoogleDriveIT.java
index 0ff72a5005..76a464e8d0 100644
---
a/nifi-extension-bundles/nifi-gcp-bundle/nifi-gcp-processors/src/test/java/org/apache/nifi/processors/gcp/drive/AbstractGoogleDriveIT.java
+++
b/nifi-extension-bundles/nifi-gcp-bundle/nifi-gcp-processors/src/test/java/org/apache/nifi/processors/gcp/drive/AbstractGoogleDriveIT.java
@@ -78,7 +78,7 @@ public abstract class AbstractGoogleDriveIT<T extends
GoogleDriveTrait & Process
driveService = new Drive.Builder(
httpTransport,
JSON_FACTORY,
- testSubject.getHttpCredentialsAdapter(
+ testSubject.createHttpRequestInitializer(
testRunner.getProcessContext(),
DriveScopes.all()
)