Package org.apache.solr.update
Class UpdateHandler
- java.lang.Object
-
- org.apache.solr.update.UpdateHandler
-
- All Implemented Interfaces:
AutoCloseable
,SolrInfoBean
,SolrMetricProducer
- Direct Known Subclasses:
DirectUpdateHandler2
public abstract class UpdateHandler extends Object implements SolrInfoBean
UpdateHandler
handles requests to change the index (adds, deletes, commits, optimizes, etc).- Since:
- solr 0.9
-
-
Nested Class Summary
-
Nested classes/interfaces inherited from interface org.apache.solr.core.SolrInfoBean
SolrInfoBean.Category, SolrInfoBean.Group
-
-
Field Summary
Fields Modifier and Type Field Description protected List<SolrEventListener>
commitCallbacks
protected SolrCore
core
protected SchemaField
idField
protected FieldType
idFieldType
protected List<SolrEventListener>
optimizeCallbacks
protected List<SolrEventListener>
softCommitCallbacks
protected SolrMetricsContext
solrMetricsContext
protected UpdateLog
ulog
-
Constructor Summary
Constructors Constructor Description UpdateHandler(SolrCore core)
UpdateHandler(SolrCore core, UpdateLog updateLog)
UpdateHandler(SolrCore core, UpdateLog updateLog, boolean initUlog)
Subclasses should call this ctor, with `initUlog=false` and should then, as the last action in the subclass ctor, callinitUlog(boolean)
.
-
Method Summary
All Methods Instance Methods Abstract Methods Concrete Methods Modifier and Type Method Description abstract int
addDoc(AddUpdateCommand cmd)
protected void
callPostCommitCallbacks()
protected void
callPostOptimizeCallbacks()
protected void
callPostSoftCommitCallbacks()
abstract void
commit(CommitUpdateCommand cmd)
abstract void
delete(DeleteUpdateCommand cmd)
abstract void
deleteByQuery(DeleteUpdateCommand cmd)
SolrInfoBean.Category
getCategory()
Category of this componentabstract SolrCoreState
getSolrCoreState()
SolrMetricsContext
getSolrMetricsContext()
Implementations should return the context used inSolrMetricProducer.initializeMetrics(SolrMetricsContext, String)
to ensure proper cleanup of metrics at the end of the life-cycle of this component.abstract UpdateLog
getUpdateLog()
void
informEventListeners(SolrCore core)
Call theSolrCoreAware.inform(SolrCore)
on all the applicable registered listeners.protected void
initUlog(boolean closeOnError)
Helper method to initulog
.abstract int
mergeIndexes(MergeIndexesCommand cmd)
abstract void
newIndexWriter(boolean rollback)
Called when the Writer should be opened again - eg when replication replaces all of the index files.void
registerCommitCallback(SolrEventListener listener)
NOTE: this function is not thread safe.void
registerOptimizeCallback(SolrEventListener listener)
NOTE: this function is not thread safe.void
registerSoftCommitCallback(SolrEventListener listener)
NOTE: this function is not thread safe.abstract void
rollback(RollbackUpdateCommand cmd)
abstract void
split(SplitIndexCommand cmd)
-
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
-
Methods inherited from interface org.apache.solr.core.SolrInfoBean
getDescription, getName
-
Methods inherited from interface org.apache.solr.metrics.SolrMetricProducer
close, initializeMetrics
-
-
-
-
Field Detail
-
core
protected final SolrCore core
-
idField
protected final SchemaField idField
-
idFieldType
protected final FieldType idFieldType
-
commitCallbacks
protected List<SolrEventListener> commitCallbacks
-
softCommitCallbacks
protected List<SolrEventListener> softCommitCallbacks
-
optimizeCallbacks
protected List<SolrEventListener> optimizeCallbacks
-
ulog
protected final UpdateLog ulog
-
solrMetricsContext
protected SolrMetricsContext solrMetricsContext
-
-
Constructor Detail
-
UpdateHandler
public UpdateHandler(SolrCore core)
-
UpdateHandler
public UpdateHandler(SolrCore core, UpdateLog updateLog, boolean initUlog)
Subclasses should call this ctor, with `initUlog=false` and should then, as the last action in the subclass ctor, callinitUlog(boolean)
.NOTE: as an abstract class, if subclasses are supposed to always call this with `initUlog=false`, we could simply never init ulog in this method, and avoid the extra arg. But the arg is present for 3 reasons:
- for backward compatibility with subclasses (plugins) that may have called
UpdateHandler
ctor with the assumption thatulog
will be initialized - to force subclass implementations to be aware that they must init
ulog
- because it's likely that deferring ulog init until the last action of the top-level ctor is actually unnecessary (see below)
As noted in a comment in
DirectUpdateHandler2(SolrCore, UpdateHandler)
, it's unclear why we are advised to defer ulog init until the last action of the top-level ctor, as opposed to simply delegating init to the base-classUpdateHandler
ctor. If we were to follow this approach, this "extra-arg" ctor could be removed in favor ofUpdateHandler(SolrCore, UpdateLog)
, initializing any non-nullulog
(and removing theinitUlog(boolean)
helper method as well). - for backward compatibility with subclasses (plugins) that may have called
-
-
Method Detail
-
informEventListeners
public void informEventListeners(SolrCore core)
Call theSolrCoreAware.inform(SolrCore)
on all the applicable registered listeners.
-
callPostCommitCallbacks
protected void callPostCommitCallbacks()
-
callPostSoftCommitCallbacks
protected void callPostSoftCommitCallbacks()
-
callPostOptimizeCallbacks
protected void callPostOptimizeCallbacks()
-
initUlog
protected final void initUlog(boolean closeOnError)
Helper method to initulog
. As discussed in the javadocs forUpdateHandler(SolrCore, UpdateLog, boolean)
, this should be called as the last action of each top-level ctor.- Parameters:
closeOnError
- if the calling context is responsible for creatingulog
, then we should respond to an init failure by closingulog
, and this param should be set totrue
. If the calling context is not responsible for creatingulog
, then references exist elsewhere and we should not close on init error (set this param tofalse
).
-
newIndexWriter
public abstract void newIndexWriter(boolean rollback) throws IOException
Called when the Writer should be opened again - eg when replication replaces all of the index files.- Parameters:
rollback
- IndexWriter if true else close- Throws:
IOException
- If there is a low-level I/O error.
-
getSolrCoreState
public abstract SolrCoreState getSolrCoreState()
-
addDoc
public abstract int addDoc(AddUpdateCommand cmd) throws IOException
- Throws:
IOException
-
delete
public abstract void delete(DeleteUpdateCommand cmd) throws IOException
- Throws:
IOException
-
deleteByQuery
public abstract void deleteByQuery(DeleteUpdateCommand cmd) throws IOException
- Throws:
IOException
-
mergeIndexes
public abstract int mergeIndexes(MergeIndexesCommand cmd) throws IOException
- Throws:
IOException
-
commit
public abstract void commit(CommitUpdateCommand cmd) throws IOException
- Throws:
IOException
-
rollback
public abstract void rollback(RollbackUpdateCommand cmd) throws IOException
- Throws:
IOException
-
getUpdateLog
public abstract UpdateLog getUpdateLog()
-
registerCommitCallback
public void registerCommitCallback(SolrEventListener listener)
NOTE: this function is not thread safe. However, it is safe to call within theinform( SolrCore core )
function forSolrCoreAware
classes. Outsideinform
, this could potentially throw a ConcurrentModificationException- See Also:
SolrCoreAware
-
registerSoftCommitCallback
public void registerSoftCommitCallback(SolrEventListener listener)
NOTE: this function is not thread safe. However, it is safe to call within theinform( SolrCore core )
function forSolrCoreAware
classes. Outsideinform
, this could potentially throw a ConcurrentModificationException- See Also:
SolrCoreAware
-
registerOptimizeCallback
public void registerOptimizeCallback(SolrEventListener listener)
NOTE: this function is not thread safe. However, it is safe to call within theinform( SolrCore core )
function forSolrCoreAware
classes. Outsideinform
, this could potentially throw a ConcurrentModificationException- See Also:
SolrCoreAware
-
split
public abstract void split(SplitIndexCommand cmd) throws IOException
- Throws:
IOException
-
getCategory
public SolrInfoBean.Category getCategory()
Description copied from interface:SolrInfoBean
Category of this component- Specified by:
getCategory
in interfaceSolrInfoBean
-
getSolrMetricsContext
public SolrMetricsContext getSolrMetricsContext()
Description copied from interface:SolrMetricProducer
Implementations should return the context used inSolrMetricProducer.initializeMetrics(SolrMetricsContext, String)
to ensure proper cleanup of metrics at the end of the life-cycle of this component. This should be the child context if one was created, or null if the parent context was used.- Specified by:
getSolrMetricsContext
in interfaceSolrMetricProducer
-
-