hmm, this commit broke the solr build DIHWriter#getDebugLogger() does not exist.

nobel can you fix this please.

simon

On Fri, Jul 22, 2011 at 8:47 AM,  <no...@apache.org> wrote:
> Author: noble
> Date: Fri Jul 22 06:47:43 2011
> New Revision: 1149477
>
> URL: http://svn.apache.org/viewvc?rev=1149477&view=rev
> Log:
> SOLR-2382-abstracted DIHWriter
>
> Added:
>    
> lucene/dev/trunk/solr/contrib/dataimporthandler/src/java/org/apache/solr/handler/dataimport/DIHLogLevels.java
>    
> lucene/dev/trunk/solr/contrib/dataimporthandler/src/java/org/apache/solr/handler/dataimport/DIHWriter.java
> Modified:
>    
> lucene/dev/trunk/solr/contrib/dataimporthandler-extras/src/test/org/apache/solr/handler/dataimport/TestMailEntityProcessor.java
>    
> lucene/dev/trunk/solr/contrib/dataimporthandler/src/java/org/apache/solr/handler/dataimport/DebugLogger.java
>    
> lucene/dev/trunk/solr/contrib/dataimporthandler/src/java/org/apache/solr/handler/dataimport/DocBuilder.java
>    
> lucene/dev/trunk/solr/contrib/dataimporthandler/src/java/org/apache/solr/handler/dataimport/SolrWriter.java
>    
> lucene/dev/trunk/solr/contrib/dataimporthandler/src/test/org/apache/solr/handler/dataimport/TestDocBuilder.java
>
> Modified: 
> lucene/dev/trunk/solr/contrib/dataimporthandler-extras/src/test/org/apache/solr/handler/dataimport/TestMailEntityProcessor.java
> URL: 
> http://svn.apache.org/viewvc/lucene/dev/trunk/solr/contrib/dataimporthandler-extras/src/test/org/apache/solr/handler/dataimport/TestMailEntityProcessor.java?rev=1149477&r1=1149476&r2=1149477&view=diff
> ==============================================================================
> --- 
> lucene/dev/trunk/solr/contrib/dataimporthandler-extras/src/test/org/apache/solr/handler/dataimport/TestMailEntityProcessor.java
>  (original)
> +++ 
> lucene/dev/trunk/solr/contrib/dataimporthandler-extras/src/test/org/apache/solr/handler/dataimport/TestMailEntityProcessor.java
>  Fri Jul 22 06:47:43 2011
> @@ -196,10 +196,6 @@ public class TestMailEntityProcessor ext
>       return docs.add(doc);
>     }
>
> -    @Override
> -    public void log(int event, String name, Object row) {
> -      // Do nothing
> -    }
>
>     @Override
>     public void doDeleteAll() {
>
> Added: 
> lucene/dev/trunk/solr/contrib/dataimporthandler/src/java/org/apache/solr/handler/dataimport/DIHLogLevels.java
> URL: 
> http://svn.apache.org/viewvc/lucene/dev/trunk/solr/contrib/dataimporthandler/src/java/org/apache/solr/handler/dataimport/DIHLogLevels.java?rev=1149477&view=auto
> ==============================================================================
> --- 
> lucene/dev/trunk/solr/contrib/dataimporthandler/src/java/org/apache/solr/handler/dataimport/DIHLogLevels.java
>  (added)
> +++ 
> lucene/dev/trunk/solr/contrib/dataimporthandler/src/java/org/apache/solr/handler/dataimport/DIHLogLevels.java
>  Fri Jul 22 06:47:43 2011
> @@ -0,0 +1,5 @@
> +package org.apache.solr.handler.dataimport;
> +
> +public enum DIHLogLevels {
> +       START_ENTITY, END_ENTITY, TRANSFORMED_ROW, ENTITY_META, 
> PRE_TRANSFORMER_ROW, START_DOC, END_DOC, ENTITY_OUT, ROW_END, 
> TRANSFORMER_EXCEPTION, ENTITY_EXCEPTION, DISABLE_LOGGING, ENABLE_LOGGING, NONE
> +}
>
> Added: 
> lucene/dev/trunk/solr/contrib/dataimporthandler/src/java/org/apache/solr/handler/dataimport/DIHWriter.java
> URL: 
> http://svn.apache.org/viewvc/lucene/dev/trunk/solr/contrib/dataimporthandler/src/java/org/apache/solr/handler/dataimport/DIHWriter.java?rev=1149477&view=auto
> ==============================================================================
> --- 
> lucene/dev/trunk/solr/contrib/dataimporthandler/src/java/org/apache/solr/handler/dataimport/DIHWriter.java
>  (added)
> +++ 
> lucene/dev/trunk/solr/contrib/dataimporthandler/src/java/org/apache/solr/handler/dataimport/DIHWriter.java
>  Fri Jul 22 06:47:43 2011
> @@ -0,0 +1,81 @@
> +package org.apache.solr.handler.dataimport;
> +
> +import java.util.Map;
> +import java.util.Set;
> +
> +import org.apache.solr.common.SolrInputDocument;
> +
> +/**
> + * @solr.experimental
> + *
> + */
> +public interface DIHWriter {
> +
> +       /**
> +        * <p>
> +        *  If this writer supports transactions or commit points, then 
> commit any changes,
> +        *  optionally optimizing the data for read/write performance
> +        * </p>
> +        * @param optimize
> +        */
> +       public void commit(boolean optimize);
> +
> +       /**
> +        * <p>
> +        *  Release resources used by this writer.  After calling close, 
> reads & updates will throw exceptions.
> +        * </p>
> +        */
> +       public void close();
> +
> +       /**
> +        * <p>
> +        *  If this writer supports transactions or commit points, then roll 
> back any uncommitted changes.
> +        * </p>
> +        */
> +       public void rollback();
> +
> +       /**
> +        * <p>
> +        *  Delete from the writer's underlying data store based the 
> passed-in writer-specific query. (Optional Operation)
> +        * </p>
> +        * @param q
> +        */
> +       public void deleteByQuery(String q);
> +
> +       /**
> +        * <p>
> +        *  Delete everything from the writer's underlying data store
> +        * </p>
> +        */
> +       public void doDeleteAll();
> +
> +       /**
> +        * <p>
> +        *  Delete from the writer's underlying data store based on the 
> passed-in Primary Key
> +        * </p>
> +        * @param key
> +        */
> +       public void deleteDoc(Object key);
> +
> +
> +
> +       /**
> +        * <p>
> +        *  Add a document to this writer's underlying data store.
> +        * </p>
> +        * @param doc
> +        * @return
> +        */
> +       public boolean upload(SolrInputDocument doc);
> +
> +
> +
> +       /**
> +        * <p>
> +        *  Provide context information for this writer.  init() should be 
> called before using the writer.
> +        * </p>
> +        * @param context
> +        */
> +       public void init(Context context) ;
> +
> +}
>
> Modified: 
> lucene/dev/trunk/solr/contrib/dataimporthandler/src/java/org/apache/solr/handler/dataimport/DebugLogger.java
> URL: 
> http://svn.apache.org/viewvc/lucene/dev/trunk/solr/contrib/dataimporthandler/src/java/org/apache/solr/handler/dataimport/DebugLogger.java?rev=1149477&r1=1149476&r2=1149477&view=diff
> ==============================================================================
> --- 
> lucene/dev/trunk/solr/contrib/dataimporthandler/src/java/org/apache/solr/handler/dataimport/DebugLogger.java
>  (original)
> +++ 
> lucene/dev/trunk/solr/contrib/dataimporthandler/src/java/org/apache/solr/handler/dataimport/DebugLogger.java
>  Fri Jul 22 06:47:43 2011
> @@ -45,7 +45,7 @@ class DebugLogger {
>   private Stack<DebugInfo> debugStack;
>
>   NamedList output;
> -  private final SolrWriter writer;
> +//  private final SolrWriter writer1;
>
>   private static final String LINE = 
> "---------------------------------------------";
>
> @@ -54,8 +54,8 @@ class DebugLogger {
>
>   boolean enabled = true;
>
> -  public DebugLogger(SolrWriter solrWriter) {
> -    writer = solrWriter;
> +  public DebugLogger() {
> +//    writer = solrWriter;
>     output = new NamedList();
>     debugStack = new Stack<DebugInfo>() {
>
> @@ -67,7 +67,7 @@ class DebugLogger {
>         return super.pop();
>       }
>     };
> -    debugStack.push(new DebugInfo(null, -1, null));
> +    debugStack.push(new DebugInfo(null, DIHLogLevels.NONE, null));
>     output = debugStack.peek().lst;
>   }
>
> @@ -75,47 +75,47 @@ class DebugLogger {
>     return debugStack.isEmpty() ? null : debugStack.peek();
>   }
>
> -  public void log(int event, String name, Object row) {
> -    if (event == SolrWriter.DISABLE_LOGGING) {
> +  public void log(DIHLogLevels event, String name, Object row) {
> +    if (event == DIHLogLevels.DISABLE_LOGGING) {
>       enabled = false;
>       return;
> -    } else if (event == SolrWriter.ENABLE_LOGGING) {
> +    } else if (event == DIHLogLevels.ENABLE_LOGGING) {
>       enabled = true;
>       return;
>     }
>
> -    if (!enabled && event != SolrWriter.START_ENTITY
> -            && event != SolrWriter.END_ENTITY) {
> +    if (!enabled && event != DIHLogLevels.START_ENTITY
> +            && event != DIHLogLevels.END_ENTITY) {
>       return;
>     }
>
> -    if (event == SolrWriter.START_DOC) {
> -      debugStack.push(new DebugInfo(null, SolrWriter.START_DOC, 
> peekStack()));
> -    } else if (SolrWriter.START_ENTITY == event) {
> +    if (event == DIHLogLevels.START_DOC) {
> +      debugStack.push(new DebugInfo(null, DIHLogLevels.START_DOC, 
> peekStack()));
> +    } else if (DIHLogLevels.START_ENTITY == event) {
>       debugStack
> -              .push(new DebugInfo(name, SolrWriter.START_ENTITY, 
> peekStack()));
> -    } else if (SolrWriter.ENTITY_OUT == event
> -            || SolrWriter.PRE_TRANSFORMER_ROW == event) {
> -      if (debugStack.peek().type == SolrWriter.START_ENTITY
> -              || debugStack.peek().type == SolrWriter.START_DOC) {
> +              .push(new DebugInfo(name, DIHLogLevels.START_ENTITY, 
> peekStack()));
> +    } else if (DIHLogLevels.ENTITY_OUT == event
> +            || DIHLogLevels.PRE_TRANSFORMER_ROW == event) {
> +      if (debugStack.peek().type == DIHLogLevels.START_ENTITY
> +              || debugStack.peek().type == DIHLogLevels.START_DOC) {
>         debugStack.peek().lst.add(null, fmt.format(new Object[]{++debugStack
>                 .peek().rowCount}));
>         addToNamedList(debugStack.peek().lst, row);
>         debugStack.peek().lst.add(null, LINE);
>       }
> -    } else if (event == SolrWriter.ROW_END) {
> +    } else if (event == DIHLogLevels.ROW_END) {
>       popAllTransformers();
> -    } else if (SolrWriter.END_ENTITY == event) {
> -      while (debugStack.pop().type != SolrWriter.START_ENTITY)
> +    } else if (DIHLogLevels.END_ENTITY == event) {
> +      while (debugStack.pop().type != DIHLogLevels.START_ENTITY)
>         ;
> -    } else if (SolrWriter.END_DOC == event) {
> -      while (debugStack.pop().type != SolrWriter.START_DOC)
> +    } else if (DIHLogLevels.END_DOC == event) {
> +      while (debugStack.pop().type != DIHLogLevels.START_DOC)
>         ;
> -    } else if (event == SolrWriter.TRANSFORMER_EXCEPTION) {
> +    } else if (event == DIHLogLevels.TRANSFORMER_EXCEPTION) {
>       debugStack.push(new DebugInfo(name, event, peekStack()));
>       debugStack.peek().lst.add("EXCEPTION",
>               getStacktraceString((Exception) row));
> -    } else if (SolrWriter.TRANSFORMED_ROW == event) {
> +    } else if (DIHLogLevels.TRANSFORMED_ROW == event) {
>       debugStack.push(new DebugInfo(name, event, peekStack()));
>       debugStack.peek().lst.add(null, LINE);
>       addToNamedList(debugStack.peek().lst, row);
> @@ -124,10 +124,10 @@ class DebugLogger {
>         DataImportHandlerException dataImportHandlerException = 
> (DataImportHandlerException) row;
>         dataImportHandlerException.debugged = true;
>       }
> -    } else if (SolrWriter.ENTITY_META == event) {
> +    } else if (DIHLogLevels.ENTITY_META == event) {
>       popAllTransformers();
>       debugStack.peek().lst.add(name, row);
> -    } else if (SolrWriter.ENTITY_EXCEPTION == event) {
> +    } else if (DIHLogLevels.ENTITY_EXCEPTION == event) {
>       if (row instanceof DataImportHandlerException) {
>         DataImportHandlerException dihe = (DataImportHandlerException) row;
>         if (dihe.debugged)
> @@ -143,8 +143,8 @@ class DebugLogger {
>
>   private void popAllTransformers() {
>     while (true) {
> -      int type = debugStack.peek().type;
> -      if (type == SolrWriter.START_DOC || type == SolrWriter.START_ENTITY)
> +       DIHLogLevels type = debugStack.peek().type;
> +      if (type == DIHLogLevels.START_DOC || type == 
> DIHLogLevels.START_ENTITY)
>         break;
>       debugStack.pop();
>     }
> @@ -181,23 +181,23 @@ class DebugLogger {
>
>       @Override
>       public Object getData(String query) {
> -        writer.log(SolrWriter.ENTITY_META, "query", query);
> +        log(DIHLogLevels.ENTITY_META, "query", query);
>         long start = System.currentTimeMillis();
>         try {
>           return ds.getData(query);
>         } catch (DataImportHandlerException de) {
> -          writer.log(SolrWriter.ENTITY_EXCEPTION,
> +          log(DIHLogLevels.ENTITY_EXCEPTION,
>                   null, de);
>           throw de;
>         } catch (Exception e) {
> -          writer.log(SolrWriter.ENTITY_EXCEPTION,
> +          log(DIHLogLevels.ENTITY_EXCEPTION,
>                   null, e);
>           DataImportHandlerException de = new DataImportHandlerException(
>                   DataImportHandlerException.SEVERE, "", e);
>           de.debugged = true;
>           throw de;
>         } finally {
> -          writer.log(SolrWriter.ENTITY_META, "time-taken", DocBuilder
> +          log(DIHLogLevels.ENTITY_META, "time-taken", DocBuilder
>                   .getTimeElapsedSince(start));
>         }
>       }
> @@ -208,18 +208,18 @@ class DebugLogger {
>     return new Transformer() {
>       @Override
>       public Object transformRow(Map<String, Object> row, Context context) {
> -        writer.log(SolrWriter.PRE_TRANSFORMER_ROW, null, row);
> +        log(DIHLogLevels.PRE_TRANSFORMER_ROW, null, row);
>         String tName = getTransformerName(t);
>         Object result = null;
>         try {
>           result = t.transformRow(row, context);
> -          writer.log(SolrWriter.TRANSFORMED_ROW, tName, result);
> +          log(DIHLogLevels.TRANSFORMED_ROW, tName, result);
>         } catch (DataImportHandlerException de) {
> -          writer.log(SolrWriter.TRANSFORMER_EXCEPTION, tName, de);
> +          log(DIHLogLevels.TRANSFORMER_EXCEPTION, tName, de);
>           de.debugged = true;
>           throw de;
>         } catch (Exception e) {
> -          writer.log(SolrWriter.TRANSFORMER_EXCEPTION, tName, e);
> +          log(DIHLogLevels.TRANSFORMER_EXCEPTION, tName, e);
>           DataImportHandlerException de = new 
> DataImportHandlerException(DataImportHandlerException.SEVERE, "", e);
>           de.debugged = true;
>           throw de;
> @@ -258,23 +258,23 @@ class DebugLogger {
>
>     NamedList lst;
>
> -    int type;
> +    DIHLogLevels type;
>
>     DebugInfo parent;
>
> -    public DebugInfo(String name, int type, DebugInfo parent) {
> +    public DebugInfo(String name, DIHLogLevels type, DebugInfo parent) {
>       this.name = name;
>       this.type = type;
>       this.parent = parent;
>       lst = new NamedList();
>       if (parent != null) {
>         String displayName = null;
> -        if (type == SolrWriter.START_ENTITY) {
> +        if (type == DIHLogLevels.START_ENTITY) {
>           displayName = "entity:" + name;
> -        } else if (type == SolrWriter.TRANSFORMED_ROW
> -                || type == SolrWriter.TRANSFORMER_EXCEPTION) {
> +        } else if (type == DIHLogLevels.TRANSFORMED_ROW
> +                || type == DIHLogLevels.TRANSFORMER_EXCEPTION) {
>           displayName = "transformer:" + name;
> -        } else if (type == SolrWriter.START_DOC) {
> +        } else if (type == DIHLogLevels.START_DOC) {
>           this.name = displayName = "document#" + SolrWriter.getDocCount();
>         }
>         parent.lst.add(displayName, lst);
>
> Modified: 
> lucene/dev/trunk/solr/contrib/dataimporthandler/src/java/org/apache/solr/handler/dataimport/DocBuilder.java
> URL: 
> http://svn.apache.org/viewvc/lucene/dev/trunk/solr/contrib/dataimporthandler/src/java/org/apache/solr/handler/dataimport/DocBuilder.java?rev=1149477&r1=1149476&r2=1149477&view=diff
> ==============================================================================
> --- 
> lucene/dev/trunk/solr/contrib/dataimporthandler/src/java/org/apache/solr/handler/dataimport/DocBuilder.java
>  (original)
> +++ 
> lucene/dev/trunk/solr/contrib/dataimporthandler/src/java/org/apache/solr/handler/dataimport/DocBuilder.java
>  Fri Jul 22 06:47:43 2011
> @@ -56,30 +56,60 @@ public class DocBuilder {
>
>   public Statistics importStatistics = new Statistics();
>
> -  SolrWriter writer;
> +  DIHWriter writer;
>
>   DataImporter.RequestParams requestParameters;
>
>   boolean verboseDebug = false;
>
> -   Map<String, Object> session = new ConcurrentHashMap<String, Object>();
> +  Map<String, Object> session = new ConcurrentHashMap<String, Object>();
>
>   static final ThreadLocal<DocBuilder> INSTANCE = new 
> ThreadLocal<DocBuilder>();
>   Map<String, Object> functionsNamespace;
>   private Properties persistedProperties;
>
>   private DIHPropertiesWriter propWriter;
> +  private static final String PARAM_WRITER_IMPL = "writerImpl";
> +  private static final String DEFAULT_WRITER_NAME = "SolrWriter";
> +  private DebugLogger debugLogger;
>
> -  public DocBuilder(DataImporter dataImporter, SolrWriter writer, 
> DIHPropertiesWriter propWriter, DataImporter.RequestParams reqParams) {
> +    @SuppressWarnings("unchecked")
> +  public DocBuilder(DataImporter dataImporter, SolrWriter solrWriter, 
> DIHPropertiesWriter propWriter, DataImporter.RequestParams reqParams) {
>     INSTANCE.set(this);
>     this.dataImporter = dataImporter;
> -    this.writer = writer;
>     this.propWriter = propWriter;
>     DataImporter.QUERY_COUNT.set(importStatistics.queryCount);
>     requestParameters = reqParams;
>     verboseDebug = requestParameters.debug && requestParameters.verbose;
>     functionsNamespace = 
> EvaluatorBag.getFunctionsNamespace(this.dataImporter.getConfig().functions, 
> this);
>     persistedProperties = propWriter.readIndexerProperties();
> +
> +    String writerClassStr = null;
> +    if(reqParams!=null && reqParams.requestParams != null) {
> +       writerClassStr = (String) 
> reqParams.requestParams.get(PARAM_WRITER_IMPL);
> +    }
> +    if(writerClassStr != null && !writerClassStr.equals(DEFAULT_WRITER_NAME) 
> && !writerClassStr.equals(DocBuilder.class.getPackage().getName() + "." + 
> DEFAULT_WRITER_NAME)) {
> +       try {
> +               Class<DIHWriter> writerClass = loadClass(writerClassStr, 
> dataImporter.getCore());
> +               this.writer = writerClass.newInstance();
> +       } catch (Exception e) {
> +               throw new 
> DataImportHandlerException(DataImportHandlerException.SEVERE, "Unable to load 
> Writer implementation:" + writerClassStr, e);
> +       }
> +       } else {
> +       writer = solrWriter;
> +    }
> +    ContextImpl ctx = new ContextImpl(null, null, null, null, 
> reqParams.requestParams, null, this);
> +    writer.init(ctx);
> +  }
> +
> +
> +
> +
> +  private DebugLogger getDebubLogger(){
> +    if (debugLogger == null) {
> +      debugLogger = new DebugLogger();
> +    }
> +    return debugLogger;
>   }
>
>   public VariableResolverImpl getVariableResolver() {
> @@ -139,94 +169,100 @@ public class DocBuilder {
>
>   @SuppressWarnings("unchecked")
>   public void execute() {
> -    dataImporter.store(DataImporter.STATUS_MSGS, statusMessages);
> -    document = dataImporter.getConfig().document;
> -    final AtomicLong startTime = new AtomicLong(System.currentTimeMillis());
> -    statusMessages.put(TIME_ELAPSED, new Object() {
> -      @Override
> -      public String toString() {
> -        return getTimeElapsedSince(startTime.get());
> -      }
> -    });
> -
> -    statusMessages.put(DataImporter.MSG.TOTAL_QUERIES_EXECUTED,
> -            importStatistics.queryCount);
> -    statusMessages.put(DataImporter.MSG.TOTAL_ROWS_EXECUTED,
> -            importStatistics.rowsCount);
> -    statusMessages.put(DataImporter.MSG.TOTAL_DOC_PROCESSED,
> -            importStatistics.docCount);
> -    statusMessages.put(DataImporter.MSG.TOTAL_DOCS_SKIPPED,
> -            importStatistics.skipDocCount);
> -
> -    List<String> entities = requestParameters.entities;
> -
> -    // Trigger onImportStart
> -    if (document.onImportStart != null) {
> -      invokeEventListener(document.onImportStart);
> -    }
> -    AtomicBoolean fullCleanDone = new AtomicBoolean(false);
> -    //we must not do a delete of *:* multiple times if there are multiple 
> root entities to be run
> -    Properties lastIndexTimeProps = new Properties();
> -    lastIndexTimeProps.setProperty(LAST_INDEX_KEY,
> -            
> DataImporter.DATE_TIME_FORMAT.get().format(dataImporter.getIndexStartTime()));
> -    for (DataConfig.Entity e : document.entities) {
> -      if (entities != null && !entities.contains(e.name))
> -        continue;
> -      lastIndexTimeProps.setProperty(e.name + "." + LAST_INDEX_KEY,
> -              DataImporter.DATE_TIME_FORMAT.get().format(new Date()));
> -      root = e;
> -      String delQuery = e.allAttributes.get("preImportDeleteQuery");
> -      if (dataImporter.getStatus() == 
> DataImporter.Status.RUNNING_DELTA_DUMP) {
> -        cleanByQuery(delQuery, fullCleanDone);
> -        doDelta();
> -        delQuery = e.allAttributes.get("postImportDeleteQuery");
> -        if (delQuery != null) {
> -          fullCleanDone.set(false);
> -          cleanByQuery(delQuery, fullCleanDone);
> -        }
> -      } else {
> -        cleanByQuery(delQuery, fullCleanDone);
> -        doFullDump();
> -        delQuery = e.allAttributes.get("postImportDeleteQuery");
> -        if (delQuery != null) {
> -          fullCleanDone.set(false);
> -          cleanByQuery(delQuery, fullCleanDone);
> -        }
> -      }
> -      statusMessages.remove(DataImporter.MSG.TOTAL_DOC_PROCESSED);
> -    }
> -
> -    if (stop.get()) {
> -      // Dont commit if aborted using command=abort
> -      statusMessages.put("Aborted", 
> DataImporter.DATE_TIME_FORMAT.get().format(new Date()));
> -      rollback();
> -    } else {
> -      // Do not commit unnecessarily if this is a delta-import and no 
> documents were created or deleted
> -      if (!requestParameters.clean) {
> -        if (importStatistics.docCount.get() > 0 || 
> importStatistics.deletedDocCount.get() > 0) {
> -          finish(lastIndexTimeProps);
> -        }
> -      } else {
> -        // Finished operation normally, commit now
> -        finish(lastIndexTimeProps);
> -      }
> -
> -      if (writer != null) {
> -        writer.finish();
> -      }
> -
> -      if (document.onImportEnd != null) {
> -        invokeEventListener(document.onImportEnd);
> -      }
> -    }
> -
> -    statusMessages.remove(TIME_ELAPSED);
> -    statusMessages.put(DataImporter.MSG.TOTAL_DOC_PROCESSED, ""+ 
> importStatistics.docCount.get());
> -    if(importStatistics.failedDocCount.get() > 0)
> -      statusMessages.put(DataImporter.MSG.TOTAL_FAILED_DOCS, ""+ 
> importStatistics.failedDocCount.get());
> -
> -    statusMessages.put("Time taken ", getTimeElapsedSince(startTime.get()));
> -    LOG.info("Time taken = " + getTimeElapsedSince(startTime.get()));
> +       try {
> +           dataImporter.store(DataImporter.STATUS_MSGS, statusMessages);
> +           document = dataImporter.getConfig().document;
> +           final AtomicLong startTime = new 
> AtomicLong(System.currentTimeMillis());
> +           statusMessages.put(TIME_ELAPSED, new Object() {
> +             @Override
> +             public String toString() {
> +               return getTimeElapsedSince(startTime.get());
> +             }
> +           });
> +
> +           statusMessages.put(DataImporter.MSG.TOTAL_QUERIES_EXECUTED,
> +                   importStatistics.queryCount);
> +           statusMessages.put(DataImporter.MSG.TOTAL_ROWS_EXECUTED,
> +                   importStatistics.rowsCount);
> +           statusMessages.put(DataImporter.MSG.TOTAL_DOC_PROCESSED,
> +                   importStatistics.docCount);
> +           statusMessages.put(DataImporter.MSG.TOTAL_DOCS_SKIPPED,
> +                   importStatistics.skipDocCount);
> +
> +           List<String> entities = requestParameters.entities;
> +
> +           // Trigger onImportStart
> +           if (document.onImportStart != null) {
> +             invokeEventListener(document.onImportStart);
> +           }
> +           AtomicBoolean fullCleanDone = new AtomicBoolean(false);
> +           //we must not do a delete of *:* multiple times if there are 
> multiple root entities to be run
> +           Properties lastIndexTimeProps = new Properties();
> +           lastIndexTimeProps.setProperty(LAST_INDEX_KEY,
> +                   
> DataImporter.DATE_TIME_FORMAT.get().format(dataImporter.getIndexStartTime()));
> +           for (DataConfig.Entity e : document.entities) {
> +             if (entities != null && !entities.contains(e.name))
> +               continue;
> +             lastIndexTimeProps.setProperty(e.name + "." + LAST_INDEX_KEY,
> +                     DataImporter.DATE_TIME_FORMAT.get().format(new Date()));
> +             root = e;
> +             String delQuery = e.allAttributes.get("preImportDeleteQuery");
> +             if (dataImporter.getStatus() == 
> DataImporter.Status.RUNNING_DELTA_DUMP) {
> +               cleanByQuery(delQuery, fullCleanDone);
> +               doDelta();
> +               delQuery = e.allAttributes.get("postImportDeleteQuery");
> +               if (delQuery != null) {
> +                 fullCleanDone.set(false);
> +                 cleanByQuery(delQuery, fullCleanDone);
> +               }
> +             } else {
> +               cleanByQuery(delQuery, fullCleanDone);
> +               doFullDump();
> +               delQuery = e.allAttributes.get("postImportDeleteQuery");
> +               if (delQuery != null) {
> +                 fullCleanDone.set(false);
> +                 cleanByQuery(delQuery, fullCleanDone);
> +               }
> +             }
> +             statusMessages.remove(DataImporter.MSG.TOTAL_DOC_PROCESSED);
> +           }
> +
> +           if (stop.get()) {
> +             // Dont commit if aborted using command=abort
> +             statusMessages.put("Aborted", 
> DataImporter.DATE_TIME_FORMAT.get().format(new Date()));
> +             rollback();
> +           } else {
> +             // Do not commit unnecessarily if this is a delta-import and no 
> documents were created or deleted
> +             if (!requestParameters.clean) {
> +               if (importStatistics.docCount.get() > 0 || 
> importStatistics.deletedDocCount.get() > 0) {
> +                 finish(lastIndexTimeProps);
> +               }
> +             } else {
> +               // Finished operation normally, commit now
> +               finish(lastIndexTimeProps);
> +             }
> +
> +             if (document.onImportEnd != null) {
> +               invokeEventListener(document.onImportEnd);
> +             }
> +           }
> +
> +           statusMessages.remove(TIME_ELAPSED);
> +           statusMessages.put(DataImporter.MSG.TOTAL_DOC_PROCESSED, ""+ 
> importStatistics.docCount.get());
> +           if(importStatistics.failedDocCount.get() > 0)
> +             statusMessages.put(DataImporter.MSG.TOTAL_FAILED_DOCS, ""+ 
> importStatistics.failedDocCount.get());
> +
> +           statusMessages.put("Time taken ", 
> getTimeElapsedSince(startTime.get()));
> +           LOG.info("Time taken = " + getTimeElapsedSince(startTime.get()));
> +         } catch(Exception e)
> +               {
> +                       throw new RuntimeException(e);
> +               } finally
> +               {
> +                       if (writer != null) {
> +             writer.close();
> +           }
> +               }
>   }
>
>   @SuppressWarnings("unchecked")
> @@ -560,11 +596,11 @@ public class DocBuilder {
>     Context.CURRENT_CONTEXT.set(ctx);
>
>     if (requestParameters.start > 0) {
> -      writer.log(SolrWriter.DISABLE_LOGGING, null, null);
> +      getDebubLogger().log(DIHLogLevels.DISABLE_LOGGING, null, null);
>     }
>
>     if (verboseDebug) {
> -      writer.log(SolrWriter.START_ENTITY, entity.name, null);
> +      getDebubLogger().log(DIHLogLevels.START_ENTITY, entity.name, null);
>     }
>
>     int seenDocCount = 0;
> @@ -578,11 +614,11 @@ public class DocBuilder {
>           seenDocCount++;
>
>           if (seenDocCount > requestParameters.start) {
> -            writer.log(SolrWriter.ENABLE_LOGGING, null, null);
> +            getDebubLogger().log(DIHLogLevels.ENABLE_LOGGING, null, null);
>           }
>
>           if (verboseDebug && entity.isDocRoot) {
> -            writer.log(SolrWriter.START_DOC, entity.name, null);
> +            getDebubLogger().log(DIHLogLevels.START_DOC, entity.name, null);
>           }
>           if (doc == null && entity.isDocRoot) {
>             doc = new DocWrapper();
> @@ -611,7 +647,7 @@ public class DocBuilder {
>           }
>
>           if (verboseDebug) {
> -            writer.log(SolrWriter.ENTITY_OUT, entity.name, arow);
> +            getDebubLogger().log(DIHLogLevels.ENTITY_OUT, entity.name, arow);
>           }
>           importStatistics.rowsCount.incrementAndGet();
>           if (doc != null) {
> @@ -647,7 +683,7 @@ public class DocBuilder {
>
>         } catch (DataImportHandlerException e) {
>           if (verboseDebug) {
> -            writer.log(SolrWriter.ENTITY_EXCEPTION, entity.name, e);
> +            getDebubLogger().log(DIHLogLevels.ENTITY_EXCEPTION, entity.name, 
> e);
>           }
>           if(e.getErrCode() == DataImportHandlerException.SKIP_ROW){
>             continue;
> @@ -666,21 +702,21 @@ public class DocBuilder {
>             throw e;
>         } catch (Throwable t) {
>           if (verboseDebug) {
> -            writer.log(SolrWriter.ENTITY_EXCEPTION, entity.name, t);
> +            getDebubLogger().log(DIHLogLevels.ENTITY_EXCEPTION, entity.name, 
> t);
>           }
>           throw new 
> DataImportHandlerException(DataImportHandlerException.SEVERE, t);
>         } finally {
>           if (verboseDebug) {
> -            writer.log(SolrWriter.ROW_END, entity.name, null);
> +            getDebubLogger().log(DIHLogLevels.ROW_END, entity.name, null);
>             if (entity.isDocRoot)
> -              writer.log(SolrWriter.END_DOC, null, null);
> +              getDebubLogger().log(DIHLogLevels.END_DOC, null, null);
>             Context.CURRENT_CONTEXT.remove();
>           }
>         }
>       }
>     } finally {
>       if (verboseDebug) {
> -        writer.log(SolrWriter.END_ENTITY, null, null);
> +        getDebubLogger().log(DIHLogLevels.END_ENTITY, null, null);
>       }
>       entityProcessor.destroy();
>     }
>
> Modified: 
> lucene/dev/trunk/solr/contrib/dataimporthandler/src/java/org/apache/solr/handler/dataimport/SolrWriter.java
> URL: 
> http://svn.apache.org/viewvc/lucene/dev/trunk/solr/contrib/dataimporthandler/src/java/org/apache/solr/handler/dataimport/SolrWriter.java?rev=1149477&r1=1149476&r2=1149477&view=diff
> ==============================================================================
> --- 
> lucene/dev/trunk/solr/contrib/dataimporthandler/src/java/org/apache/solr/handler/dataimport/SolrWriter.java
>  (original)
> +++ 
> lucene/dev/trunk/solr/contrib/dataimporthandler/src/java/org/apache/solr/handler/dataimport/SolrWriter.java
>  Fri Jul 22 06:47:43 2011
> @@ -27,15 +27,17 @@ import org.slf4j.Logger;
>  import org.slf4j.LoggerFactory;
>
>  import java.io.*;
> +import java.util.Map;
> +import java.util.Set;
>
>  /**
> - * <p> Writes documents to SOLR as well as provides methods for loading and 
> persisting last index time. </p>
> + * <p> Writes documents to SOLR. </p>
>  * <p/>
>  * <b>This API is experimental and may change in the future.</b>
>  *
>  * @since solr 1.3
>  */
> -public class SolrWriter {
> +public class SolrWriter implements DIHWriter {
>   private static final Logger log = LoggerFactory.getLogger(SolrWriter.class);
>
>   static final String LAST_INDEX_KEY = "last_index_time";
> @@ -51,7 +53,16 @@ public class SolrWriter {
>     this.req = req;
>   }
>
> -
> +  @Override
> +  public void close() {
> +       try {
> +               processor.finish();
> +       } catch (IOException e) {
> +               throw new 
> DataImportHandlerException(DataImportHandlerException.SEVERE,
> +                               "Unable to call finish() on 
> UpdateRequestProcessor", e);
> +       }
> +  }
> +  @Override
>   public boolean upload(SolrInputDocument d) {
>     try {
>       AddUpdateCommand command = new AddUpdateCommand(req);
> @@ -64,7 +75,8 @@ public class SolrWriter {
>
>     return true;
>   }
> -
> +
> +  @Override
>   public void deleteDoc(Object id) {
>     try {
>       log.info("Deleting document: " + id);
> @@ -75,16 +87,8 @@ public class SolrWriter {
>       log.error("Exception while deleteing: " + id, e);
>     }
>   }
> -
> -       void finish() {
> -    try {
> -      processor.finish();
> -    } catch (IOException e) {
> -      throw new DataImportHandlerException(DataImportHandlerException.SEVERE,
> -          "Unable to call finish() on UpdateRequestProcessor", e);
> -    }
> -  }
> -
> +
> +       @Override
>   public void deleteByQuery(String query) {
>     try {
>       log.info("Deleting documents from Solr with query: " + query);
> @@ -96,6 +100,7 @@ public class SolrWriter {
>     }
>   }
>
> +       @Override
>   public void commit(boolean optimize) {
>     try {
>       CommitUpdateCommand commit = new CommitUpdateCommand(req,optimize);
> @@ -105,6 +110,7 @@ public class SolrWriter {
>     }
>   }
>
> +       @Override
>   public void rollback() {
>     try {
>       RollbackUpdateCommand rollback = new RollbackUpdateCommand(req);
> @@ -114,6 +120,7 @@ public class SolrWriter {
>     }
>   }
>
> +       @Override
>   public void doDeleteAll() {
>     try {
>       DeleteUpdateCommand deleteCommand = new DeleteUpdateCommand(req);
> @@ -151,28 +158,9 @@ public class SolrWriter {
>       return null;
>     }
>   }
> +       @Override
> +       public void init(Context context) {
> +               /* NO-OP */
> +       }
>
> -  public DebugLogger getDebugLogger() {
> -    if (debugLogger == null) {
> -      debugLogger = new DebugLogger(this);
> -    }
> -    return debugLogger;
> -  }
> -
> -  /**
> -   * This method is used for verbose debugging
> -   *
> -   * @param event The event name start.entity ,end.entity ,transformer.row
> -   * @param name  Name of the entity/transformer
> -   * @param row   The actual data . Can be a Map<String,object> or a 
> List<Map<String,object>>
> -   */
> -  public void log(int event, String name, Object row) {
> -    getDebugLogger().log(event, name, row);
> -  }
> -
> -  public static final int START_ENTITY = 1, END_ENTITY = 2,
> -          TRANSFORMED_ROW = 3, ENTITY_META = 4, PRE_TRANSFORMER_ROW = 5,
> -          START_DOC = 6, END_DOC = 7, ENTITY_OUT = 8, ROW_END = 9,
> -          TRANSFORMER_EXCEPTION = 10, ENTITY_EXCEPTION = 11, DISABLE_LOGGING 
> = 12,
> -          ENABLE_LOGGING = 13;
>  }
>
> Modified: 
> lucene/dev/trunk/solr/contrib/dataimporthandler/src/test/org/apache/solr/handler/dataimport/TestDocBuilder.java
> URL: 
> http://svn.apache.org/viewvc/lucene/dev/trunk/solr/contrib/dataimporthandler/src/test/org/apache/solr/handler/dataimport/TestDocBuilder.java?rev=1149477&r1=1149476&r2=1149477&view=diff
> ==============================================================================
> --- 
> lucene/dev/trunk/solr/contrib/dataimporthandler/src/test/org/apache/solr/handler/dataimport/TestDocBuilder.java
>  (original)
> +++ 
> lucene/dev/trunk/solr/contrib/dataimporthandler/src/test/org/apache/solr/handler/dataimport/TestDocBuilder.java
>  Fri Jul 22 06:47:43 2011
> @@ -207,11 +207,6 @@ public class TestDocBuilder extends Abst
>     }
>
>     @Override
> -    public void log(int event, String name, Object row) {
> -      // Do nothing
> -    }
> -
> -    @Override
>     public void doDeleteAll() {
>       deleteAllCalled = Boolean.TRUE;
>     }
> @@ -222,7 +217,7 @@ public class TestDocBuilder extends Abst
>     }
>
>     @Override
> -    public void finish() {
> +    public void close() {
>       finishCalled = Boolean.TRUE;
>     }
>   }
>
>
>

---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscr...@lucene.apache.org
For additional commands, e-mail: dev-h...@lucene.apache.org

Reply via email to