From 31f12e4b73bdc0250f92c8bd43854f9f871bbefc Mon Sep 17 00:00:00 2001 From: James Dyer Date: Tue, 24 Apr 2012 16:37:48 +0000 Subject: [PATCH] SOLR-3361: fix "maxNumberOfBackups" to work if backups are triggered on commit git-svn-id: https://svn.apache.org/repos/asf/lucene/dev/trunk@1329839 13f79535-47bb-0310-9956-ffa450edef68 --- .../solr/handler/TestReplicationHandler.java | 140 +++++++++--------- 1 file changed, 74 insertions(+), 66 deletions(-) diff --git a/solr/core/src/test/org/apache/solr/handler/TestReplicationHandler.java b/solr/core/src/test/org/apache/solr/handler/TestReplicationHandler.java index 1cdb72a97f8..2d2c6ae615c 100644 --- a/solr/core/src/test/org/apache/solr/handler/TestReplicationHandler.java +++ b/solr/core/src/test/org/apache/solr/handler/TestReplicationHandler.java @@ -791,6 +791,24 @@ public class TestReplicationHandler extends SolrTestCaseJ4 { index(masterClient, "id", i, "name", "name = " + i); masterClient.commit(); + boolean checkOnCommit = random().nextBoolean(); + //Check to see if 2 commits results in only one backup. (maxBackupsToKeep=1) + if(!addNumberToKeepInRequest && checkOnCommit) { + Thread.sleep(1000); //ensure the 2 backups have a separate timestamp. + masterClient.commit(); + File[] files = new File(master.getDataDir()).listFiles(new FilenameFilter() { + public boolean accept(File dir, String name) { + if(name.startsWith("snapshot")) { + return true; + } + return false; + } + }); + assertEquals(1, files.length); + for(File f : files) { + AbstractSolrTestCase.recurseDelete(f); // clean up the snap dir + } + } class BackupThread extends Thread { volatile String fail = null; @@ -860,76 +878,66 @@ public class TestReplicationHandler extends SolrTestCaseJ4 { }; }; - File[] snapDir = new File[2]; - String firstBackupTimestamp = null; - for(int i=0 ; i<2 ; i++) { - BackupThread backupThread = null; - if(!addNumberToKeepInRequest) { - if(random().nextBoolean()) { - masterClient.commit(); - } else { - backupThread = new BackupThread(addNumberToKeepInRequest, backupKeepParamName); - backupThread.start(); - } - } else { - backupThread = new BackupThread(addNumberToKeepInRequest, backupKeepParamName); + if(!checkOnCommit) { + File[] snapDir = new File[2]; + String firstBackupTimestamp = null; + for(int i=0 ; i<2 ; i++) { + BackupThread backupThread = new BackupThread(addNumberToKeepInRequest, backupKeepParamName); backupThread.start(); - } - - - File dataDir = new File(master.getDataDir()); - - int waitCnt = 0; - CheckStatus checkStatus = new CheckStatus(firstBackupTimestamp); - while(true) { - checkStatus.run(); - if(checkStatus.fail != null) { - fail(checkStatus.fail); - } - if(checkStatus.success) { - if(i==0) { - firstBackupTimestamp = checkStatus.backupTimestamp; - Thread.sleep(1000); //ensure the next backup will have a different timestamp. - } - break; - } - Thread.sleep(200); - if(waitCnt == 10) { - fail("Backup success not detected:" + checkStatus.response); - } - waitCnt++; - } - - if(backupThread!= null && backupThread.fail != null) { - fail(backupThread.fail); - } - - File[] files = dataDir.listFiles(new FilenameFilter() { - public boolean accept(File dir, String name) { - if(name.startsWith("snapshot")) { - return true; - } - return false; + File dataDir = new File(master.getDataDir()); + + int waitCnt = 0; + CheckStatus checkStatus = new CheckStatus(firstBackupTimestamp); + while(true) { + checkStatus.run(); + if(checkStatus.fail != null) { + fail(checkStatus.fail); } - }); - assertEquals(1, files.length); - snapDir[i] = files[0]; - Directory dir = new SimpleFSDirectory(snapDir[i].getAbsoluteFile()); - IndexReader reader = IndexReader.open(dir); - IndexSearcher searcher = new IndexSearcher(reader); - TopDocs hits = searcher.search(new MatchAllDocsQuery(), 1); - assertEquals(nDocs, hits.totalHits); - reader.close(); - dir.close(); - } - if(snapDir[0].exists()) { - fail("The first backup should have been cleaned up because " + backupKeepParamName + " was set to 1."); - } + if(checkStatus.success) { + if(i==0) { + firstBackupTimestamp = checkStatus.backupTimestamp; + Thread.sleep(1000); //ensure the next backup will have a different timestamp. + } + break; + } + Thread.sleep(200); + if(waitCnt == 10) { + fail("Backup success not detected:" + checkStatus.response); + } + waitCnt++; + } + + if(backupThread.fail != null) { + fail(backupThread.fail); + } - for(int i=0 ; i< snapDir.length ; i++) { - AbstractSolrTestCase.recurseDelete(snapDir[i]); // clean up the snap dir - } + File[] files = dataDir.listFiles(new FilenameFilter() { + + public boolean accept(File dir, String name) { + if(name.startsWith("snapshot")) { + return true; + } + return false; + } + }); + assertEquals(1, files.length); + snapDir[i] = files[0]; + Directory dir = new SimpleFSDirectory(snapDir[i].getAbsoluteFile()); + IndexReader reader = IndexReader.open(dir); + IndexSearcher searcher = new IndexSearcher(reader); + TopDocs hits = searcher.search(new MatchAllDocsQuery(), 1); + assertEquals(nDocs, hits.totalHits); + reader.close(); + dir.close(); + } + if(snapDir[0].exists()) { + fail("The first backup should have been cleaned up because " + backupKeepParamName + " was set to 1."); + } + for(int i=0 ; i< snapDir.length ; i++) { + AbstractSolrTestCase.recurseDelete(snapDir[i]); // clean up the snap dir + } + } } /* character copy of file using UTF-8 */