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
This commit is contained in:
James Dyer 2012-04-24 16:37:48 +00:00
parent d2875edd99
commit 31f12e4b73
1 changed files with 74 additions and 66 deletions

View File

@ -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 */