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 20:03:03 UTC

svn commit: r1346497 - in /lucene/dev/branches/branch_4x: ./ dev-tools/ lucene/ lucene/analysis/ lucene/analysis/common/ lucene/analysis/common/src/java/org/apache/lucene/analysis/standard/std31/ lucene/analysis/common/src/java/org/apache/lucene/analys...

Author: yonik
Date: Tue Jun  5 18:03:01 2012
New Revision: 1346497

URL: http://svn.apache.org/viewvc?rev=1346497&view=rev
Log:
SOLR-3508: allow _version_ on JSON delete cmd

Modified:
    lucene/dev/branches/branch_4x/   (props changed)
    lucene/dev/branches/branch_4x/dev-tools/   (props changed)
    lucene/dev/branches/branch_4x/lucene/   (props changed)
    lucene/dev/branches/branch_4x/lucene/BUILD.txt   (props changed)
    lucene/dev/branches/branch_4x/lucene/CHANGES.txt   (props changed)
    lucene/dev/branches/branch_4x/lucene/JRE_VERSION_MIGRATION.txt   (props changed)
    lucene/dev/branches/branch_4x/lucene/LICENSE.txt   (props changed)
    lucene/dev/branches/branch_4x/lucene/MIGRATE.txt   (props changed)
    lucene/dev/branches/branch_4x/lucene/NOTICE.txt   (props changed)
    lucene/dev/branches/branch_4x/lucene/README.txt   (props changed)
    lucene/dev/branches/branch_4x/lucene/analysis/   (props changed)
    lucene/dev/branches/branch_4x/lucene/analysis/common/   (props changed)
    lucene/dev/branches/branch_4x/lucene/analysis/common/src/java/org/apache/lucene/analysis/standard/std31/package.html   (props changed)
    lucene/dev/branches/branch_4x/lucene/analysis/common/src/java/org/apache/lucene/analysis/standard/std34/package.html   (props changed)
    lucene/dev/branches/branch_4x/lucene/backwards/   (props changed)
    lucene/dev/branches/branch_4x/lucene/benchmark/   (props changed)
    lucene/dev/branches/branch_4x/lucene/build.xml   (props changed)
    lucene/dev/branches/branch_4x/lucene/common-build.xml   (props changed)
    lucene/dev/branches/branch_4x/lucene/core/   (props changed)
    lucene/dev/branches/branch_4x/lucene/demo/   (props changed)
    lucene/dev/branches/branch_4x/lucene/facet/   (props changed)
    lucene/dev/branches/branch_4x/lucene/grouping/   (props changed)
    lucene/dev/branches/branch_4x/lucene/highlighter/   (props changed)
    lucene/dev/branches/branch_4x/lucene/ivy-settings.xml   (props changed)
    lucene/dev/branches/branch_4x/lucene/join/   (props changed)
    lucene/dev/branches/branch_4x/lucene/memory/   (props changed)
    lucene/dev/branches/branch_4x/lucene/misc/   (props changed)
    lucene/dev/branches/branch_4x/lucene/module-build.xml   (props changed)
    lucene/dev/branches/branch_4x/lucene/queries/   (props changed)
    lucene/dev/branches/branch_4x/lucene/queryparser/   (props changed)
    lucene/dev/branches/branch_4x/lucene/sandbox/   (props changed)
    lucene/dev/branches/branch_4x/lucene/site/   (props changed)
    lucene/dev/branches/branch_4x/lucene/spatial/   (props changed)
    lucene/dev/branches/branch_4x/lucene/suggest/   (props changed)
    lucene/dev/branches/branch_4x/lucene/test-framework/   (props changed)
    lucene/dev/branches/branch_4x/lucene/tools/   (props changed)
    lucene/dev/branches/branch_4x/solr/   (props changed)
    lucene/dev/branches/branch_4x/solr/CHANGES.txt   (contents, props changed)
    lucene/dev/branches/branch_4x/solr/LICENSE.txt   (props changed)
    lucene/dev/branches/branch_4x/solr/NOTICE.txt   (props changed)
    lucene/dev/branches/branch_4x/solr/README.txt   (props changed)
    lucene/dev/branches/branch_4x/solr/build.xml   (props changed)
    lucene/dev/branches/branch_4x/solr/cloud-dev/   (props changed)
    lucene/dev/branches/branch_4x/solr/common-build.xml   (props changed)
    lucene/dev/branches/branch_4x/solr/contrib/   (props changed)
    lucene/dev/branches/branch_4x/solr/core/   (props changed)
    lucene/dev/branches/branch_4x/solr/core/src/java/org/apache/solr/handler/loader/JsonLoader.java
    lucene/dev/branches/branch_4x/solr/core/src/test/org/apache/solr/handler/JsonLoaderTest.java
    lucene/dev/branches/branch_4x/solr/dev-tools/   (props changed)
    lucene/dev/branches/branch_4x/solr/example/   (props changed)
    lucene/dev/branches/branch_4x/solr/lib/   (props changed)
    lucene/dev/branches/branch_4x/solr/lib/httpclient-LICENSE-ASL.txt   (props changed)
    lucene/dev/branches/branch_4x/solr/lib/httpclient-NOTICE.txt   (props changed)
    lucene/dev/branches/branch_4x/solr/lib/httpcore-LICENSE-ASL.txt   (props changed)
    lucene/dev/branches/branch_4x/solr/lib/httpcore-NOTICE.txt   (props changed)
    lucene/dev/branches/branch_4x/solr/lib/httpmime-LICENSE-ASL.txt   (props changed)
    lucene/dev/branches/branch_4x/solr/lib/httpmime-NOTICE.txt   (props changed)
    lucene/dev/branches/branch_4x/solr/scripts/   (props changed)
    lucene/dev/branches/branch_4x/solr/solrj/   (props changed)
    lucene/dev/branches/branch_4x/solr/test-framework/   (props changed)
    lucene/dev/branches/branch_4x/solr/testlogging.properties   (props changed)
    lucene/dev/branches/branch_4x/solr/webapp/   (props changed)

Modified: lucene/dev/branches/branch_4x/solr/CHANGES.txt
URL: http://svn.apache.org/viewvc/lucene/dev/branches/branch_4x/solr/CHANGES.txt?rev=1346497&r1=1346496&r2=1346497&view=diff
==============================================================================
--- lucene/dev/branches/branch_4x/solr/CHANGES.txt (original)
+++ lucene/dev/branches/branch_4x/solr/CHANGES.txt Tue Jun  5 18:03:01 2012
@@ -340,9 +340,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/branches/branch_4x/solr/core/src/java/org/apache/solr/handler/loader/JsonLoader.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/branch_4x/solr/core/src/java/org/apache/solr/handler/loader/JsonLoader.java?rev=1346497&r1=1346496&r2=1346497&view=diff
==============================================================================
--- lucene/dev/branches/branch_4x/solr/core/src/java/org/apache/solr/handler/loader/JsonLoader.java (original)
+++ lucene/dev/branches/branch_4x/solr/core/src/java/org/apache/solr/handler/loader/JsonLoader.java Tue Jun  5 18:03:01 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/branches/branch_4x/solr/core/src/test/org/apache/solr/handler/JsonLoaderTest.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/branch_4x/solr/core/src/test/org/apache/solr/handler/JsonLoaderTest.java?rev=1346497&r1=1346496&r2=1346497&view=diff
==============================================================================
--- lucene/dev/branches/branch_4x/solr/core/src/test/org/apache/solr/handler/JsonLoaderTest.java (original)
+++ lucene/dev/branches/branch_4x/solr/core/src/test/org/apache/solr/handler/JsonLoaderTest.java Tue Jun  5 18:03:01 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();
   }