{
  "Lucene.Net.Replicator.html": {
    "href": "Lucene.Net.Replicator.html",
    "title": "Namespace Lucene.Net.Replicator | Apache Lucene.NET 4.8.0-beta00013 Documentation",
    "keywords": "Namespace Lucene.Net.Replicator <!-- 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. --> Files replication framework The Replicator allows replicating files between a server and client(s). Producers publish revisions and consumers update to the latest revision available. ReplicationClient is a helper utility for performing the update operation. It can be invoked either manually or periodically by [starting an update thread](ReplicationClient.html#startUpdateThread(long, java.lang.String)). HttpReplicator can be used to replicate revisions by consumers that reside on a different node than the producer. The replication framework supports replicating any type of files, with built-in support for a single search index as well as an index and taxonomy pair. For a single index, the application should publish an IndexRevision and set IndexReplicationHandler on the client. For an index and taxonomy pair, the application should publish an IndexAndTaxonomyRevision and set IndexAndTaxonomyReplicationHandler on the client. When the replication client detects that there is a newer revision available, it copies the files of the revision and then invokes the handler to complete the operation (e.g. copy the files to the index directory, fsync them, reopen an index reader etc.). By default, only files that do not exist in the handler's current revision files are copied, however this can be overridden by extending the client. An example usage of the Replicator: // ++++++++++++++ SERVER SIDE ++++++++++++++ // IndexWriter publishWriter; // the writer used for indexing Replicator replicator = new LocalReplicator(); replicator.publish(new IndexRevision(publishWriter)); // ++++++++++++++ CLIENT SIDE ++++++++++++++ // // either LocalReplictor, or HttpReplicator if client and server are on different nodes Replicator replicator; // callback invoked after handler finished handling the revision and e.g. can reopen the reader. Callable callback = null; // can also be null if no callback is needed ReplicationHandler handler = new IndexReplicationHandler(indexDir, callback); SourceDirectoryFactory factory = new PerSessionDirectoryFactory(workDir); ReplicationClient client = new ReplicationClient(replicator, handler, factory); // invoke client manually client.updateNow(); // or, periodically client.startUpdateThread(100); // check for update every 100 milliseconds Classes IndexAndTaxonomyReplicationHandler A IReplicationHandler for replication of an index and taxonomy pair. See IReplicationHandler for more detail. This handler ensures that the search and taxonomy indexes are replicated in a consistent way. IndexAndTaxonomyRevision A IRevision of a single index and taxonomy index files which comprises the list of files from both indexes. This revision should be used whenever a pair of search and taxonomy indexes need to be replicated together to guarantee consistency of both on the replicating (client) side. IndexAndTaxonomyRevision.SnapshotDirectoryTaxonomyWriter A Lucene.Net.Facet.Taxonomy.Directory.DirectoryTaxonomyWriter which sets the underlying Lucene.Net.Index.IndexWriter 's IndexDeletionPolicy to Lucene.Net.Index.SnapshotDeletionPolicy . IndexInputStream A System.IO.Stream which wraps an Lucene.Net.Store.IndexInput . IndexReplicationHandler A IReplicationHandler for replication of an index. Implements RevisionReady(String, IDictionary<String, IList<RevisionFile>>, IDictionary<String, IList<String>>, IDictionary<String, Directory>) by copying the files pointed by the client resolver to the index Lucene.Net.Store.Directory and then touches the index with Lucene.Net.Index.IndexWriter to make sure any unused files are deleted. IndexRevision A IRevision of a single index files which comprises the list of files that are part of the current Lucene.Net.Index.IndexCommit . To ensure the files are not deleted by Lucene.Net.Index.IndexWriter for as long as this revision stays alive (i.e. until Release() , the current commit point is snapshotted, using Lucene.Net.Index.SnapshotDeletionPolicy (this means that the given writer's IndexDeletionPolicy should return Lucene.Net.Index.SnapshotDeletionPolicy ). When this revision is Release() d, it releases the obtained snapshot as well as calls DeleteUnusedFiles() so that the snapshotted files are deleted (if they are no longer needed). LocalReplicator A IReplicator implementation for use by the side that publishes IRevision s, as well for clients to CheckForUpdate(String) check for updates}. When a client needs to be updated, it is returned a SessionToken through which it can ObtainFile(String, String, String) the files of that revision. As long as a revision is being replicated, this replicator guarantees that it will not be Release() . Replication sessions expire by default after , and the threshold can be configured through ExpirationThreshold . PerSessionDirectoryFactory A ISourceDirectoryFactory which returns FSDirectory under a dedicated session directory. When a session is over, the entire directory is deleted. ReplicationClient A client which monitors and obtains new revisions from a IReplicator . It can be used to either periodically check for updates by invoking StartUpdateThread(Int64, String) , or manually by calling UpdateNow() . Whenever a new revision is available, the RequiredFiles(IDictionary<String, IList<RevisionFile>>) are copied to the Lucene.Net.Store.Directory specified by PerSessionDirectoryFactory and a handler is notified. RevisionFile Describes a file in a IRevision . A file has a source, which allows a single revision to contain files from multiple sources (e.g. multiple indexes). SessionExpiredException Exception indicating that a revision update session was expired due to lack of activity. SessionToken Token for a replication session, for guaranteeing that source replicated files will be kept safe until the replication completes. Interfaces IReplicationHandler Handler for revisions obtained by the client. IReplicator An interface for replicating files. Allows a producer to Publish(IRevision) IRevision s and consumers to CheckForUpdate(String) . When a client needs to be updated, it is given a SessionToken through which it can ObtainFile(String, String, String) the files of that revision. After the client has finished obtaining all the files, it should Release(String) the given session, so that the files can be reclaimed if they are not needed anymore. A client is always updated to the newest revision available. That is, if a client is on revision r1 and revisions r2 and r3 were published, then when the client will next check for update, it will receive r3 . IRevision A revision comprises lists of files that come from different sources and need to be replicated together to e.g. guarantee that all resources are in sync. In most cases an application will replicate a single index, and so the revision will contain files from a single source. However, some applications may require to treat a collection of indexes as a single entity so that the files from all sources are replicated together, to guarantee consistency beween them. For example, an application which indexes facets will need to replicate both the search and taxonomy indexes together, to guarantee that they match at the client side. ISourceDirectoryFactory Resolves a session and source into a Lucene.Net.Store.Directory to use for copying the session files to."
  },
  "Lucene.Net.Replicator.Http.Abstractions.html": {
    "href": "Lucene.Net.Replicator.Http.Abstractions.html",
    "title": "Namespace Lucene.Net.Replicator.Http.Abstractions | Apache Lucene.NET 4.8.0-beta00013 Documentation",
    "keywords": "Namespace Lucene.Net.Replicator.Http.Abstractions Interfaces IReplicationRequest Abstraction for remote replication requests, allows easy integration into any hosting frameworks. IReplicationResponse Abstraction for remote replication response, allows easy integration into any hosting frameworks. IReplicationService Contract for a replication service."
  },
  "Lucene.Net.Replicator.Http.Abstractions.IReplicationRequest.html": {
    "href": "Lucene.Net.Replicator.Http.Abstractions.IReplicationRequest.html",
    "title": "Interface IReplicationRequest | Apache Lucene.NET 4.8.0-beta00013 Documentation",
    "keywords": "Interface IReplicationRequest Abstraction for remote replication requests, allows easy integration into any hosting frameworks. Namespace : Lucene.Net.Replicator.Http.Abstractions Assembly : Lucene.Net.Replicator.dll Syntax public interface IReplicationRequest Remarks .NET Specific Abstraction Properties | Improve this Doc View Source Path Provides the requested path which mapps to a replication operation. Declaration string Path { get; } Property Value Type Description System.String Methods | Improve this Doc View Source QueryParam(String) Returns the requested query parameter or null if not present. Declaration string QueryParam(string name) Parameters Type Name Description System.String name the name of the requested parameter Returns Type Description System.String the value of the requested parameter or null if not present Remarks May though execeptions if the same parameter is provided multiple times, consult the documentation for the specific implementation."
  },
  "Lucene.Net.Replicator.Http.Abstractions.IReplicationResponse.html": {
    "href": "Lucene.Net.Replicator.Http.Abstractions.IReplicationResponse.html",
    "title": "Interface IReplicationResponse | Apache Lucene.NET 4.8.0-beta00013 Documentation",
    "keywords": "Interface IReplicationResponse Abstraction for remote replication response, allows easy integration into any hosting frameworks. Namespace : Lucene.Net.Replicator.Http.Abstractions Assembly : Lucene.Net.Replicator.dll Syntax public interface IReplicationResponse Remarks .NET Specific Abstraction Properties | Improve this Doc View Source Body The response content. Declaration Stream Body { get; } Property Value Type Description System.IO.Stream | Improve this Doc View Source StatusCode Gets or sets the http status code of the response. Declaration int StatusCode { get; set; } Property Value Type Description System.Int32 Methods | Improve this Doc View Source Flush() Flushes the reponse to the underlying response stream. Declaration void Flush()"
  },
  "Lucene.Net.Replicator.Http.Abstractions.IReplicationService.html": {
    "href": "Lucene.Net.Replicator.Http.Abstractions.IReplicationService.html",
    "title": "Interface IReplicationService | Apache Lucene.NET 4.8.0-beta00013 Documentation",
    "keywords": "Interface IReplicationService Contract for a replication service. Namespace : Lucene.Net.Replicator.Http.Abstractions Assembly : Lucene.Net.Replicator.dll Syntax public interface IReplicationService Methods | Improve this Doc View Source Perform(IReplicationRequest, IReplicationResponse) Executes the replication task. Declaration void Perform(IReplicationRequest request, IReplicationResponse response) Parameters Type Name Description IReplicationRequest request IReplicationResponse response Exceptions Type Condition System.InvalidOperationException required parameters are missing"
  },
  "Lucene.Net.Replicator.Http.html": {
    "href": "Lucene.Net.Replicator.Http.html",
    "title": "Namespace Lucene.Net.Replicator.Http | Apache Lucene.NET 4.8.0-beta00013 Documentation",
    "keywords": "Namespace Lucene.Net.Replicator.Http <!-- 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. --> HTTP replication implementation Classes HttpClientBase Base class for Http clients. HttpReplicator An HTTP implementation of IReplicator . Assumes the API supported by ReplicationService . ReplicationService A server-side service for handling replication requests. The service assumes requests are sent in the format /<context>/<shard>/<action> where context is the servlet context, e.g. REPLICATION_CONTEXT shard is the ID of the shard, e.g. \"s1\" action is one of ReplicationService.ReplicationAction values For example, to check whether there are revision updates for shard \"s1\" you should send the request: http://host:port/replicate/s1/update . Enums ReplicationService.ReplicationAction Actions supported by the ReplicationService ."
  },
  "Lucene.Net.Replicator.Http.HttpClientBase.html": {
    "href": "Lucene.Net.Replicator.Http.HttpClientBase.html",
    "title": "Class HttpClientBase | Apache Lucene.NET 4.8.0-beta00013 Documentation",
    "keywords": "Class HttpClientBase Base class for Http clients. Inheritance System.Object HttpClientBase HttpReplicator Implements System.IDisposable Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Replicator.Http Assembly : Lucene.Net.Replicator.dll Syntax public abstract class HttpClientBase : IDisposable Remarks This is a Lucene.NET EXPERIMENTAL API, use at your own risk Constructors | Improve this Doc View Source HttpClientBase(String, Int32, String, HttpMessageHandler) Creates a new HttpClientBase with the given host, port and path. Declaration protected HttpClientBase(string host, int port, string path, HttpMessageHandler messageHandler = null) Parameters Type Name Description System.String host The host that the client should retrieve data from. System.Int32 port The port to be used to connect on. System.String path The path to the replicator on the host. System.Net.Http.HttpMessageHandler messageHandler Optional, The HTTP handler stack to use for sending requests, defaults to null . Remarks The host, port and path parameters are normalized to http://{host}:{port}{path} , if path is null or empty it defaults to / . A System.Net.Http.HttpMessageHandler is taken as an optional parameter as well, if this is not provided it defaults to null . In this case the internal System.Net.Http.HttpClient will default to use a System.Net.Http.HttpClientHandler . | Improve this Doc View Source HttpClientBase(String, HttpClient) Creates a new HttpClientBase with the given url and System.Net.Http.HttpClient . Declaration protected HttpClientBase(string url, HttpClient client) Parameters Type Name Description System.String url System.Net.Http.HttpClient client The System.Net.Http.HttpClient to use make remote http calls. Remarks This allows full controll over how the System.Net.Http.HttpClient is created, prefer the HttpClientBase(String, HttpMessageHandler) over this unless you know you need the control of the System.Net.Http.HttpClient . | Improve this Doc View Source HttpClientBase(String, HttpMessageHandler) Creates a new HttpClientBase with the given url . Declaration protected HttpClientBase(string url, HttpMessageHandler messageHandler = null) Parameters Type Name Description System.String url The full url, including with host, port and path. System.Net.Http.HttpMessageHandler messageHandler Optional, The HTTP handler stack to use for sending requests. Remarks A System.Net.Http.HttpMessageHandler is taken as an optional parameter as well, if this is not provided it defaults to null . In this case the internal System.Net.Http.HttpClient will default to use a System.Net.Http.HttpClientHandler . Fields | Improve this Doc View Source DEFAULT_CONNECTION_TIMEOUT Default connection timeout for this client, in milliseconds. ConnectionTimeout Declaration public const int DEFAULT_CONNECTION_TIMEOUT = 1000 Field Value Type Description System.Int32 Properties | Improve this Doc View Source ConnectionTimeout Gets or Sets the connection timeout for this client, in milliseconds. This setting is used to modify System.Net.Http.HttpClient.Timeout . Declaration public virtual int ConnectionTimeout { get; set; } Property Value Type Description System.Int32 | Improve this Doc View Source IsDisposed Returns true if this instance was Dispose(Boolean) ed, otherwise returns false . Note that if you override Dispose(Boolean) , you must call Dispose(Boolean) on the base class, in order for this instance to be properly disposed. Declaration public bool IsDisposed { get; } Property Value Type Description System.Boolean | Improve this Doc View Source Url The URL to execute requests against. Declaration protected string Url { get; } Property Value Type Description System.String Methods | Improve this Doc View Source Dispose() Disposes this HttpClientBase . This disposes the underlying System.Net.Http.HttpClient . Declaration public void Dispose() | Improve this Doc View Source Dispose(Boolean) Disposes this HttpClientBase . When called with true , this disposes the underlying System.Net.Http.HttpClient . Declaration protected virtual void Dispose(bool disposing) Parameters Type Name Description System.Boolean disposing | Improve this Doc View Source DoAction<T>(HttpResponseMessage, Boolean, Func<T>) Do a specific action and validate after the action that the status is still OK, and if not, attempt to extract the actual server side exception. Optionally release the response at exit, depending on consume parameter. Declaration protected virtual T DoAction<T>(HttpResponseMessage response, bool consume, Func<T> call) Parameters Type Name Description System.Net.Http.HttpResponseMessage response System.Boolean consume System.Func <T> call Returns Type Description T Type Parameters Name Description T | Improve this Doc View Source DoAction<T>(HttpResponseMessage, Func<T>) Calls the overload DoAction<T>(HttpResponseMessage, Boolean, Func<T>) passing true to consume. Declaration protected virtual T DoAction<T>(HttpResponseMessage response, Func<T> call) Parameters Type Name Description System.Net.Http.HttpResponseMessage response System.Func <T> call Returns Type Description T Type Parameters Name Description T | Improve this Doc View Source EnsureOpen() Throws System.ObjectDisposedException if this client is already disposed. Declaration protected void EnsureOpen() Exceptions Type Condition System.ObjectDisposedException client is already disposed. | Improve this Doc View Source ExecuteGet(String, String[]) Internal: Execute a request and return its result. The parameters argument is treated as: name1,value1,name2,value2,... Declaration protected virtual HttpResponseMessage ExecuteGet(string request, params string[] parameters) Parameters Type Name Description System.String request System.String [] parameters Returns Type Description System.Net.Http.HttpResponseMessage | Improve this Doc View Source ExecutePost(String, Object, String[]) Internal: Execute a request and return its result. The parameters argument is treated as: name1,value1,name2,value2,... Declaration protected virtual HttpResponseMessage ExecutePost(string request, object entity, params string[] parameters) Parameters Type Name Description System.String request System.Object entity System.String [] parameters Returns Type Description System.Net.Http.HttpResponseMessage | Improve this Doc View Source ResponseInputStream(HttpResponseMessage) Internal utility: input stream of the provided response. Declaration public virtual Stream ResponseInputStream(HttpResponseMessage response) Parameters Type Name Description System.Net.Http.HttpResponseMessage response Returns Type Description System.IO.Stream Exceptions Type Condition System.IO.IOException | Improve this Doc View Source ResponseInputStream(HttpResponseMessage, Boolean) Internal utility: input stream of the provided response, which optionally consumes the response's resources when the input stream is exhausted. Declaration public virtual Stream ResponseInputStream(HttpResponseMessage response, bool consume) Parameters Type Name Description System.Net.Http.HttpResponseMessage response System.Boolean consume Returns Type Description System.IO.Stream Exceptions Type Condition System.IO.IOException | Improve this Doc View Source ThrowKnownError(HttpResponseMessage) Throws an exception for any errors. Declaration protected virtual void ThrowKnownError(HttpResponseMessage response) Parameters Type Name Description System.Net.Http.HttpResponseMessage response Exceptions Type Condition System.IO.IOException IO Error happened at the server, check inner exception for details. System.Net.Http.HttpRequestException Unknown error received from the server. | Improve this Doc View Source VerifyStatus(HttpResponseMessage) Internal: Verifies the response status and if not successful throws an exception. Declaration protected virtual void VerifyStatus(HttpResponseMessage response) Parameters Type Name Description System.Net.Http.HttpResponseMessage response Exceptions Type Condition System.IO.IOException IO Error happened at the server, check inner exception for details. System.Net.Http.HttpRequestException Unknown error received from the server. Implements System.IDisposable"
  },
  "Lucene.Net.Replicator.Http.HttpReplicator.html": {
    "href": "Lucene.Net.Replicator.Http.HttpReplicator.html",
    "title": "Class HttpReplicator | Apache Lucene.NET 4.8.0-beta00013 Documentation",
    "keywords": "Class HttpReplicator An HTTP implementation of IReplicator . Assumes the API supported by ReplicationService . Inheritance System.Object HttpClientBase HttpReplicator Implements IReplicator System.IDisposable Inherited Members HttpClientBase.DEFAULT_CONNECTION_TIMEOUT HttpClientBase.Url HttpClientBase.ConnectionTimeout HttpClientBase.EnsureOpen() HttpClientBase.VerifyStatus(HttpResponseMessage) HttpClientBase.ThrowKnownError(HttpResponseMessage) HttpClientBase.ExecutePost(String, Object, String[]) HttpClientBase.ExecuteGet(String, String[]) HttpClientBase.ResponseInputStream(HttpResponseMessage) HttpClientBase.ResponseInputStream(HttpResponseMessage, Boolean) HttpClientBase.IsDisposed HttpClientBase.DoAction<T>(HttpResponseMessage, Func<T>) HttpClientBase.DoAction<T>(HttpResponseMessage, Boolean, Func<T>) HttpClientBase.Dispose(Boolean) HttpClientBase.Dispose() System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Replicator.Http Assembly : Lucene.Net.Replicator.dll Syntax public class HttpReplicator : HttpClientBase, IReplicator, IDisposable Remarks This is a Lucene.NET EXPERIMENTAL API, use at your own risk Constructors | Improve this Doc View Source HttpReplicator(String, Int32, String, HttpMessageHandler) Creates a new HttpReplicator with the given host, port and path. HttpClientBase(String, Int32, String, HttpMessageHandler) for more details. Declaration public HttpReplicator(string host, int port, string path, HttpMessageHandler messageHandler = null) Parameters Type Name Description System.String host System.Int32 port System.String path System.Net.Http.HttpMessageHandler messageHandler | Improve this Doc View Source HttpReplicator(String, HttpClient) Creates a new HttpReplicator with the given url and System.Net.Http.HttpClient . HttpClientBase(String, HttpClient) for more details. Declaration public HttpReplicator(string url, HttpClient client) Parameters Type Name Description System.String url System.Net.Http.HttpClient client | Improve this Doc View Source HttpReplicator(String, HttpMessageHandler) Creates a new HttpReplicator with the given url. HttpClientBase(String, HttpMessageHandler) for more details. Declaration public HttpReplicator(string url, HttpMessageHandler messageHandler = null) Parameters Type Name Description System.String url System.Net.Http.HttpMessageHandler messageHandler Methods | Improve this Doc View Source CheckForUpdate(String) Checks for updates at the remote host. Declaration public virtual SessionToken CheckForUpdate(string currentVersion) Parameters Type Name Description System.String currentVersion Returns Type Description SessionToken | Improve this Doc View Source ObtainFile(String, String, String) Obtains the given file from it's source at the remote host. Declaration public virtual Stream ObtainFile(string sessionId, string source, string fileName) Parameters Type Name Description System.String sessionId System.String source System.String fileName Returns Type Description System.IO.Stream | Improve this Doc View Source Publish(IRevision) Not supported. Declaration public virtual void Publish(IRevision revision) Parameters Type Name Description IRevision revision Exceptions Type Condition System.NotSupportedException this replicator implementation does not support remote publishing of revisions | Improve this Doc View Source Release(String) Releases a session obtained from the remote host. Declaration public virtual void Release(string sessionId) Parameters Type Name Description System.String sessionId Implements IReplicator System.IDisposable"
  },
  "Lucene.Net.Replicator.Http.ReplicationService.html": {
    "href": "Lucene.Net.Replicator.Http.ReplicationService.html",
    "title": "Class ReplicationService | Apache Lucene.NET 4.8.0-beta00013 Documentation",
    "keywords": "Class ReplicationService A server-side service for handling replication requests. The service assumes requests are sent in the format /<context>/<shard>/<action> where context is the servlet context, e.g. REPLICATION_CONTEXT shard is the ID of the shard, e.g. \"s1\" action is one of ReplicationService.ReplicationAction values For example, to check whether there are revision updates for shard \"s1\" you should send the request: http://host:port/replicate/s1/update . Inheritance System.Object ReplicationService Implements IReplicationService Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Replicator.Http Assembly : Lucene.Net.Replicator.dll Syntax public class ReplicationService : IReplicationService Remarks This service is written using abstractions over requests and responses which makes it easy to integrate into any hosting framework. See the Lucene.Net.Replicator.AspNetCore for an example of an implementation for the AspNetCore Framework. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Constructors | Improve this Doc View Source ReplicationService(IReadOnlyDictionary<String, IReplicator>, String) Declaration public ReplicationService(IReadOnlyDictionary<string, IReplicator> replicators, string context = \"/replicate\") Parameters Type Name Description System.Collections.Generic.IReadOnlyDictionary < System.String , IReplicator > replicators System.String context Fields | Improve this Doc View Source JSON_SERIALIZER_SETTINGS Json Serializer Settings to use when serializing and deserializing errors. Declaration public static readonly JsonSerializerSettings JSON_SERIALIZER_SETTINGS Field Value Type Description Newtonsoft.Json.JsonSerializerSettings | Improve this Doc View Source REPLICATE_FILENAME_PARAM Request parameter name for providing the file's name. Declaration public const string REPLICATE_FILENAME_PARAM = \"filename\" Field Value Type Description System.String | Improve this Doc View Source REPLICATE_SESSION_ID_PARAM Request parameter name for providing a session ID. Declaration public const string REPLICATE_SESSION_ID_PARAM = \"sessionid\" Field Value Type Description System.String | Improve this Doc View Source REPLICATE_SOURCE_PARAM Request parameter name for providing the file's source. Declaration public const string REPLICATE_SOURCE_PARAM = \"source\" Field Value Type Description System.String | Improve this Doc View Source REPLICATE_VERSION_PARAM Request parameter name for providing the revision version. Declaration public const string REPLICATE_VERSION_PARAM = \"version\" Field Value Type Description System.String | Improve this Doc View Source REPLICATION_CONTEXT The default context path for the ReplicationService . Declaration public const string REPLICATION_CONTEXT = \"/replicate\" Field Value Type Description System.String Methods | Improve this Doc View Source Perform(IReplicationRequest, IReplicationResponse) Executes the replication task. Declaration public virtual void Perform(IReplicationRequest request, IReplicationResponse response) Parameters Type Name Description IReplicationRequest request IReplicationResponse response Exceptions Type Condition System.InvalidOperationException required parameters are missing Implements IReplicationService"
  },
  "Lucene.Net.Replicator.Http.ReplicationService.ReplicationAction.html": {
    "href": "Lucene.Net.Replicator.Http.ReplicationService.ReplicationAction.html",
    "title": "Enum ReplicationService.ReplicationAction | Apache Lucene.NET 4.8.0-beta00013 Documentation",
    "keywords": "Enum ReplicationService.ReplicationAction Actions supported by the ReplicationService . Namespace : Lucene.Net.Replicator.Http Assembly : Lucene.Net.Replicator.dll Syntax public enum ReplicationAction Fields Name Description OBTAIN RELEASE UPDATE"
  },
  "Lucene.Net.Replicator.IndexAndTaxonomyReplicationHandler.html": {
    "href": "Lucene.Net.Replicator.IndexAndTaxonomyReplicationHandler.html",
    "title": "Class IndexAndTaxonomyReplicationHandler | Apache Lucene.NET 4.8.0-beta00013 Documentation",
    "keywords": "Class IndexAndTaxonomyReplicationHandler A IReplicationHandler for replication of an index and taxonomy pair. See IReplicationHandler for more detail. This handler ensures that the search and taxonomy indexes are replicated in a consistent way. Inheritance System.Object IndexAndTaxonomyReplicationHandler Implements IReplicationHandler Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Replicator Assembly : Lucene.Net.Replicator.dll Syntax public class IndexAndTaxonomyReplicationHandler : IReplicationHandler Remarks NOTE: If you intend to recreate a taxonomy index, you should make sure to reopen an IndexSearcher and TaxonomyReader pair via the provided callback, to guarantee that both indexes are in sync. This handler does not prevent replicating such index and taxonomy pairs, and if they are reopened by a different thread, unexpected errors can occur, as well as inconsistency between the taxonomy and index readers. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Constructors | Improve this Doc View Source IndexAndTaxonomyReplicationHandler(Directory, Directory, Func<Nullable<Boolean>>) Constructor with the given index directory and callback to notify when the indexes were updated. Declaration public IndexAndTaxonomyReplicationHandler(Directory indexDirectory, Directory taxonomyDirectory, Func<bool?> callback) Parameters Type Name Description Lucene.Net.Store.Directory indexDirectory Lucene.Net.Store.Directory taxonomyDirectory System.Func < System.Nullable < System.Boolean >> callback Exceptions Type Condition System.IO.IOException Fields | Improve this Doc View Source INFO_STREAM_COMPONENT The component used to log messages to the Default Lucene.Net.Util.InfoStream . Declaration public const string INFO_STREAM_COMPONENT = \"IndexAndTaxonomyReplicationHandler\" Field Value Type Description System.String Properties | Improve this Doc View Source CurrentRevisionFiles Declaration public virtual IDictionary<string, IList<RevisionFile>> CurrentRevisionFiles { get; } Property Value Type Description System.Collections.Generic.IDictionary < System.String , System.Collections.Generic.IList < RevisionFile >> | Improve this Doc View Source CurrentVersion Declaration public virtual string CurrentVersion { get; } Property Value Type Description System.String | Improve this Doc View Source InfoStream Gets or sets the Lucene.Net.Util.InfoStream to use for logging messages. Declaration public virtual InfoStream InfoStream { get; set; } Property Value Type Description Lucene.Net.Util.InfoStream Methods | Improve this Doc View Source RevisionReady(String, IDictionary<String, IList<RevisionFile>>, IDictionary<String, IList<String>>, IDictionary<String, Directory>) Declaration public virtual void RevisionReady(string version, IDictionary<string, IList<RevisionFile>> revisionFiles, IDictionary<string, IList<string>> copiedFiles, IDictionary<string, Directory> sourceDirectory) Parameters Type Name Description System.String version System.Collections.Generic.IDictionary < System.String , System.Collections.Generic.IList < RevisionFile >> revisionFiles System.Collections.Generic.IDictionary < System.String , System.Collections.Generic.IList < System.String >> copiedFiles System.Collections.Generic.IDictionary < System.String , Lucene.Net.Store.Directory > sourceDirectory Implements IReplicationHandler See Also IndexReplicationHandler"
  },
  "Lucene.Net.Replicator.IndexAndTaxonomyRevision.html": {
    "href": "Lucene.Net.Replicator.IndexAndTaxonomyRevision.html",
    "title": "Class IndexAndTaxonomyRevision | Apache Lucene.NET 4.8.0-beta00013 Documentation",
    "keywords": "Class IndexAndTaxonomyRevision A IRevision of a single index and taxonomy index files which comprises the list of files from both indexes. This revision should be used whenever a pair of search and taxonomy indexes need to be replicated together to guarantee consistency of both on the replicating (client) side. Inheritance System.Object IndexAndTaxonomyRevision Implements IRevision System.IComparable < IRevision > Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Replicator Assembly : Lucene.Net.Replicator.dll Syntax public class IndexAndTaxonomyRevision : IRevision, IComparable<IRevision> Remarks This is a Lucene.NET EXPERIMENTAL API, use at your own risk Constructors | Improve this Doc View Source IndexAndTaxonomyRevision(IndexWriter, IndexAndTaxonomyRevision.SnapshotDirectoryTaxonomyWriter) Constructor over the given Lucene.Net.Index.IndexWriter . Uses the last Lucene.Net.Index.IndexCommit found in the Lucene.Net.Store.Directory managed by the given writer. Declaration public IndexAndTaxonomyRevision(IndexWriter indexWriter, IndexAndTaxonomyRevision.SnapshotDirectoryTaxonomyWriter taxonomyWriter) Parameters Type Name Description Lucene.Net.Index.IndexWriter indexWriter IndexAndTaxonomyRevision.SnapshotDirectoryTaxonomyWriter taxonomyWriter Exceptions Type Condition System.IO.IOException Fields | Improve this Doc View Source INDEX_SOURCE Declaration public const string INDEX_SOURCE = \"index\" Field Value Type Description System.String | Improve this Doc View Source TAXONOMY_SOURCE Declaration public const string TAXONOMY_SOURCE = \"taxonomy\" Field Value Type Description System.String Properties | Improve this Doc View Source SourceFiles Declaration public virtual IDictionary<string, IList<RevisionFile>> SourceFiles { get; } Property Value Type Description System.Collections.Generic.IDictionary < System.String , System.Collections.Generic.IList < RevisionFile >> | Improve this Doc View Source Version Declaration public virtual string Version { get; } Property Value Type Description System.String Methods | Improve this Doc View Source CompareTo(IRevision) Declaration public virtual int CompareTo(IRevision other) Parameters Type Name Description IRevision other Returns Type Description System.Int32 | Improve this Doc View Source CompareTo(String) Compares this IndexAndTaxonomyRevision to the given Lucene.Net.Replicator.IndexAndTaxonomyRevision.version . Declaration public virtual int CompareTo(string version) Parameters Type Name Description System.String version Returns Type Description System.Int32 | Improve this Doc View Source Open(String, String) Declaration public virtual Stream Open(string source, string fileName) Parameters Type Name Description System.String source System.String fileName Returns Type Description System.IO.Stream Exceptions Type Condition System.IO.IOException | Improve this Doc View Source Release() Declaration public virtual void Release() Exceptions Type Condition System.IO.IOException | Improve this Doc View Source RevisionFiles(IndexCommit, IndexCommit) Returns a map of the revision files from the given Lucene.Net.Index.IndexCommit s of the search and taxonomy indexes. Declaration public static IDictionary<string, IList<RevisionFile>> RevisionFiles(IndexCommit indexCommit, IndexCommit taxonomyCommit) Parameters Type Name Description Lucene.Net.Index.IndexCommit indexCommit Lucene.Net.Index.IndexCommit taxonomyCommit Returns Type Description System.Collections.Generic.IDictionary < System.String , System.Collections.Generic.IList < RevisionFile >> Exceptions Type Condition System.IO.IOException | Improve this Doc View Source RevisionVersion(IndexCommit, IndexCommit) Returns a System.String representation of a revision's version from the given Lucene.Net.Index.IndexCommit s of the search and taxonomy indexes. Declaration public static string RevisionVersion(IndexCommit indexCommit, IndexCommit taxonomyCommit) Parameters Type Name Description Lucene.Net.Index.IndexCommit indexCommit Lucene.Net.Index.IndexCommit taxonomyCommit Returns Type Description System.String a System.String representation of a revision's version from the given Lucene.Net.Index.IndexCommit s of the search and taxonomy indexes. Implements IRevision System.IComparable<T> See Also IndexRevision"
  },
  "Lucene.Net.Replicator.IndexAndTaxonomyRevision.SnapshotDirectoryTaxonomyWriter.html": {
    "href": "Lucene.Net.Replicator.IndexAndTaxonomyRevision.SnapshotDirectoryTaxonomyWriter.html",
    "title": "Class IndexAndTaxonomyRevision.SnapshotDirectoryTaxonomyWriter | Apache Lucene.NET 4.8.0-beta00013 Documentation",
    "keywords": "Class IndexAndTaxonomyRevision.SnapshotDirectoryTaxonomyWriter A Lucene.Net.Facet.Taxonomy.Directory.DirectoryTaxonomyWriter which sets the underlying Lucene.Net.Index.IndexWriter 's IndexDeletionPolicy to Lucene.Net.Index.SnapshotDeletionPolicy . Inheritance System.Object Lucene.Net.Facet.Taxonomy.Directory.DirectoryTaxonomyWriter IndexAndTaxonomyRevision.SnapshotDirectoryTaxonomyWriter Implements Lucene.Net.Facet.Taxonomy.ITaxonomyWriter System.IDisposable Lucene.Net.Index.ITwoPhaseCommit Inherited Members Lucene.Net.Facet.Taxonomy.Directory.DirectoryTaxonomyWriter.INDEX_EPOCH Lucene.Net.Facet.Taxonomy.Directory.DirectoryTaxonomyWriter.Unlock(Lucene.Net.Store.Directory) Lucene.Net.Facet.Taxonomy.Directory.DirectoryTaxonomyWriter.DefaultTaxonomyWriterCache() Lucene.Net.Facet.Taxonomy.Directory.DirectoryTaxonomyWriter.Dispose() Lucene.Net.Facet.Taxonomy.Directory.DirectoryTaxonomyWriter.Dispose(System.Boolean) Lucene.Net.Facet.Taxonomy.Directory.DirectoryTaxonomyWriter.FindCategory(Lucene.Net.Facet.Taxonomy.FacetLabel) Lucene.Net.Facet.Taxonomy.Directory.DirectoryTaxonomyWriter.AddCategory(Lucene.Net.Facet.Taxonomy.FacetLabel) Lucene.Net.Facet.Taxonomy.Directory.DirectoryTaxonomyWriter.EnsureOpen() Lucene.Net.Facet.Taxonomy.Directory.DirectoryTaxonomyWriter.Commit() Lucene.Net.Facet.Taxonomy.Directory.DirectoryTaxonomyWriter.SetCommitData(System.Collections.Generic.IDictionary<System.String, System.String>) Lucene.Net.Facet.Taxonomy.Directory.DirectoryTaxonomyWriter.CommitData Lucene.Net.Facet.Taxonomy.Directory.DirectoryTaxonomyWriter.PrepareCommit() Lucene.Net.Facet.Taxonomy.Directory.DirectoryTaxonomyWriter.Count Lucene.Net.Facet.Taxonomy.Directory.DirectoryTaxonomyWriter.SetCacheMissesUntilFill(System.Int32) Lucene.Net.Facet.Taxonomy.Directory.DirectoryTaxonomyWriter.GetParent(System.Int32) Lucene.Net.Facet.Taxonomy.Directory.DirectoryTaxonomyWriter.AddTaxonomy(Lucene.Net.Store.Directory, Lucene.Net.Facet.Taxonomy.Directory.DirectoryTaxonomyWriter.IOrdinalMap) Lucene.Net.Facet.Taxonomy.Directory.DirectoryTaxonomyWriter.Rollback() Lucene.Net.Facet.Taxonomy.Directory.DirectoryTaxonomyWriter.ReplaceTaxonomy(Lucene.Net.Store.Directory) Lucene.Net.Facet.Taxonomy.Directory.DirectoryTaxonomyWriter.Directory Lucene.Net.Facet.Taxonomy.Directory.DirectoryTaxonomyWriter.TaxonomyEpoch System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Replicator Assembly : Lucene.Net.Replicator.dll Syntax public class SnapshotDirectoryTaxonomyWriter : DirectoryTaxonomyWriter, ITaxonomyWriter, IDisposable, ITwoPhaseCommit Constructors | Improve this Doc View Source SnapshotDirectoryTaxonomyWriter(Directory, OpenMode) Lucene.Net.Facet.Taxonomy.Directory.DirectoryTaxonomyWriter.#ctor(Lucene.Net.Store.Directory,Lucene.Net.Index.OpenMode) Declaration public SnapshotDirectoryTaxonomyWriter(Directory directory, OpenMode openMode = OpenMode.CREATE_OR_APPEND) Parameters Type Name Description Lucene.Net.Store.Directory directory Lucene.Net.Index.OpenMode openMode Exceptions Type Condition System.IO.IOException | Improve this Doc View Source SnapshotDirectoryTaxonomyWriter(Directory, OpenMode, ITaxonomyWriterCache) Lucene.Net.Facet.Taxonomy.Directory.DirectoryTaxonomyWriter.#ctor(Lucene.Net.Store.Directory,Lucene.Net.Index.OpenMode,Lucene.Net.Facet.Taxonomy.WriterCache.ITaxonomyWriterCache) Declaration public SnapshotDirectoryTaxonomyWriter(Directory directory, OpenMode openMode, ITaxonomyWriterCache cache) Parameters Type Name Description Lucene.Net.Store.Directory directory Lucene.Net.Index.OpenMode openMode Lucene.Net.Facet.Taxonomy.WriterCache.ITaxonomyWriterCache cache Exceptions Type Condition System.IO.IOException Properties | Improve this Doc View Source DeletionPolicy Gets the Lucene.Net.Index.SnapshotDeletionPolicy used by the underlying Lucene.Net.Index.IndexWriter . Declaration public virtual SnapshotDeletionPolicy DeletionPolicy { get; } Property Value Type Description Lucene.Net.Index.SnapshotDeletionPolicy | Improve this Doc View Source IndexWriter Gets the Lucene.Net.Index.IndexWriter used by this Lucene.Net.Facet.Taxonomy.Directory.DirectoryTaxonomyWriter . Declaration public virtual IndexWriter IndexWriter { get; } Property Value Type Description Lucene.Net.Index.IndexWriter Methods | Improve this Doc View Source CreateIndexWriterConfig(OpenMode) Declaration protected override IndexWriterConfig CreateIndexWriterConfig(OpenMode openMode) Parameters Type Name Description Lucene.Net.Index.OpenMode openMode Returns Type Description Lucene.Net.Index.IndexWriterConfig Overrides Lucene.Net.Facet.Taxonomy.Directory.DirectoryTaxonomyWriter.CreateIndexWriterConfig(Lucene.Net.Index.OpenMode) | Improve this Doc View Source OpenIndexWriter(Directory, IndexWriterConfig) Declaration protected override IndexWriter OpenIndexWriter(Directory directory, IndexWriterConfig config) Parameters Type Name Description Lucene.Net.Store.Directory directory Lucene.Net.Index.IndexWriterConfig config Returns Type Description Lucene.Net.Index.IndexWriter Overrides Lucene.Net.Facet.Taxonomy.Directory.DirectoryTaxonomyWriter.OpenIndexWriter(Lucene.Net.Store.Directory, Lucene.Net.Index.IndexWriterConfig) Implements Lucene.Net.Facet.Taxonomy.ITaxonomyWriter System.IDisposable Lucene.Net.Index.ITwoPhaseCommit"
  },
  "Lucene.Net.Replicator.IndexInputStream.html": {
    "href": "Lucene.Net.Replicator.IndexInputStream.html",
    "title": "Class IndexInputStream | Apache Lucene.NET 4.8.0-beta00013 Documentation",
    "keywords": "Class IndexInputStream A System.IO.Stream which wraps an Lucene.Net.Store.IndexInput . Inheritance System.Object System.MarshalByRefObject System.IO.Stream IndexInputStream Implements System.IDisposable Inherited Members System.IO.Stream.Null System.IO.Stream.BeginRead(System.Byte[], System.Int32, System.Int32, System.AsyncCallback, System.Object) System.IO.Stream.BeginWrite(System.Byte[], System.Int32, System.Int32, System.AsyncCallback, System.Object) System.IO.Stream.Close() System.IO.Stream.CopyTo(System.IO.Stream) System.IO.Stream.CopyTo(System.IO.Stream, System.Int32) System.IO.Stream.CopyToAsync(System.IO.Stream) System.IO.Stream.CopyToAsync(System.IO.Stream, System.Int32) System.IO.Stream.CopyToAsync(System.IO.Stream, System.Int32, System.Threading.CancellationToken) System.IO.Stream.CreateWaitHandle() System.IO.Stream.Dispose() System.IO.Stream.EndRead(System.IAsyncResult) System.IO.Stream.EndWrite(System.IAsyncResult) System.IO.Stream.FlushAsync() System.IO.Stream.FlushAsync(System.Threading.CancellationToken) System.IO.Stream.ObjectInvariant() System.IO.Stream.ReadAsync(System.Byte[], System.Int32, System.Int32) System.IO.Stream.ReadAsync(System.Byte[], System.Int32, System.Int32, System.Threading.CancellationToken) System.IO.Stream.ReadByte() System.IO.Stream.Synchronized(System.IO.Stream) System.IO.Stream.WriteAsync(System.Byte[], System.Int32, System.Int32) System.IO.Stream.WriteAsync(System.Byte[], System.Int32, System.Int32, System.Threading.CancellationToken) System.IO.Stream.WriteByte(System.Byte) System.IO.Stream.CanTimeout System.IO.Stream.ReadTimeout System.IO.Stream.WriteTimeout System.MarshalByRefObject.GetLifetimeService() System.MarshalByRefObject.InitializeLifetimeService() System.MarshalByRefObject.MemberwiseClone(System.Boolean) System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Replicator Assembly : Lucene.Net.Replicator.dll Syntax public class IndexInputStream : Stream, IDisposable Remarks This is a Lucene.NET EXPERIMENTAL API, use at your own risk Constructors | Improve this Doc View Source IndexInputStream(IndexInput) Declaration public IndexInputStream(IndexInput input) Parameters Type Name Description Lucene.Net.Store.IndexInput input Properties | Improve this Doc View Source CanRead Declaration public override bool CanRead { get; } Property Value Type Description System.Boolean Overrides System.IO.Stream.CanRead | Improve this Doc View Source CanSeek Declaration public override bool CanSeek { get; } Property Value Type Description System.Boolean Overrides System.IO.Stream.CanSeek | Improve this Doc View Source CanWrite Declaration public override bool CanWrite { get; } Property Value Type Description System.Boolean Overrides System.IO.Stream.CanWrite | Improve this Doc View Source Length Declaration public override long Length { get; } Property Value Type Description System.Int64 Overrides System.IO.Stream.Length | Improve this Doc View Source Position Declaration public override long Position { get; set; } Property Value Type Description System.Int64 Overrides System.IO.Stream.Position Methods | Improve this Doc View Source Dispose(Boolean) Declaration protected override void Dispose(bool disposing) Parameters Type Name Description System.Boolean disposing Overrides System.IO.Stream.Dispose(System.Boolean) | Improve this Doc View Source Flush() Declaration public override void Flush() Overrides System.IO.Stream.Flush() | Improve this Doc View Source Read(Byte[], Int32, Int32) Declaration public override int Read(byte[] buffer, int offset, int count) Parameters Type Name Description System.Byte [] buffer System.Int32 offset System.Int32 count Returns Type Description System.Int32 Overrides System.IO.Stream.Read(System.Byte[], System.Int32, System.Int32) | Improve this Doc View Source Seek(Int64, SeekOrigin) Declaration public override long Seek(long offset, SeekOrigin origin) Parameters Type Name Description System.Int64 offset System.IO.SeekOrigin origin Returns Type Description System.Int64 Overrides System.IO.Stream.Seek(System.Int64, System.IO.SeekOrigin) | Improve this Doc View Source SetLength(Int64) Declaration public override void SetLength(long value) Parameters Type Name Description System.Int64 value Overrides System.IO.Stream.SetLength(System.Int64) | Improve this Doc View Source Write(Byte[], Int32, Int32) Declaration public override void Write(byte[] buffer, int offset, int count) Parameters Type Name Description System.Byte [] buffer System.Int32 offset System.Int32 count Overrides System.IO.Stream.Write(System.Byte[], System.Int32, System.Int32) Implements System.IDisposable"
  },
  "Lucene.Net.Replicator.IndexReplicationHandler.html": {
    "href": "Lucene.Net.Replicator.IndexReplicationHandler.html",
    "title": "Class IndexReplicationHandler | Apache Lucene.NET 4.8.0-beta00013 Documentation",
    "keywords": "Class IndexReplicationHandler A IReplicationHandler for replication of an index. Implements RevisionReady(String, IDictionary<String, IList<RevisionFile>>, IDictionary<String, IList<String>>, IDictionary<String, Directory>) by copying the files pointed by the client resolver to the index Lucene.Net.Store.Directory and then touches the index with Lucene.Net.Index.IndexWriter to make sure any unused files are deleted. Inheritance System.Object IndexReplicationHandler Implements IReplicationHandler Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Replicator Assembly : Lucene.Net.Replicator.dll Syntax public class IndexReplicationHandler : IReplicationHandler Remarks NOTE: This handler assumes that Lucene.Net.Index.IndexWriter is not opened by another process on the index directory. In fact, opening an Lucene.Net.Index.IndexWriter on the same directory to which files are copied can lead to undefined behavior, where some or all the files will be deleted, override other files or simply create a mess. When you replicate an index, it is best if the index is never modified by Lucene.Net.Index.IndexWriter , except the one that is open on the source index, from which you replicate. This handler notifies the application via a provided when an updated index commit was made available for it. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Constructors | Improve this Doc View Source IndexReplicationHandler(Directory, Func<Nullable<Boolean>>) Constructor with the given index directory and callback to notify when the indexes were updated. Declaration public IndexReplicationHandler(Directory indexDirectory, Func<bool?> callback) Parameters Type Name Description Lucene.Net.Store.Directory indexDirectory System.Func < System.Nullable < System.Boolean >> callback Fields | Improve this Doc View Source INFO_STREAM_COMPONENT The component used to log messages to the Default Lucene.Net.Util.InfoStream . Declaration public const string INFO_STREAM_COMPONENT = \"IndexReplicationHandler\" Field Value Type Description System.String Properties | Improve this Doc View Source CurrentRevisionFiles Declaration public virtual IDictionary<string, IList<RevisionFile>> CurrentRevisionFiles { get; } Property Value Type Description System.Collections.Generic.IDictionary < System.String , System.Collections.Generic.IList < RevisionFile >> | Improve this Doc View Source CurrentVersion Declaration public virtual string CurrentVersion { get; } Property Value Type Description System.String | Improve this Doc View Source InfoStream Gets or sets the Lucene.Net.Util.InfoStream to use for logging messages. Declaration public virtual InfoStream InfoStream { get; set; } Property Value Type Description Lucene.Net.Util.InfoStream Methods | Improve this Doc View Source CleanupFilesOnFailure(Directory, IList<String>) Cleanup the index directory by deleting all given files. Called when file copy or sync failed. Declaration public static void CleanupFilesOnFailure(Directory directory, IList<string> files) Parameters Type Name Description Lucene.Net.Store.Directory directory System.Collections.Generic.IList < System.String > files | Improve this Doc View Source CleanupOldIndexFiles(Directory, String) Cleans up the index directory from old index files. This method uses the last commit found by GetLastCommit(Directory) . If it matches the expected segmentsFile , then all files not referenced by this commit point are deleted. Declaration public static void CleanupOldIndexFiles(Directory directory, string segmentsFile) Parameters Type Name Description Lucene.Net.Store.Directory directory System.String segmentsFile Remarks NOTE: This method does a best effort attempt to clean the index directory. It suppresses any exceptions that occur, as this can be retried the next time. | Improve this Doc View Source CopyFiles(Directory, Directory, IList<String>) Copies the provided list of files from the source Lucene.Net.Store.Directory to the target Lucene.Net.Store.Directory , if they are not the same. Declaration public static void CopyFiles(Directory source, Directory target, IList<string> files) Parameters Type Name Description Lucene.Net.Store.Directory source Lucene.Net.Store.Directory target System.Collections.Generic.IList < System.String > files Exceptions Type Condition System.IO.IOException | Improve this Doc View Source GetLastCommit(Directory) Returns the last Lucene.Net.Index.IndexCommit found in the Lucene.Net.Store.Directory , or null if there are no commits. Declaration public static IndexCommit GetLastCommit(Directory directory) Parameters Type Name Description Lucene.Net.Store.Directory directory Returns Type Description Lucene.Net.Index.IndexCommit Exceptions Type Condition System.IO.IOException | Improve this Doc View Source GetSegmentsFile(IList<String>, Boolean) Verifies that the last file is segments_N and fails otherwise. It also removes and returns the file from the list, because it needs to be handled last, after all files. This is important in order to guarantee that if a reader sees the new segments_N, all other segment files are already on stable storage. The reason why the code fails instead of putting segments_N file last is that this indicates an error in the IRevision implementation. Declaration public static string GetSegmentsFile(IList<string> files, bool allowEmpty) Parameters Type Name Description System.Collections.Generic.IList < System.String > files System.Boolean allowEmpty Returns Type Description System.String | Improve this Doc View Source RevisionReady(String, IDictionary<String, IList<RevisionFile>>, IDictionary<String, IList<String>>, IDictionary<String, Directory>) Declaration public virtual void RevisionReady(string version, IDictionary<string, IList<RevisionFile>> revisionFiles, IDictionary<string, IList<string>> copiedFiles, IDictionary<string, Directory> sourceDirectory) Parameters Type Name Description System.String version System.Collections.Generic.IDictionary < System.String , System.Collections.Generic.IList < RevisionFile >> revisionFiles System.Collections.Generic.IDictionary < System.String , System.Collections.Generic.IList < System.String >> copiedFiles System.Collections.Generic.IDictionary < System.String , Lucene.Net.Store.Directory > sourceDirectory | Improve this Doc View Source WriteSegmentsGen(String, Directory) Writes SEGMENTS_GEN file to the directory, reading the generation from the given segmentsFile . If it is null , this method deletes segments.gen from the directory. Declaration public static void WriteSegmentsGen(string segmentsFile, Directory directory) Parameters Type Name Description System.String segmentsFile Lucene.Net.Store.Directory directory Implements IReplicationHandler"
  },
  "Lucene.Net.Replicator.IndexRevision.html": {
    "href": "Lucene.Net.Replicator.IndexRevision.html",
    "title": "Class IndexRevision | Apache Lucene.NET 4.8.0-beta00013 Documentation",
    "keywords": "Class IndexRevision A IRevision of a single index files which comprises the list of files that are part of the current Lucene.Net.Index.IndexCommit . To ensure the files are not deleted by Lucene.Net.Index.IndexWriter for as long as this revision stays alive (i.e. until Release() , the current commit point is snapshotted, using Lucene.Net.Index.SnapshotDeletionPolicy (this means that the given writer's IndexDeletionPolicy should return Lucene.Net.Index.SnapshotDeletionPolicy ). When this revision is Release() d, it releases the obtained snapshot as well as calls DeleteUnusedFiles() so that the snapshotted files are deleted (if they are no longer needed). Inheritance System.Object IndexRevision Implements IRevision System.IComparable < IRevision > Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Replicator Assembly : Lucene.Net.Replicator.dll Syntax public class IndexRevision : IRevision, IComparable<IRevision> Remarks This is a Lucene.NET EXPERIMENTAL API, use at your own risk Constructors | Improve this Doc View Source IndexRevision(IndexWriter) Constructor over the given Lucene.Net.Index.IndexWriter . Uses the last Lucene.Net.Index.IndexCommit found in the Lucene.Net.Store.Directory managed by the given writer. Declaration public IndexRevision(IndexWriter writer) Parameters Type Name Description Lucene.Net.Index.IndexWriter writer Properties | Improve this Doc View Source SourceFiles Declaration public virtual IDictionary<string, IList<RevisionFile>> SourceFiles { get; } Property Value Type Description System.Collections.Generic.IDictionary < System.String , System.Collections.Generic.IList < RevisionFile >> | Improve this Doc View Source Version Declaration public virtual string Version { get; } Property Value Type Description System.String Methods | Improve this Doc View Source CompareTo(IRevision) Declaration public virtual int CompareTo(IRevision other) Parameters Type Name Description IRevision other Returns Type Description System.Int32 | Improve this Doc View Source CompareTo(String) Declaration public virtual int CompareTo(string version) Parameters Type Name Description System.String version Returns Type Description System.Int32 | Improve this Doc View Source Open(String, String) Declaration public virtual Stream Open(string source, string fileName) Parameters Type Name Description System.String source System.String fileName Returns Type Description System.IO.Stream | Improve this Doc View Source Release() Declaration public virtual void Release() | Improve this Doc View Source RevisionFiles(IndexCommit) Returns a singleton map of the revision files from the given Lucene.Net.Index.IndexCommit . Declaration public static IDictionary<string, IList<RevisionFile>> RevisionFiles(IndexCommit commit) Parameters Type Name Description Lucene.Net.Index.IndexCommit commit Returns Type Description System.Collections.Generic.IDictionary < System.String , System.Collections.Generic.IList < RevisionFile >> | Improve this Doc View Source RevisionVersion(IndexCommit) Returns a string representation of a revision's version from the given Lucene.Net.Index.IndexCommit Declaration public static string RevisionVersion(IndexCommit commit) Parameters Type Name Description Lucene.Net.Index.IndexCommit commit Returns Type Description System.String | Improve this Doc View Source ToString() Declaration public override string ToString() Returns Type Description System.String Overrides System.Object.ToString() Implements IRevision System.IComparable<T>"
  },
  "Lucene.Net.Replicator.IReplicationHandler.html": {
    "href": "Lucene.Net.Replicator.IReplicationHandler.html",
    "title": "Interface IReplicationHandler | Apache Lucene.NET 4.8.0-beta00013 Documentation",
    "keywords": "Interface IReplicationHandler Handler for revisions obtained by the client. Namespace : Lucene.Net.Replicator Assembly : Lucene.Net.Replicator.dll Syntax public interface IReplicationHandler Properties | Improve this Doc View Source CurrentRevisionFiles Returns the current revision version held by the handler. Declaration IDictionary<string, IList<RevisionFile>> CurrentRevisionFiles { get; } Property Value Type Description System.Collections.Generic.IDictionary < System.String , System.Collections.Generic.IList < RevisionFile >> | Improve this Doc View Source CurrentVersion Returns the current revision files held by the handler. Declaration string CurrentVersion { get; } Property Value Type Description System.String Methods | Improve this Doc View Source RevisionReady(String, IDictionary<String, IList<RevisionFile>>, IDictionary<String, IList<String>>, IDictionary<String, Directory>) Called when a new revision was obtained and is available (i.e. all needed files were successfully copied). Declaration void RevisionReady(string version, IDictionary<string, IList<RevisionFile>> revisionFiles, IDictionary<string, IList<string>> copiedFiles, IDictionary<string, Directory> sourceDirectory) Parameters Type Name Description System.String version The version of the IRevision that was copied System.Collections.Generic.IDictionary < System.String , System.Collections.Generic.IList < RevisionFile >> revisionFiles The files contained by this IRevision System.Collections.Generic.IDictionary < System.String , System.Collections.Generic.IList < System.String >> copiedFiles The files that were actually copied System.Collections.Generic.IDictionary < System.String , Lucene.Net.Store.Directory > sourceDirectory A mapping from a source of files to the Lucene.Net.Store.Directory they were copied into Exceptions Type Condition System.IO.IOException"
  },
  "Lucene.Net.Replicator.IReplicator.html": {
    "href": "Lucene.Net.Replicator.IReplicator.html",
    "title": "Interface IReplicator | Apache Lucene.NET 4.8.0-beta00013 Documentation",
    "keywords": "Interface IReplicator An interface for replicating files. Allows a producer to Publish(IRevision) IRevision s and consumers to CheckForUpdate(String) . When a client needs to be updated, it is given a SessionToken through which it can ObtainFile(String, String, String) the files of that revision. After the client has finished obtaining all the files, it should Release(String) the given session, so that the files can be reclaimed if they are not needed anymore. A client is always updated to the newest revision available. That is, if a client is on revision r1 and revisions r2 and r3 were published, then when the client will next check for update, it will receive r3 . Inherited Members System.IDisposable.Dispose() Namespace : Lucene.Net.Replicator Assembly : Lucene.Net.Replicator.dll Syntax public interface IReplicator : IDisposable Remarks This is a Lucene.NET EXPERIMENTAL API, use at your own risk Methods | Improve this Doc View Source CheckForUpdate(String) Check whether the given version is up-to-date and returns a SessionToken which can be used for fetching the revision files, otherwise returns null . Declaration SessionToken CheckForUpdate(string currentVersion) Parameters Type Name Description System.String currentVersion Returns Type Description SessionToken Remarks NOTE: When the returned session token is no longer needed, you should call Release(String) so that the session resources can be reclaimed, including the revision files. Exceptions Type Condition System.IO.IOException | Improve this Doc View Source ObtainFile(String, String, String) Returns an System.IO.Stream for the requested file and source in the context of the given Id . Declaration Stream ObtainFile(string sessionId, string source, string fileName) Parameters Type Name Description System.String sessionId System.String source System.String fileName Returns Type Description System.IO.Stream Remarks NOTE: It is the caller's responsibility to call System.IDisposable.Dispose() on the returned stream. Exceptions Type Condition SessionExpiredException The specified session has already expired | Improve this Doc View Source Publish(IRevision) Publish a new IRevision for consumption by clients. It is the caller's responsibility to verify that the revision files exist and can be read by clients. When the revision is no longer needed, it will be Release(String) d by the replicator. Declaration void Publish(IRevision revision) Parameters Type Name Description IRevision revision The IRevision to publish. Exceptions Type Condition System.IO.IOException | Improve this Doc View Source Release(String) Notify that the specified SessionToken is no longer needed by the caller. Declaration void Release(string sessionId) Parameters Type Name Description System.String sessionId Exceptions Type Condition System.IO.IOException"
  },
  "Lucene.Net.Replicator.IRevision.html": {
    "href": "Lucene.Net.Replicator.IRevision.html",
    "title": "Interface IRevision | Apache Lucene.NET 4.8.0-beta00013 Documentation",
    "keywords": "Interface IRevision A revision comprises lists of files that come from different sources and need to be replicated together to e.g. guarantee that all resources are in sync. In most cases an application will replicate a single index, and so the revision will contain files from a single source. However, some applications may require to treat a collection of indexes as a single entity so that the files from all sources are replicated together, to guarantee consistency beween them. For example, an application which indexes facets will need to replicate both the search and taxonomy indexes together, to guarantee that they match at the client side. Inherited Members System.IComparable<Lucene.Net.Replicator.IRevision>.CompareTo(Lucene.Net.Replicator.IRevision) Namespace : Lucene.Net.Replicator Assembly : Lucene.Net.Replicator.dll Syntax public interface IRevision : IComparable<IRevision> Remarks This is a Lucene.NET EXPERIMENTAL API, use at your own risk Properties | Improve this Doc View Source SourceFiles Returns the files that comprise this revision, as a mapping from a source to a list of files. Declaration IDictionary<string, IList<RevisionFile>> SourceFiles { get; } Property Value Type Description System.Collections.Generic.IDictionary < System.String , System.Collections.Generic.IList < RevisionFile >> | Improve this Doc View Source Version Returns a string representation of the version of this revision. The version is used by CompareTo(String) as well as to serialize/deserialize revision information. Therefore it must be self descriptive as well as be able to identify one revision from another. Declaration string Version { get; } Property Value Type Description System.String Methods | Improve this Doc View Source CompareTo(String) Compares the revision to the given version string. Behaves like System.IComparable<T>.CompareTo(T) Declaration int CompareTo(string version) Parameters Type Name Description System.String version Returns Type Description System.Int32 | Improve this Doc View Source Open(String, String) Returns a System.IO.Stream for the given fileName and source . It is the caller's respnsibility to dispose the System.IO.Stream when it has been consumed. Declaration Stream Open(string source, string fileName) Parameters Type Name Description System.String source System.String fileName Returns Type Description System.IO.Stream Exceptions Type Condition System.IO.IOException | Improve this Doc View Source Release() Called when this revision can be safely released, i.e. where there are no more references to it. Declaration void Release() Exceptions Type Condition System.IO.IOException"
  },
  "Lucene.Net.Replicator.ISourceDirectoryFactory.html": {
    "href": "Lucene.Net.Replicator.ISourceDirectoryFactory.html",
    "title": "Interface ISourceDirectoryFactory | Apache Lucene.NET 4.8.0-beta00013 Documentation",
    "keywords": "Interface ISourceDirectoryFactory Resolves a session and source into a Lucene.Net.Store.Directory to use for copying the session files to. Namespace : Lucene.Net.Replicator Assembly : Lucene.Net.Replicator.dll Syntax public interface ISourceDirectoryFactory Methods | Improve this Doc View Source CleanupSession(String) Called to denote that the replication actions for this session were finished and the directory is no longer needed. Declaration void CleanupSession(string sessionId) Parameters Type Name Description System.String sessionId Exceptions Type Condition System.IO.IOException | Improve this Doc View Source GetDirectory(String, String) Returns the Lucene.Net.Store.Directory to use for the given session and source. Implementations may e.g. return different directories for different sessions, or the same directory for all sessions. In that case, it is advised to clean the directory before it is used for a new session. Declaration Directory GetDirectory(string sessionId, string source) Parameters Type Name Description System.String sessionId System.String source Returns Type Description Lucene.Net.Store.Directory Exceptions Type Condition System.IO.IOException See Also CleanupSession(String)"
  },
  "Lucene.Net.Replicator.LocalReplicator.html": {
    "href": "Lucene.Net.Replicator.LocalReplicator.html",
    "title": "Class LocalReplicator | Apache Lucene.NET 4.8.0-beta00013 Documentation",
    "keywords": "Class LocalReplicator A IReplicator implementation for use by the side that publishes IRevision s, as well for clients to CheckForUpdate(String) check for updates}. When a client needs to be updated, it is returned a SessionToken through which it can ObtainFile(String, String, String) the files of that revision. As long as a revision is being replicated, this replicator guarantees that it will not be Release() . Replication sessions expire by default after , and the threshold can be configured through ExpirationThreshold . Inheritance System.Object LocalReplicator Implements IReplicator System.IDisposable Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Replicator Assembly : Lucene.Net.Replicator.dll Syntax public class LocalReplicator : IReplicator, IDisposable Remarks This is a Lucene.NET EXPERIMENTAL API, use at your own risk Fields | Improve this Doc View Source DEFAULT_SESSION_EXPIRATION_THRESHOLD Threshold for expiring inactive sessions. Defaults to 30 minutes. Declaration public const long DEFAULT_SESSION_EXPIRATION_THRESHOLD = 1800000L Field Value Type Description System.Int64 Properties | Improve this Doc View Source ExpirationThreshold Gets or sets the expiration threshold in milliseconds. If a replication session is inactive this long it is automatically expired, and further attempts to operate within this session will throw a SessionExpiredException . Declaration public virtual long ExpirationThreshold { get; set; } Property Value Type Description System.Int64 Methods | Improve this Doc View Source CheckForUpdate(String) Declaration public virtual SessionToken CheckForUpdate(string currentVersion) Parameters Type Name Description System.String currentVersion Returns Type Description SessionToken | Improve this Doc View Source Dispose() Declaration public void Dispose() | Improve this Doc View Source Dispose(Boolean) Declaration protected virtual void Dispose(bool disposing) Parameters Type Name Description System.Boolean disposing | Improve this Doc View Source EnsureOpen() Ensure that replicator is still open, or throw System.ObjectDisposedException otherwise. Declaration protected void EnsureOpen() Exceptions Type Condition System.ObjectDisposedException This replicator has already been disposed. | Improve this Doc View Source ObtainFile(String, String, String) Declaration public virtual Stream ObtainFile(string sessionId, string source, string fileName) Parameters Type Name Description System.String sessionId System.String source System.String fileName Returns Type Description System.IO.Stream | Improve this Doc View Source Publish(IRevision) Declaration public virtual void Publish(IRevision revision) Parameters Type Name Description IRevision revision | Improve this Doc View Source Release(String) Declaration public virtual void Release(string sessionId) Parameters Type Name Description System.String sessionId Exceptions Type Condition System.InvalidOperationException Implements IReplicator System.IDisposable"
  },
  "Lucene.Net.Replicator.PerSessionDirectoryFactory.html": {
    "href": "Lucene.Net.Replicator.PerSessionDirectoryFactory.html",
    "title": "Class PerSessionDirectoryFactory | Apache Lucene.NET 4.8.0-beta00013 Documentation",
    "keywords": "Class PerSessionDirectoryFactory A ISourceDirectoryFactory which returns FSDirectory under a dedicated session directory. When a session is over, the entire directory is deleted. Inheritance System.Object PerSessionDirectoryFactory Implements ISourceDirectoryFactory Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Replicator Assembly : Lucene.Net.Replicator.dll Syntax public class PerSessionDirectoryFactory : ISourceDirectoryFactory Remarks This is a Lucene.NET EXPERIMENTAL API, use at your own risk Constructors | Improve this Doc View Source PerSessionDirectoryFactory(String) Constructor with the given sources mapping. Declaration public PerSessionDirectoryFactory(string workingDirectory) Parameters Type Name Description System.String workingDirectory Methods | Improve this Doc View Source CleanupSession(String) Declaration public virtual void CleanupSession(string sessionId) Parameters Type Name Description System.String sessionId | Improve this Doc View Source GetDirectory(String, String) Declaration public virtual Directory GetDirectory(string sessionId, string source) Parameters Type Name Description System.String sessionId System.String source Returns Type Description Lucene.Net.Store.Directory Implements ISourceDirectoryFactory"
  },
  "Lucene.Net.Replicator.ReplicationClient.html": {
    "href": "Lucene.Net.Replicator.ReplicationClient.html",
    "title": "Class ReplicationClient | Apache Lucene.NET 4.8.0-beta00013 Documentation",
    "keywords": "Class ReplicationClient A client which monitors and obtains new revisions from a IReplicator . It can be used to either periodically check for updates by invoking StartUpdateThread(Int64, String) , or manually by calling UpdateNow() . Whenever a new revision is available, the RequiredFiles(IDictionary<String, IList<RevisionFile>>) are copied to the Lucene.Net.Store.Directory specified by PerSessionDirectoryFactory and a handler is notified. Inheritance System.Object ReplicationClient Implements System.IDisposable Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Replicator Assembly : Lucene.Net.Replicator.dll Syntax public class ReplicationClient : IDisposable Remarks This is a Lucene.NET EXPERIMENTAL API, use at your own risk Constructors | Improve this Doc View Source ReplicationClient(IReplicator, IReplicationHandler, ISourceDirectoryFactory) Constructor. Declaration public ReplicationClient(IReplicator replicator, IReplicationHandler handler, ISourceDirectoryFactory factory) Parameters Type Name Description IReplicator replicator The IReplicator used for checking for updates IReplicationHandler handler The IReplicationHandler notified when new revisions are ready ISourceDirectoryFactory factory The ISourceDirectoryFactory for returning a Lucene.Net.Store.Directory for a given source and session Fields | Improve this Doc View Source INFO_STREAM_COMPONENT The component name to use with IsEnabled(String) Declaration public const string INFO_STREAM_COMPONENT = \"ReplicationThread\" Field Value Type Description System.String Properties | Improve this Doc View Source InfoStream Gets or sets the Lucene.Net.Util.InfoStream to use for logging messages. Declaration public virtual InfoStream InfoStream { get; set; } Property Value Type Description Lucene.Net.Util.InfoStream | Improve this Doc View Source IsUpdateThreadAlive Returns true if the update thread is alive. The update thread is alive if it has been StartUpdateThread(Int64, String) and not StopUpdateThread() , as well as didn't hit an error which caused it to terminate (i.e. HandleUpdateException(Exception) threw the exception further). Declaration public virtual bool IsUpdateThreadAlive { get; } Property Value Type Description System.Boolean Methods | Improve this Doc View Source Dispose() Declaration public void Dispose() | Improve this Doc View Source Dispose(Boolean) Declaration protected virtual void Dispose(bool disposing) Parameters Type Name Description System.Boolean disposing | Improve this Doc View Source EnsureOpen() Throws System.ObjectDisposedException if the client has already been disposed. Declaration protected void EnsureOpen() | Improve this Doc View Source HandleUpdateException(Exception) Called when an exception is hit by the replication thread. The default implementation prints the full stacktrace to the Lucene.Net.Util.InfoStream set in InfoStream , or the Default one. You can override to log the exception elsewhere. Declaration protected virtual void HandleUpdateException(Exception exception) Parameters Type Name Description System.Exception exception Remarks NOTE: If you override this method to throw the exception further, the replication thread will be terminated. The only way to restart it is to call StopUpdateThread() followed by StartUpdateThread(Int64, String) . | Improve this Doc View Source RequiredFiles(IDictionary<String, IList<RevisionFile>>) Returns the files required for replication. By default, this method returns all files that exist in the new revision, but not in the handler. Declaration protected virtual IDictionary<string, IList<RevisionFile>> RequiredFiles(IDictionary<string, IList<RevisionFile>> newRevisionFiles) Parameters Type Name Description System.Collections.Generic.IDictionary < System.String , System.Collections.Generic.IList < RevisionFile >> newRevisionFiles Returns Type Description System.Collections.Generic.IDictionary < System.String , System.Collections.Generic.IList < RevisionFile >> | Improve this Doc View Source StartUpdateThread(Int64, String) Start the update thread with the specified interval in milliseconds. For debugging purposes, you can optionally set the name to set on Lucene.Net.Replicator.ReplicationClient.ReplicationThread.Name . If you pass null , a default name will be set. Declaration public virtual void StartUpdateThread(long intervalMillis, string threadName) Parameters Type Name Description System.Int64 intervalMillis System.String threadName Exceptions Type Condition System.InvalidOperationException if the thread has already been started | Improve this Doc View Source StopUpdateThread() Stop the update thread. If the update thread is not running, silently does nothing. This method returns after the update thread has stopped. Declaration public virtual void StopUpdateThread() | Improve this Doc View Source ToString() Declaration public override string ToString() Returns Type Description System.String Overrides System.Object.ToString() | Improve this Doc View Source UpdateNow() Executes the update operation immediately, regardless if an update thread is running or not. Declaration public virtual void UpdateNow() Exceptions Type Condition System.IO.IOException Implements System.IDisposable"
  },
  "Lucene.Net.Replicator.RevisionFile.html": {
    "href": "Lucene.Net.Replicator.RevisionFile.html",
    "title": "Class RevisionFile | Apache Lucene.NET 4.8.0-beta00013 Documentation",
    "keywords": "Class RevisionFile Describes a file in a IRevision . A file has a source, which allows a single revision to contain files from multiple sources (e.g. multiple indexes). Inheritance System.Object RevisionFile Implements System.IEquatable < RevisionFile > Inherited Members System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Replicator Assembly : Lucene.Net.Replicator.dll Syntax public class RevisionFile : IEquatable<RevisionFile> Remarks This is a Lucene.NET EXPERIMENTAL API, use at your own risk Constructors | Improve this Doc View Source RevisionFile(String, Int64) Constructor with the given file name and optionally length. Declaration public RevisionFile(string fileName, long length = -1L) Parameters Type Name Description System.String fileName The name of the file System.Int64 length Optional, the length of the file. Properties | Improve this Doc View Source FileName Gets the name of the file. Declaration public string FileName { get; } Property Value Type Description System.String | Improve this Doc View Source Length Gets or sets the length of the file denoted by FileName . Declaration public long Length { get; set; } Property Value Type Description System.Int64 Methods | Improve this Doc View Source Equals(RevisionFile) Declaration public virtual bool Equals(RevisionFile other) Parameters Type Name Description RevisionFile other Returns Type Description System.Boolean | Improve this Doc View Source Equals(Object) Declaration public override bool Equals(object obj) Parameters Type Name Description System.Object obj Returns Type Description System.Boolean Overrides System.Object.Equals(System.Object) | Improve this Doc View Source GetHashCode() Declaration public override int GetHashCode() Returns Type Description System.Int32 Overrides System.Object.GetHashCode() | Improve this Doc View Source ToString() Declaration public override string ToString() Returns Type Description System.String Overrides System.Object.ToString() Implements System.IEquatable<T>"
  },
  "Lucene.Net.Replicator.SessionExpiredException.html": {
    "href": "Lucene.Net.Replicator.SessionExpiredException.html",
    "title": "Class SessionExpiredException | Apache Lucene.NET 4.8.0-beta00013 Documentation",
    "keywords": "Class SessionExpiredException Exception indicating that a revision update session was expired due to lack of activity. Inheritance System.Object System.Exception System.SystemException System.IO.IOException SessionExpiredException Implements System.Runtime.Serialization.ISerializable Inherited Members System.Exception.GetBaseException() System.Exception.GetObjectData(System.Runtime.Serialization.SerializationInfo, System.Runtime.Serialization.StreamingContext) System.Exception.GetType() System.Exception.ToString() System.Exception.Data System.Exception.HelpLink System.Exception.HResult System.Exception.InnerException System.Exception.Message System.Exception.Source System.Exception.StackTrace System.Exception.TargetSite System.Exception.SerializeObjectState System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Replicator Assembly : Lucene.Net.Replicator.dll Syntax public class SessionExpiredException : IOException, ISerializable Remarks This is a Lucene.NET EXPERIMENTAL API, use at your own risk Constructors | Improve this Doc View Source SessionExpiredException() Declaration public SessionExpiredException() | Improve this Doc View Source SessionExpiredException(String) Declaration public SessionExpiredException(string message) Parameters Type Name Description System.String message | Improve this Doc View Source SessionExpiredException(String, Exception) Declaration public SessionExpiredException(string message, Exception inner) Parameters Type Name Description System.String message System.Exception inner Implements System.Runtime.Serialization.ISerializable See Also DEFAULT_SESSION_EXPIRATION_THRESHOLD ExpirationThreshold"
  },
  "Lucene.Net.Replicator.SessionToken.html": {
    "href": "Lucene.Net.Replicator.SessionToken.html",
    "title": "Class SessionToken | Apache Lucene.NET 4.8.0-beta00013 Documentation",
    "keywords": "Class SessionToken Token for a replication session, for guaranteeing that source replicated files will be kept safe until the replication completes. Inheritance System.Object SessionToken Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Replicator Assembly : Lucene.Net.Replicator.dll Syntax public sealed class SessionToken Remarks This is a Lucene.NET EXPERIMENTAL API, use at your own risk Constructors | Improve this Doc View Source SessionToken(IDataInput) Constructor which deserializes from the given J2N.IO.IDataInput . Declaration public SessionToken(IDataInput reader) Parameters Type Name Description J2N.IO.IDataInput reader Exceptions Type Condition System.IO.IOException | Improve this Doc View Source SessionToken(String, IRevision) Constructor with the given id and revision . Declaration public SessionToken(string id, IRevision revision) Parameters Type Name Description System.String id IRevision revision Exceptions Type Condition System.IO.IOException Properties | Improve this Doc View Source Id Id of this session. Should be passed when releasing the session, thereby acknowledging the IReplicator that this session is no longer in use. Declaration public string Id { get; } Property Value Type Description System.String See Also Release ( System.String ) | Improve this Doc View Source SourceFiles SourceFiles Declaration public IDictionary<string, IList<RevisionFile>> SourceFiles { get; } Property Value Type Description System.Collections.Generic.IDictionary < System.String , System.Collections.Generic.IList < RevisionFile >> | Improve this Doc View Source Version Version Declaration public string Version { get; } Property Value Type Description System.String Methods | Improve this Doc View Source Serialize(DataOutputStream) Serialize the token data for communication between server and client. Declaration public void Serialize(DataOutputStream writer) Parameters Type Name Description J2N.IO.DataOutputStream writer Exceptions Type Condition System.IO.IOException | Improve this Doc View Source ToString() Declaration public override string ToString() Returns Type Description System.String Overrides System.Object.ToString() See Also CheckForUpdate ( System.String ) Release ( System.String ) DEFAULT_SESSION_EXPIRATION_THRESHOLD"
  }
}