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/06/05 19:59:59 UTC
svn commit: r1346494 - in /lucene/dev/trunk/solr: CHANGES.txt
core/src/java/org/apache/solr/handler/loader/JsonLoader.java
core/src/test/org/apache/solr/handler/JsonLoaderTest.java
Author: yonik
Date: Tue Jun 5 17:59:59 2012
New Revision: 1346494
URL: http://svn.apache.org/viewvc?rev=1346494&view=rev
Log:
SOLR-3508: allow _version_ on JSON delete cmd
Modified:
lucene/dev/trunk/solr/CHANGES.txt
lucene/dev/trunk/solr/core/src/java/org/apache/solr/handler/loader/JsonLoader.java
lucene/dev/trunk/solr/core/src/test/org/apache/solr/handler/JsonLoaderTest.java
Modified: lucene/dev/trunk/solr/CHANGES.txt
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/solr/CHANGES.txt?rev=1346494&r1=1346493&r2=1346494&view=diff
==============================================================================
--- lucene/dev/trunk/solr/CHANGES.txt (original)
+++ lucene/dev/trunk/solr/CHANGES.txt Tue Jun 5 17:59:59 2012
@@ -344,9 +344,11 @@ New Features
are combined and collations can contain a mix of corrections from both spellcheckers.
(James Dyer)
-* SOLR-3508: Improve JSON update format for deletes, allowing syntax of the form
- {"delete":"myid"} AND
- {"delete":["id1","id2"]}
+* SOLR-3508: Simplify JSON update format for deletes as well as allow
+ version specification for optimistic locking. Examples:
+ {"delete":"myid"}
+ {"delete":["id1","id2","id3"]}
+ {"delete":{"id":"myid", "_version_":123456789})
(yonik)
Modified: lucene/dev/trunk/solr/core/src/java/org/apache/solr/handler/loader/JsonLoader.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/solr/core/src/java/org/apache/solr/handler/loader/JsonLoader.java?rev=1346494&r1=1346493&r2=1346494&view=diff
==============================================================================
--- lucene/dev/trunk/solr/core/src/java/org/apache/solr/handler/loader/JsonLoader.java (original)
+++ lucene/dev/trunk/solr/core/src/java/org/apache/solr/handler/loader/JsonLoader.java Tue Jun 5 17:59:59 2012
@@ -191,36 +191,41 @@ public class JsonLoader extends ContentS
}
}
- void handleSingleDelete(int ev) throws IOException {
- DeleteUpdateCommand cmd = new DeleteUpdateCommand(req);
- cmd.commitWithin = commitWithin;
-
- String id = null;
+ // returns the string value for a primitive value, or null for the null value
+ String getString(int ev) throws IOException {
switch (ev) {
case JSONParser.STRING:
- id = parser.getString();
- break;
+ return parser.getString();
case JSONParser.BIGNUMBER:
case JSONParser.NUMBER:
case JSONParser.LONG:
- id = parser.getNumberChars().toString();
- break;
- case JSONParser.OBJECT_START:
- handleDeleteMap(ev);
- return;
+ return parser.getNumberChars().toString();
+ case JSONParser.BOOLEAN:
+ return Boolean.toString(parser.getBoolean());
+ case JSONParser.NULL:
+ return null;
default:
throw new SolrException(SolrException.ErrorCode.BAD_REQUEST,
- "Got: "+JSONParser.getEventString( ev )
+ "Expected primitive JSON value but got: "+JSONParser.getEventString( ev )
+" at ["+parser.getPosition()+"]" );
}
+ }
+
- cmd.setId(id);
- processor.processDelete(cmd);
+ void handleSingleDelete(int ev) throws IOException {
+ if (ev == JSONParser.OBJECT_START) {
+ handleDeleteMap(ev);
+ } else {
+ DeleteUpdateCommand cmd = new DeleteUpdateCommand(req);
+ cmd.commitWithin = commitWithin;
+ String id = getString(ev);
+ cmd.setId(id);
+ processor.processDelete(cmd);
+ }
}
void handleDeleteArray(int ev) throws IOException {
assert ev == JSONParser.ARRAY_START;
-
for (;;) {
ev = parser.nextEvent();
if (ev == JSONParser.ARRAY_END) return;
@@ -240,13 +245,13 @@ public class JsonLoader extends ContentS
String key = parser.getString();
if( parser.wasKey() ) {
if( "id".equals( key ) ) {
- cmd.setId(parser.getString());
- }
- else if( "query".equals(key) ) {
+ cmd.setId(getString(parser.nextEvent()));
+ } else if( "query".equals(key) ) {
cmd.setQuery(parser.getString());
- }
- else if( "commitWithin".equals(key) ) {
- cmd.commitWithin = Integer.parseInt(parser.getString());
+ } else if( "commitWithin".equals(key) ) {
+ cmd.commitWithin = (int)parser.getLong();
+ } else if( "_version_".equals(key) ) {
+ cmd.setVersion(parser.getLong());
} else {
throw new SolrException(SolrException.ErrorCode.BAD_REQUEST, "Unknown key: "+key+" ["+parser.getPosition()+"]" );
}
Modified: lucene/dev/trunk/solr/core/src/test/org/apache/solr/handler/JsonLoaderTest.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/solr/core/src/test/org/apache/solr/handler/JsonLoaderTest.java?rev=1346494&r1=1346493&r2=1346494&view=diff
==============================================================================
--- lucene/dev/trunk/solr/core/src/test/org/apache/solr/handler/JsonLoaderTest.java (original)
+++ lucene/dev/trunk/solr/core/src/test/org/apache/solr/handler/JsonLoaderTest.java Tue Jun 5 17:59:59 2012
@@ -71,9 +71,9 @@ public class JsonLoaderTest extends Solr
"'optimize': { 'waitSearcher':false, 'openSearcher':false },\n" +
"\n" +
"'delete': { 'id':'ID' },\n" +
- "'delete': { 'id':'ID', 'commitWithin':'500' },\n" +
+ "'delete': { 'id':'ID', 'commitWithin':500 },\n" +
"'delete': { 'query':'QUERY' },\n" +
- "'delete': { 'query':'QUERY', 'commitWithin':'500' },\n" +
+ "'delete': { 'query':'QUERY', 'commitWithin':500 },\n" +
"'rollback': {}\n" +
"\n" +
"}\n" +
@@ -243,6 +243,8 @@ public class JsonLoaderTest extends Solr
String str = "{'delete':10"
+"\n ,'delete':'20'"
+"\n ,'delete':['30','40']"
+ +"\n ,'delete':{'id':50, '_version_':12345}"
+ +"\n ,'delete':[{'id':60, '_version_':67890}, {'id':70, '_version_':77777}, {'query':'id:80', '_version_':88888}]"
+ "\n}\n";
str = str.replace('\'', '"');
SolrQueryRequest req = req();
@@ -252,7 +254,7 @@ public class JsonLoaderTest extends Solr
loader.load(req, rsp, new ContentStreamBase.StringStream(str), p);
// DELETE COMMANDS
- assertEquals( 4, p.deleteCommands.size() );
+ assertEquals( 8, p.deleteCommands.size() );
DeleteUpdateCommand delete = p.deleteCommands.get( 0 );
assertEquals( delete.id, "10" );
assertEquals( delete.query, null );
@@ -273,6 +275,26 @@ public class JsonLoaderTest extends Solr
assertEquals( delete.query, null );
assertEquals( delete.commitWithin, -1);
+ delete = p.deleteCommands.get( 4 );
+ assertEquals( delete.id, "50" );
+ assertEquals( delete.query, null );
+ assertEquals( delete.getVersion(), 12345L);
+
+ delete = p.deleteCommands.get( 5 );
+ assertEquals( delete.id, "60" );
+ assertEquals( delete.query, null );
+ assertEquals( delete.getVersion(), 67890L);
+
+ delete = p.deleteCommands.get( 6 );
+ assertEquals( delete.id, "70" );
+ assertEquals( delete.query, null );
+ assertEquals( delete.getVersion(), 77777L);
+
+ delete = p.deleteCommands.get( 7 );
+ assertEquals( delete.id, null );
+ assertEquals( delete.query, "id:80" );
+ assertEquals( delete.getVersion(), 88888L);
+
req.close();
}