You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@solr.apache.org by kr...@apache.org on 2023/06/09 12:42:24 UTC

[solr] branch main updated: Update dependencies com.adobe.testing:s3mock-junit4 to v2.12.2 and org.springframework.boot:spring-boot to 2.7.12 (#1545)

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

krisden pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/solr.git


The following commit(s) were added to refs/heads/main by this push:
     new b12627c7486 Update dependencies com.adobe.testing:s3mock-junit4 to v2.12.2 and org.springframework.boot:spring-boot to 2.7.12 (#1545)
b12627c7486 is described below

commit b12627c74863e6c7ec8c3d9359b7ee620e2522c7
Author: Kevin Risden <ri...@users.noreply.github.com>
AuthorDate: Fri Jun 9 08:42:17 2023 -0400

    Update dependencies com.adobe.testing:s3mock-junit4 to v2.12.2 and org.springframework.boot:spring-boot to 2.7.12 (#1545)
    
    * Update dependencies com.adobe.testing:s3mock-junit4 to v2.12.2 and org.springframework.boot:spring-boot to 2.7.12
    
    * Deprecate ignoreNoSuchFileException from BackupRepository delete API since it was only ever called with true outside of tests
---
 .../randomization/policies/solr-tests.policy       |  3 +
 .../cloud/api/collections/DeleteBackupCmd.java     | 14 ++--
 .../solr/core/backup/ShardBackupMetadata.java      |  2 +-
 .../core/backup/repository/BackupRepository.java   | 11 +++
 .../repository/LocalFileSystemRepository.java      |  7 +-
 solr/licenses/aws-java-sdk-core-1.12.15.jar.sha1   |  1 -
 solr/licenses/aws-java-sdk-core-1.12.389.jar.sha1  |  1 +
 solr/licenses/aws-java-sdk-kms-1.12.15.jar.sha1    |  1 -
 solr/licenses/aws-java-sdk-kms-1.12.389.jar.sha1   |  1 +
 solr/licenses/aws-java-sdk-s3-1.12.15.jar.sha1     |  1 -
 solr/licenses/aws-java-sdk-s3-1.12.389.jar.sha1    |  1 +
 solr/licenses/jaxb-runtime-2.3.5.jar.sha1          |  1 -
 solr/licenses/jaxb-runtime-2.3.7.jar.sha1          |  1 +
 solr/licenses/jmespath-java-1.12.15.jar.sha1       |  1 -
 solr/licenses/jmespath-java-1.12.389.jar.sha1      |  1 +
 solr/licenses/micrometer-core-1.7.12.jar.sha1      |  1 -
 solr/licenses/micrometer-core-1.9.11.jar.sha1      |  1 +
 solr/licenses/s3mock-2.1.34.jar.sha1               |  1 -
 solr/licenses/s3mock-2.12.2.jar.sha1               |  1 +
 solr/licenses/s3mock-junit4-2.1.34.jar.sha1        |  1 -
 solr/licenses/s3mock-junit4-2.12.2.jar.sha1        |  1 +
 .../s3mock-testsupport-common-2.1.34.jar.sha1      |  1 -
 .../s3mock-testsupport-common-2.12.2.jar.sha1      |  1 +
 solr/licenses/snakeyaml-1.28.jar.sha1              |  1 -
 solr/licenses/snakeyaml-1.30.jar.sha1              |  1 +
 solr/licenses/spring-aop-5.3.23.jar.sha1           |  1 -
 solr/licenses/spring-aop-5.3.27.jar.sha1           |  1 +
 solr/licenses/spring-beans-5.3.23.jar.sha1         |  1 -
 solr/licenses/spring-beans-5.3.27.jar.sha1         |  1 +
 solr/licenses/spring-boot-2.5.14.jar.sha1          |  1 -
 solr/licenses/spring-boot-2.7.12.jar.sha1          |  1 +
 solr/licenses/spring-boot-actuator-2.5.14.jar.sha1 |  1 -
 solr/licenses/spring-boot-actuator-2.7.12.jar.sha1 |  1 +
 ...ing-boot-actuator-autoconfigure-2.5.14.jar.sha1 |  1 -
 ...ing-boot-actuator-autoconfigure-2.7.12.jar.sha1 |  1 +
 .../spring-boot-autoconfigure-2.5.14.jar.sha1      |  1 -
 .../spring-boot-autoconfigure-2.7.12.jar.sha1      |  1 +
 solr/licenses/spring-boot-starter-2.5.14.jar.sha1  |  1 -
 solr/licenses/spring-boot-starter-2.7.12.jar.sha1  |  1 +
 .../spring-boot-starter-actuator-2.5.14.jar.sha1   |  1 -
 .../spring-boot-starter-actuator-2.7.12.jar.sha1   |  1 +
 .../spring-boot-starter-jetty-2.5.14.jar.sha1      |  1 -
 .../spring-boot-starter-jetty-2.7.12.jar.sha1      |  1 +
 .../spring-boot-starter-json-2.5.14.jar.sha1       |  1 -
 .../spring-boot-starter-json-2.7.12.jar.sha1       |  1 +
 .../spring-boot-starter-logging-2.5.14.jar.sha1    |  1 -
 .../spring-boot-starter-logging-2.7.12.jar.sha1    |  1 +
 .../spring-boot-starter-web-2.5.14.jar.sha1        |  1 -
 .../spring-boot-starter-web-2.7.12.jar.sha1        |  1 +
 solr/licenses/spring-context-5.3.23.jar.sha1       |  1 -
 solr/licenses/spring-context-5.3.27.jar.sha1       |  1 +
 solr/licenses/spring-core-5.3.23.jar.sha1          |  1 -
 solr/licenses/spring-core-5.3.27.jar.sha1          |  1 +
 solr/licenses/spring-expression-5.3.23.jar.sha1    |  1 -
 solr/licenses/spring-expression-5.3.27.jar.sha1    |  1 +
 solr/licenses/spring-jcl-5.3.23.jar.sha1           |  1 -
 solr/licenses/spring-jcl-5.3.27.jar.sha1           |  1 +
 solr/licenses/spring-web-5.3.23.jar.sha1           |  1 -
 solr/licenses/spring-web-5.3.27.jar.sha1           |  1 +
 solr/licenses/spring-webmvc-5.3.23.jar.sha1        |  1 -
 solr/licenses/spring-webmvc-5.3.27.jar.sha1        |  1 +
 solr/licenses/tomcat-embed-el-9.0.63.jar.sha1      |  1 -
 solr/licenses/tomcat-embed-el-9.0.75.jar.sha1      |  1 +
 solr/licenses/txw2-2.3.5.jar.sha1                  |  1 -
 solr/licenses/txw2-2.3.7.jar.sha1                  |  1 +
 .../org/apache/solr/gcs/GCSBackupRepository.java   | 13 +---
 .../solr/gcs/LocalStorageGCSBackupRepository.java  | 17 +----
 .../backup/repository/HdfsBackupRepository.java    |  9 +--
 .../org/apache/solr/s3/S3BackupRepository.java     | 11 +--
 .../java/org/apache/solr/s3/S3StorageClient.java   |  3 +
 .../org/apache/solr/s3/S3BackupRepositoryTest.java |  4 +-
 .../src/test/org/apache/solr/s3/S3PathsTest.java   |  2 +-
 .../test/org/apache/solr/s3/S3ReadWriteTest.java   |  3 -
 .../collections/AbstractBackupRepositoryTest.java  | 35 ++++-----
 .../collections/AbstractIncrementalBackupTest.java |  2 +-
 .../apache/solr/core/TrackingBackupRepository.java |  5 +-
 versions.lock                                      | 84 +++++++++++-----------
 versions.props                                     |  6 +-
 78 files changed, 129 insertions(+), 162 deletions(-)

diff --git a/gradle/testing/randomization/policies/solr-tests.policy b/gradle/testing/randomization/policies/solr-tests.policy
index 1f39648da6a..d39a3818b98 100644
--- a/gradle/testing/randomization/policies/solr-tests.policy
+++ b/gradle/testing/randomization/policies/solr-tests.policy
@@ -144,6 +144,9 @@ grant {
 
   permission javax.xml.bind.JAXBPermission "setDatatypeConverter";
 
+  // needed by s3mock
+  permission java.lang.RuntimePermission "accessClassInPackage.sun.nio.fs";
+
   // SSL related properties for Solr tests
   permission javax.net.ssl.SSLPermission "setDefaultSSLContext";
 
diff --git a/solr/core/src/java/org/apache/solr/cloud/api/collections/DeleteBackupCmd.java b/solr/core/src/java/org/apache/solr/cloud/api/collections/DeleteBackupCmd.java
index 72e1043a957..aa6c8f9ef5b 100644
--- a/solr/core/src/java/org/apache/solr/cloud/api/collections/DeleteBackupCmd.java
+++ b/solr/core/src/java/org/apache/solr/cloud/api/collections/DeleteBackupCmd.java
@@ -127,10 +127,10 @@ public class DeleteBackupCmd implements CollApiCmds.CollectionApiCommand {
     purgeGraph.build(repository, backupPath);
 
     BackupFilePaths backupPaths = new BackupFilePaths(repository, backupPath);
-    repository.delete(backupPaths.getIndexDir(), purgeGraph.indexFileDeletes, true);
+    repository.delete(backupPaths.getIndexDir(), purgeGraph.indexFileDeletes);
     repository.delete(
-        backupPaths.getShardBackupMetadataDir(), purgeGraph.shardBackupMetadataDeletes, true);
-    repository.delete(backupPath, purgeGraph.backupIdDeletes, true);
+        backupPaths.getShardBackupMetadataDir(), purgeGraph.shardBackupMetadataDeletes);
+    repository.delete(backupPath, purgeGraph.backupIdDeletes);
 
     NamedList<Integer> details = new NamedList<>();
     details.add("numBackupIds", purgeGraph.backupIdDeletes.size());
@@ -205,9 +205,8 @@ public class DeleteBackupCmd implements CollApiCmds.CollectionApiCommand {
         incBackupFiles.getShardBackupMetadataDir(),
         shardBackupIdFileDeletes.stream()
             .map(ShardBackupId::getBackupMetadataFilename)
-            .collect(Collectors.toList()),
-        true);
-    repository.delete(incBackupFiles.getIndexDir(), unusedFiles, true);
+            .collect(Collectors.toList()));
+    repository.delete(incBackupFiles.getIndexDir(), unusedFiles);
     try {
       for (BackupId backupId : backupIdsDeletes) {
         repository.deleteDirectory(
@@ -223,8 +222,7 @@ public class DeleteBackupCmd implements CollApiCmds.CollectionApiCommand {
         backupUri,
         backupIdsDeletes.stream()
             .map(id -> BackupFilePaths.getBackupPropsName(id))
-            .collect(Collectors.toList()),
-        true);
+            .collect(Collectors.toList()));
   }
 
   private void addResult(
diff --git a/solr/core/src/java/org/apache/solr/core/backup/ShardBackupMetadata.java b/solr/core/src/java/org/apache/solr/core/backup/ShardBackupMetadata.java
index d5f51f25879..c2fe588c068 100644
--- a/solr/core/src/java/org/apache/solr/core/backup/ShardBackupMetadata.java
+++ b/solr/core/src/java/org/apache/solr/core/backup/ShardBackupMetadata.java
@@ -111,7 +111,7 @@ public class ShardBackupMetadata {
     final String filename = shardBackupId.getBackupMetadataFilename();
     URI fileURI = repository.resolve(folderURI, filename);
     if (repository.exists(fileURI)) {
-      repository.delete(folderURI, Collections.singleton(filename), true);
+      repository.delete(folderURI, Collections.singleton(filename));
     }
 
     try (OutputStream os = repository.createOutput(repository.resolve(folderURI, filename))) {
diff --git a/solr/core/src/java/org/apache/solr/core/backup/repository/BackupRepository.java b/solr/core/src/java/org/apache/solr/core/backup/repository/BackupRepository.java
index 99c96e17bb1..0d968fde0b2 100644
--- a/solr/core/src/java/org/apache/solr/core/backup/repository/BackupRepository.java
+++ b/solr/core/src/java/org/apache/solr/core/backup/repository/BackupRepository.java
@@ -228,12 +228,23 @@ public interface BackupRepository extends NamedListInitializedPlugin, Closeable
    * Delete {@code files} at {@code path}
    *
    * @since 8.3.0
+   * @deprecated Use {@link #delete(URI, Collection)} instead
    */
+  @Deprecated
   default void delete(URI path, Collection<String> files, boolean ignoreNoSuchFileException)
       throws IOException {
     throw new UnsupportedOperationException();
   }
 
+  /**
+   * Delete {@code files} at {@code path}
+   *
+   * @since 9.3.0
+   */
+  default void delete(URI path, Collection<String> files) throws IOException {
+    delete(path, files, true);
+  }
+
   /**
    * Get checksum of {@code fileName} at {@code dir}. This method only be called on Lucene index
    * files
diff --git a/solr/core/src/java/org/apache/solr/core/backup/repository/LocalFileSystemRepository.java b/solr/core/src/java/org/apache/solr/core/backup/repository/LocalFileSystemRepository.java
index 752986eb24d..f1dbe7d7362 100644
--- a/solr/core/src/java/org/apache/solr/core/backup/repository/LocalFileSystemRepository.java
+++ b/solr/core/src/java/org/apache/solr/core/backup/repository/LocalFileSystemRepository.java
@@ -160,16 +160,15 @@ public class LocalFileSystemRepository implements BackupRepository {
   }
 
   @Override
-  public void delete(URI path, Collection<String> files, boolean ignoreNoSuchFileException)
-      throws IOException {
+  public void delete(URI path, Collection<String> files) throws IOException {
     if (files.isEmpty()) return;
 
     try (FSDirectory dir = new NIOFSDirectory(Path.of(path), NoLockFactory.INSTANCE)) {
       for (String file : files) {
         try {
           dir.deleteFile(file);
-        } catch (NoSuchFileException e) {
-          if (!ignoreNoSuchFileException) throw e;
+        } catch (NoSuchFileException ignore) {
+
         }
       }
     }
diff --git a/solr/licenses/aws-java-sdk-core-1.12.15.jar.sha1 b/solr/licenses/aws-java-sdk-core-1.12.15.jar.sha1
deleted file mode 100644
index 840ba4d358b..00000000000
--- a/solr/licenses/aws-java-sdk-core-1.12.15.jar.sha1
+++ /dev/null
@@ -1 +0,0 @@
-6b3df58b3908dfaf7bdef66005d5bc190117debb
diff --git a/solr/licenses/aws-java-sdk-core-1.12.389.jar.sha1 b/solr/licenses/aws-java-sdk-core-1.12.389.jar.sha1
new file mode 100644
index 00000000000..6190c485022
--- /dev/null
+++ b/solr/licenses/aws-java-sdk-core-1.12.389.jar.sha1
@@ -0,0 +1 @@
+64f0926ab1b3add2965db7ce241e81d35cba4cfb
diff --git a/solr/licenses/aws-java-sdk-kms-1.12.15.jar.sha1 b/solr/licenses/aws-java-sdk-kms-1.12.15.jar.sha1
deleted file mode 100644
index be936a01da1..00000000000
--- a/solr/licenses/aws-java-sdk-kms-1.12.15.jar.sha1
+++ /dev/null
@@ -1 +0,0 @@
-c22f8a7a167de059645ce65ce4f41a22d9287e04
diff --git a/solr/licenses/aws-java-sdk-kms-1.12.389.jar.sha1 b/solr/licenses/aws-java-sdk-kms-1.12.389.jar.sha1
new file mode 100644
index 00000000000..c8d1636b92b
--- /dev/null
+++ b/solr/licenses/aws-java-sdk-kms-1.12.389.jar.sha1
@@ -0,0 +1 @@
+d84b2979e8ef5f3797223e8301419a7974cb5768
diff --git a/solr/licenses/aws-java-sdk-s3-1.12.15.jar.sha1 b/solr/licenses/aws-java-sdk-s3-1.12.15.jar.sha1
deleted file mode 100644
index 1a8a33c600f..00000000000
--- a/solr/licenses/aws-java-sdk-s3-1.12.15.jar.sha1
+++ /dev/null
@@ -1 +0,0 @@
-d360360ca1a93cce9efa197be138e6f8741dd716
diff --git a/solr/licenses/aws-java-sdk-s3-1.12.389.jar.sha1 b/solr/licenses/aws-java-sdk-s3-1.12.389.jar.sha1
new file mode 100644
index 00000000000..32515165941
--- /dev/null
+++ b/solr/licenses/aws-java-sdk-s3-1.12.389.jar.sha1
@@ -0,0 +1 @@
+6f0621a45a6a71e2802972a311ae853404495941
diff --git a/solr/licenses/jaxb-runtime-2.3.5.jar.sha1 b/solr/licenses/jaxb-runtime-2.3.5.jar.sha1
deleted file mode 100644
index c61fff6d309..00000000000
--- a/solr/licenses/jaxb-runtime-2.3.5.jar.sha1
+++ /dev/null
@@ -1 +0,0 @@
-a169a961a2bb9ac69517ec1005e451becf5cdfab
diff --git a/solr/licenses/jaxb-runtime-2.3.7.jar.sha1 b/solr/licenses/jaxb-runtime-2.3.7.jar.sha1
new file mode 100644
index 00000000000..54fd7fb6dea
--- /dev/null
+++ b/solr/licenses/jaxb-runtime-2.3.7.jar.sha1
@@ -0,0 +1 @@
+ebcde6a44159eb9e3db721dfe6b45f26e6272341
diff --git a/solr/licenses/jmespath-java-1.12.15.jar.sha1 b/solr/licenses/jmespath-java-1.12.15.jar.sha1
deleted file mode 100644
index 4c4c3889dc0..00000000000
--- a/solr/licenses/jmespath-java-1.12.15.jar.sha1
+++ /dev/null
@@ -1 +0,0 @@
-a61d37bf81e4e2ff9a9b16491e8697cfab4bdee5
diff --git a/solr/licenses/jmespath-java-1.12.389.jar.sha1 b/solr/licenses/jmespath-java-1.12.389.jar.sha1
new file mode 100644
index 00000000000..b33c450c9a2
--- /dev/null
+++ b/solr/licenses/jmespath-java-1.12.389.jar.sha1
@@ -0,0 +1 @@
+e481f75369be62bd2ade115a1b2e55056f3b2c49
diff --git a/solr/licenses/micrometer-core-1.7.12.jar.sha1 b/solr/licenses/micrometer-core-1.7.12.jar.sha1
deleted file mode 100644
index 7fbe56d5602..00000000000
--- a/solr/licenses/micrometer-core-1.7.12.jar.sha1
+++ /dev/null
@@ -1 +0,0 @@
-2a6df7cf6131216940f3ae64c0c6b290d77de0cd
diff --git a/solr/licenses/micrometer-core-1.9.11.jar.sha1 b/solr/licenses/micrometer-core-1.9.11.jar.sha1
new file mode 100644
index 00000000000..5dd8a9d25bb
--- /dev/null
+++ b/solr/licenses/micrometer-core-1.9.11.jar.sha1
@@ -0,0 +1 @@
+c9c51ffe93b55af9deb2e77ac2fa1777b9ee1c14
diff --git a/solr/licenses/s3mock-2.1.34.jar.sha1 b/solr/licenses/s3mock-2.1.34.jar.sha1
deleted file mode 100644
index 9dede15e5dd..00000000000
--- a/solr/licenses/s3mock-2.1.34.jar.sha1
+++ /dev/null
@@ -1 +0,0 @@
-1d01b90a971d751444251bc72be019a77eb77a7b
diff --git a/solr/licenses/s3mock-2.12.2.jar.sha1 b/solr/licenses/s3mock-2.12.2.jar.sha1
new file mode 100644
index 00000000000..5a1e0641d6b
--- /dev/null
+++ b/solr/licenses/s3mock-2.12.2.jar.sha1
@@ -0,0 +1 @@
+d841a4243f07171ae8cdfb131ff9df50d12e67b7
diff --git a/solr/licenses/s3mock-junit4-2.1.34.jar.sha1 b/solr/licenses/s3mock-junit4-2.1.34.jar.sha1
deleted file mode 100644
index bf545362441..00000000000
--- a/solr/licenses/s3mock-junit4-2.1.34.jar.sha1
+++ /dev/null
@@ -1 +0,0 @@
-ddac2928d2bf30dab3a3330f43a5c02a2315cda8
diff --git a/solr/licenses/s3mock-junit4-2.12.2.jar.sha1 b/solr/licenses/s3mock-junit4-2.12.2.jar.sha1
new file mode 100644
index 00000000000..66344538e7f
--- /dev/null
+++ b/solr/licenses/s3mock-junit4-2.12.2.jar.sha1
@@ -0,0 +1 @@
+dc3ea8f85c188e614c6158a7d4e687d56963a0af
diff --git a/solr/licenses/s3mock-testsupport-common-2.1.34.jar.sha1 b/solr/licenses/s3mock-testsupport-common-2.1.34.jar.sha1
deleted file mode 100644
index dabafd70c94..00000000000
--- a/solr/licenses/s3mock-testsupport-common-2.1.34.jar.sha1
+++ /dev/null
@@ -1 +0,0 @@
-09e127b9e40a01f16bdd510f2aaf490b17e1b1f3
diff --git a/solr/licenses/s3mock-testsupport-common-2.12.2.jar.sha1 b/solr/licenses/s3mock-testsupport-common-2.12.2.jar.sha1
new file mode 100644
index 00000000000..0d4214b7b3b
--- /dev/null
+++ b/solr/licenses/s3mock-testsupport-common-2.12.2.jar.sha1
@@ -0,0 +1 @@
+09146d55f27bda32a83bebbb8832ba7b7c1d0acf
diff --git a/solr/licenses/snakeyaml-1.28.jar.sha1 b/solr/licenses/snakeyaml-1.28.jar.sha1
deleted file mode 100644
index 879e89213e8..00000000000
--- a/solr/licenses/snakeyaml-1.28.jar.sha1
+++ /dev/null
@@ -1 +0,0 @@
-7cae037c3014350c923776548e71c9feb7a69259
diff --git a/solr/licenses/snakeyaml-1.30.jar.sha1 b/solr/licenses/snakeyaml-1.30.jar.sha1
new file mode 100644
index 00000000000..365daa0aef7
--- /dev/null
+++ b/solr/licenses/snakeyaml-1.30.jar.sha1
@@ -0,0 +1 @@
+8fde7fe2586328ac3c68db92045e1c8759125000
diff --git a/solr/licenses/spring-aop-5.3.23.jar.sha1 b/solr/licenses/spring-aop-5.3.23.jar.sha1
deleted file mode 100644
index b9b6080f9e5..00000000000
--- a/solr/licenses/spring-aop-5.3.23.jar.sha1
+++ /dev/null
@@ -1 +0,0 @@
-30d0034ba29178e98781d85f51a7eb709a628e9b
diff --git a/solr/licenses/spring-aop-5.3.27.jar.sha1 b/solr/licenses/spring-aop-5.3.27.jar.sha1
new file mode 100644
index 00000000000..69f7603ae19
--- /dev/null
+++ b/solr/licenses/spring-aop-5.3.27.jar.sha1
@@ -0,0 +1 @@
+ecae2962d53c587fd0e405cd60dc8415d1b9e12d
diff --git a/solr/licenses/spring-beans-5.3.23.jar.sha1 b/solr/licenses/spring-beans-5.3.23.jar.sha1
deleted file mode 100644
index 82b616e0d43..00000000000
--- a/solr/licenses/spring-beans-5.3.23.jar.sha1
+++ /dev/null
@@ -1 +0,0 @@
-3bdefbf6042ed742cbe16f27d2d14cca9096a606
diff --git a/solr/licenses/spring-beans-5.3.27.jar.sha1 b/solr/licenses/spring-beans-5.3.27.jar.sha1
new file mode 100644
index 00000000000..7c09b141146
--- /dev/null
+++ b/solr/licenses/spring-beans-5.3.27.jar.sha1
@@ -0,0 +1 @@
+46e7d917551ffcc0a104fd971d1fa207b30d7761
diff --git a/solr/licenses/spring-boot-2.5.14.jar.sha1 b/solr/licenses/spring-boot-2.5.14.jar.sha1
deleted file mode 100644
index 263b6d90901..00000000000
--- a/solr/licenses/spring-boot-2.5.14.jar.sha1
+++ /dev/null
@@ -1 +0,0 @@
-4d581ebadc5fda0ec2d4a70653fe89087bd55983
diff --git a/solr/licenses/spring-boot-2.7.12.jar.sha1 b/solr/licenses/spring-boot-2.7.12.jar.sha1
new file mode 100644
index 00000000000..f14f7f17d63
--- /dev/null
+++ b/solr/licenses/spring-boot-2.7.12.jar.sha1
@@ -0,0 +1 @@
+888c3545dc3c6ca791753c7ad621a2d03f222732
diff --git a/solr/licenses/spring-boot-actuator-2.5.14.jar.sha1 b/solr/licenses/spring-boot-actuator-2.5.14.jar.sha1
deleted file mode 100644
index 9292954d702..00000000000
--- a/solr/licenses/spring-boot-actuator-2.5.14.jar.sha1
+++ /dev/null
@@ -1 +0,0 @@
-7d8e27b27011ff0d5be6d09d7c335fee2c9bf239
diff --git a/solr/licenses/spring-boot-actuator-2.7.12.jar.sha1 b/solr/licenses/spring-boot-actuator-2.7.12.jar.sha1
new file mode 100644
index 00000000000..2de5e2e1354
--- /dev/null
+++ b/solr/licenses/spring-boot-actuator-2.7.12.jar.sha1
@@ -0,0 +1 @@
+c5b5961120028a8a7db9b2d5b4f5f926fd0b0b15
diff --git a/solr/licenses/spring-boot-actuator-autoconfigure-2.5.14.jar.sha1 b/solr/licenses/spring-boot-actuator-autoconfigure-2.5.14.jar.sha1
deleted file mode 100644
index 04f5cdb748e..00000000000
--- a/solr/licenses/spring-boot-actuator-autoconfigure-2.5.14.jar.sha1
+++ /dev/null
@@ -1 +0,0 @@
-b6bbfcf903699302aba7446b541772a1eb208272
diff --git a/solr/licenses/spring-boot-actuator-autoconfigure-2.7.12.jar.sha1 b/solr/licenses/spring-boot-actuator-autoconfigure-2.7.12.jar.sha1
new file mode 100644
index 00000000000..b06d09a061b
--- /dev/null
+++ b/solr/licenses/spring-boot-actuator-autoconfigure-2.7.12.jar.sha1
@@ -0,0 +1 @@
+18f55d22dc8d23f46f6dfd8dd352f3ae0bc8587c
diff --git a/solr/licenses/spring-boot-autoconfigure-2.5.14.jar.sha1 b/solr/licenses/spring-boot-autoconfigure-2.5.14.jar.sha1
deleted file mode 100644
index 954a37e9d37..00000000000
--- a/solr/licenses/spring-boot-autoconfigure-2.5.14.jar.sha1
+++ /dev/null
@@ -1 +0,0 @@
-83a8477a3d150070792594dc3a72addc65de118e
diff --git a/solr/licenses/spring-boot-autoconfigure-2.7.12.jar.sha1 b/solr/licenses/spring-boot-autoconfigure-2.7.12.jar.sha1
new file mode 100644
index 00000000000..a9d9d59d1db
--- /dev/null
+++ b/solr/licenses/spring-boot-autoconfigure-2.7.12.jar.sha1
@@ -0,0 +1 @@
+5bb8661bba72f7ca353ae486ccb06285f0ed84eb
diff --git a/solr/licenses/spring-boot-starter-2.5.14.jar.sha1 b/solr/licenses/spring-boot-starter-2.5.14.jar.sha1
deleted file mode 100644
index 29393666dae..00000000000
--- a/solr/licenses/spring-boot-starter-2.5.14.jar.sha1
+++ /dev/null
@@ -1 +0,0 @@
-932d4aba1c83f5bd0e5176dfd432ef1e6f874a9b
diff --git a/solr/licenses/spring-boot-starter-2.7.12.jar.sha1 b/solr/licenses/spring-boot-starter-2.7.12.jar.sha1
new file mode 100644
index 00000000000..aef33915fb5
--- /dev/null
+++ b/solr/licenses/spring-boot-starter-2.7.12.jar.sha1
@@ -0,0 +1 @@
+a5f6a95e4e4a50cfaf0f14c86240d8be49637141
diff --git a/solr/licenses/spring-boot-starter-actuator-2.5.14.jar.sha1 b/solr/licenses/spring-boot-starter-actuator-2.5.14.jar.sha1
deleted file mode 100644
index 8129f1851b2..00000000000
--- a/solr/licenses/spring-boot-starter-actuator-2.5.14.jar.sha1
+++ /dev/null
@@ -1 +0,0 @@
-cc4c81502b3507dc1694dcef09370d0e97d047de
diff --git a/solr/licenses/spring-boot-starter-actuator-2.7.12.jar.sha1 b/solr/licenses/spring-boot-starter-actuator-2.7.12.jar.sha1
new file mode 100644
index 00000000000..b38b6a5e399
--- /dev/null
+++ b/solr/licenses/spring-boot-starter-actuator-2.7.12.jar.sha1
@@ -0,0 +1 @@
+f3f66262d4b856db3afbb55e4c04446b24b085d6
diff --git a/solr/licenses/spring-boot-starter-jetty-2.5.14.jar.sha1 b/solr/licenses/spring-boot-starter-jetty-2.5.14.jar.sha1
deleted file mode 100644
index 27dd9d61726..00000000000
--- a/solr/licenses/spring-boot-starter-jetty-2.5.14.jar.sha1
+++ /dev/null
@@ -1 +0,0 @@
-17c20c40f0116ca6ce0fb478286e6064d2188dd0
diff --git a/solr/licenses/spring-boot-starter-jetty-2.7.12.jar.sha1 b/solr/licenses/spring-boot-starter-jetty-2.7.12.jar.sha1
new file mode 100644
index 00000000000..f7764cf0f9f
--- /dev/null
+++ b/solr/licenses/spring-boot-starter-jetty-2.7.12.jar.sha1
@@ -0,0 +1 @@
+12c93e9376bfb45f8eab849eb380137722f93c46
diff --git a/solr/licenses/spring-boot-starter-json-2.5.14.jar.sha1 b/solr/licenses/spring-boot-starter-json-2.5.14.jar.sha1
deleted file mode 100644
index ca55546f289..00000000000
--- a/solr/licenses/spring-boot-starter-json-2.5.14.jar.sha1
+++ /dev/null
@@ -1 +0,0 @@
-24640eed89ce4705722d0a5e103cb3cce2fbf9a5
diff --git a/solr/licenses/spring-boot-starter-json-2.7.12.jar.sha1 b/solr/licenses/spring-boot-starter-json-2.7.12.jar.sha1
new file mode 100644
index 00000000000..d96990b6418
--- /dev/null
+++ b/solr/licenses/spring-boot-starter-json-2.7.12.jar.sha1
@@ -0,0 +1 @@
+863c30cf3a7858421d71762e1632d887cdb0866f
diff --git a/solr/licenses/spring-boot-starter-logging-2.5.14.jar.sha1 b/solr/licenses/spring-boot-starter-logging-2.5.14.jar.sha1
deleted file mode 100644
index e5a29f0b59c..00000000000
--- a/solr/licenses/spring-boot-starter-logging-2.5.14.jar.sha1
+++ /dev/null
@@ -1 +0,0 @@
-312e9c5f3476ccc6b809c227fdfe7a72cdbce592
diff --git a/solr/licenses/spring-boot-starter-logging-2.7.12.jar.sha1 b/solr/licenses/spring-boot-starter-logging-2.7.12.jar.sha1
new file mode 100644
index 00000000000..e9aa96cf811
--- /dev/null
+++ b/solr/licenses/spring-boot-starter-logging-2.7.12.jar.sha1
@@ -0,0 +1 @@
+b6590492b4d92baebb4ac7c1b5db11fc3488e347
diff --git a/solr/licenses/spring-boot-starter-web-2.5.14.jar.sha1 b/solr/licenses/spring-boot-starter-web-2.5.14.jar.sha1
deleted file mode 100644
index f540a96a5f5..00000000000
--- a/solr/licenses/spring-boot-starter-web-2.5.14.jar.sha1
+++ /dev/null
@@ -1 +0,0 @@
-284d497a5786bae68ece94a22f9ca4a7b52ff0c5
diff --git a/solr/licenses/spring-boot-starter-web-2.7.12.jar.sha1 b/solr/licenses/spring-boot-starter-web-2.7.12.jar.sha1
new file mode 100644
index 00000000000..920b5538fcb
--- /dev/null
+++ b/solr/licenses/spring-boot-starter-web-2.7.12.jar.sha1
@@ -0,0 +1 @@
+aba3f96331e2cfa316d8ec7446804721120a0552
diff --git a/solr/licenses/spring-context-5.3.23.jar.sha1 b/solr/licenses/spring-context-5.3.23.jar.sha1
deleted file mode 100644
index 5487c862696..00000000000
--- a/solr/licenses/spring-context-5.3.23.jar.sha1
+++ /dev/null
@@ -1 +0,0 @@
-530b36b2ce2c9e471c6a260c3f181bcd20325a58
diff --git a/solr/licenses/spring-context-5.3.27.jar.sha1 b/solr/licenses/spring-context-5.3.27.jar.sha1
new file mode 100644
index 00000000000..6f6cccb3162
--- /dev/null
+++ b/solr/licenses/spring-context-5.3.27.jar.sha1
@@ -0,0 +1 @@
+0251162aa2fe5cb374a482ae87fa6e8e8e747d72
diff --git a/solr/licenses/spring-core-5.3.23.jar.sha1 b/solr/licenses/spring-core-5.3.23.jar.sha1
deleted file mode 100644
index 1b83d4905c5..00000000000
--- a/solr/licenses/spring-core-5.3.23.jar.sha1
+++ /dev/null
@@ -1 +0,0 @@
-91407dc1106ea423c44150f3da1a0b4f8e25e5ca
diff --git a/solr/licenses/spring-core-5.3.27.jar.sha1 b/solr/licenses/spring-core-5.3.27.jar.sha1
new file mode 100644
index 00000000000..41cad273635
--- /dev/null
+++ b/solr/licenses/spring-core-5.3.27.jar.sha1
@@ -0,0 +1 @@
+ff5e35f2d4f72d22c476ff9b7bce1de25c980ebd
diff --git a/solr/licenses/spring-expression-5.3.23.jar.sha1 b/solr/licenses/spring-expression-5.3.23.jar.sha1
deleted file mode 100644
index 7253c5b000c..00000000000
--- a/solr/licenses/spring-expression-5.3.23.jar.sha1
+++ /dev/null
@@ -1 +0,0 @@
-3a676bf4b9bc42bd37ab5ad264acb6ceb63397a2
diff --git a/solr/licenses/spring-expression-5.3.27.jar.sha1 b/solr/licenses/spring-expression-5.3.27.jar.sha1
new file mode 100644
index 00000000000..c2c59add74e
--- /dev/null
+++ b/solr/licenses/spring-expression-5.3.27.jar.sha1
@@ -0,0 +1 @@
+6225619970e8376df5c3d777610d9d03b977063b
diff --git a/solr/licenses/spring-jcl-5.3.23.jar.sha1 b/solr/licenses/spring-jcl-5.3.23.jar.sha1
deleted file mode 100644
index 402338e1b64..00000000000
--- a/solr/licenses/spring-jcl-5.3.23.jar.sha1
+++ /dev/null
@@ -1 +0,0 @@
-3c7eb5fcca67b611065f73ff4325e398f8b051a3
diff --git a/solr/licenses/spring-jcl-5.3.27.jar.sha1 b/solr/licenses/spring-jcl-5.3.27.jar.sha1
new file mode 100644
index 00000000000..cef4cecae97
--- /dev/null
+++ b/solr/licenses/spring-jcl-5.3.27.jar.sha1
@@ -0,0 +1 @@
+09698ea7d5361b5e3a27ed08beb7770279bd2397
diff --git a/solr/licenses/spring-web-5.3.23.jar.sha1 b/solr/licenses/spring-web-5.3.23.jar.sha1
deleted file mode 100644
index 9c7d6862d02..00000000000
--- a/solr/licenses/spring-web-5.3.23.jar.sha1
+++ /dev/null
@@ -1 +0,0 @@
-0193f5276092d9cbe3222c63885b47ca7b2cce97
diff --git a/solr/licenses/spring-web-5.3.27.jar.sha1 b/solr/licenses/spring-web-5.3.27.jar.sha1
new file mode 100644
index 00000000000..6b2d692cc30
--- /dev/null
+++ b/solr/licenses/spring-web-5.3.27.jar.sha1
@@ -0,0 +1 @@
+a51c45a8602052a2a90f7e645a47ba8df1547795
diff --git a/solr/licenses/spring-webmvc-5.3.23.jar.sha1 b/solr/licenses/spring-webmvc-5.3.23.jar.sha1
deleted file mode 100644
index 5dc279b7ae2..00000000000
--- a/solr/licenses/spring-webmvc-5.3.23.jar.sha1
+++ /dev/null
@@ -1 +0,0 @@
-b163527c275b0374371890c0b76c2a2a09f9804b
diff --git a/solr/licenses/spring-webmvc-5.3.27.jar.sha1 b/solr/licenses/spring-webmvc-5.3.27.jar.sha1
new file mode 100644
index 00000000000..5c353cce07c
--- /dev/null
+++ b/solr/licenses/spring-webmvc-5.3.27.jar.sha1
@@ -0,0 +1 @@
+8beabbb0cb64c448b39df790b62e342245ee7971
diff --git a/solr/licenses/tomcat-embed-el-9.0.63.jar.sha1 b/solr/licenses/tomcat-embed-el-9.0.63.jar.sha1
deleted file mode 100644
index 2242a4e69c2..00000000000
--- a/solr/licenses/tomcat-embed-el-9.0.63.jar.sha1
+++ /dev/null
@@ -1 +0,0 @@
-b595f0bdae0392c8b3c8592fea10023956a3f619
diff --git a/solr/licenses/tomcat-embed-el-9.0.75.jar.sha1 b/solr/licenses/tomcat-embed-el-9.0.75.jar.sha1
new file mode 100644
index 00000000000..695d5914abc
--- /dev/null
+++ b/solr/licenses/tomcat-embed-el-9.0.75.jar.sha1
@@ -0,0 +1 @@
+8b97771742cbd402ad1350190f8d08b240e1793b
diff --git a/solr/licenses/txw2-2.3.5.jar.sha1 b/solr/licenses/txw2-2.3.5.jar.sha1
deleted file mode 100644
index 793f9c8e802..00000000000
--- a/solr/licenses/txw2-2.3.5.jar.sha1
+++ /dev/null
@@ -1 +0,0 @@
-ec8930fa62e7b1758b1664d135f50c7abe86a4a3
diff --git a/solr/licenses/txw2-2.3.7.jar.sha1 b/solr/licenses/txw2-2.3.7.jar.sha1
new file mode 100644
index 00000000000..a0079c18b7d
--- /dev/null
+++ b/solr/licenses/txw2-2.3.7.jar.sha1
@@ -0,0 +1 @@
+55cddcac1945150e09b09b0f89d86799652eee82
diff --git a/solr/modules/gcs-repository/src/java/org/apache/solr/gcs/GCSBackupRepository.java b/solr/modules/gcs-repository/src/java/org/apache/solr/gcs/GCSBackupRepository.java
index 74f1f7f403d..5f9b2314b5d 100644
--- a/solr/modules/gcs-repository/src/java/org/apache/solr/gcs/GCSBackupRepository.java
+++ b/solr/modules/gcs-repository/src/java/org/apache/solr/gcs/GCSBackupRepository.java
@@ -38,7 +38,6 @@ import java.nio.ByteBuffer;
 import java.nio.channels.Channels;
 import java.nio.channels.WritableByteChannel;
 import java.nio.file.FileAlreadyExistsException;
-import java.nio.file.NoSuchFileException;
 import java.util.ArrayList;
 import java.util.Collection;
 import java.util.List;
@@ -323,8 +322,7 @@ public class GCSBackupRepository implements BackupRepository {
   }
 
   @Override
-  public void delete(URI path, Collection<String> files, boolean ignoreNoSuchFileException)
-      throws IOException {
+  public void delete(URI path, Collection<String> files) {
     if (files.isEmpty()) {
       return;
     }
@@ -333,14 +331,7 @@ public class GCSBackupRepository implements BackupRepository {
         files.stream()
             .map(file -> BlobId.of(bucketName, prefix + file))
             .collect(Collectors.toList());
-    List<Boolean> result = storage.delete(blobDeletes);
-    if (!ignoreNoSuchFileException) {
-      int failedDelete = result.indexOf(Boolean.FALSE);
-      if (failedDelete != -1) {
-        throw new NoSuchFileException(
-            "File " + blobDeletes.get(failedDelete).getName() + " was not found");
-      }
-    }
+    storage.delete(blobDeletes);
   }
 
   @Override
diff --git a/solr/modules/gcs-repository/src/test/org/apache/solr/gcs/LocalStorageGCSBackupRepository.java b/solr/modules/gcs-repository/src/test/org/apache/solr/gcs/LocalStorageGCSBackupRepository.java
index 43a17aac5ed..fc26a188f87 100644
--- a/solr/modules/gcs-repository/src/test/org/apache/solr/gcs/LocalStorageGCSBackupRepository.java
+++ b/solr/modules/gcs-repository/src/test/org/apache/solr/gcs/LocalStorageGCSBackupRepository.java
@@ -25,7 +25,6 @@ import com.google.cloud.storage.StorageException;
 import com.google.cloud.storage.contrib.nio.testing.LocalStorageHelper;
 import java.io.IOException;
 import java.net.URI;
-import java.nio.file.NoSuchFileException;
 import java.util.ArrayList;
 import java.util.Collection;
 import java.util.List;
@@ -58,21 +57,11 @@ public class LocalStorageGCSBackupRepository extends GCSBackupRepository {
   // production use cases, but
   // isn't supported by the in-memory Storage implementation provided by LocalStorageHelper
   @Override
-  public void delete(URI path, Collection<String> files, boolean ignoreNoSuchFileException)
-      throws IOException {
-    final List<Boolean> results = new ArrayList<>();
-
+  public void delete(URI path, Collection<String> files) {
     final List<String> filesOrdered = new ArrayList<>(files);
     for (String file : filesOrdered) {
-      final String prefix = path.toString().endsWith("/") ? path.toString() : path.toString() + "/";
-      results.add(storage.delete(BlobId.of(bucketName, prefix + file)));
-    }
-
-    if (!ignoreNoSuchFileException) {
-      int failedDelete = results.indexOf(Boolean.FALSE);
-      if (failedDelete != -1) {
-        throw new NoSuchFileException("File " + filesOrdered.get(failedDelete) + " was not found");
-      }
+      final String prefix = path.toString().endsWith("/") ? path.toString() : path + "/";
+      storage.delete(BlobId.of(bucketName, prefix + file));
     }
   }
 
diff --git a/solr/modules/hdfs/src/java/org/apache/solr/hdfs/backup/repository/HdfsBackupRepository.java b/solr/modules/hdfs/src/java/org/apache/solr/hdfs/backup/repository/HdfsBackupRepository.java
index c50b63e6752..2f02a9fa3fd 100644
--- a/solr/modules/hdfs/src/java/org/apache/solr/hdfs/backup/repository/HdfsBackupRepository.java
+++ b/solr/modules/hdfs/src/java/org/apache/solr/hdfs/backup/repository/HdfsBackupRepository.java
@@ -22,7 +22,6 @@ import java.io.OutputStream;
 import java.lang.invoke.MethodHandles;
 import java.net.URI;
 import java.net.URISyntaxException;
-import java.nio.file.NoSuchFileException;
 import java.util.Collection;
 import java.util.Objects;
 import org.apache.hadoop.conf.Configuration;
@@ -217,16 +216,12 @@ public class HdfsBackupRepository implements BackupRepository {
   }
 
   @Override
-  public void delete(URI path, Collection<String> files, boolean ignoreNoSuchFileException)
-      throws IOException {
+  public void delete(URI path, Collection<String> files) throws IOException {
     if (files.isEmpty()) return;
 
     for (String file : files) {
       Path filePath = new Path(new Path(path), file);
-      boolean success = fileSystem.delete(filePath, false);
-      if (!ignoreNoSuchFileException && !success) {
-        throw new NoSuchFileException(filePath.toString());
-      }
+      fileSystem.delete(filePath, false);
     }
   }
 }
diff --git a/solr/modules/s3-repository/src/java/org/apache/solr/s3/S3BackupRepository.java b/solr/modules/s3-repository/src/java/org/apache/solr/s3/S3BackupRepository.java
index 2f5f543360a..728c36a3b56 100644
--- a/solr/modules/s3-repository/src/java/org/apache/solr/s3/S3BackupRepository.java
+++ b/solr/modules/s3-repository/src/java/org/apache/solr/s3/S3BackupRepository.java
@@ -162,8 +162,7 @@ public class S3BackupRepository implements BackupRepository {
   }
 
   @Override
-  public void delete(URI path, Collection<String> files, boolean ignoreNoSuchFileException)
-      throws IOException {
+  public void delete(URI path, Collection<String> files) throws IOException {
     Objects.requireNonNull(path, "cannot delete files without a valid URI path");
     Objects.requireNonNull(files, "collection of files to delete cannot be null");
 
@@ -177,13 +176,7 @@ public class S3BackupRepository implements BackupRepository {
             .map(S3BackupRepository::getS3Path)
             .collect(Collectors.toSet());
 
-    try {
-      client.delete(filesToDelete);
-    } catch (S3NotFoundException e) {
-      if (!ignoreNoSuchFileException) {
-        throw e;
-      }
-    }
+    client.delete(filesToDelete);
   }
 
   @Override
diff --git a/solr/modules/s3-repository/src/java/org/apache/solr/s3/S3StorageClient.java b/solr/modules/s3-repository/src/java/org/apache/solr/s3/S3StorageClient.java
index b13ab2a7bd9..3d600899647 100644
--- a/solr/modules/s3-repository/src/java/org/apache/solr/s3/S3StorageClient.java
+++ b/solr/modules/s3-repository/src/java/org/apache/solr/s3/S3StorageClient.java
@@ -346,6 +346,9 @@ public class S3StorageClient {
    */
   long length(String path) throws S3Exception {
     String s3Path = sanitizedFilePath(path);
+    if (isDirectory(s3Path)) {
+      throw new S3Exception("Path is Directory");
+    }
     try {
       HeadObjectResponse objectMetadata =
           s3Client.headObject(b -> b.bucket(bucketName).key(s3Path));
diff --git a/solr/modules/s3-repository/src/test/org/apache/solr/s3/S3BackupRepositoryTest.java b/solr/modules/s3-repository/src/test/org/apache/solr/s3/S3BackupRepositoryTest.java
index 6cc78f95e8d..b7f35c574f0 100644
--- a/solr/modules/s3-repository/src/test/org/apache/solr/s3/S3BackupRepositoryTest.java
+++ b/solr/modules/s3-repository/src/test/org/apache/solr/s3/S3BackupRepositoryTest.java
@@ -104,13 +104,13 @@ public class S3BackupRepositoryTest extends AbstractBackupRepositoryTest {
   public void testLocalDirectoryFunctions() throws Exception {
     try (S3BackupRepository repo = getRepository()) {
 
-      URI path = new URI("/test");
+      URI path = new URI("/test/");
       repo.createDirectory(path);
       assertTrue(repo.exists(path));
       assertEquals(BackupRepository.PathType.DIRECTORY, repo.getPathType(path));
       assertEquals("No files should exist in dir yet", repo.listAll(path).length, 0);
 
-      URI subDir = new URI("/test/dir");
+      URI subDir = new URI("/test/dir/");
       repo.createDirectory(subDir);
       assertTrue(repo.exists(subDir));
       assertEquals(BackupRepository.PathType.DIRECTORY, repo.getPathType(subDir));
diff --git a/solr/modules/s3-repository/src/test/org/apache/solr/s3/S3PathsTest.java b/solr/modules/s3-repository/src/test/org/apache/solr/s3/S3PathsTest.java
index 4b3a0c9d3f2..d314855c3b1 100644
--- a/solr/modules/s3-repository/src/test/org/apache/solr/s3/S3PathsTest.java
+++ b/solr/modules/s3-repository/src/test/org/apache/solr/s3/S3PathsTest.java
@@ -48,7 +48,7 @@ public class S3PathsTest extends AbstractS3ClientTest {
   public void testDirectory() throws S3Exception {
 
     client.createDirectory("/simple-directory");
-    assertTrue(client.pathExists("/simple-directory"));
+    assertFalse("Dir path needs a trailing slash", client.pathExists("/simple-directory"));
     assertTrue("Dir should exist without a leading slash", client.pathExists("simple-directory/"));
     assertTrue("Dir should exist with a leading slash", client.pathExists("/simple-directory/"));
     assertTrue(
diff --git a/solr/modules/s3-repository/src/test/org/apache/solr/s3/S3ReadWriteTest.java b/solr/modules/s3-repository/src/test/org/apache/solr/s3/S3ReadWriteTest.java
index 8879879699d..9b6e3172f86 100644
--- a/solr/modules/s3-repository/src/test/org/apache/solr/s3/S3ReadWriteTest.java
+++ b/solr/modules/s3-repository/src/test/org/apache/solr/s3/S3ReadWriteTest.java
@@ -20,7 +20,6 @@ import static org.hamcrest.Matchers.containsString;
 
 import java.io.InputStream;
 import java.nio.charset.StandardCharsets;
-import java.util.Collections;
 import org.hamcrest.MatcherAssert;
 import org.junit.Test;
 
@@ -103,7 +102,5 @@ public class S3ReadWriteTest extends AbstractS3ClientTest {
   public void testNotFound() {
     assertThrows(S3NotFoundException.class, () -> client.pullStream("/not-found"));
     assertThrows(S3NotFoundException.class, () -> client.length("/not-found"));
-    assertThrows(
-        S3NotFoundException.class, () -> client.delete(Collections.singleton("/not-found")));
   }
 }
diff --git a/solr/test-framework/src/java/org/apache/solr/cloud/api/collections/AbstractBackupRepositoryTest.java b/solr/test-framework/src/java/org/apache/solr/cloud/api/collections/AbstractBackupRepositoryTest.java
index 3bfac1a08cf..9a260d76a56 100644
--- a/solr/test-framework/src/java/org/apache/solr/cloud/api/collections/AbstractBackupRepositoryTest.java
+++ b/solr/test-framework/src/java/org/apache/solr/cloud/api/collections/AbstractBackupRepositoryTest.java
@@ -31,10 +31,6 @@ import org.apache.solr.core.backup.repository.BackupRepository;
 import org.junit.Test;
 
 public abstract class AbstractBackupRepositoryTest extends SolrTestCaseJ4 {
-
-  private static final boolean IGNORE_NONEXISTENT = true;
-  private static final boolean REPORT_NONEXISTENT = false;
-
   protected abstract BackupRepository getRepository();
 
   protected abstract URI getBaseUri() throws URISyntaxException;
@@ -78,8 +74,8 @@ public abstract class AbstractBackupRepositoryTest extends SolrTestCaseJ4 {
   public void testCanDetermineWhetherFilesAndDirectoriesExist() throws Exception {
     try (BackupRepository repo = getRepository()) {
       // Create 'emptyDir/', 'nonEmptyDir/', and 'nonEmptyDir/file.txt'
-      final URI emptyDirUri = repo.resolve(getBaseUri(), "emptyDir");
-      final URI nonEmptyDirUri = repo.resolve(getBaseUri(), "nonEmptyDir");
+      final URI emptyDirUri = repo.resolve(getBaseUri(), "emptyDir/");
+      final URI nonEmptyDirUri = repo.resolve(getBaseUri(), "nonEmptyDir/");
       final URI nestedFileUri = repo.resolve(nonEmptyDirUri, "file.txt");
       repo.createDirectory(emptyDirUri);
       repo.createDirectory(nonEmptyDirUri);
@@ -88,7 +84,7 @@ public abstract class AbstractBackupRepositoryTest extends SolrTestCaseJ4 {
       assertTrue(repo.exists(emptyDirUri));
       assertTrue(repo.exists(nonEmptyDirUri));
       assertTrue(repo.exists(nestedFileUri));
-      final URI nonexistedDirUri = repo.resolve(getBaseUri(), "nonexistentDir");
+      final URI nonexistedDirUri = repo.resolve(getBaseUri(), "nonexistentDir/");
       assertFalse(repo.exists(nonexistedDirUri));
     }
   }
@@ -96,8 +92,8 @@ public abstract class AbstractBackupRepositoryTest extends SolrTestCaseJ4 {
   @Test
   public void testCanDistinguishBetweenFilesAndDirectories() throws Exception {
     try (BackupRepository repo = getRepository()) {
-      final URI emptyDirUri = repo.resolve(getBaseUri(), "emptyDir");
-      final URI nonEmptyDirUri = repo.resolve(getBaseUri(), "nonEmptyDir");
+      final URI emptyDirUri = repo.resolve(getBaseUri(), "emptyDir/");
+      final URI nonEmptyDirUri = repo.resolve(getBaseUri(), "nonEmptyDir/");
       final URI nestedFileUri = repo.resolve(nonEmptyDirUri, "file.txt");
       repo.createDirectory(emptyDirUri);
       repo.createDirectory(nonEmptyDirUri);
@@ -151,10 +147,10 @@ public abstract class AbstractBackupRepositoryTest extends SolrTestCaseJ4 {
       assertFalse(repo.exists(fileUri));
 
       // Delete the middle directory in a deeply nested structure (/nest1/nest2/nest3/nest4)
-      final URI level1DeeplyNestedUri = repo.resolve(getBaseUri(), "nest1");
-      final URI level2DeeplyNestedUri = repo.resolve(level1DeeplyNestedUri, "nest2");
-      final URI level3DeeplyNestedUri = repo.resolve(level2DeeplyNestedUri, "nest3");
-      final URI level4DeeplyNestedUri = repo.resolve(level3DeeplyNestedUri, "nest4");
+      final URI level1DeeplyNestedUri = repo.resolve(getBaseUri(), "nest1/");
+      final URI level2DeeplyNestedUri = repo.resolve(level1DeeplyNestedUri, "nest2/");
+      final URI level3DeeplyNestedUri = repo.resolve(level2DeeplyNestedUri, "nest3/");
+      final URI level4DeeplyNestedUri = repo.resolve(level3DeeplyNestedUri, "nest4/");
       repo.createDirectory(level1DeeplyNestedUri);
       repo.createDirectory(level2DeeplyNestedUri);
       repo.createDirectory(level3DeeplyNestedUri);
@@ -187,19 +183,14 @@ public abstract class AbstractBackupRepositoryTest extends SolrTestCaseJ4 {
       addFile(repo, file2Uri);
       addFile(repo, file3Uri);
 
-      // Ensure nonexistent files are handled differently based on boolean flag param
+      // Ensure nonexistent files can be deleted
       final URI nonexistentFileUri = repo.resolve(getBaseUri(), "file4.txt");
       assertFalse(repo.exists(nonexistentFileUri));
-      repo.delete(getBaseUri(), List.of("file4.txt"), IGNORE_NONEXISTENT);
-      expectThrows(
-          IOException.class,
-          () -> {
-            repo.delete(getBaseUri(), List.of("file4.txt"), REPORT_NONEXISTENT);
-          });
+      repo.delete(getBaseUri(), List.of("file4.txt"));
 
       // Delete existing files individually and in 'bulk'
-      repo.delete(getBaseUri(), List.of("file1.txt"), REPORT_NONEXISTENT);
-      repo.delete(getBaseUri(), List.of("file2.txt", "file3.txt"), REPORT_NONEXISTENT);
+      repo.delete(getBaseUri(), List.of("file1.txt"));
+      repo.delete(getBaseUri(), List.of("file2.txt", "file3.txt"));
       assertFalse(repo.exists(file1Uri));
       assertFalse(repo.exists(file2Uri));
       assertFalse(repo.exists(file3Uri));
diff --git a/solr/test-framework/src/java/org/apache/solr/cloud/api/collections/AbstractIncrementalBackupTest.java b/solr/test-framework/src/java/org/apache/solr/cloud/api/collections/AbstractIncrementalBackupTest.java
index 8e4fb401101..43bd98e378a 100644
--- a/solr/test-framework/src/java/org/apache/solr/cloud/api/collections/AbstractIncrementalBackupTest.java
+++ b/solr/test-framework/src/java/org/apache/solr/cloud/api/collections/AbstractIncrementalBackupTest.java
@@ -578,7 +578,7 @@ public abstract class AbstractIncrementalBackupTest extends SolrCloudTestCase {
 
       URI backupPropertiesFile =
           repository.resolve(backupURI, "backup_" + numBackup + ".properties");
-      URI zkBackupFolder = repository.resolve(backupURI, "zk_backup_" + numBackup);
+      URI zkBackupFolder = repository.resolveDirectory(backupURI, "zk_backup_" + numBackup);
       assertTrue(repository.exists(backupPropertiesFile));
       assertTrue(repository.exists(zkBackupFolder));
       assertFolderAreSame(
diff --git a/solr/test-framework/src/java/org/apache/solr/core/TrackingBackupRepository.java b/solr/test-framework/src/java/org/apache/solr/core/TrackingBackupRepository.java
index 309306356b8..e02b16dcffb 100644
--- a/solr/test-framework/src/java/org/apache/solr/core/TrackingBackupRepository.java
+++ b/solr/test-framework/src/java/org/apache/solr/core/TrackingBackupRepository.java
@@ -111,9 +111,8 @@ public class TrackingBackupRepository implements BackupRepository {
   }
 
   @Override
-  public void delete(URI path, Collection<String> files, boolean ignoreNoSuchFileException)
-      throws IOException {
-    delegate.delete(path, files, ignoreNoSuchFileException);
+  public void delete(URI path, Collection<String> files) throws IOException {
+    delegate.delete(path, files);
   }
 
   @Override
diff --git a/versions.lock b/versions.lock
index c3efc6d856c..1fc530b6630 100644
--- a/versions.lock
+++ b/versions.lock
@@ -9,11 +9,11 @@ com.epam:parso:2.0.14 (1 constraints: 8e0c750e)
 com.fasterxml.jackson:jackson-bom:2.15.2 (12 constraints: 4ef8ad55)
 com.fasterxml.jackson.core:jackson-annotations:2.15.2 (10 constraints: 9bbe6617)
 com.fasterxml.jackson.core:jackson-core:2.15.2 (13 constraints: 42025e28)
-com.fasterxml.jackson.core:jackson-databind:2.15.2 (18 constraints: 8163bbd4)
-com.fasterxml.jackson.dataformat:jackson-dataformat-cbor:2.15.2 (2 constraints: 601c16f1)
+com.fasterxml.jackson.core:jackson-databind:2.15.2 (18 constraints: 89633f8a)
+com.fasterxml.jackson.dataformat:jackson-dataformat-cbor:2.15.2 (2 constraints: 631c9af1)
 com.fasterxml.jackson.dataformat:jackson-dataformat-smile:2.15.2 (1 constraints: ba0eab66)
 com.fasterxml.jackson.module:jackson-module-jaxb-annotations:2.15.2 (2 constraints: a624c5e0)
-com.fasterxml.woodstox:woodstox-core:6.5.1 (3 constraints: ad28f4b8)
+com.fasterxml.woodstox:woodstox-core:6.5.1 (2 constraints: a0239c84)
 com.github.ben-manes.caffeine:caffeine:3.1.5 (1 constraints: 0b050236)
 com.github.jai-imageio:jai-imageio-core:1.4.0 (1 constraints: 5c0ced01)
 com.github.junrar:junrar:7.5.3 (1 constraints: 660c1102)
@@ -157,7 +157,7 @@ jakarta.ws.rs:jakarta.ws.rs-api:2.1.6 (10 constraints: c1cce3ec)
 jakarta.xml.bind:jakarta.xml.bind-api:2.3.3 (5 constraints: c45d665e)
 javax.measure:unit-api:1.0 (5 constraints: 8e3e2cc5)
 joda-time:joda-time:2.8.1 (3 constraints: d61aef93)
-junit:junit:4.13.2 (9 constraints: d4aa559e)
+junit:junit:4.13.2 (9 constraints: d5aafc9f)
 net.arnx:jsonic:1.2.7 (1 constraints: d00b47eb)
 net.java.dev.jna:jna:5.12.1 (1 constraints: 900c8e0e)
 net.sf.ehcache:ehcache-core:2.6.2 (1 constraints: 2706f94d)
@@ -306,8 +306,8 @@ org.glassfish.hk2:hk2-utils:2.6.1 (2 constraints: 21173277)
 org.glassfish.hk2:osgi-resource-locator:1.0.3 (2 constraints: 7d23b265)
 org.glassfish.hk2.external:aopalliance-repackaged:2.6.1 (2 constraints: 21173277)
 org.glassfish.hk2.external:jakarta.inject:2.6.1 (11 constraints: 2cbae60f)
-org.glassfish.jaxb:jaxb-runtime:2.3.5 (1 constraints: 610cf401)
-org.glassfish.jaxb:txw2:2.3.5 (1 constraints: bf0db735)
+org.glassfish.jaxb:jaxb-runtime:2.3.7 (2 constraints: 2217375b)
+org.glassfish.jaxb:txw2:2.3.7 (1 constraints: c10db935)
 org.glassfish.jersey.containers:jersey-container-jetty-http:2.35 (1 constraints: de04fe30)
 org.glassfish.jersey.core:jersey-client:2.35 (1 constraints: d510c6b2)
 org.glassfish.jersey.core:jersey-common:2.35 (11 constraints: d3ddca6a)
@@ -369,29 +369,29 @@ software.amazon.awssdk:json-utils:2.20.63 (5 constraints: 603f0b35)
 software.amazon.awssdk:metrics-spi:2.20.63 (7 constraints: 1362a3fe)
 software.amazon.awssdk:profiles:2.20.63 (8 constraints: 3761ba2b)
 software.amazon.awssdk:protocol-core:2.20.63 (5 constraints: 6c488050)
-software.amazon.awssdk:regions:2.20.63 (6 constraints: f844f0b7)
-software.amazon.awssdk:s3:2.20.63 (3 constraints: af24f125)
+software.amazon.awssdk:regions:2.20.63 (7 constraints: 2050a39f)
+software.amazon.awssdk:s3:2.20.63 (3 constraints: ad24a625)
 software.amazon.awssdk:sdk-core:2.20.63 (10 constraints: 4c87aab9)
 software.amazon.awssdk:sts:2.20.63 (2 constraints: c5112e14)
 software.amazon.awssdk:third-party-jackson-core:2.20.63 (2 constraints: 871bdea6)
-software.amazon.awssdk:utils:2.20.63 (18 constraints: eb0c71e3)
+software.amazon.awssdk:utils:2.20.63 (19 constraints: 131861f1)
 software.amazon.eventstream:eventstream:1.0.1 (2 constraints: 2e1ae62b)
 ua.net.nlp:morfologik-ukrainian-search:4.9.1 (1 constraints: d5126e1e)
 xerces:xercesImpl:2.12.2 (1 constraints: 8e0c7d0e)
 
 [Test dependencies]
-com.adobe.testing:s3mock:2.1.34 (1 constraints: b012831d)
-com.adobe.testing:s3mock-junit4:2.1.34 (1 constraints: 3c05373b)
-com.adobe.testing:s3mock-testsupport-common:2.1.34 (1 constraints: 7b0d8b39)
-com.amazonaws:aws-java-sdk-core:1.12.15 (2 constraints: 501a5183)
-com.amazonaws:aws-java-sdk-kms:1.12.15 (1 constraints: d60cb42a)
-com.amazonaws:aws-java-sdk-s3:1.12.15 (1 constraints: e0125c30)
-com.amazonaws:jmespath-java:1.12.15 (2 constraints: 501a5183)
-com.fasterxml.jackson.dataformat:jackson-dataformat-xml:2.15.2 (2 constraints: a719cc12)
-com.fasterxml.jackson.datatype:jackson-datatype-jdk8:2.15.2 (2 constraints: 0c243d82)
-com.fasterxml.jackson.datatype:jackson-datatype-jsr310:2.15.2 (3 constraints: 7d3d5e10)
+com.adobe.testing:s3mock:2.12.2 (1 constraints: ad12831d)
+com.adobe.testing:s3mock-junit4:2.12.2 (1 constraints: 3905373b)
+com.adobe.testing:s3mock-testsupport-common:2.12.2 (1 constraints: 780d8b39)
+com.amazonaws:aws-java-sdk-core:1.12.389 (2 constraints: cc1a94b5)
+com.amazonaws:aws-java-sdk-kms:1.12.389 (1 constraints: 140dcf37)
+com.amazonaws:aws-java-sdk-s3:1.12.389 (1 constraints: 1e138143)
+com.amazonaws:jmespath-java:1.12.389 (2 constraints: cc1a94b5)
+com.fasterxml.jackson.dataformat:jackson-dataformat-xml:2.15.2 (2 constraints: a9192813)
+com.fasterxml.jackson.datatype:jackson-datatype-jdk8:2.15.2 (3 constraints: fb2eefb3)
+com.fasterxml.jackson.datatype:jackson-datatype-jsr310:2.15.2 (4 constraints: 6c48aa34)
 com.fasterxml.jackson.module:jackson-module-kotlin:2.15.2 (2 constraints: a61d3360)
-com.fasterxml.jackson.module:jackson-module-parameter-names:2.15.2 (2 constraints: 0c243d82)
+com.fasterxml.jackson.module:jackson-module-parameter-names:2.15.2 (2 constraints: 0c243f82)
 com.google.cloud:google-cloud-nio:0.126.10 (1 constraints: c70e207b)
 com.nimbusds:content-type:2.2 (1 constraints: d80b68eb)
 com.nimbusds:lang-tag:1.5 (1 constraints: da0b68eb)
@@ -400,7 +400,7 @@ com.nimbusds:oauth2-oidc-sdk:9.22.2 (1 constraints: f50ebb71)
 com.squareup.okhttp3:mockwebserver:4.9.3 (1 constraints: c60ebf62)
 io.github.microutils:kotlin-logging:2.1.21 (1 constraints: ec0e8871)
 io.github.microutils:kotlin-logging-jvm:2.1.21 (1 constraints: af0f358c)
-io.micrometer:micrometer-core:1.7.12 (1 constraints: fc162119)
+io.micrometer:micrometer-core:1.9.11 (1 constraints: fd162819)
 io.opentracing:opentracing-mock:0.33.0 (1 constraints: 3805343b)
 jakarta.servlet:jakarta.servlet-api:4.0.4 (4 constraints: 586e1f6a)
 jakarta.websocket:jakarta.websocket-api:1.1.2 (1 constraints: 92155ab9)
@@ -418,7 +418,7 @@ org.apache.kerby:kerb-common:1.0.1 (2 constraints: a51841ca)
 org.apache.kerby:kerb-identity:1.0.1 (1 constraints: 5f0cb602)
 org.apache.kerby:kerb-server:1.0.1 (1 constraints: d10b65f2)
 org.apache.kerby:kerb-simplekdc:1.0.1 (1 constraints: dc0d7e3e)
-org.apache.tomcat.embed:tomcat-embed-el:9.0.63 (1 constraints: d01553cf)
+org.apache.tomcat.embed:tomcat-embed-el:9.0.75 (1 constraints: d31557cf)
 org.freemarker:freemarker:2.3.31 (1 constraints: ef0e9271)
 org.glassfish.grizzly:grizzly-framework:2.4.4 (1 constraints: 670fe271)
 org.glassfish.grizzly:grizzly-http:2.4.4 (1 constraints: 2b127cf5)
@@ -437,24 +437,24 @@ org.jetbrains.kotlin:kotlin-reflect:1.6.10 (2 constraints: 6224e0e2)
 org.latencyutils:LatencyUtils:2.0.3 (1 constraints: 210dcd1b)
 org.mockito:mockito-core:3.8.0 (1 constraints: 0d051236)
 org.objenesis:objenesis:3.1 (1 constraints: b00a12bd)
-org.springframework:spring-aop:5.3.23 (2 constraints: d41eae99)
-org.springframework:spring-beans:5.3.23 (4 constraints: 9c3abec4)
-org.springframework:spring-context:5.3.23 (2 constraints: 621fdbd1)
-org.springframework:spring-core:5.3.23 (8 constraints: e17dffad)
-org.springframework:spring-expression:5.3.23 (2 constraints: d41eae99)
-org.springframework:spring-jcl:5.3.23 (1 constraints: 4f0e9f4f)
-org.springframework:spring-web:5.3.23 (3 constraints: 5039958a)
-org.springframework:spring-webmvc:5.3.23 (1 constraints: d614689e)
-org.springframework.boot:spring-boot:2.5.14 (4 constraints: 8b564b45)
-org.springframework.boot:spring-boot-actuator:2.5.14 (1 constraints: 73199cb8)
-org.springframework.boot:spring-boot-actuator-autoconfigure:2.5.14 (1 constraints: fd162119)
-org.springframework.boot:spring-boot-autoconfigure:2.5.14 (2 constraints: df2c875d)
-org.springframework.boot:spring-boot-starter:2.5.14 (3 constraints: 274126c5)
-org.springframework.boot:spring-boot-starter-actuator:2.5.14 (1 constraints: a80fdfae)
-org.springframework.boot:spring-boot-starter-jetty:2.5.14 (1 constraints: 1d0d3137)
-org.springframework.boot:spring-boot-starter-json:2.5.14 (1 constraints: d814609e)
-org.springframework.boot:spring-boot-starter-logging:2.5.14 (1 constraints: 6d138546)
-org.springframework.boot:spring-boot-starter-web:2.5.14 (1 constraints: 1d0d3137)
-org.yaml:snakeyaml:1.28 (1 constraints: 0e13df1f)
-software.amazon.awssdk:url-connection-client:2.20.63 (2 constraints: 411f02f7)
+org.springframework:spring-aop:5.3.27 (2 constraints: dc1e629a)
+org.springframework:spring-beans:5.3.27 (4 constraints: ac3ac2c8)
+org.springframework:spring-context:5.3.27 (2 constraints: 6d1f9ed2)
+org.springframework:spring-core:5.3.27 (8 constraints: 077e17c3)
+org.springframework:spring-expression:5.3.27 (2 constraints: dc1e629a)
+org.springframework:spring-jcl:5.3.27 (1 constraints: 530ea34f)
+org.springframework:spring-web:5.3.27 (3 constraints: 6239118e)
+org.springframework:spring-webmvc:5.3.27 (1 constraints: dd146f9e)
+org.springframework.boot:spring-boot:2.7.12 (4 constraints: 8b566345)
+org.springframework.boot:spring-boot-actuator:2.7.12 (1 constraints: 7319a2b8)
+org.springframework.boot:spring-boot-actuator-autoconfigure:2.7.12 (1 constraints: fd162719)
+org.springframework.boot:spring-boot-autoconfigure:2.7.12 (2 constraints: df2c935d)
+org.springframework.boot:spring-boot-starter:2.7.12 (3 constraints: 274138c5)
+org.springframework.boot:spring-boot-starter-actuator:2.7.12 (2 constraints: 161858a6)
+org.springframework.boot:spring-boot-starter-jetty:2.7.12 (1 constraints: c60a4ccb)
+org.springframework.boot:spring-boot-starter-json:2.7.12 (1 constraints: d814669e)
+org.springframework.boot:spring-boot-starter-logging:2.7.12 (1 constraints: 6d138b46)
+org.springframework.boot:spring-boot-starter-web:2.7.12 (1 constraints: c60a4ccb)
+org.yaml:snakeyaml:1.30 (1 constraints: 0713d91f)
+software.amazon.awssdk:url-connection-client:2.20.63 (2 constraints: 3f1fb7f6)
 software.amazon.ion:ion-java:1.0.2 (1 constraints: 720db831)
diff --git a/versions.props b/versions.props
index 9242b71a895..5d8651fa71e 100644
--- a/versions.props
+++ b/versions.props
@@ -1,12 +1,11 @@
 # The lines in this file needs to be lexicographically sorted.
 # Please only add direct dependencies. Overrides of transitive versions should be called out in a comment.
 biz.aQute.bnd:biz.aQute.bnd.annotation=6.4.0
-com.adobe.testing:s3mock-junit4=2.1.34
+com.adobe.testing:s3mock-junit4=2.12.2
 com.carrotsearch.randomizedtesting:*=2.8.1
 com.carrotsearch:hppc=0.9.1
 com.cybozu.labs:langdetect=1.1-20120112
 com.fasterxml.jackson:jackson-bom=2.15.2
-com.fasterxml.woodstox:woodstox-core=6.5.1
 com.github.ben-manes.caffeine:caffeine=3.1.5
 com.github.spotbugs:*=4.7.3
 com.github.stephenc.jcip:jcip-annotations=1.0-1
@@ -71,7 +70,6 @@ org.osgi:osgi.annotation=8.1.0
 org.quicktheories:quicktheories=0.26
 org.semver4j:semver4j=4.3.0
 org.slf4j:*=2.0.7
-org.springframework.boot:spring-boot*=2.5.14
-org.springframework:spring*=5.3.23
+org.springframework.boot:spring-boot*=2.7.12
 org.xerial.snappy:snappy-java=1.1.9.1
 software.amazon.awssdk:*=2.20.63