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/01/03 00:35:28 UTC
svn commit: r1226575 - in /lucene/dev/branches/solrcloud/solr/core/src:
java/org/apache/solr/update/UpdateLog.java
test/org/apache/solr/search/TestRecovery.java
Author: yonik
Date: Mon Jan 2 23:35:28 2012
New Revision: 1226575
URL: http://svn.apache.org/viewvc?rev=1226575&view=rev
Log:
also use active logs for reporting last versions, add some test code
Modified:
lucene/dev/branches/solrcloud/solr/core/src/java/org/apache/solr/update/UpdateLog.java
lucene/dev/branches/solrcloud/solr/core/src/test/org/apache/solr/search/TestRecovery.java
Modified: lucene/dev/branches/solrcloud/solr/core/src/java/org/apache/solr/update/UpdateLog.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/solrcloud/solr/core/src/java/org/apache/solr/update/UpdateLog.java?rev=1226575&r1=1226574&r2=1226575&view=diff
==============================================================================
--- lucene/dev/branches/solrcloud/solr/core/src/java/org/apache/solr/update/UpdateLog.java (original)
+++ lucene/dev/branches/solrcloud/solr/core/src/java/org/apache/solr/update/UpdateLog.java Mon Jan 2 23:35:28 2012
@@ -73,7 +73,7 @@ public class UpdateLog implements Plugin
private TransactionLog tlog;
private TransactionLog prevTlog;
- private Deque<TransactionLog> logs = new LinkedList<TransactionLog>(); // list of recent logs
+ private Deque<TransactionLog> logs = new LinkedList<TransactionLog>(); // list of recent logs, newest first
private int numOldRecords; // number of records in the recent logs
private Map<BytesRef,LogPtr> map = new HashMap<BytesRef, LogPtr>();
@@ -166,14 +166,14 @@ public class UpdateLog implements Plugin
}
while (logs.size() > 0) {
- TransactionLog log = logs.peekFirst();
+ TransactionLog log = logs.peekLast();
int nrec = log.numRecords();
// remove oldest log if we don't need it to keep at least numRecordsToKeep, or if
// we already have the limit of 10 log files.
if (currRecords - nrec >= numRecordsToKeep || logs.size() >= 10) {
currRecords -= nrec;
numOldRecords -= nrec;
- logs.removeFirst().decref(); // dereference so it will be deleted when no longer in use
+ logs.removeLast().decref(); // dereference so it will be deleted when no longer in use
continue;
}
@@ -181,7 +181,7 @@ public class UpdateLog implements Plugin
}
oldLog.incref(); // prevent this from being deleted
- logs.addLast(oldLog);
+ logs.addFirst(oldLog);
}
@@ -542,9 +542,9 @@ public class UpdateLog implements Plugin
}
-
+ // TODO: nocommit: decrement the references of the transaction logs at some point
public class RecentUpdates {
- Deque<TransactionLog> logList;
+ Deque<TransactionLog> logList; // newest first
List<List<LogPtr>> updates;
public List<Long> getVersions(int n) {
@@ -626,6 +626,14 @@ public class UpdateLog implements Plugin
for (TransactionLog log : logList) {
log.incref();
}
+ if (prevTlog != null) {
+ prevTlog.incref();
+ logList.addFirst(prevTlog);
+ }
+ if (tlog != null) {
+ tlog.incref();
+ logList.addFirst(tlog);
+ }
}
// TODO: what if I hand out a list of updates, then do an update, then hand out another list (and
Modified: lucene/dev/branches/solrcloud/solr/core/src/test/org/apache/solr/search/TestRecovery.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/solrcloud/solr/core/src/test/org/apache/solr/search/TestRecovery.java?rev=1226575&r1=1226574&r2=1226575&view=diff
==============================================================================
--- lucene/dev/branches/solrcloud/solr/core/src/test/org/apache/solr/search/TestRecovery.java (original)
+++ lucene/dev/branches/solrcloud/solr/core/src/test/org/apache/solr/search/TestRecovery.java Mon Jan 2 23:35:28 2012
@@ -185,8 +185,17 @@ public class TestRecovery extends SolrTe
updateJ(jsonAdd(sdoc("id","2", "_version_","102")), params(SEEN_LEADER,SEEN_LEADER_VAL));
updateJ(jsonAdd(sdoc("id","3", "_version_","103")), params(SEEN_LEADER,SEEN_LEADER_VAL));
deleteAndGetVersion("1", params(SEEN_LEADER,SEEN_LEADER_VAL, "_version_","-201"));
+
+ assertJQ(req("qt","/get", "getVersions","4")
+ ,"=={'versions':[-201,103,102,101]}"
+ );
+
assertU(commit());
+ assertJQ(req("qt","/get", "getVersions","4")
+ ,"=={'versions':[-201,103,102,101]}"
+ );
+
// updates should be buffered, so we should not see any results yet.
assertJQ(req("q", "*:*")
, "/response/numFound==0"
@@ -210,6 +219,12 @@ public class TestRecovery extends SolrTe
UpdateLog.RecoveryInfo rinfo = rinfoFuture.get();
assertEquals(UpdateLog.State.ACTIVE, ulog.getState());
+
+ assertJQ(req("qt","/get", "getVersions","4")
+ ,"=={'versions':[-201,103,102,101]}"
+ );
+
+
assertJQ(req("q", "*:*")
, "/response/numFound==2"
);
@@ -235,6 +250,9 @@ public class TestRecovery extends SolrTe
// currently buffered id:8 (even if it doesn't currently support versioning)
updateJ("{\"delete\": { \"query\":\"id:2 OR id:8\" }}", params(SEEN_LEADER,SEEN_LEADER_VAL, "_version_","-300"));
+ assertJQ(req("qt","/get", "getVersions","10")
+ ,"=={'versions':[-300,108,105,106,-94,104,3,-201,103,102]}" // the "3" appears because versions aren't checked while buffering
+ );
logReplay.drainPermits();
rinfoFuture = ulog.applyBufferedUpdates();