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 2014/10/13 16:04:42 UTC

svn commit: r1631400 - in /lucene/dev/branches/branch_5x: ./ solr/ solr/core/ solr/core/src/java/org/apache/solr/schema/ solr/core/src/java/org/apache/solr/util/ solr/core/src/test/org/apache/solr/rest/schema/ solr/core/src/test/org/apache/solr/schema/

Author: noble
Date: Mon Oct 13 14:04:41 2014
New Revision: 1631400

URL: http://svn.apache.org/r1631400
Log:
SOLR-6476 refactored to get the Operation class outside

Added:
    lucene/dev/branches/branch_5x/solr/core/src/java/org/apache/solr/util/CommandOperation.java
      - copied unchanged from r1631397, lucene/dev/trunk/solr/core/src/java/org/apache/solr/util/CommandOperation.java
Modified:
    lucene/dev/branches/branch_5x/   (props changed)
    lucene/dev/branches/branch_5x/solr/   (props changed)
    lucene/dev/branches/branch_5x/solr/core/   (props changed)
    lucene/dev/branches/branch_5x/solr/core/src/java/org/apache/solr/schema/SchemaManager.java   (contents, props changed)
    lucene/dev/branches/branch_5x/solr/core/src/test/org/apache/solr/rest/schema/TestBulkSchemaAPI.java
    lucene/dev/branches/branch_5x/solr/core/src/test/org/apache/solr/schema/TestSchemaManager.java

Modified: lucene/dev/branches/branch_5x/solr/core/src/java/org/apache/solr/schema/SchemaManager.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/branch_5x/solr/core/src/java/org/apache/solr/schema/SchemaManager.java?rev=1631400&r1=1631399&r2=1631400&view=diff
==============================================================================
--- lucene/dev/branches/branch_5x/solr/core/src/java/org/apache/solr/schema/SchemaManager.java (original)
+++ lucene/dev/branches/branch_5x/solr/core/src/java/org/apache/solr/schema/SchemaManager.java Mon Oct 13 14:04:41 2014
@@ -24,29 +24,22 @@ import org.apache.solr.core.CoreDescript
 import org.apache.solr.core.SolrCore;
 import org.apache.solr.request.SolrQueryRequest;
 import org.apache.solr.rest.BaseSolrResource;
-import org.noggit.JSONParser;
-import org.noggit.ObjectBuilder;
+import org.apache.solr.util.CommandOperation;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-import java.io.IOException;
 import java.io.Reader;
-import java.util.ArrayList;
 import java.util.Collection;
 import java.util.Collections;
 import java.util.HashSet;
-import java.util.LinkedHashMap;
 import java.util.List;
-import java.util.Map;
 import java.util.Set;
 import java.util.concurrent.TimeUnit;
 
 import static java.util.Collections.EMPTY_LIST;
 import static java.util.Collections.EMPTY_MAP;
-import static java.util.Collections.emptyMap;
 import static java.util.Collections.singletonList;
 import static java.util.Collections.singletonMap;
-import static org.apache.solr.common.cloud.ZkNodeProps.makeMap;
 import static org.apache.solr.schema.FieldType.CLASS_NAME;
 import static org.apache.solr.schema.IndexSchema.DESTINATION;
 import static org.apache.solr.schema.IndexSchema.NAME;
@@ -87,20 +80,20 @@ public class SchemaManager {
    * @return Lis of errors . If the List is empty then the operation is successful.
    */
   public List performOperations(Reader rdr)  {
-    List<Operation> ops = null;
+    List<CommandOperation> ops = null;
     try {
-      ops = SchemaManager.parse(rdr);
+      ops = CommandOperation.parse(rdr);
     } catch (Exception e) {
       String msg= "Error parsing schema operations ";
       log.warn(msg  ,e );
-      return Collections.singletonList(singletonMap(ERR_MSGS, msg + ":" + e.getMessage()));
+      return Collections.singletonList(singletonMap(CommandOperation.ERR_MSGS, msg + ":" + e.getMessage()));
     }
-    List errs = captureErrors(ops);
+    List errs = CommandOperation.captureErrors(ops);
     if(!errs.isEmpty()) return errs;
 
     IndexSchema schema = req.getCore().getLatestSchema();
     if (!(schema instanceof ManagedIndexSchema)) {
-      return singletonList( singletonMap(ERR_MSGS,"schema is not editable"));
+      return singletonList( singletonMap(CommandOperation.ERR_MSGS,"schema is not editable"));
     }
 
     synchronized (schema.getSchemaUpdateLock()) {
@@ -109,14 +102,14 @@ public class SchemaManager {
 
   }
 
-  private List<String> doOperations(List<Operation> operations){
+  private List doOperations(List<CommandOperation> operations){
     int timeout = req.getParams().getInt(BaseSolrResource.UPDATE_TIMEOUT_SECS, -1);
     long startTime = System.nanoTime();
     long endTime = timeout >0  ? System.nanoTime()+ (timeout * 1000*1000) : Long.MAX_VALUE;
     SolrCore core = req.getCore();
     for(;System.nanoTime() < endTime ;) {
       managedIndexSchema = (ManagedIndexSchema) core.getLatestSchema();
-      for (Operation op : operations) {
+      for (CommandOperation op : operations) {
         if (ADD_FIELD.equals(op.name) || ADD_DYNAMIC_FIELD.equals(op.name)) {
           applyAddField(op);
         } else if(ADD_COPY_FIELD.equals(op.name)) {
@@ -128,7 +121,7 @@ public class SchemaManager {
           op.addError("No such operation : " + op.name);
         }
       }
-      List errs = captureErrors(operations);
+      List errs = CommandOperation.captureErrors(operations);
       if (!errs.isEmpty()) return errs;
 
       try {
@@ -169,13 +162,13 @@ public class SchemaManager {
     }
   }
 
-  private boolean applyAddType(Operation op) {
+  private boolean applyAddType(CommandOperation op) {
     String name = op.getStr(NAME);
     String clz = op.getStr(CLASS_NAME);
     if(op.hasError())
       return false;
     try {
-      FieldType fieldType = managedIndexSchema.newFieldType(name, clz, (Map<String, ?>) op.commandData);
+      FieldType fieldType = managedIndexSchema.newFieldType(name, clz, op.getDataMap());
       managedIndexSchema = managedIndexSchema.addFieldTypes(singletonList(fieldType), false);
       return true;
     } catch (Exception e) {
@@ -184,7 +177,7 @@ public class SchemaManager {
     }
   }
 
-  private String getErrorStr(Exception e) {
+  public static String getErrorStr(Exception e) {
     StringBuilder sb = new StringBuilder();
     Throwable cause= e;
     for(int i =0;i<5;i++) {
@@ -195,7 +188,7 @@ public class SchemaManager {
     return sb.toString();
   }
 
-  private boolean applyAddCopyField(Operation op) {
+  private boolean applyAddCopyField(CommandOperation op) {
     String src  = op.getStr(SOURCE);
     List<String> dest = op.getStrs(DESTINATION);
     if(op.hasError())
@@ -210,7 +203,7 @@ public class SchemaManager {
   }
 
 
-  private boolean applyAddField( Operation op) {
+  private boolean applyAddField( CommandOperation op) {
     String name = op.getStr(NAME);
     String type = op.getStr(TYPE);
     if(op.hasError())
@@ -238,142 +231,4 @@ public class SchemaManager {
     return true;
   }
 
-
-  public static class Operation {
-    public final String name;
-    private Object commandData;//this is most often a map
-    private List<String> errors = new ArrayList<>();
-
-    Operation(String operationName, Object metaData) {
-      commandData = metaData;
-      this.name = operationName;
-      if(!KNOWN_OPS.contains(this.name)) errors.add("Unknown Operation :"+this.name);
-    }
-
-    public String getStr(String key, String def){
-      String s = (String) getMapVal(key);
-      return s == null ? def : s;
-    }
-
-    private Object getMapVal(String key) {
-      if (commandData instanceof Map) {
-        Map metaData = (Map) commandData;
-        return metaData.get(key);
-      } else {
-        String msg= " value has to be an object for operation :"+name;
-        if(!errors.contains(msg)) errors.add(msg);
-        return null;
-      }
-    }
-
-    public List<String> getStrs(String key){
-      List<String> val = getStrs(key, null);
-      if(val == null) errors.add("'"+key + "' is a required field");
-      return val;
-
-    }
-
-    /**Get collection of values for a key. If only one val is present a
-     * single value collection is returned
-     */
-    public List<String> getStrs(String key, List<String> def){
-      Object v = getMapVal(key);
-      if(v == null){
-        return def;
-      } else {
-        if (v instanceof List) {
-          ArrayList<String> l =  new ArrayList<>();
-          for (Object o : (List)v) {
-            l.add(String.valueOf(o));
-          }
-          if(l.isEmpty()) return def;
-          return  l;
-        } else {
-          return singletonList(String.valueOf(v));
-        }
-      }
-
-    }
-
-    /**Get a required field. If missing it adds to the errors
-     */
-    public String getStr(String key){
-      String s = getStr(key,null);
-      if(s==null) errors.add("'"+key + "' is a required field");
-      return s;
-    }
-
-    private Map errorDetails(){
-       return makeMap(name, commandData, ERR_MSGS, errors);
-    }
-
-    public boolean hasError() {
-      return !errors.isEmpty();
-    }
-
-    public void addError(String s) {
-      errors.add(s);
-    }
-
-    /**Get all the values from the metadata for the command
-     * without the specified keys
-     */
-    public Map getValuesExcluding(String... keys) {
-      getMapVal(null);
-      if(hasError()) return emptyMap();//just to verify the type is Map
-      LinkedHashMap<String, Object> cp = new LinkedHashMap<>((Map<String,?>) commandData);
-      if(keys == null) return cp;
-      for (String key : keys) {
-        cp.remove(key);
-      }
-      return cp;
-    }
-
-
-    public List<String> getErrors() {
-      return errors;
-    }
-  }
-
-  /**Parse the command operations into command objects
-   */
-  static List<Operation> parse(Reader rdr ) throws IOException {
-    JSONParser parser = new JSONParser(rdr);
-
-    ObjectBuilder ob = new ObjectBuilder(parser);
-
-    if(parser.lastEvent() != JSONParser.OBJECT_START) {
-      throw new RuntimeException("The JSON must be an Object of the form {\"command\": {...},...");
-    }
-    List<Operation> operations = new ArrayList<>();
-    for(;;) {
-      int ev = parser.nextEvent();
-      if (ev==JSONParser.OBJECT_END) return operations;
-      Object key =  ob.getKey();
-      ev = parser.nextEvent();
-      Object val = ob.getVal();
-      if (val instanceof List) {
-        List list = (List) val;
-        for (Object o : list) {
-          operations.add(new Operation(String.valueOf(key), o));
-        }
-      } else {
-        operations.add(new Operation(String.valueOf(key), val));
-      }
-    }
-
-  }
-
-  static List<Map> captureErrors(List<Operation> ops){
-    List<Map> errors = new ArrayList<>();
-    for (SchemaManager.Operation op : ops) {
-      if(op.hasError()) {
-        errors.add(op.errorDetails());
-      }
-    }
-    return errors;
-  }
-  public static final String ERR_MSGS = "errorMessages";
-
-
 }

Modified: lucene/dev/branches/branch_5x/solr/core/src/test/org/apache/solr/rest/schema/TestBulkSchemaAPI.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/branch_5x/solr/core/src/test/org/apache/solr/rest/schema/TestBulkSchemaAPI.java?rev=1631400&r1=1631399&r2=1631400&view=diff
==============================================================================
--- lucene/dev/branches/branch_5x/solr/core/src/test/org/apache/solr/rest/schema/TestBulkSchemaAPI.java (original)
+++ lucene/dev/branches/branch_5x/solr/core/src/test/org/apache/solr/rest/schema/TestBulkSchemaAPI.java Mon Oct 13 14:04:41 2014
@@ -19,7 +19,6 @@ package org.apache.solr.rest.schema;
 
 import org.apache.commons.io.FileUtils;
 import org.apache.solr.SolrTestCaseJ4;
-import org.apache.solr.schema.SchemaManager;
 import org.apache.solr.util.RestTestBase;
 import org.apache.solr.util.RestTestHarness;
 import org.eclipse.jetty.servlet.ServletHolder;
@@ -98,10 +97,10 @@ public class TestBulkSchemaAPI extends R
     Map map = (Map) ObjectBuilder.getVal(new JSONParser(new StringReader(response)));
     List l = (List) map.get("errors");
 
-    List errorList = (List) ((Map) l.get(0)).get(SchemaManager.ERR_MSGS);
+    List errorList = (List) ((Map) l.get(0)).get("errorMessages");
     assertEquals(1, errorList.size());
     assertTrue (((String)errorList.get(0)).contains("No such field type"));
-    errorList = (List) ((Map) l.get(1)).get(SchemaManager.ERR_MSGS);
+    errorList = (List) ((Map) l.get(1)).get("errorMessages");
     assertEquals(1, errorList.size());
     assertTrue (((String)errorList.get(0)).contains("is a required field"));
 

Modified: lucene/dev/branches/branch_5x/solr/core/src/test/org/apache/solr/schema/TestSchemaManager.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/branch_5x/solr/core/src/test/org/apache/solr/schema/TestSchemaManager.java?rev=1631400&r1=1631399&r2=1631400&view=diff
==============================================================================
--- lucene/dev/branches/branch_5x/solr/core/src/test/org/apache/solr/schema/TestSchemaManager.java (original)
+++ lucene/dev/branches/branch_5x/solr/core/src/test/org/apache/solr/schema/TestSchemaManager.java Mon Oct 13 14:04:41 2014
@@ -18,6 +18,7 @@ package org.apache.solr.schema;
  */
 
 import org.apache.solr.SolrTestCaseJ4;
+import org.apache.solr.util.CommandOperation;
 import org.junit.BeforeClass;
 import org.junit.Test;
 
@@ -49,9 +50,9 @@ public class TestSchemaManager extends S
         "\n" +
         "}";
 
-    List<SchemaManager.Operation> ops = SchemaManager.parse(new StringReader(x));
+    List<CommandOperation> ops = CommandOperation.parse(new StringReader(x));
     assertEquals(2,ops.size());
-    assertTrue( SchemaManager.captureErrors(ops).isEmpty());
+    assertTrue( CommandOperation.captureErrors(ops).isEmpty());
 
     x = " {\"add-field\" : [{\n" +
         "                                 \"name\":\"a1\",\n" +
@@ -66,9 +67,9 @@ public class TestSchemaManager extends S
         "                             \"indexed\":true\n" +
         "                             }]\n" +
         "           }";
-    ops = SchemaManager.parse(new StringReader(x));
+    ops = CommandOperation.parse(new StringReader(x));
     assertEquals(2,ops.size());
-    assertTrue( SchemaManager.captureErrors(ops).isEmpty());
+    assertTrue( CommandOperation.captureErrors(ops).isEmpty());
 
   }