/* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
parcel Lucy;
/** Consolidate index segments in the background.
*
* Adding documents to an index is usually fast, but every once in a while the
* index must be compacted and an update takes substantially longer to
* complete. See [](cfish:FastUpdates) for how to use this class to control
* worst-case index update performance.
*
* As with [](cfish:Indexer), see [](cfish:FileLocking) if your index is on a
* shared volume.
*/
public class Lucy::Index::BackgroundMerger nickname BGMerger
inherits Clownfish::Obj {
Schema *schema;
Folder *folder;
Segment *segment;
IndexManager *manager;
PolyReader *polyreader;
Snapshot *snapshot;
SegWriter *seg_writer;
DeletionsWriter *del_writer;
FilePurger *file_purger;
Lock *write_lock;
Lock *merge_lock;
String *snapfile;
Hash *doc_maps;
int64_t cutoff;
bool optimize;
bool needs_commit;
bool prepared;
/** Open a new BackgroundMerger.
*
* @param index Either a string filepath or a Folder.
* @param manager An IndexManager. If not supplied, an IndexManager with
* a 10-second write lock timeout will be created.
*/
public inert incremented BackgroundMerger*
new(Obj *index, IndexManager *manager = NULL);
/** Initialize a BackgroundMerger.
*
* @param index Either a string filepath or a Folder.
* @param manager An IndexManager. If not supplied, an IndexManager with
* a 10-second write lock timeout will be created.
*/
public inert BackgroundMerger*
init(BackgroundMerger *self, Obj *index, IndexManager *manager = NULL);
/** Optimize the index for search-time performance. This may take a
* while, as it can involve rewriting large amounts of data.
*/
public void
Optimize(BackgroundMerger *self);
/** Commit any changes made to the index. Until this is called, none of
* the changes made during an indexing session are permanent.
*
* Calls [](cfish:.Prepare_Commit) implicitly if it has not already been called.
*/
public void
Commit(BackgroundMerger *self);
/** Perform the expensive setup for [](cfish:.Commit) in advance, so that [](cfish:.Commit)
* completes quickly.
*
* Towards the end of [](cfish:.Prepare_Commit), the BackgroundMerger attempts to
* re-acquire the write lock, which is then held until [](cfish:.Commit) finishes
* and releases it.
*/
public void
Prepare_Commit(BackgroundMerger *self);
public void
Destroy(BackgroundMerger *self);
}