This is an automated email from the ASF dual-hosted git repository.

ycai pushed a commit to branch trunk
in repository https://gitbox.apache.org/repos/asf/cassandra-sidecar.git


The following commit(s) were added to refs/heads/trunk by this push:
     new 6b650d9  CASSANDRASC-71: Allow configuring permissions for uploaded 
SSTables
6b650d9 is described below

commit 6b650d956ed9ca57b99065cdc3c2c81d2ef0c2d1
Author: Francisco Guerrero <[email protected]>
AuthorDate: Fri Aug 25 14:46:03 2023 -0700

    CASSANDRASC-71: Allow configuring permissions for uploaded SSTables
    
    This commit introduces a new configuration for SSTable uploads 
(`file_permissions`) which allows
    an operator to configure the desired file permissions used for files that 
are uploaded via SSTable
    upload.
    
    Patch by Francisco Guerrero; Reviewed by Dinesh Joshi, Yifan Cai for 
CASSANDRASC-71
---
 CHANGES.txt                                        |  1 +
 src/main/dist/conf/sidecar.yaml                    |  1 +
 .../sidecar/config/SSTableUploadConfiguration.java | 13 +++++
 .../yaml/SSTableUploadConfigurationImpl.java       | 60 +++++++++++++++++++---
 .../sstableuploads/SSTableUploadHandler.java       |  7 ++-
 .../cassandra/sidecar/utils/SSTableUploader.java   | 15 +++---
 .../sidecar/config/SidecarConfigurationTest.java   | 24 +++++++++
 .../yaml/SSTableUploadConfigurationImplTest.java   | 56 ++++++++++++++++++++
 .../sstableuploads/SSTableUploadHandlerTest.java   | 47 +++++++++++++++++
 ...nstances.yaml => sidecar_file_permissions.yaml} |  3 +-
 ....yaml => sidecar_invalid_file_permissions.yaml} |  3 +-
 .../config/sidecar_multiple_instances.yaml         |  3 +-
 12 files changed, 216 insertions(+), 17 deletions(-)

diff --git a/CHANGES.txt b/CHANGES.txt
index 9c330d6..f7d0831 100644
--- a/CHANGES.txt
+++ b/CHANGES.txt
@@ -1,5 +1,6 @@
 1.0.0
 -----
+ * Allow configuring permissions for uploaded SSTables (CASSANDRASC-71)
  * Refactor Sidecar configuration (CASSANDRASC-69)
  * Add Client Methods for Obtaining Sidecar and Cassandra Health 
(CASSANDRASC-70)
  * Publish bytes streamed and written metrics (CASSANDRASC-68)
diff --git a/src/main/dist/conf/sidecar.yaml b/src/main/dist/conf/sidecar.yaml
index 2342c87..ddd9adc 100644
--- a/src/main/dist/conf/sidecar.yaml
+++ b/src/main/dist/conf/sidecar.yaml
@@ -75,6 +75,7 @@ sidecar:
   sstable_upload:
     concurrent_upload_limit: 80
     min_free_space_percent: 10
+    # file_permissions: "rw-r--r--" # when not specified, the default file 
permissions are owner read & write, group & others read
   allowable_time_skew_in_minutes: 60
   sstable_import:
     poll_interval_millis: 100
diff --git 
a/src/main/java/org/apache/cassandra/sidecar/config/SSTableUploadConfiguration.java
 
b/src/main/java/org/apache/cassandra/sidecar/config/SSTableUploadConfiguration.java
index dd8df66..f36620c 100644
--- 
a/src/main/java/org/apache/cassandra/sidecar/config/SSTableUploadConfiguration.java
+++ 
b/src/main/java/org/apache/cassandra/sidecar/config/SSTableUploadConfiguration.java
@@ -18,6 +18,8 @@
 
 package org.apache.cassandra.sidecar.config;
 
+import java.nio.file.attribute.PosixFilePermission;
+
 /**
  * Configuration for SSTable component uploads on this service
  */
@@ -32,4 +34,15 @@ public interface SSTableUploadConfiguration
      * @return the configured minimum space percentage required for an SSTable 
component upload
      */
     float minimumSpacePercentageRequired();
+
+    /**
+     * Returns the String representation of a set of posix file permissions 
used during an SSTable file upload.
+     * When an SSTable file is created the specified permissions will be used 
to create the file.
+     * For example, the String {@code rw-r--r--} represents the set of 
permissions
+     * {@link PosixFilePermission#OWNER_READ}, {@link 
PosixFilePermission#OWNER_WRITE},
+     * {@link PosixFilePermission#GROUP_READ}, and {@link 
PosixFilePermission#OTHERS_READ}.
+     *
+     * @return the String representation of a set of posix file permissions 
used during an SSTable file upload
+     */
+    String filePermissions();
 }
diff --git 
a/src/main/java/org/apache/cassandra/sidecar/config/yaml/SSTableUploadConfigurationImpl.java
 
b/src/main/java/org/apache/cassandra/sidecar/config/yaml/SSTableUploadConfigurationImpl.java
index cea66cc..68a8a45 100644
--- 
a/src/main/java/org/apache/cassandra/sidecar/config/yaml/SSTableUploadConfigurationImpl.java
+++ 
b/src/main/java/org/apache/cassandra/sidecar/config/yaml/SSTableUploadConfigurationImpl.java
@@ -18,6 +18,8 @@
 
 package org.apache.cassandra.sidecar.config.yaml;
 
+import java.nio.file.attribute.PosixFilePermissions;
+
 import com.fasterxml.jackson.annotation.JsonProperty;
 import org.apache.cassandra.sidecar.config.SSTableUploadConfiguration;
 
@@ -28,39 +30,52 @@ public class SSTableUploadConfigurationImpl implements 
SSTableUploadConfiguratio
 {
     public static final String CONCURRENT_UPLOAD_LIMIT_PROPERTY = 
"concurrent_upload_limit";
     public static final int DEFAULT_CONCURRENT_UPLOAD_LIMIT = 80;
+
     public static final String MIN_FREE_SPACE_PERCENT_PROPERTY = 
"min_free_space_percent";
     public static final float DEFAULT_MIN_FREE_SPACE_PERCENT = 10;
 
+    public static final String FILE_PERMISSIONS_PROPERTY = "file_permissions";
+    public static final String DEFAULT_FILE_PERMISSIONS = "rw-r--r--";
+
     @JsonProperty(value = CONCURRENT_UPLOAD_LIMIT_PROPERTY, defaultValue = 
DEFAULT_CONCURRENT_UPLOAD_LIMIT + "")
     protected final int concurrentUploadsLimit;
 
     @JsonProperty(value = MIN_FREE_SPACE_PERCENT_PROPERTY, defaultValue = 
DEFAULT_MIN_FREE_SPACE_PERCENT + "")
     protected final float minimumSpacePercentageRequired;
 
+    protected String filePermissions;
+
     public SSTableUploadConfigurationImpl()
     {
-        this(DEFAULT_CONCURRENT_UPLOAD_LIMIT, DEFAULT_MIN_FREE_SPACE_PERCENT);
+        this(DEFAULT_CONCURRENT_UPLOAD_LIMIT, DEFAULT_MIN_FREE_SPACE_PERCENT, 
DEFAULT_FILE_PERMISSIONS);
     }
 
     public SSTableUploadConfigurationImpl(int concurrentUploadsLimit)
     {
-        this(concurrentUploadsLimit, DEFAULT_MIN_FREE_SPACE_PERCENT);
+        this(concurrentUploadsLimit, DEFAULT_MIN_FREE_SPACE_PERCENT, 
DEFAULT_FILE_PERMISSIONS);
     }
 
     public SSTableUploadConfigurationImpl(float minimumSpacePercentageRequired)
     {
-        this(DEFAULT_CONCURRENT_UPLOAD_LIMIT, minimumSpacePercentageRequired);
+        this(DEFAULT_CONCURRENT_UPLOAD_LIMIT, minimumSpacePercentageRequired, 
DEFAULT_FILE_PERMISSIONS);
+    }
+
+    public SSTableUploadConfigurationImpl(String filePermissions)
+    {
+        this(DEFAULT_CONCURRENT_UPLOAD_LIMIT, DEFAULT_MIN_FREE_SPACE_PERCENT, 
filePermissions);
     }
 
     public SSTableUploadConfigurationImpl(int concurrentUploadsLimit,
-                                          float minimumSpacePercentageRequired)
+                                          float minimumSpacePercentageRequired,
+                                          String filePermissions)
     {
         this.concurrentUploadsLimit = concurrentUploadsLimit;
         this.minimumSpacePercentageRequired = minimumSpacePercentageRequired;
+        setFilePermissions(filePermissions);
     }
 
     /**
-     * @return the maximum number of concurrent SSTable component uploads 
allowed for this service
+     * {@inheritDoc}
      */
     @Override
     @JsonProperty(value = CONCURRENT_UPLOAD_LIMIT_PROPERTY, defaultValue = 
DEFAULT_CONCURRENT_UPLOAD_LIMIT + "")
@@ -70,7 +85,7 @@ public class SSTableUploadConfigurationImpl implements 
SSTableUploadConfiguratio
     }
 
     /**
-     * @return the configured minimum space percentage required for an SSTable 
component upload
+     * {@inheritDoc}
      */
     @Override
     @JsonProperty(value = MIN_FREE_SPACE_PERCENT_PROPERTY, defaultValue = 
DEFAULT_MIN_FREE_SPACE_PERCENT + "")
@@ -78,4 +93,37 @@ public class SSTableUploadConfigurationImpl implements 
SSTableUploadConfiguratio
     {
         return minimumSpacePercentageRequired;
     }
+
+
+    /**
+     * {@inheritDoc}
+     */
+    @Override
+    @JsonProperty(value = FILE_PERMISSIONS_PROPERTY, defaultValue = 
DEFAULT_FILE_PERMISSIONS)
+    public String filePermissions()
+    {
+        return filePermissions;
+    }
+
+    @JsonProperty(value = FILE_PERMISSIONS_PROPERTY, defaultValue = 
DEFAULT_FILE_PERMISSIONS)
+    public void setFilePermissions(String filePermissions)
+    {
+        if (filePermissions != null)
+        {
+            try
+            {
+                // forces a validation of the input
+                this.filePermissions = 
PosixFilePermissions.toString(PosixFilePermissions.fromString(filePermissions));
+            }
+            catch (IllegalArgumentException exception)
+            {
+                String errorMessage = String.format("Invalid file_permissions 
configuration=\"%s\"", filePermissions);
+                throw new IllegalArgumentException(errorMessage);
+            }
+        }
+        else
+        {
+            this.filePermissions = null;
+        }
+    }
 }
diff --git 
a/src/main/java/org/apache/cassandra/sidecar/routes/sstableuploads/SSTableUploadHandler.java
 
b/src/main/java/org/apache/cassandra/sidecar/routes/sstableuploads/SSTableUploadHandler.java
index d14d5b1..b81f622 100644
--- 
a/src/main/java/org/apache/cassandra/sidecar/routes/sstableuploads/SSTableUploadHandler.java
+++ 
b/src/main/java/org/apache/cassandra/sidecar/routes/sstableuploads/SSTableUploadHandler.java
@@ -123,8 +123,11 @@ public class SSTableUploadHandler extends 
AbstractHandler<SSTableUploadRequest>
         .compose(validRequest -> 
uploadPathBuilder.resolveStagingDirectory(host))
         .compose(this::ensureSufficientSpaceAvailable)
         .compose(v -> uploadPathBuilder.build(host, request))
-        .compose(uploadDirectory -> uploader.uploadComponent(httpRequest, 
uploadDirectory, request.component(),
-                                                             
request.expectedChecksum()))
+        .compose(uploadDirectory -> uploader.uploadComponent(httpRequest,
+                                                             uploadDirectory,
+                                                             
request.component(),
+                                                             
request.expectedChecksum(),
+                                                             
configuration.filePermissions()))
         .compose(fs::props)
         .onSuccess(fileProps -> {
             long serviceTimeMillis = 
TimeUnit.NANOSECONDS.toMillis(System.nanoTime() - startTimeInNanos);
diff --git 
a/src/main/java/org/apache/cassandra/sidecar/utils/SSTableUploader.java 
b/src/main/java/org/apache/cassandra/sidecar/utils/SSTableUploader.java
index 6a5b271..0f21a47 100644
--- a/src/main/java/org/apache/cassandra/sidecar/utils/SSTableUploader.java
+++ b/src/main/java/org/apache/cassandra/sidecar/utils/SSTableUploader.java
@@ -67,19 +67,21 @@ public class SSTableUploader
      * @param uploadDirectory   the absolute path to the upload directory in 
the target {@code fs}
      * @param componentFileName the file name of the component
      * @param expectedChecksum  for verifying upload integrity, passed in 
through request
+     * @param filePermissions   specifies the posix file permissions used to 
create the SSTable file
      * @return path of SSTable component to which data was uploaded
      */
     public Future<String> uploadComponent(ReadStream<Buffer> readStream,
                                           String uploadDirectory,
                                           String componentFileName,
-                                          String expectedChecksum)
+                                          String expectedChecksum,
+                                          String filePermissions)
     {
 
         String targetPath = StringUtils.removeEnd(uploadDirectory, 
File.separator)
                             + File.separatorChar + componentFileName;
 
         return fs.mkdirs(uploadDirectory) // ensure the parent directory is 
created
-                 .compose(v -> createTempFile(uploadDirectory, 
componentFileName)) // create a temporary file
+                 .compose(v -> createTempFile(uploadDirectory, 
componentFileName, filePermissions))
                  .compose(tempFilePath -> streamAndVerify(readStream, 
tempFilePath, expectedChecksum))
                  .compose(verifiedTempFilePath -> 
moveAtomicallyWithFallBack(verifiedTempFilePath, targetPath));
     }
@@ -102,11 +104,12 @@ public class SSTableUploader
                  }); // stream to file
     }
 
-    private Future<String> createTempFile(String uploadDirectory, String 
componentFileName)
+    private Future<String> createTempFile(String uploadDirectory, String 
componentFileName, String permissions)
     {
-        LOGGER.debug("Creating temp file in directory={} with name={}{}",
-                     uploadDirectory, componentFileName, DEFAULT_TEMP_SUFFIX);
-        return fs.createTempFile(uploadDirectory, componentFileName, 
DEFAULT_TEMP_SUFFIX, /* perms */ (String) null);
+        LOGGER.debug("Creating temp file in directory={} with name={}{}, 
permissions={}",
+                     uploadDirectory, componentFileName, DEFAULT_TEMP_SUFFIX, 
permissions);
+
+        return fs.createTempFile(uploadDirectory, componentFileName, 
DEFAULT_TEMP_SUFFIX, permissions);
     }
 
     private Future<String> moveAtomicallyWithFallBack(String source, String 
target)
diff --git 
a/src/test/java/org/apache/cassandra/sidecar/config/SidecarConfigurationTest.java
 
b/src/test/java/org/apache/cassandra/sidecar/config/SidecarConfigurationTest.java
index 8ca2bde..8d8ed00 100644
--- 
a/src/test/java/org/apache/cassandra/sidecar/config/SidecarConfigurationTest.java
+++ 
b/src/test/java/org/apache/cassandra/sidecar/config/SidecarConfigurationTest.java
@@ -24,10 +24,12 @@ import java.nio.file.Path;
 import org.junit.jupiter.api.Test;
 import org.junit.jupiter.api.io.TempDir;
 
+import com.fasterxml.jackson.databind.JsonMappingException;
 import org.apache.cassandra.sidecar.config.yaml.SidecarConfigurationImpl;
 
 import static 
org.apache.cassandra.sidecar.common.ResourceUtils.writeResourceToPath;
 import static org.assertj.core.api.Assertions.assertThat;
+import static 
org.assertj.core.api.AssertionsForClassTypes.assertThatExceptionOfType;
 
 /**
  * Tests reading Sidecar {@link SidecarConfiguration} from YAML files
@@ -113,6 +115,28 @@ class SidecarConfigurationTest
         validateMultipleInstancesSidecarConfiguration(config, true);
     }
 
+    @Test
+    void testFilePermissions() throws IOException
+    {
+        Path yamlPath = yaml("config/sidecar_file_permissions.yaml");
+        SidecarConfiguration config = 
SidecarConfigurationImpl.readYamlConfiguration(yamlPath);
+
+        assertThat(config).isNotNull();
+        assertThat(config.serviceConfiguration()).isNotNull();
+        
assertThat(config.serviceConfiguration().ssTableUploadConfiguration()).isNotNull();
+        
assertThat(config.serviceConfiguration().ssTableUploadConfiguration().filePermissions()).isEqualTo("rw-rw-rw-");
+    }
+
+    @Test
+    void testInvalidFilePermissions()
+    {
+        Path yamlPath = yaml("config/sidecar_invalid_file_permissions.yaml");
+        assertThatExceptionOfType(JsonMappingException.class)
+        .isThrownBy(() -> 
SidecarConfigurationImpl.readYamlConfiguration(yamlPath))
+        .withRootCauseInstanceOf(IllegalArgumentException.class)
+        .withMessageContaining("Invalid file_permissions 
configuration=\"not-valid\"");
+    }
+
     void validateSingleInstanceSidecarConfiguration(SidecarConfiguration 
config)
     {
         assertThat(config.cassandraInstances()).isNotNull().hasSize(1);
diff --git 
a/src/test/java/org/apache/cassandra/sidecar/config/yaml/SSTableUploadConfigurationImplTest.java
 
b/src/test/java/org/apache/cassandra/sidecar/config/yaml/SSTableUploadConfigurationImplTest.java
new file mode 100644
index 0000000..6a2c604
--- /dev/null
+++ 
b/src/test/java/org/apache/cassandra/sidecar/config/yaml/SSTableUploadConfigurationImplTest.java
@@ -0,0 +1,56 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.cassandra.sidecar.config.yaml;
+
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.params.ParameterizedTest;
+import org.junit.jupiter.params.provider.ValueSource;
+
+import static org.assertj.core.api.Assertions.assertThat;
+import static 
org.assertj.core.api.Assertions.assertThatIllegalArgumentException;
+
+/**
+ * Unit tests to validate {@link SSTableUploadConfigurationImpl} inputs
+ */
+class SSTableUploadConfigurationImplTest
+{
+    @Test
+    void testNullFilePermissions()
+    {
+        SSTableUploadConfigurationImpl config = new 
SSTableUploadConfigurationImpl(null);
+        assertThat(config.filePermissions()).isNull();
+    }
+
+    @ParameterizedTest(name = "{index} => invalid permission string \"{0}\"")
+    @ValueSource(strings = { "", "aaaaaaaaa", "rwxaaaaaa", "rwx", "null" })
+    void filePermissionsFailsOnInvalidString(String value)
+    {
+        assertThatIllegalArgumentException()
+        .isThrownBy(() -> new SSTableUploadConfigurationImpl(value))
+        .withMessage("Invalid filePermissions configuration=\"" + value + 
"\"");
+    }
+
+    @ParameterizedTest(name = "{index} => valid permission string \"{0}\"")
+    @ValueSource(strings = { "---------", "rwx------", "rwxr--r--", 
"r-xr-xr-x", "r-xr-xrwx" })
+    void testValidFilePermission(String value)
+    {
+        SSTableUploadConfigurationImpl config = new 
SSTableUploadConfigurationImpl(value);
+        assertThat(config.filePermissions()).isEqualTo(value);
+    }
+}
diff --git 
a/src/test/java/org/apache/cassandra/sidecar/routes/sstableuploads/SSTableUploadHandlerTest.java
 
b/src/test/java/org/apache/cassandra/sidecar/routes/sstableuploads/SSTableUploadHandlerTest.java
index 64f2986..3338bca 100644
--- 
a/src/test/java/org/apache/cassandra/sidecar/routes/sstableuploads/SSTableUploadHandlerTest.java
+++ 
b/src/test/java/org/apache/cassandra/sidecar/routes/sstableuploads/SSTableUploadHandlerTest.java
@@ -22,6 +22,8 @@ import java.io.IOException;
 import java.nio.file.Files;
 import java.nio.file.Path;
 import java.nio.file.Paths;
+import java.nio.file.attribute.PosixFilePermission;
+import java.util.Set;
 import java.util.UUID;
 import java.util.concurrent.CountDownLatch;
 import java.util.concurrent.TimeUnit;
@@ -44,6 +46,15 @@ import io.vertx.junit5.VertxTestContext;
 import org.apache.cassandra.sidecar.common.http.SidecarHttpResponseStatus;
 import org.apache.cassandra.sidecar.snapshots.SnapshotUtils;
 
+import static java.nio.file.attribute.PosixFilePermission.GROUP_EXECUTE;
+import static java.nio.file.attribute.PosixFilePermission.GROUP_READ;
+import static java.nio.file.attribute.PosixFilePermission.GROUP_WRITE;
+import static java.nio.file.attribute.PosixFilePermission.OTHERS_EXECUTE;
+import static java.nio.file.attribute.PosixFilePermission.OTHERS_READ;
+import static java.nio.file.attribute.PosixFilePermission.OTHERS_WRITE;
+import static java.nio.file.attribute.PosixFilePermission.OWNER_EXECUTE;
+import static java.nio.file.attribute.PosixFilePermission.OWNER_READ;
+import static java.nio.file.attribute.PosixFilePermission.OWNER_WRITE;
 import static org.assertj.core.api.Assertions.assertThat;
 import static org.mockito.Mockito.when;
 
@@ -189,6 +200,42 @@ public class SSTableUploadHandlerTest extends 
BaseUploadsHandlerTest
                                    Files.size(Paths.get(FILE_TO_BE_UPLOADED)), 
HttpResponseStatus.OK.code(), false);
     }
 
+    @Test
+    public void testFilePermissionOnUpload(VertxTestContext context) throws 
IOException
+    {
+        String uploadId = UUID.randomUUID().toString();
+        
when(mockSSTableUploadConfiguration.filePermissions()).thenReturn("rwxr-xr-x");
+
+        sendUploadRequestAndVerify(null, context, uploadId, "ks", "tbl", 
"without-md5.db", "",
+                                   Files.size(Paths.get(FILE_TO_BE_UPLOADED)), 
HttpResponseStatus.OK.code(),
+                                   false, response -> {
+
+            Path path = temporaryFolder.toPath()
+                                       .resolve("staging")
+                                       .resolve(uploadId)
+                                       .resolve("ks")
+                                       .resolve("tbl")
+                                       .resolve("without-md5.db");
+
+            try
+            {
+                Set<PosixFilePermission> permissions = 
Files.getPosixFilePermissions(path);
+                assertThat(permissions).contains(OWNER_READ,
+                                                 OWNER_WRITE,
+                                                 OWNER_EXECUTE,
+                                                 GROUP_READ,
+                                                 GROUP_EXECUTE,
+                                                 OTHERS_READ,
+                                                 OTHERS_EXECUTE);
+                assertThat(permissions).doesNotContain(GROUP_WRITE, 
OTHERS_WRITE);
+            }
+            catch (IOException e)
+            {
+                throw new RuntimeException(e);
+            }
+        });
+    }
+
     private void sendUploadRequestAndVerify(VertxTestContext context,
                                             UUID uploadId,
                                             String keyspace,
diff --git a/src/test/resources/config/sidecar_multiple_instances.yaml 
b/src/test/resources/config/sidecar_file_permissions.yaml
similarity index 97%
copy from src/test/resources/config/sidecar_multiple_instances.yaml
copy to src/test/resources/config/sidecar_file_permissions.yaml
index 4388cea..d1aeabe 100644
--- a/src/test/resources/config/sidecar_multiple_instances.yaml
+++ b/src/test/resources/config/sidecar_file_permissions.yaml
@@ -75,6 +75,7 @@ sidecar:
   sstable_upload:
     concurrent_upload_limit: 80
     min_free_space_percent: 10
+    file_permissions: "rw-rw-rw-"
   allowable_time_skew_in_minutes: 60
   sstable_import:
     poll_interval_millis: 100
@@ -89,7 +90,7 @@ sidecar:
     internal:
       name: "sidecar-internal-worker-pool"
       size: 20
-      max_execution_time_millis: 300000 # 5 minutes
+      max_execution_time_millis: 900000 # 15 minutes
 
 #
 # Enable SSL configuration (Disabled by default)
diff --git a/src/test/resources/config/sidecar_multiple_instances.yaml 
b/src/test/resources/config/sidecar_invalid_file_permissions.yaml
similarity index 97%
copy from src/test/resources/config/sidecar_multiple_instances.yaml
copy to src/test/resources/config/sidecar_invalid_file_permissions.yaml
index 4388cea..ce192ce 100644
--- a/src/test/resources/config/sidecar_multiple_instances.yaml
+++ b/src/test/resources/config/sidecar_invalid_file_permissions.yaml
@@ -75,6 +75,7 @@ sidecar:
   sstable_upload:
     concurrent_upload_limit: 80
     min_free_space_percent: 10
+    file_permissions: "not-valid"
   allowable_time_skew_in_minutes: 60
   sstable_import:
     poll_interval_millis: 100
@@ -89,7 +90,7 @@ sidecar:
     internal:
       name: "sidecar-internal-worker-pool"
       size: 20
-      max_execution_time_millis: 300000 # 5 minutes
+      max_execution_time_millis: 900000 # 15 minutes
 
 #
 # Enable SSL configuration (Disabled by default)
diff --git a/src/test/resources/config/sidecar_multiple_instances.yaml 
b/src/test/resources/config/sidecar_multiple_instances.yaml
index 4388cea..502b919 100644
--- a/src/test/resources/config/sidecar_multiple_instances.yaml
+++ b/src/test/resources/config/sidecar_multiple_instances.yaml
@@ -75,6 +75,7 @@ sidecar:
   sstable_upload:
     concurrent_upload_limit: 80
     min_free_space_percent: 10
+    # file_permissions: "rw-r--r--" # when not specified, the default file 
permissions are owner read & write, group & others read
   allowable_time_skew_in_minutes: 60
   sstable_import:
     poll_interval_millis: 100
@@ -89,7 +90,7 @@ sidecar:
     internal:
       name: "sidecar-internal-worker-pool"
       size: 20
-      max_execution_time_millis: 300000 # 5 minutes
+      max_execution_time_millis: 900000 # 15 minutes
 
 #
 # Enable SSL configuration (Disabled by default)


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to