This is an automated email from the ASF dual-hosted git repository.
gerlowskija 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 f586eda8ba1 Revert "SOLR-18502: INSTALLSHARD skips write.lock download
(#5026)"
f586eda8ba1 is described below
commit f586eda8ba14d4e96a80656d20c32c2c73e6bdaa
Author: Jason Gerlowski <[email protected]>
AuthorDate: Wed Oct 14 11:41:46 2026 -0400
Revert "SOLR-18502: INSTALLSHARD skips write.lock download (#5026)"
This reverts commit f3a798e424bb933ba988c8d316d0e8f35c8b6e0f.
---
...LR-18502-ignore-write-locks-in-installshard.yml | 8 ----
.../java/org/apache/solr/handler/RestoreCore.java | 6 ---
.../api/collections/AbstractInstallShardTest.java | 46 +---------------------
.../apache/solr/core/TrackingBackupRepository.java | 13 ------
4 files changed, 1 insertion(+), 72 deletions(-)
diff --git
a/changelog/unreleased/SOLR-18502-ignore-write-locks-in-installshard.yml
b/changelog/unreleased/SOLR-18502-ignore-write-locks-in-installshard.yml
deleted file mode 100644
index fa929f97131..00000000000
--- a/changelog/unreleased/SOLR-18502-ignore-write-locks-in-installshard.yml
+++ /dev/null
@@ -1,8 +0,0 @@
-title: >
- INSTALLSHARD now ignores 'write.lock' file if present in offline index data.
-type: changed
-authors:
- - name: Jason Gerlowski
-links:
- - name: SOLR-18502
- url: https://issues.apache.org/jira/browse/SOLR-18502
diff --git a/solr/core/src/java/org/apache/solr/handler/RestoreCore.java
b/solr/core/src/java/org/apache/solr/handler/RestoreCore.java
index fecfc6d58de..2d5e1f2fa92 100644
--- a/solr/core/src/java/org/apache/solr/handler/RestoreCore.java
+++ b/solr/core/src/java/org/apache/solr/handler/RestoreCore.java
@@ -34,7 +34,6 @@ import java.util.concurrent.ExecutionException;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Future;
import org.apache.lucene.codecs.CodecUtil;
-import org.apache.lucene.index.IndexWriter;
import org.apache.lucene.store.Directory;
import org.apache.lucene.store.IOContext;
import org.apache.lucene.store.IndexInput;
@@ -146,11 +145,6 @@ public class RestoreCore implements Callable<Boolean> {
for (String filename : repository.listAllFiles()) {
checkInterrupted();
- // Lock files only make sense for the process that created them, and
carry no checksum
- if (IndexWriter.WRITE_LOCK_NAME.equals(filename)) {
- continue;
- }
-
// Capture variables for lambda
final String filenameFinal = filename;
final boolean fileExistsLocally = indexDirFiles.contains(filename);
diff --git
a/solr/test-framework/src/java/org/apache/solr/cloud/api/collections/AbstractInstallShardTest.java
b/solr/test-framework/src/java/org/apache/solr/cloud/api/collections/AbstractInstallShardTest.java
index 17e20cbeed8..86d12f4a7bd 100644
---
a/solr/test-framework/src/java/org/apache/solr/cloud/api/collections/AbstractInstallShardTest.java
+++
b/solr/test-framework/src/java/org/apache/solr/cloud/api/collections/AbstractInstallShardTest.java
@@ -35,7 +35,6 @@ import java.util.concurrent.ExecutionException;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Future;
import java.util.concurrent.TimeUnit;
-import org.apache.lucene.index.IndexWriter;
import org.apache.lucene.store.Directory;
import org.apache.solr.client.solrj.RemoteSolrException;
import org.apache.solr.client.solrj.SolrClient;
@@ -51,7 +50,6 @@ import org.apache.solr.core.CoreContainer;
import org.apache.solr.core.CoreDescriptor;
import org.apache.solr.core.DirectoryFactory;
import org.apache.solr.core.SolrCore;
-import org.apache.solr.core.TrackingBackupRepository;
import org.apache.solr.core.backup.repository.BackupRepository;
import org.apache.solr.handler.admin.api.InstallShardData;
import org.junit.After;
@@ -189,41 +187,6 @@ public abstract class AbstractInstallShardTest extends
SolrCloudTestCase {
assertCollectionHasNumDocs(collectionName, singleShardNumDocs);
}
- @Test
- public void testInstallSkipsWriteLockFile() throws Exception {
- final String collectionName = createAndAwaitEmptyCollection(1,
replicasPerShard);
- deleteAfterTest(collectionName);
- enableReadOnly(collectionName);
-
- // Offline index data _shouldn't_ contain a "write.lock", but it's common
for users
- // to copy a live index dir, so the file is often included regardless.
Make sure
- // write.lock is present to simulate this case so that we can ensure
INSTALLSHARD
- // skips it gracefully.
- final CoreContainer cc = cluster.getJettySolrRunner(0).getCoreContainer();
- final URI lockUri;
- try (final BackupRepository repo =
cc.newBackupRepository(BACKUP_REPO_NAME)) {
- lockUri = repo.resolve(singleShard1Uri, "write.lock");
- assertTrue("Test data should include a write.lock",
repo.exists(lockUri));
- }
-
- TrackingBackupRepository.clear();
- CollectionAdminRequest.installDataToShard(
- collectionName, "shard1", singleShard1Uri.toString(),
BACKUP_REPO_NAME)
- .process(cluster.getSolrClient());
- waitForState(
- "The core-installs should complete and all replicas become healthy",
- collectionName,
- 30,
- TimeUnit.SECONDS,
- SolrCloudTestCase.activeClusterShape(1, replicasPerShard));
-
- assertCollectionHasNumDocs(collectionName, singleShardNumDocs);
-
- final List<URI> restored = TrackingBackupRepository.restoredFiles();
- assertFalse("Expected other index files to be installed",
restored.isEmpty());
- assertFalse("write.lock should not be copied during install",
restored.contains(lockUri));
- }
-
@Test
public void testInstallReportsErrorsAppropriately() throws Exception {
final String collectionName = createAndAwaitEmptyCollection(1,
replicasPerShard);
@@ -392,14 +355,7 @@ public abstract class AbstractInstallShardTest extends
SolrCloudTestCase {
core.getSolrConfig().indexConfig.lockType);
try {
for (final String dirContent : dir.listAll()) {
- if (dirContent.equals(IndexWriter.WRITE_LOCK_NAME)) {
- // Backup upload requires a checksum footer that lock files lack,
so create it directly.
- // Real-world "offline" indices copied from a live index dir often
contain one.
- backupRepository
- .createOutput(backupRepository.resolve(destinationUri,
dirContent))
- .close();
- continue;
- }
+ if (dirContent.contains("write.lock")) continue;
backupRepository.copyFileFrom(dir, dirContent, destinationUri);
}
} finally {
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 4148bc667ab..f81d59d1d4a 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
@@ -28,7 +28,6 @@ import
org.apache.solr.core.backup.repository.DelegatingBackupRepository;
public class TrackingBackupRepository extends DelegatingBackupRepository {
private static final List<URI> COPIED_FILES =
Collections.synchronizedList(new ArrayList<>());
- private static final List<URI> RESTORED_FILES =
Collections.synchronizedList(new ArrayList<>());
private static final List<URI> DIRECTORIES_CREATED =
Collections.synchronizedList(new ArrayList<>());
private static final List<URI> OUTPUTS_CREATED =
Collections.synchronizedList(new ArrayList<>());
@@ -53,12 +52,6 @@ public class TrackingBackupRepository extends
DelegatingBackupRepository {
super.copyIndexFileFrom(sourceDir, sourceFileName, destDir, destFileName);
}
- @Override
- public void copyFileTo(URI sourceRepo, String fileName, Directory dest)
throws IOException {
- RESTORED_FILES.add(resolve(sourceRepo, fileName));
- super.copyFileTo(sourceRepo, fileName, dest);
- }
-
/**
* @return list of files were copied by using {@link
#copyFileFrom(Directory, String, URI)}
*/
@@ -66,11 +59,6 @@ public class TrackingBackupRepository extends
DelegatingBackupRepository {
return new ArrayList<>(COPIED_FILES);
}
- /** Repository files that were copied into a Directory, i.e.
restored/installed */
- public static List<URI> restoredFiles() {
- return new ArrayList<>(RESTORED_FILES);
- }
-
public static List<URI> directoriesCreated() {
return new ArrayList<>(DIRECTORIES_CREATED);
}
@@ -82,7 +70,6 @@ public class TrackingBackupRepository extends
DelegatingBackupRepository {
/** Clear all tracking data */
public static void clear() {
COPIED_FILES.clear();
- RESTORED_FILES.clear();
DIRECTORIES_CREATED.clear();
OUTPUTS_CREATED.clear();
}