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()
                 )

Reply via email to