You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@lucene.apache.org by yo...@apache.org on 2012/09/15 00:40:42 UTC
svn commit: r1384958 - in /lucene/dev/trunk/solr/core/src:
java/org/apache/solr/update/TransactionLog.java
java/org/apache/solr/update/UpdateLog.java
test/org/apache/solr/search/TestRecovery.java
Author: yonik
Date: Fri Sep 14 22:40:41 2012
New Revision: 1384958
URL: http://svn.apache.org/viewvc?rev=1384958&view=rev
Log:
tlog: ensure tlog so corrupted that constructor can't complete is closed so windows can remove the file after
Modified:
lucene/dev/trunk/solr/core/src/java/org/apache/solr/update/TransactionLog.java
lucene/dev/trunk/solr/core/src/java/org/apache/solr/update/UpdateLog.java
lucene/dev/trunk/solr/core/src/test/org/apache/solr/search/TestRecovery.java
Modified: lucene/dev/trunk/solr/core/src/java/org/apache/solr/update/TransactionLog.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/solr/core/src/java/org/apache/solr/update/TransactionLog.java?rev=1384958&r1=1384957&r2=1384958&view=diff
==============================================================================
--- lucene/dev/trunk/solr/core/src/java/org/apache/solr/update/TransactionLog.java (original)
+++ lucene/dev/trunk/solr/core/src/java/org/apache/solr/update/TransactionLog.java Fri Sep 14 22:40:41 2012
@@ -141,6 +141,7 @@ public class TransactionLog {
}
TransactionLog(File tlogFile, Collection<String> globalStrings, boolean openExisting) {
+ boolean success = false;
try {
if (debug) {
log.debug("New TransactionLog file=" + tlogFile + ", exists=" + tlogFile.exists() + ", size=" + tlogFile.length() + ", openExisting=" + openExisting);
@@ -175,8 +176,18 @@ public class TransactionLog {
addGlobalStrings(globalStrings);
}
+ success = true;
+
} catch (IOException e) {
throw new SolrException(SolrException.ErrorCode.SERVER_ERROR, e);
+ } finally {
+ if (!success && raf != null) {
+ try {
+ raf.close();
+ } catch (Exception e) {
+ log.error("Error closing tlog file (after error opening)", e);
+ }
+ }
}
}
Modified: lucene/dev/trunk/solr/core/src/java/org/apache/solr/update/UpdateLog.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/solr/core/src/java/org/apache/solr/update/UpdateLog.java?rev=1384958&r1=1384957&r2=1384958&view=diff
==============================================================================
--- lucene/dev/trunk/solr/core/src/java/org/apache/solr/update/UpdateLog.java (original)
+++ lucene/dev/trunk/solr/core/src/java/org/apache/solr/update/UpdateLog.java Fri Sep 14 22:40:41 2012
@@ -205,7 +205,7 @@ public class UpdateLog implements Plugin
addOldLog(oldLog, false); // don't remove old logs on startup since more than one may be uncapped.
} catch (Exception e) {
SolrException.log(log, "Failure to open existing log file (non fatal) " + f, e);
- f.delete();
+ deleteFile(f);
}
}
@@ -1346,6 +1346,26 @@ public class UpdateLog implements Plugin
Integer.MAX_VALUE, 1, TimeUnit.SECONDS, new SynchronousQueue<Runnable>(),
new DefaultSolrThreadFactory("recoveryExecutor"));
+
+ public static void deleteFile(File file) {
+ boolean success = false;
+ try {
+ success = file.delete();
+ if (!success) {
+ log.error("Error deleting file: " + file);
+ }
+ } catch (Exception e) {
+ log.error("Error deleting file: " + file, e);
+ }
+
+ if (!success) {
+ try {
+ file.deleteOnExit();
+ } catch (Exception e) {
+ log.error("Error deleting file on exit: " + file, e);
+ }
+ }
+ }
}
Modified: lucene/dev/trunk/solr/core/src/test/org/apache/solr/search/TestRecovery.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/solr/core/src/test/org/apache/solr/search/TestRecovery.java?rev=1384958&r1=1384957&r2=1384958&view=diff
==============================================================================
--- lucene/dev/trunk/solr/core/src/test/org/apache/solr/search/TestRecovery.java (original)
+++ lucene/dev/trunk/solr/core/src/test/org/apache/solr/search/TestRecovery.java Fri Sep 14 22:40:41 2012
@@ -870,7 +870,6 @@ public class TestRecovery extends SolrTe
// test that a corrupt tlog doesn't stop us from coming up
//
@Test
- @Ignore // I have reproduced the failure on windows and am looking into fixes -yonik
public void testCorruptLog() throws Exception {
try {
DirectUpdateHandler2.commitOnClose = false;
@@ -885,6 +884,8 @@ public class TestRecovery extends SolrTe
assertU(adoc("id","G3"));
h.close();
+
+
String[] files = UpdateLog.getLogList(logDir);
Arrays.sort(files);
RandomAccessFile raf = new RandomAccessFile(new File(logDir, files[files.length-1]), "rw");
@@ -1040,13 +1041,19 @@ public class TestRecovery extends SolrTe
h.close();
- String[] files = UpdateLog.getLogList(logDir);
- for (String file : files) {
- new File(logDir, file).delete();
- }
+ try {
+ String[] files = UpdateLog.getLogList(logDir);
+ for (String file : files) {
+ new File(logDir, file).delete();
+ }
- assertEquals(0, UpdateLog.getLogList(logDir).length);
- createCore();
+ assertEquals(0, UpdateLog.getLogList(logDir).length);
+ } finally {
+ // make sure we create the core again, even if the assert fails so it won't mess
+ // up the next test.
+ createCore();
+ assertJQ(req("q","*:*") ,"/response/numFound=="); // ensure it works
+ }
}
private static Long getVer(SolrQueryRequest req) throws Exception {