You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@lucene.apache.org by no...@apache.org on 2015/01/21 08:15:30 UTC
svn commit: r1653452 - in /lucene/dev/branches/branch_5x/solr/core/src:
java/org/apache/solr/handler/BlobHandler.java
test/org/apache/solr/handler/TestBlobHandler.java
Author: noble
Date: Wed Jan 21 07:15:30 2015
New Revision: 1653452
URL: http://svn.apache.org/r1653452
Log:
SOLR-6787, SOLR-6801 use realtime get to verify that the versions do not collide
Modified:
lucene/dev/branches/branch_5x/solr/core/src/java/org/apache/solr/handler/BlobHandler.java
lucene/dev/branches/branch_5x/solr/core/src/test/org/apache/solr/handler/TestBlobHandler.java
Modified: lucene/dev/branches/branch_5x/solr/core/src/java/org/apache/solr/handler/BlobHandler.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/branch_5x/solr/core/src/java/org/apache/solr/handler/BlobHandler.java?rev=1653452&r1=1653451&r2=1653452&view=diff
==============================================================================
--- lucene/dev/branches/branch_5x/solr/core/src/java/org/apache/solr/handler/BlobHandler.java (original)
+++ lucene/dev/branches/branch_5x/solr/core/src/java/org/apache/solr/handler/BlobHandler.java Wed Jan 21 07:15:30 2015
@@ -23,6 +23,7 @@ import java.math.BigInteger;
import java.nio.ByteBuffer;
import java.security.MessageDigest;
import java.text.MessageFormat;
+import java.util.Collections;
import java.util.Date;
import java.util.List;
import java.util.Map;
@@ -37,6 +38,7 @@ import org.apache.lucene.search.TopDocs;
import org.apache.lucene.search.TopFieldDocs;
import org.apache.solr.common.SolrException;
import org.apache.solr.common.SolrInputDocument;
+import org.apache.solr.common.cloud.ZkNodeProps;
import org.apache.solr.common.params.CommonParams;
import org.apache.solr.common.params.MapSolrParams;
import org.apache.solr.common.params.UpdateParams;
@@ -59,6 +61,7 @@ import org.apache.solr.util.plugin.Plugi
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
+import static java.util.Collections.singletonMap;
import static org.apache.solr.common.cloud.ZkNodeProps.makeMap;
public class BlobHandler extends RequestHandlerBase implements PluginInfoInitialized{
@@ -126,15 +129,17 @@ public class BlobHandler extends Request
}
version++;
String id = blobName+"/"+version;
- log.info(MessageFormat.format("New blob inserting {0} ,size {1}, md5 {2}",id, payload.limit(),md5));
- indexMap(req, rsp, makeMap(
+ Map<String, Object> doc = makeMap(
"id", id,
"md5", md5,
"blobName", blobName,
"version", version,
"timestamp", new Date(),
"size", payload.limit(),
- "blob", payload));
+ "blob", payload);
+ verifyWithRealtimeGet(blobName, version, req, doc);
+ log.info(MessageFormat.format("New blob inserting {0} ,size {1}, md5 {2}",doc.get("id"), payload.limit(),md5));
+ indexMap(req, rsp, doc);
log.info(" Successfully Added and committed a blob with id {} and size {} ",id, payload.limit());
break;
@@ -202,6 +207,25 @@ public class BlobHandler extends Request
}
}
+ private void verifyWithRealtimeGet(String blobName, long version, SolrQueryRequest req, Map<String, Object> doc) {
+ for(;;) {
+ SolrQueryResponse response = new SolrQueryResponse();
+ String id = blobName + "/" + version;
+ req.forward("/get", new MapSolrParams(singletonMap("id", id)), response);
+ if(response.getValues().get("doc") == null) {
+ //ensure that the version does not exist
+ return;
+ } else {
+ log.info("id {} already exists trying next ",id);
+ version++;
+ doc.put("version", version);
+ id = blobName + "/" + version;
+ doc.put("id", id);
+ }
+ }
+
+ }
+
public static void indexMap(SolrQueryRequest req, SolrQueryResponse rsp, Map<String, Object> doc) throws IOException {
SolrInputDocument solrDoc = new SolrInputDocument();
for (Map.Entry<String, Object> e : doc.entrySet()) solrDoc.addField(e.getKey(),e.getValue());
Modified: lucene/dev/branches/branch_5x/solr/core/src/test/org/apache/solr/handler/TestBlobHandler.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/branch_5x/solr/core/src/test/org/apache/solr/handler/TestBlobHandler.java?rev=1653452&r1=1653451&r2=1653452&view=diff
==============================================================================
--- lucene/dev/branches/branch_5x/solr/core/src/test/org/apache/solr/handler/TestBlobHandler.java (original)
+++ lucene/dev/branches/branch_5x/solr/core/src/test/org/apache/solr/handler/TestBlobHandler.java Wed Jan 21 07:15:30 2015
@@ -177,9 +177,8 @@ public class TestBlobHandler extends Abs
HttpPost httpPost = null;
HttpEntity entity;
String response = null;
- Replica leader = cloudClient.getZkStateReader().getClusterState().getCollection(".system").getActiveSlices().iterator().next().getLeader();
try {
- httpPost = new HttpPost(leader.getStr(ZkStateReader.BASE_URL_PROP) +"/.system/blob/test");
+ httpPost = new HttpPost(baseUrl+"/.system/blob/test");
httpPost.setHeader("Content-Type","application/octet-stream");
httpPost.setEntity(new ByteArrayEntity(bytarr.array(), bytarr.arrayOffset(), bytarr.limit()));
entity = cloudClient.getLbClient().getHttpClient().execute(httpPost).getEntity();