frankgh commented on code in PR #208:
URL: https://github.com/apache/cassandra-sidecar/pull/208#discussion_r2002036554


##########
server/src/main/java/org/apache/cassandra/sidecar/modules/SchedulingModule.java:
##########
@@ -69,8 +73,24 @@ public PeriodicTaskExecutor periodicTaskExecutor(Vertx vertx,
 
     @ProvidesIntoMap
     @KeyClassMapKey(PeriodicTaskMapKeys.KeyStoreCheckPeriodicTaskKey.class)
-    PeriodicTask keyStoreCheckPeriodicTask(Vertx vertx, Provider<Server> 
server, SidecarConfiguration configuration)
+    PeriodicTask keyStoreCheckPeriodicTask(Vertx vertx, Provider<Server> 
server, SidecarConfiguration configuration, WebClientOptions webClientOptions)
     {
-        return new KeyStoreCheckPeriodicTask(vertx, server, configuration);
+        Function<Long, Future<Boolean>> updateServerSSLOptionsFunction =
+        lastModifiedTime -> 
server.get().updateSSLOptions(lastModifiedTime).compose(v -> 
Future.succeededFuture(true));
+
+        return new KeyStoreCheckPeriodicTask(vertx, 
configuration.sslConfiguration(), updateServerSSLOptionsFunction, 
"ServerKeyStoreCheckPeriodicTask");

Review Comment:
   is the plan to use the utility method here?
   ```suggestion
           return KeyStoreCheckPeriodicTask.forServer(vertx, 
configuration.sslConfiguration(), updateServerSSLOptionsFunction);
   ```



##########
server/src/main/java/org/apache/cassandra/sidecar/tasks/KeyStoreCheckPeriodicTask.java:
##########
@@ -41,25 +41,49 @@ public class KeyStoreCheckPeriodicTask implements 
PeriodicTask
     private static final Logger LOGGER = 
LoggerFactory.getLogger(KeyStoreCheckPeriodicTask.class);
 
     private final Vertx vertx;
-    private final Provider<Server> server;
-    private final SslConfiguration configuration;
+    private final SslConfiguration sslConfiguration;
+    private final Function<Long, Future<Boolean>> updateSSLOptionsFunction;
     private long lastModifiedTime = 0; // records the last modified timestamp
+    private final String taskName;
 
-    public KeyStoreCheckPeriodicTask(Vertx vertx, Provider<Server> server, 
SidecarConfiguration configuration)
+    public KeyStoreCheckPeriodicTask(Vertx vertx,

Review Comment:
   should we make this protected instead?
   ```suggestion
       protected KeyStoreCheckPeriodicTask(Vertx vertx,
   ```



##########
server/src/main/java/org/apache/cassandra/sidecar/tasks/KeyStoreCheckPeriodicTask.java:
##########
@@ -145,7 +168,10 @@ protected void maybeRecordLastModifiedTime()
      */
     private boolean shouldSkip()
     {
-        return !configuration.isKeystoreConfigured()
-               || !configuration.keystore().reloadStore();
+        if (sslConfiguration == null)
+            return true;
+        KeyStoreConfiguration keyStoreConfiguration = 
sslConfiguration.keystore();
+        return !keyStoreConfiguration.isConfigured()
+               || !keyStoreConfiguration.reloadStore();

Review Comment:
   let's also revert this



##########
server/src/main/java/org/apache/cassandra/sidecar/tasks/KeyStoreCheckPeriodicTask.java:
##########
@@ -41,25 +41,49 @@ public class KeyStoreCheckPeriodicTask implements 
PeriodicTask
     private static final Logger LOGGER = 
LoggerFactory.getLogger(KeyStoreCheckPeriodicTask.class);
 
     private final Vertx vertx;
-    private final Provider<Server> server;
-    private final SslConfiguration configuration;
+    private final SslConfiguration sslConfiguration;
+    private final Function<Long, Future<Boolean>> updateSSLOptionsFunction;
     private long lastModifiedTime = 0; // records the last modified timestamp
+    private final String taskName;
 
-    public KeyStoreCheckPeriodicTask(Vertx vertx, Provider<Server> server, 
SidecarConfiguration configuration)
+    public KeyStoreCheckPeriodicTask(Vertx vertx,
+                                     SslConfiguration sslConfiguration,
+                                     Function<Long, Future<Boolean>> 
updateSSLOptionsFunction,
+                                     String taskName)
     {
         this.vertx = vertx;
-        this.server = server;
-        this.configuration = configuration.sslConfiguration();
+        this.sslConfiguration = sslConfiguration;
+        this.updateSSLOptionsFunction = updateSSLOptionsFunction;
+        this.taskName = taskName;
+    }
+
+    public static KeyStoreCheckPeriodicTask forServer(Vertx vertx,
+                                                      SslConfiguration 
sslConfiguration,
+                                                      Function<Long, 
Future<Boolean>> updateSSLOptionsFunction)
+    {
+        return new KeyStoreCheckPeriodicTask(vertx, sslConfiguration, 
updateSSLOptionsFunction, "ServerKeyStoreCheckPeriodicTask");
+    }
+
+    public static KeyStoreCheckPeriodicTask forClient(Vertx vertx,
+                                                      SslConfiguration 
sslConfiguration,
+                                                      Function<Long, 
Future<Boolean>> updateSSLOptionsFunction)
+    {
+        return new KeyStoreCheckPeriodicTask(vertx, sslConfiguration, 
updateSSLOptionsFunction, "ClientKeyStoreCheckPeriodicTask");
+    }
+
+    @Override
+    public String name()
+    {
+        return taskName;
     }
 
     @Override
     public void deploy(Vertx vertx, PeriodicTaskExecutor executor)
     {
-        if (configuration != null
-            && configuration.enabled()
-            && configuration.keystore() != null
-            && configuration.keystore().isConfigured()
-            && configuration.keystore().reloadStore())
+        if (sslConfiguration != null &&
+            sslConfiguration.keystore() != null
+            && sslConfiguration.keystore().isConfigured()
+            && sslConfiguration.keystore().reloadStore())

Review Comment:
   I think we should still check for the configuration being enabled here, any 
reason to remove the check?
   ```suggestion
           if (sslConfiguration != null
               && configuration.enabled()
               && sslConfiguration.keystore() != null
               && sslConfiguration.keystore().isConfigured()
               && sslConfiguration.keystore().reloadStore())
   ```



##########
server/src/main/java/org/apache/cassandra/sidecar/modules/SchedulingModule.java:
##########
@@ -69,8 +73,24 @@ public PeriodicTaskExecutor periodicTaskExecutor(Vertx vertx,
 
     @ProvidesIntoMap
     @KeyClassMapKey(PeriodicTaskMapKeys.KeyStoreCheckPeriodicTaskKey.class)
-    PeriodicTask keyStoreCheckPeriodicTask(Vertx vertx, Provider<Server> 
server, SidecarConfiguration configuration)
+    PeriodicTask keyStoreCheckPeriodicTask(Vertx vertx, Provider<Server> 
server, SidecarConfiguration configuration, WebClientOptions webClientOptions)

Review Comment:
   can we remove web client options here?
   ```suggestion
       PeriodicTask keyStoreCheckPeriodicTask(Vertx vertx, Provider<Server> 
server, SidecarConfiguration configuration)
   ```



##########
server/src/main/java/org/apache/cassandra/sidecar/modules/SchedulingModule.java:
##########
@@ -69,8 +73,24 @@ public PeriodicTaskExecutor periodicTaskExecutor(Vertx vertx,
 
     @ProvidesIntoMap
     @KeyClassMapKey(PeriodicTaskMapKeys.KeyStoreCheckPeriodicTaskKey.class)
-    PeriodicTask keyStoreCheckPeriodicTask(Vertx vertx, Provider<Server> 
server, SidecarConfiguration configuration)
+    PeriodicTask keyStoreCheckPeriodicTask(Vertx vertx, Provider<Server> 
server, SidecarConfiguration configuration, WebClientOptions webClientOptions)
     {
-        return new KeyStoreCheckPeriodicTask(vertx, server, configuration);
+        Function<Long, Future<Boolean>> updateServerSSLOptionsFunction =
+        lastModifiedTime -> 
server.get().updateSSLOptions(lastModifiedTime).compose(v -> 
Future.succeededFuture(true));
+
+        return new KeyStoreCheckPeriodicTask(vertx, 
configuration.sslConfiguration(), updateServerSSLOptionsFunction, 
"ServerKeyStoreCheckPeriodicTask");
+    }
+
+    @ProvidesIntoMap
+    
@KeyClassMapKey(PeriodicTaskMapKeys.ClientKeyStoreCheckPeriodicTaskKey.class)
+    PeriodicTask clientKeyStoreCheckPeriodicTask(Vertx vertx,
+                                                 SidecarClientProvider 
sidecarClientProvider,
+                                                 WebClientOptions 
webClientOptions,
+                                                 SidecarConfiguration 
configuration)
+    {
+        Function<Long, Future<Boolean>> updateClientSSLOptionsFunction =
+        lastModifiedTime -> 
sidecarClientProvider.getHttpClient().updateSSLOptions(webClientOptions.getSslOptions()).compose(v
 -> Future.succeededFuture(true));
+
+        return new KeyStoreCheckPeriodicTask(vertx, 
configuration.sslConfiguration(), updateClientSSLOptionsFunction, 
"ClientKeyStoreCheckPeriodicTask");

Review Comment:
   should we use the utility method here? 
   ```suggestion
           return KeyStoreCheckPeriodicTask.forClient(vertx, 
configuration.sslConfiguration(), updateClientSSLOptionsFunction);
   ```



##########
server/src/main/java/org/apache/cassandra/sidecar/tasks/KeyStoreCheckPeriodicTask.java:
##########
@@ -82,14 +106,14 @@ public ScheduleDecision scheduleDecision()
     @Override
     public DurationSpec delay()
     {
-        return configuration.keystore().checkInterval();
+        return  sslConfiguration == null ? DEFAULT_DELAY : 
sslConfiguration.keystore().checkInterval();

Review Comment:
   this shouldn't be necessary, I wonder what's the change that requires this 
change



##########
server/src/main/java/org/apache/cassandra/sidecar/utils/SidecarClientProvider.java:
##########
@@ -89,10 +104,16 @@ public void close()
         }
     }
 
+    // Exposing the used http client to be reused on periodic tasks
+    public HttpClient getHttpClient()

Review Comment:
   let's not expose the http client here, instead let's just expose a method to 
update ssl options.
   ```suggestion
       public Future<Boolean> updateSSLOptions()
   ```



-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: pr-unsubscr...@cassandra.apache.org

For queries about this service, please contact Infrastructure at:
us...@infra.apache.org


---------------------------------------------------------------------
To unsubscribe, e-mail: pr-unsubscr...@cassandra.apache.org
For additional commands, e-mail: pr-h...@cassandra.apache.org

Reply via email to