You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@lucenenet.apache.org by ni...@apache.org on 2017/08/18 08:04:53 UTC
[06/20] lucenenet git commit: LUCENENET-565: Porting of Lucene
Replicator, cleanup stage 1
http://git-wip-us.apache.org/repos/asf/lucenenet/blob/e3305307/src/Lucene.Net.Replicator/LocalReplicator.cs
----------------------------------------------------------------------
diff --git a/src/Lucene.Net.Replicator/LocalReplicator.cs b/src/Lucene.Net.Replicator/LocalReplicator.cs
index ae3a3a9..c32f8b7 100644
--- a/src/Lucene.Net.Replicator/LocalReplicator.cs
+++ b/src/Lucene.Net.Replicator/LocalReplicator.cs
@@ -2,10 +2,10 @@
using System;
using System.Collections.Generic;
+using System.ComponentModel;
using System.Diagnostics;
using System.IO;
using System.Linq;
-using Lucene.Net.Search;
using Lucene.Net.Support;
namespace Lucene.Net.Replicator
@@ -76,36 +76,6 @@ namespace Lucene.Net.Replicator
public void Publish(IRevision revision)
{
- #region Java
- //JAVA: public synchronized void publish(Revision revision) throws IOException {
- //JAVA: ensureOpen();
- //JAVA: if (currentRevision != null) {
- //JAVA: int compare = revision.compareTo(currentRevision.revision);
- //JAVA: if (compare == 0) {
- //JAVA: // same revision published again, ignore but release it
- //JAVA: revision.release();
- //JAVA: return;
- //JAVA: }
- //JAVA:
- //JAVA: if (compare < 0) {
- //JAVA: revision.release();
- //JAVA: throw new IllegalArgumentException("Cannot publish an older revision: rev=" + revision + " current="
- //JAVA: + currentRevision);
- //JAVA: }
- //JAVA: }
- //JAVA:
- //JAVA: // swap revisions
- //JAVA: final RefCountedRevision oldRevision = currentRevision;
- //JAVA: currentRevision = new RefCountedRevision(revision);
- //JAVA: if (oldRevision != null) {
- //JAVA: oldRevision.decRef();
- //JAVA: }
- //JAVA:
- //JAVA: // check for expired sessions
- //JAVA: checkExpiredSessions();
- //JAVA: }
- #endregion
-
lock (padlock)
{
EnsureOpen();
@@ -137,34 +107,11 @@ namespace Lucene.Net.Replicator
}
/// <summary>
- ///
+ /// TODO
/// </summary>
- /// <param name="currentVersion"></param>
/// <returns></returns>
public SessionToken CheckForUpdate(string currentVersion)
{
- #region Java
- //JAVA: public synchronized SessionToken checkForUpdate(String currentVersion) {
- //JAVA: ensureOpen();
- //JAVA: if (currentRevision == null) { // no published revisions yet
- //JAVA: return null;
- //JAVA: }
- //JAVA:
- //JAVA: if (currentVersion != null && currentRevision.revision.compareTo(currentVersion) <= 0) {
- //JAVA: // currentVersion is newer or equal to latest published revision
- //JAVA: return null;
- //JAVA: }
- //JAVA:
- //JAVA: // currentVersion is either null or older than latest published revision
- //JAVA: currentRevision.incRef();
- //JAVA: final String sessionID = Integer.toString(sessionToken.incrementAndGet());
- //JAVA: final SessionToken sessionToken = new SessionToken(sessionID, currentRevision.revision);
- //JAVA: final ReplicationSession timedSessionToken = new ReplicationSession(sessionToken, currentRevision);
- //JAVA: sessions.put(sessionID, timedSessionToken);
- //JAVA: return sessionToken;
- //JAVA: }
- #endregion
-
lock (padlock)
{
EnsureOpen();
@@ -186,9 +133,8 @@ namespace Lucene.Net.Replicator
}
/// <summary>
- ///
+ /// TODO
/// </summary>
- /// <param name="sessionId"></param>
/// <exception cref="InvalidOperationException"></exception>
public void Release(string sessionId)
{
@@ -199,26 +145,11 @@ namespace Lucene.Net.Replicator
}
}
+ /// <summary>
+ /// TODO
+ /// </summary>
public Stream ObtainFile(string sessionId, string source, string fileName)
{
- #region Java
- //JAVA: public synchronized InputStream obtainFile(String sessionID, String source, String fileName) throws IOException {
- //JAVA: ensureOpen();
- //JAVA: ReplicationSession session = sessions.get(sessionID);
- //JAVA: if (session != null && session.isExpired(expirationThresholdMilllis)) {
- //JAVA: releaseSession(sessionID);
- //JAVA: session = null;
- //JAVA: }
- //JAVA: // session either previously expired, or we just expired it
- //JAVA: if (session == null) {
- //JAVA: throw new SessionExpiredException("session (" + sessionID + ") expired while obtaining file: source=" + source
- //JAVA: + " file=" + fileName);
- //JAVA: }
- //JAVA: sessions.get(sessionID).markAccessed();
- //JAVA: return session.revision.revision.open(source, fileName);
- //JAVA: }
- #endregion
-
lock (padlock)
{
EnsureOpen();
@@ -240,21 +171,11 @@ namespace Lucene.Net.Replicator
}
+ /// <summary>
+ /// TODO
+ /// </summary>
public void Dispose()
{
- #region Java
- //JAVA: public synchronized void close() throws IOException {
- //JAVA: if (!closed) {
- //JAVA: // release all managed revisions
- //JAVA: for (ReplicationSession session : sessions.values()) {
- //JAVA: session.revision.decRef();
- //JAVA: }
- //JAVA: sessions.clear();
- //JAVA: closed = true;
- //JAVA: }
- //JAVA: }
- #endregion
-
if (disposed)
return;
@@ -270,21 +191,6 @@ namespace Lucene.Net.Replicator
/// <exception cref="InvalidOperationException"></exception>
private void CheckExpiredSessions()
{
- #region Java
- //JAVA: private void checkExpiredSessions() throws IOException {
- //JAVA: // make a "to-delete" list so we don't risk deleting from the map while iterating it
- //JAVA: final ArrayList<ReplicationSession> toExpire = new ArrayList<>();
- //JAVA: for (ReplicationSession token : sessions.values()) {
- //JAVA: if (token.isExpired(expirationThresholdMilllis)) {
- //JAVA: toExpire.add(token);
- //JAVA: }
- //JAVA: }
- //JAVA: for (ReplicationSession token : toExpire) {
- //JAVA: releaseSession(token.session.id);
- //JAVA: }
- //JAVA: }
- #endregion
-
// .NET NOTE: .ToArray() so we don't modify a collection we are enumerating...
// I am wondering if it would be overall more practical to switch to a concurrent dictionary...
foreach (ReplicationSession token in sessions.Values.Where(token => token.IsExpired(ExpirationThreshold)).ToArray())
@@ -296,17 +202,6 @@ namespace Lucene.Net.Replicator
/// <exception cref="InvalidOperationException"></exception>
private void ReleaseSession(string sessionId)
{
- #region Java
- //JAVA: private void releaseSession(String sessionID) throws IOException {
- //JAVA: ReplicationSession session = sessions.remove(sessionID);
- //JAVA: // if we're called concurrently by close() and release(), could be that one
- //JAVA: // thread beats the other to release the session.
- //JAVA: if (session != null) {
- //JAVA: session.revision.decRef();
- //JAVA: }
- //JAVA: }
- #endregion
-
ReplicationSession session;
// if we're called concurrently by close() and release(), could be that one
// thread beats the other to release the session.
@@ -349,7 +244,6 @@ namespace Lucene.Net.Replicator
{
if (refCount.Get() <= 0)
{
- //JAVA: throw new IllegalStateException("this revision is already released");
throw new InvalidOperationException("this revision is already released");
}
@@ -373,7 +267,6 @@ namespace Lucene.Net.Replicator
}
else if (rc < 0)
{
- //JAVA: throw new IllegalStateException("too many decRef calls: refCount is " + rc + " after decrement");
throw new InvalidOperationException(string.Format("too many decRef calls: refCount is {0} after decrement", rc));
}
}
@@ -395,19 +288,16 @@ namespace Lucene.Net.Replicator
{
Session = session;
Revision = revision;
- //JAVA: lastAccessTime = System.currentTimeMillis();
lastAccessTime = Stopwatch.GetTimestamp();
}
public bool IsExpired(long expirationThreshold)
{
- //JAVA: return lastAccessTime < (System.currentTimeMillis() - expirationThreshold);
return lastAccessTime < Stopwatch.GetTimestamp() - expirationThreshold * Stopwatch.Frequency / 1000;
}
public void MarkAccessed()
{
- //JAVA: lastAccessTime = System.currentTimeMillis();
lastAccessTime = Stopwatch.GetTimestamp();
}
}
http://git-wip-us.apache.org/repos/asf/lucenenet/blob/e3305307/src/Lucene.Net.Replicator/Lucene.Net.Replicator.csproj
----------------------------------------------------------------------
diff --git a/src/Lucene.Net.Replicator/Lucene.Net.Replicator.csproj b/src/Lucene.Net.Replicator/Lucene.Net.Replicator.csproj
index 9481bd4..1b0b90f 100644
--- a/src/Lucene.Net.Replicator/Lucene.Net.Replicator.csproj
+++ b/src/Lucene.Net.Replicator/Lucene.Net.Replicator.csproj
@@ -64,8 +64,6 @@
<Reference Include="System.Xml" />
</ItemGroup>
<ItemGroup>
- <Compile Include="ComponentWrapperInfoStream.cs" />
- <Compile Include="Http\EnumerableExtensions.cs" />
<Compile Include="Http\HttpClientBase.cs" />
<Compile Include="Http\HttpReplicator.cs" />
<Compile Include="Http\Abstractions\IReplicationRequest.cs" />
http://git-wip-us.apache.org/repos/asf/lucenenet/blob/e3305307/src/Lucene.Net.Replicator/PerSessionDirectoryFactory.cs
----------------------------------------------------------------------
diff --git a/src/Lucene.Net.Replicator/PerSessionDirectoryFactory.cs b/src/Lucene.Net.Replicator/PerSessionDirectoryFactory.cs
index e7f1d80..e65c8cb 100644
--- a/src/Lucene.Net.Replicator/PerSessionDirectoryFactory.cs
+++ b/src/Lucene.Net.Replicator/PerSessionDirectoryFactory.cs
@@ -1,5 +1,3 @@
-//STATUS: DRAFT - 4.8.0
-
using System;
using System.IO;
using Lucene.Net.Store;
@@ -34,9 +32,6 @@ namespace Lucene.Net.Replicator
/// </remarks>
public class PerSessionDirectoryFactory : ISourceDirectoryFactory
{
- #region Java
- //JAVA: private final File workDir;
- #endregion
private readonly string workingDirectory;
/** Constructor with the given sources mapping. */
@@ -47,20 +42,6 @@ namespace Lucene.Net.Replicator
public Directory GetDirectory(string sessionId, string source)
{
- #region Java
- //JAVA: public Directory getDirectory(String sessionID, String source) throws IOException {
- //JAVA: File sessionDir = new File(workDir, sessionID);
- //JAVA: if (!sessionDir.exists() && !sessionDir.mkdirs()) {
- //JAVA: throw new IOException("failed to create session directory " + sessionDir);
- //JAVA: }
- //JAVA: File sourceDir = new File(sessionDir, source);
- //JAVA: if (!sourceDir.mkdirs()) {
- //JAVA: throw new IOException("failed to create source directory " + sourceDir);
- //JAVA: }
- //JAVA: return FSDirectory.open(sourceDir);
- //JAVA: }
- #endregion
-
string sourceDirectory = Path.Combine(workingDirectory, sessionId, source);
System.IO.Directory.CreateDirectory(sourceDirectory);
return FSDirectory.Open(sourceDirectory);
@@ -70,27 +51,8 @@ namespace Lucene.Net.Replicator
{
if (string.IsNullOrEmpty(sessionId)) throw new ArgumentException("sessionID cannot be empty", "sessionId");
- #region Java
- //JAVA: rm(new File(workDir, sessionID));
- #endregion
-
string sessionDirectory = Path.Combine(workingDirectory, sessionId);
System.IO.Directory.Delete(sessionDirectory, true);
}
-
- #region Java
- //JAVA: private void rm(File file) throws IOException {
- //JAVA: if (file.isDirectory()) {
- //JAVA: for (File f : file.listFiles()) {
- //JAVA: rm(f);
- //JAVA: }
- //JAVA: }
- //JAVA:
- //JAVA: // This should be either an empty directory, or a file
- //JAVA: if (!file.delete() && file.exists()) {
- //JAVA: throw new IOException("failed to delete " + file);
- //JAVA: }
- //JAVA: }
- #endregion
}
}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/lucenenet/blob/e3305307/src/Lucene.Net.Replicator/Properties/AssemblyInfo.cs
----------------------------------------------------------------------
diff --git a/src/Lucene.Net.Replicator/Properties/AssemblyInfo.cs b/src/Lucene.Net.Replicator/Properties/AssemblyInfo.cs
index 898ca18..6cc1e58 100644
--- a/src/Lucene.Net.Replicator/Properties/AssemblyInfo.cs
+++ b/src/Lucene.Net.Replicator/Properties/AssemblyInfo.cs
@@ -1,6 +1,5 @@
using System;
using System.Reflection;
-using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
// General Information about an assembly is controlled through the following
http://git-wip-us.apache.org/repos/asf/lucenenet/blob/e3305307/src/Lucene.Net.Replicator/ReplicationClient.cs
----------------------------------------------------------------------
diff --git a/src/Lucene.Net.Replicator/ReplicationClient.cs b/src/Lucene.Net.Replicator/ReplicationClient.cs
index 63837c9..14c1c2b 100644
--- a/src/Lucene.Net.Replicator/ReplicationClient.cs
+++ b/src/Lucene.Net.Replicator/ReplicationClient.cs
@@ -1,14 +1,11 @@
-//STATUS: DRAFT - 4.8.0
using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Diagnostics;
using System.IO;
using System.Linq;
-using System.Text;
using System.Threading;
using Lucene.Net.Store;
-using Lucene.Net.Support;
using Lucene.Net.Support.Threading;
using Lucene.Net.Util;
using Directory = Lucene.Net.Store.Directory;
@@ -45,14 +42,16 @@ namespace Lucene.Net.Replicator
/// <remarks>
/// Lucene.Experimental
/// </remarks>
- public partial class ReplicationClient : IDisposable
+ public class ReplicationClient : IDisposable
{
/// <summary>
/// The component name to use with <see cref="Util.InfoStream.IsEnabled"/>
/// </summary>
public const string INFO_STREAM_COMPONENT = "ReplicationThread";
- /// <summary> Gets or sets the <see cref="Util.InfoStream"/> to use for logging messages. </summary>
+ /// <summary>
+ /// Gets or sets the <see cref="Util.InfoStream"/> to use for logging messages.
+ /// </summary>
public InfoStream InfoStream
{
get { return infoStream; }
@@ -86,84 +85,6 @@ namespace Lucene.Net.Replicator
/// <exception cref="IOException"></exception>
private void DoUpdate()
{
- #region Java
- //JAVA: private void doUpdate() throws IOException {
- //JAVA: SessionToken session = null;
- //JAVA: final Map<String,Directory> sourceDirectory = new HashMap<>();
- //JAVA: final Map<String,List<String>> copiedFiles = new HashMap<>();
- //JAVA: boolean notify = false;
- //JAVA: try {
- //JAVA: final String version = handler.currentVersion();
- //JAVA: session = replicator.checkForUpdate(version);
- //JAVA: if (infoStream.isEnabled(INFO_STREAM_COMPONENT)) {
- //JAVA: infoStream.message(INFO_STREAM_COMPONENT, "doUpdate(): handlerVersion=" + version + " session=" + session);
- //JAVA: }
- //JAVA: if (session == null) {
- //JAVA: // already up to date
- //JAVA: return;
- //JAVA: }
- //JAVA: Map<String,List<RevisionFile>> requiredFiles = requiredFiles(session.sourceFiles);
- //JAVA: if (infoStream.isEnabled(INFO_STREAM_COMPONENT)) {
- //JAVA: infoStream.message(INFO_STREAM_COMPONENT, "doUpdate(): requiredFiles=" + requiredFiles);
- //JAVA: }
- //JAVA: for (Entry<String,List<RevisionFile>> e : requiredFiles.entrySet()) {
- //JAVA: String source = e.getKey();
- //JAVA: Directory dir = factory.getDirectory(session.id, source);
- //JAVA: sourceDirectory.put(source, dir);
- //JAVA: List<String> cpFiles = new ArrayList<>();
- //JAVA: copiedFiles.put(source, cpFiles);
- //JAVA: for (RevisionFile file : e.getValue()) {
- //JAVA: if (closed) {
- //JAVA: // if we're closed, abort file copy
- //JAVA: if (infoStream.isEnabled(INFO_STREAM_COMPONENT)) {
- //JAVA: infoStream.message(INFO_STREAM_COMPONENT, "doUpdate(): detected client was closed); abort file copy");
- //JAVA: }
- //JAVA: return;
- //JAVA: }
- //JAVA: InputStream in = null;
- //JAVA: IndexOutput out = null;
- //JAVA: try {
- //JAVA: in = replicator.obtainFile(session.id, source, file.fileName);
- //JAVA: out = dir.createOutput(file.fileName, IOContext.DEFAULT);
- //JAVA: copyBytes(out, in);
- //JAVA: cpFiles.add(file.fileName);
- //JAVA: // TODO add some validation, on size / checksum
- //JAVA: } finally {
- //JAVA: IOUtils.close(in, out);
- //JAVA: }
- //JAVA: }
- //JAVA: }
- //JAVA: // only notify if all required files were successfully obtained.
- //JAVA: notify = true;
- //JAVA: } finally {
- //JAVA: if (session != null) {
- //JAVA: try {
- //JAVA: replicator.release(session.id);
- //JAVA: } finally {
- //JAVA: if (!notify) { // cleanup after ourselves
- //JAVA: IOUtils.close(sourceDirectory.values());
- //JAVA: factory.cleanupSession(session.id);
- //JAVA: }
- //JAVA: }
- //JAVA: }
- //JAVA: }
- //JAVA:
- //JAVA: // notify outside the try-finally above, so the session is released sooner.
- //JAVA: // the handler may take time to finish acting on the copied files, but the
- //JAVA: // session itself is no longer needed.
- //JAVA: try {
- //JAVA: if (notify && !closed ) { // no use to notify if we are closed already
- //JAVA: handler.revisionReady(session.version, session.sourceFiles, copiedFiles, sourceDirectory);
- //JAVA: }
- //JAVA: } finally {
- //JAVA: IOUtils.close(sourceDirectory.values());
- //JAVA: if (session != null) {
- //JAVA: factory.cleanupSession(session.id);
- //JAVA: }
- //JAVA: }
- //JAVA: }
- #endregion
-
SessionToken session = null;
Dictionary<string, Directory> sourceDirectory = new Dictionary<string, Directory>();
Dictionary<string, IList<string>> copiedFiles = new Dictionary<string, IList<string>>();
@@ -285,37 +206,6 @@ namespace Lucene.Net.Replicator
/// <returns></returns>
private IDictionary<string, IList<RevisionFile>> RequiredFiles(IDictionary<string, IList<RevisionFile>> newRevisionFiles)
{
- #region Java
- //JAVA: protected Map<String,List<RevisionFile>> requiredFiles(Map<String,List<RevisionFile>> newRevisionFiles) {
- //JAVA: Map<String,List<RevisionFile>> handlerRevisionFiles = handler.currentRevisionFiles();
- //JAVA: if (handlerRevisionFiles == null) {
- //JAVA: return newRevisionFiles;
- //JAVA: }
- //JAVA:
- //JAVA: Map<String,List<RevisionFile>> requiredFiles = new HashMap<>();
- //JAVA: for (Entry<String,List<RevisionFile>> e : handlerRevisionFiles.entrySet()) {
- //JAVA: // put the handler files in a Set, for faster contains() checks later
- //JAVA: Set<String> handlerFiles = new HashSet<>();
- //JAVA: for (RevisionFile file : e.getValue()) {
- //JAVA: handlerFiles.add(file.fileName);
- //JAVA: }
- //JAVA:
- //JAVA: // make sure to preserve revisionFiles order
- //JAVA: ArrayList<RevisionFile> res = new ArrayList<>();
- //JAVA: String source = e.getKey();
- //JAVA: assert newRevisionFiles.containsKey(source) : "source not found in newRevisionFiles: " + newRevisionFiles;
- //JAVA: for (RevisionFile file : newRevisionFiles.get(source)) {
- //JAVA: if (!handlerFiles.contains(file.fileName)) {
- //JAVA: res.add(file);
- //JAVA: }
- //JAVA: }
- //JAVA: requiredFiles.put(source, res);
- //JAVA: }
- //JAVA:
- //JAVA: return requiredFiles;
- //JAVA: }
- #endregion
-
IDictionary<string, IList<RevisionFile>> handlerRevisionFiles = handler.CurrentRevisionFiles;
if (handlerRevisionFiles == null)
return newRevisionFiles;
@@ -346,22 +236,6 @@ namespace Lucene.Net.Replicator
/// <exception cref="InvalidOperationException"> if the thread has already been started </exception>
public void StartUpdateThread(long intervalMillis, string threadName)
{
- #region Java
- //JAVA: public synchronized void startUpdateThread(long intervalMillis, String threadName) {
- //JAVA: ensureOpen();
- //JAVA: if (updateThread != null && updateThread.isAlive()) {
- //JAVA: throw new IllegalStateException(
- //JAVA: "cannot start an update thread when one is running, must first call 'stopUpdateThread()'");
- //JAVA: }
- //JAVA: threadName = threadName == null ? INFO_STREAM_COMPONENT : "ReplicationThread-" + threadName;
- //JAVA: updateThread = new ReplicationThread(intervalMillis);
- //JAVA: updateThread.setName(threadName);
- //JAVA: updateThread.start();
- //JAVA: // we rely on isAlive to return true in isUpdateThreadAlive, assert to be on the safe side
- //JAVA: assert updateThread.isAlive() : "updateThread started but not alive?";
- //JAVA: }
- #endregion
-
EnsureOpen();
if (updateThread != null && updateThread.IsAlive)
throw new InvalidOperationException("cannot start an update thread when one is running, must first call 'stopUpdateThread()'");
@@ -379,24 +253,6 @@ namespace Lucene.Net.Replicator
/// </summary>
public void StopUpdateThread()
{
- #region Java
- //JAVA: public synchronized void stopUpdateThread() {
- //JAVA: if (updateThread != null) {
- //JAVA: // this will trigger the thread to terminate if it awaits the lock.
- //JAVA: // otherwise, if it's in the middle of replication, we wait for it to
- //JAVA: // stop.
- //JAVA: updateThread.stop.countDown();
- //JAVA: try {
- //JAVA: updateThread.join();
- //JAVA: } catch (InterruptedException e) {
- //JAVA: Thread.currentThread().interrupt();
- //JAVA: throw new ThreadInterruptedException(e);
- //JAVA: }
- //JAVA: updateThread = null;
- //JAVA: }
- //JAVA: }
- #endregion
-
// this will trigger the thread to terminate if it awaits the lock.
// otherwise, if it's in the middle of replication, we wait for it to
// stop.
@@ -496,53 +352,6 @@ namespace Lucene.Net.Replicator
//Note: LUCENENET specific, .NET does not work with Threads in the same way as Java does, so we mimic the same behavior using the ThreadPool instead.
private class ReplicationThread
{
- #region Java
- //JAVA: private class ReplicationThread extends Thread {
- //JAVA: private final long interval;
- //JAVA: // client uses this to stop us
- //JAVA: final CountDownLatch stop = new CountDownLatch(1);
- //JAVA:
- //JAVA: public ReplicationThread(long interval) {
- //JAVA: this.interval = interval;
- //JAVA: }
- //JAVA:
- //JAVA: @SuppressWarnings("synthetic-access")
- //JAVA: @Override
- //JAVA: public void run() {
- //JAVA: while (true) {
- //JAVA: long time = System.currentTimeMillis();
- //JAVA: updateLock.lock();
- //JAVA: try {
- //JAVA: doUpdate();
- //JAVA: } catch (Throwable t) {
- //JAVA: handleUpdateException(t);
- //JAVA: } finally {
- //JAVA: updateLock.unlock();
- //JAVA: }
- //JAVA: time = System.currentTimeMillis() - time;
- //JAVA:
- //JAVA: // adjust timeout to compensate the time spent doing the replication.
- //JAVA: final long timeout = interval - time;
- //JAVA: if (timeout > 0) {
- //JAVA: try {
- //JAVA: // this will return immediately if we were ordered to stop (count=0)
- //JAVA: // or the timeout has elapsed. if it returns true, it means count=0,
- //JAVA: // so terminate.
- //JAVA: if (stop.await(timeout, TimeUnit.MILLISECONDS)) {
- //JAVA: return;
- //JAVA: }
- //JAVA: } catch (InterruptedException e) {
- //JAVA: // if we were interruted, somebody wants to terminate us, so just
- //JAVA: // throw the exception further.
- //JAVA: Thread.currentThread().interrupt();
- //JAVA: throw new ThreadInterruptedException(e);
- //JAVA: }
- //JAVA: }
- //JAVA: }
- //JAVA: }
- //JAVA: }
- #endregion
-
private readonly Action doUpdate;
private readonly Action<Exception> handleException;
private readonly ReentrantLock @lock;
http://git-wip-us.apache.org/repos/asf/lucenenet/blob/e3305307/src/Lucene.Net.Replicator/Replicator.cs
----------------------------------------------------------------------
diff --git a/src/Lucene.Net.Replicator/Replicator.cs b/src/Lucene.Net.Replicator/Replicator.cs
index af7ef51..28de0d3 100644
--- a/src/Lucene.Net.Replicator/Replicator.cs
+++ b/src/Lucene.Net.Replicator/Replicator.cs
@@ -1,4 +1,3 @@
-//STATUS: DRAFT - 4.8.0
using System;
using System.IO;
@@ -62,15 +61,12 @@ namespace Lucene.Net.Replicator
/// should call <see cref="Release"/> so that the session resources can be
/// reclaimed, including the revision files.
/// </remarks>
- /// <param name="currentVersion"></param>
- /// <returns></returns>
/// <exception cref="IOException"></exception>
- SessionToken CheckForUpdate(string currentVersion);// throws IOException;
+ SessionToken CheckForUpdate(string currentVersion);
/// <summary>
/// Notify that the specified <see cref="SessionToken"/> is no longer needed by the caller.
/// </summary>
- /// <param name="sessionId"></param>
/// <exception cref="IOException"></exception>
void Release(string sessionId);
@@ -81,10 +77,6 @@ namespace Lucene.Net.Replicator
/// <remarks>
/// It is the caller's responsibility to call <see cref="IDisposable.Dispose"/> on the returned stream.
/// </remarks>
- /// <param name="sessionId"></param>
- /// <param name="source"></param>
- /// <param name="fileName"></param>
- /// <returns></returns>
/// <exception cref="SessionExpiredException">The specified session has already expired</exception>
Stream ObtainFile(string sessionId, string source, string fileName);
}
http://git-wip-us.apache.org/repos/asf/lucenenet/blob/e3305307/src/Lucene.Net.Replicator/Revision.cs
----------------------------------------------------------------------
diff --git a/src/Lucene.Net.Replicator/Revision.cs b/src/Lucene.Net.Replicator/Revision.cs
index 3d6fe19..57d7ffb 100644
--- a/src/Lucene.Net.Replicator/Revision.cs
+++ b/src/Lucene.Net.Replicator/Revision.cs
@@ -1,5 +1,3 @@
-//STATUS: DRAFT - 4.8.0
-
using System;
using System.Collections.Generic;
using System.IO;
@@ -60,15 +58,11 @@ namespace Lucene.Net.Replicator
int CompareTo(string version);
/// <summary>
- /// Returns an {@link IndexInput} for the given fileName and source. It is the
- /// caller's respnsibility to close the {@link IndexInput} when it has been
+ /// Returns a <see cref="Stream"/> for the given fileName and source. It is the
+ /// caller's respnsibility to close the <see cref="Stream"/> when it has been
/// consumed.
/// </summary>
- /// <param name="source"></param>
- /// <param name="fileName"></param>
- /// <returns></returns>
/// <exception cref="IOException"></exception>
- //TODO: Stream or IndexInput?
Stream Open(string source, string fileName);
/// <summary>
http://git-wip-us.apache.org/repos/asf/lucenenet/blob/e3305307/src/Lucene.Net.Replicator/RevisionFile.cs
----------------------------------------------------------------------
diff --git a/src/Lucene.Net.Replicator/RevisionFile.cs b/src/Lucene.Net.Replicator/RevisionFile.cs
index abd7aff..3d54719 100644
--- a/src/Lucene.Net.Replicator/RevisionFile.cs
+++ b/src/Lucene.Net.Replicator/RevisionFile.cs
@@ -1,5 +1,3 @@
-//STATUS: DRAFT - 4.8.0
-
using System;
namespace Lucene.Net.Replicator
@@ -35,7 +33,6 @@ namespace Lucene.Net.Replicator
/// </summary>
public string FileName { get; private set; }
- //TODO: can this be readonly?
/// <summary>
/// Gets or sets the length of the file denoted by <see cref="FileName"/>.
/// </summary>
@@ -44,7 +41,7 @@ namespace Lucene.Net.Replicator
/// <summary>
/// Constructor with the given file name and optionally length.
/// </summary>
- /// <param name="fileName"></param>
+ /// <param name="fileName">The name of the file</param>
/// <param name="length">Optional, the length of the file.</param>
public RevisionFile(string fileName, long length = -1)
{
http://git-wip-us.apache.org/repos/asf/lucenenet/blob/e3305307/src/Lucene.Net.Replicator/SessionExpiredException.cs
----------------------------------------------------------------------
diff --git a/src/Lucene.Net.Replicator/SessionExpiredException.cs b/src/Lucene.Net.Replicator/SessionExpiredException.cs
index 38eed6c..7aeb426 100644
--- a/src/Lucene.Net.Replicator/SessionExpiredException.cs
+++ b/src/Lucene.Net.Replicator/SessionExpiredException.cs
@@ -1,8 +1,5 @@
-//STATUS: DRAFT - 4.8.0
-
using System;
using System.IO;
-using System.Runtime.Serialization;
namespace Lucene.Net.Replicator
{
http://git-wip-us.apache.org/repos/asf/lucenenet/blob/e3305307/src/Lucene.Net.Replicator/SessionToken.cs
----------------------------------------------------------------------
diff --git a/src/Lucene.Net.Replicator/SessionToken.cs b/src/Lucene.Net.Replicator/SessionToken.cs
index a9440d7..c998137 100644
--- a/src/Lucene.Net.Replicator/SessionToken.cs
+++ b/src/Lucene.Net.Replicator/SessionToken.cs
@@ -1,8 +1,4 @@
-//STATUS: DRAFT - 4.8.0
-
-using System;
using System.Collections.Generic;
-using System.Collections.ObjectModel;
using System.IO;
using Lucene.Net.Store;
using Lucene.Net.Support.IO;
@@ -67,7 +63,7 @@ namespace Lucene.Net.Replicator
Id = reader.ReadUTF();
Version = reader.ReadUTF();
- var sourceFiles = new Dictionary<string, IList<RevisionFile>>();
+ Dictionary<string, IList<RevisionFile>> sourceFiles = new Dictionary<string, IList<RevisionFile>>();
int numSources = reader.ReadInt32();
while (numSources > 0)
{
http://git-wip-us.apache.org/repos/asf/lucenenet/blob/e3305307/src/Lucene.Net.TestFramework/Lucene.Net.TestFramework.csproj
----------------------------------------------------------------------
diff --git a/src/Lucene.Net.TestFramework/Lucene.Net.TestFramework.csproj b/src/Lucene.Net.TestFramework/Lucene.Net.TestFramework.csproj
index 533a4ec..d9f4abd 100644
--- a/src/Lucene.Net.TestFramework/Lucene.Net.TestFramework.csproj
+++ b/src/Lucene.Net.TestFramework/Lucene.Net.TestFramework.csproj
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="utf-8"?>
<!--
Licensed to the Apache Software Foundation (ASF) under one
@@ -19,7 +19,6 @@
under the License.
-->
-
<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
<PropertyGroup>
@@ -530,4 +529,4 @@
<Target Name="AfterBuild">
</Target>
-->
-</Project>
+</Project>
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/lucenenet/blob/e3305307/src/Lucene.Net.Tests.Replicator/Http/HttpReplicatorTest.cs
----------------------------------------------------------------------
diff --git a/src/Lucene.Net.Tests.Replicator/Http/HttpReplicatorTest.cs b/src/Lucene.Net.Tests.Replicator/Http/HttpReplicatorTest.cs
index 3d116f9..6254be6 100644
--- a/src/Lucene.Net.Tests.Replicator/Http/HttpReplicatorTest.cs
+++ b/src/Lucene.Net.Tests.Replicator/Http/HttpReplicatorTest.cs
@@ -44,7 +44,6 @@ namespace Lucene.Net.Tests.Replicator.Http
public override void SetUp()
{
base.SetUp();
- //JAVA: System.setProperty("org.eclipse.jetty.LEVEL", "DEBUG"); // sets stderr logging to DEBUG level
clientWorkDir = CreateTempDir("httpReplicatorTest");
handlerIndexDir = NewDirectory();
serverIndexDir = NewDirectory();
@@ -61,7 +60,6 @@ namespace Lucene.Net.Tests.Replicator.Http
{
StopHttpServer(server);
IOUtils.Dispose(reader, writer, handlerIndexDir, serverIndexDir);
- //JAVA: System.clearProperty("org.eclipse.jetty.LEVEL");
base.TearDown();
}
http://git-wip-us.apache.org/repos/asf/lucenenet/blob/e3305307/src/Lucene.Net.Tests.Replicator/IndexAndTaxonomyReplicationClientTest.cs
----------------------------------------------------------------------
diff --git a/src/Lucene.Net.Tests.Replicator/IndexAndTaxonomyReplicationClientTest.cs b/src/Lucene.Net.Tests.Replicator/IndexAndTaxonomyReplicationClientTest.cs
index 645888a..a6cdfbc 100644
--- a/src/Lucene.Net.Tests.Replicator/IndexAndTaxonomyReplicationClientTest.cs
+++ b/src/Lucene.Net.Tests.Replicator/IndexAndTaxonomyReplicationClientTest.cs
@@ -116,36 +116,6 @@ namespace Lucene.Net.Tests.Replicator
private void AssertHandlerRevision(int expectedId, Directory dir)
{
- //JAVA: private void assertHandlerRevision(int expectedID, Directory dir) throws IOException {
- //JAVA: // loop as long as client is alive. test-framework will terminate us if
- //JAVA: // there's a serious bug, e.g. client doesn't really update. otherwise,
- //JAVA: // introducing timeouts is not good, can easily lead to false positives.
- //JAVA: while (client.isUpdateThreadAlive()) {
- //JAVA: // give client a chance to update
- //JAVA: try {
- //JAVA: Thread.sleep(100);
- //JAVA: } catch (InterruptedException e) {
- //JAVA: throw new ThreadInterruptedException(e);
- //JAVA: }
- //JAVA:
- //JAVA: try {
- //JAVA: DirectoryReader reader = DirectoryReader.open(dir);
- //JAVA: try {
- //JAVA: int handlerID = Integer.parseInt(reader.getIndexCommit().getUserData().get(VERSION_ID), 16);
- //JAVA: if (expectedID == handlerID) {
- //JAVA: return;
- //JAVA: }
- //JAVA: } finally {
- //JAVA: reader.close();
- //JAVA: }
- //JAVA: } catch (Exception e) {
- //JAVA: // we can hit IndexNotFoundException or e.g. EOFException (on
- //JAVA: // segments_N) because it is being copied at the same time it is read by
- //JAVA: // DirectoryReader.open().
- //JAVA: }
- //JAVA: }
- //JAVA: }
-
// loop as long as client is alive. test-framework will terminate us if
// there's a serious bug, e.g. client doesn't really update. otherwise,
// introducing timeouts is not good, can easily lead to false positives.
@@ -180,15 +150,6 @@ namespace Lucene.Net.Tests.Replicator
private IRevision CreateRevision(int id)
{
- //JAVA: private Revision createRevision(final int id) throws IOException {
- //JAVA: publishIndexWriter.addDocument(newDocument(publishTaxoWriter, id));
- //JAVA: publishIndexWriter.setCommitData(new HashMap<String, String>() {{
- //JAVA: put(VERSION_ID, Integer.toString(id, 16));
- //JAVA: }});
- //JAVA: publishIndexWriter.commit();
- //JAVA: publishTaxoWriter.commit();
- //JAVA: return new IndexAndTaxonomyRevision(publishIndexWriter, publishTaxoWriter);
- //JAVA: }
publishIndexWriter.AddDocument(NewDocument(publishTaxoWriter, id));
publishIndexWriter.SetCommitData(new Dictionary<string, string>{
{ VERSION_ID, id.ToString("X") }
@@ -309,12 +270,10 @@ namespace Lucene.Net.Tests.Replicator
newTaxo.Dispose();
}
- //JAVA: /*
- //JAVA: * This test verifies that the client and handler do not end up in a corrupt
- //JAVA: * index if exceptions are thrown at any point during replication. Either when
- //JAVA: * a client copies files from the server to the temporary space, or when the
- //JAVA: * handler copies them to the index directory.
- //JAVA: */
+ // This test verifies that the client and handler do not end up in a corrupt
+ // index if exceptions are thrown at any point during replication. Either when
+ // a client copies files from the server to the temporary space, or when the
+ // handler copies them to the index directory.
[Test]
public void TestConsistencyOnExceptions()
{
@@ -482,11 +441,6 @@ namespace Lucene.Net.Tests.Replicator
// category to all documents, there's nothing much more to validate
TestUtil.CheckIndex(test.handlerTaxoDir.Delegate);
}
- //TODO: Java had this, but considering what it does do we need it?
- //JAVA: catch (IOException e)
- //JAVA: {
- //JAVA: throw new RuntimeException(e);
- //JAVA: }
finally
{
// count-down number of failures
@@ -507,8 +461,6 @@ namespace Lucene.Net.Tests.Replicator
}
else
{
- //JAVA: if (t instanceof RuntimeException) throw (RuntimeException) t;
- //JAVA: throw new RuntimeException(t);
throw exception;
}
}
http://git-wip-us.apache.org/repos/asf/lucenenet/blob/e3305307/src/Lucene.Net.Tests.Replicator/IndexAndTaxonomyRevisionTest.cs
----------------------------------------------------------------------
diff --git a/src/Lucene.Net.Tests.Replicator/IndexAndTaxonomyRevisionTest.cs b/src/Lucene.Net.Tests.Replicator/IndexAndTaxonomyRevisionTest.cs
index dd20864..9a54148 100644
--- a/src/Lucene.Net.Tests.Replicator/IndexAndTaxonomyRevisionTest.cs
+++ b/src/Lucene.Net.Tests.Replicator/IndexAndTaxonomyRevisionTest.cs
@@ -2,6 +2,7 @@
using System;
using System.Collections.Generic;
+using System.IO;
using System.Linq;
using Lucene.Net.Documents;
using Lucene.Net.Facet;
@@ -11,6 +12,7 @@ using Lucene.Net.Replicator;
using Lucene.Net.Store;
using Lucene.Net.Util;
using NUnit.Framework;
+using Directory = Lucene.Net.Store.Directory;
namespace Lucene.Net.Tests.Replicator
{
@@ -166,9 +168,7 @@ namespace Lucene.Net.Tests.Replicator
{
skip = 0;
}
- //JAVA: in.skip(skip);
- byte[] skips = new byte[skip];
- @in.Read(skips, 0, skip);
+ @in.Seek(skip, SeekOrigin.Current);
src.Seek(skip);
offset = skip;
}
http://git-wip-us.apache.org/repos/asf/lucenenet/blob/e3305307/src/Lucene.Net.Tests.Replicator/IndexReplicationClientTest.cs
----------------------------------------------------------------------
diff --git a/src/Lucene.Net.Tests.Replicator/IndexReplicationClientTest.cs b/src/Lucene.Net.Tests.Replicator/IndexReplicationClientTest.cs
index 6a56c77..9d28332 100644
--- a/src/Lucene.Net.Tests.Replicator/IndexReplicationClientTest.cs
+++ b/src/Lucene.Net.Tests.Replicator/IndexReplicationClientTest.cs
@@ -28,14 +28,6 @@ namespace Lucene.Net.Tests.Replicator
public IndexReadyCallback(Directory indexDir)
{
- //JAVA: public IndexReadyCallback(Directory indexDir) throws IOException {
- //JAVA: this.indexDir = indexDir;
- //JAVA: if (DirectoryReader.indexExists(indexDir)) {
- //JAVA: reader = DirectoryReader.open(indexDir);
- //JAVA: lastGeneration = reader.getIndexCommit().getGeneration();
- //JAVA: }
- //JAVA: }
-
this.indexDir = indexDir;
if (DirectoryReader.IndexExists(indexDir))
{
@@ -46,22 +38,6 @@ namespace Lucene.Net.Tests.Replicator
public bool? Call()
{
- //JAVA: public Boolean call() throws Exception {
- //JAVA: if (reader == null) {
- //JAVA: reader = DirectoryReader.open(indexDir);
- //JAVA: lastGeneration = reader.getIndexCommit().getGeneration();
- //JAVA: } else {
- //JAVA: DirectoryReader newReader = DirectoryReader.openIfChanged(reader);
- //JAVA: assertNotNull("should not have reached here if no changes were made to the index", newReader);
- //JAVA: long newGeneration = newReader.getIndexCommit().getGeneration();
- //JAVA: assertTrue("expected newer generation; current=" + lastGeneration + " new=" + newGeneration, newGeneration > lastGeneration);
- //JAVA: reader.close();
- //JAVA: reader = newReader;
- //JAVA: lastGeneration = newGeneration;
- //JAVA: TestUtil.checkIndex(indexDir);
- //JAVA: }
- //JAVA: return null;
- //JAVA: }
if (reader == null)
{
reader = DirectoryReader.Open(indexDir);
@@ -94,44 +70,11 @@ namespace Lucene.Net.Tests.Replicator
private IReplicationHandler handler;
private IndexWriter publishWriter;
private IndexReadyCallback callback;
- //JAVA: private IndexReadyCallback callback;
private const string VERSION_ID = "version";
private void AssertHandlerRevision(int expectedId, Directory dir)
{
- //JAVA: private void assertHandlerRevision(int expectedID, Directory dir) throws IOException {
- //JAVA: // loop as long as client is alive. test-framework will terminate us if
- //JAVA: // there's a serious bug, e.g. client doesn't really update. otherwise,
- //JAVA: // introducing timeouts is not good, can easily lead to false positives.
- //JAVA: while (client.isUpdateThreadAlive()) {
- //JAVA: // give client a chance to update
- //JAVA: try {
- //JAVA: Thread.sleep(100);
- //JAVA: } catch (InterruptedException e) {
- //JAVA: throw new ThreadInterruptedException(e);
- //JAVA: }
- //JAVA:
- //JAVA: try {
- //JAVA: DirectoryReader reader = DirectoryReader.open(dir);
- //JAVA: try {
- //JAVA: int handlerID = Integer.parseInt(reader.getIndexCommit().getUserData().get(VERSION_ID), 16);
- //JAVA: if (expectedID == handlerID) {
- //JAVA: return;
- //JAVA: } else if (VERBOSE) {
- //JAVA: System.out.println("expectedID=" + expectedID + " actual=" + handlerID + " generation=" + reader.getIndexCommit().getGeneration());
- //JAVA: }
- //JAVA: } finally {
- //JAVA: reader.close();
- //JAVA: }
- //JAVA: } catch (Exception e) {
- //JAVA: // we can hit IndexNotFoundException or e.g. EOFException (on
- //JAVA: // segments_N) because it is being copied at the same time it is read by
- //JAVA: // DirectoryReader.open().
- //JAVA: }
- //JAVA: }
- //JAVA: }
-
// loop as long as client is alive. test-framework will terminate us if
// there's a serious bug, e.g. client doesn't really update. otherwise,
// introducing timeouts is not good, can easily lead to false positives.
@@ -170,14 +113,6 @@ namespace Lucene.Net.Tests.Replicator
private IRevision CreateRevision(int id)
{
- //JAVA: private Revision createRevision(final int id) throws IOException {
- //JAVA: publishWriter.addDocument(new Document());
- //JAVA: publishWriter.setCommitData(new HashMap<String, String>() {{
- //JAVA: put(VERSION_ID, Integer.toString(id, 16));
- //JAVA: }});
- //JAVA: publishWriter.commit();
- //JAVA: return new IndexRevision(publishWriter);
- //JAVA: }
publishWriter.AddDocument(new Document());
publishWriter.SetCommitData(new Dictionary<string, string>{
{ VERSION_ID, id.ToString("X") }
@@ -188,20 +123,6 @@ namespace Lucene.Net.Tests.Replicator
public override void SetUp()
{
- //JAVA: public void setUp() throws Exception {
- //JAVA: super.setUp();
- //JAVA: publishDir = newMockDirectory();
- //JAVA: handlerDir = newMockDirectory();
- //JAVA: sourceDirFactory = new PerSessionDirectoryFactory(createTempDir("replicationClientTest"));
- //JAVA: replicator = new LocalReplicator();
- //JAVA: callback = new IndexReadyCallback(handlerDir);
- //JAVA: handler = new IndexReplicationHandler(handlerDir, callback);
- //JAVA: client = new ReplicationClient(replicator, handler, sourceDirFactory);
- //JAVA:
- //JAVA: IndexWriterConfig conf = newIndexWriterConfig(TEST_VERSION_CURRENT, null);
- //JAVA: conf.setIndexDeletionPolicy(new SnapshotDeletionPolicy(conf.getIndexDeletionPolicy()));
- //JAVA: publishWriter = new IndexWriter(publishDir, conf);
- //JAVA: }
base.SetUp();
publishDir = NewMockDirectory();
@@ -219,10 +140,6 @@ namespace Lucene.Net.Tests.Replicator
public override void TearDown()
{
- //JAVA: public void tearDown() throws Exception {
- //JAVA: IOUtils.close(client, callback, publishWriter, replicator, publishDir, handlerDir);
- //JAVA: super.tearDown();
- //JAVA: }
IOUtils.Dispose(client, callback, publishWriter, replicator, publishDir, handlerDir);
base.TearDown();
}
@@ -230,21 +147,6 @@ namespace Lucene.Net.Tests.Replicator
[Test]
public void TestNoUpdateThread()
{
- //JAVA: public void testNoUpdateThread() throws Exception {
- //JAVA: assertNull("no version expected at start", handler.currentVersion());
- //JAVA:
- //JAVA: // Callback validates the replicated index
- //JAVA: replicator.publish(createRevision(1));
- //JAVA: client.updateNow();
- //JAVA:
- //JAVA: replicator.publish(createRevision(2));
- //JAVA: client.updateNow();
- //JAVA:
- //JAVA: // Publish two revisions without update, handler should be upgraded to latest
- //JAVA: replicator.publish(createRevision(3));
- //JAVA: replicator.publish(createRevision(4));
- //JAVA: client.updateNow();
- //JAVA: }
assertNull("no version expected at start", handler.CurrentVersion);
// Callback validates the replicated ind
@@ -264,21 +166,6 @@ namespace Lucene.Net.Tests.Replicator
[Test]
public void TestUpdateThread()
{
- //JAVA: public void testUpdateThread() throws Exception {
- //JAVA: client.startUpdateThread(10, "index");
- //JAVA:
- //JAVA: replicator.publish(createRevision(1));
- //JAVA: assertHandlerRevision(1, handlerDir);
- //JAVA:
- //JAVA: replicator.publish(createRevision(2));
- //JAVA: assertHandlerRevision(2, handlerDir);
- //JAVA:
- //JAVA: // Publish two revisions without update, handler should be upgraded to latest
- //JAVA: replicator.publish(createRevision(3));
- //JAVA: replicator.publish(createRevision(4));
- //JAVA: assertHandlerRevision(4, handlerDir);
- //JAVA: }
-
client.StartUpdateThread(10, "index");
replicator.Publish(CreateRevision(1));
@@ -296,22 +183,6 @@ namespace Lucene.Net.Tests.Replicator
[Test]
public void TestRestart()
{
- //JAVA: public void testRestart() throws Exception {
- //JAVA: replicator.publish(createRevision(1));
- //JAVA: client.updateNow();
- //JAVA:
- //JAVA: replicator.publish(createRevision(2));
- //JAVA: client.updateNow();
- //JAVA:
- //JAVA: client.stopUpdateThread();
- //JAVA: client.close();
- //JAVA: client = new ReplicationClient(replicator, handler, sourceDirFactory);
- //JAVA:
- //JAVA: // Publish two revisions without update, handler should be upgraded to latest
- //JAVA: replicator.publish(createRevision(3));
- //JAVA: replicator.publish(createRevision(4));
- //JAVA: client.updateNow();
- //JAVA: }
replicator.Publish(CreateRevision(1));
client.UpdateNow();
@@ -328,12 +199,10 @@ namespace Lucene.Net.Tests.Replicator
client.UpdateNow();
}
- //JAVA: /*
- //JAVA: * This test verifies that the client and handler do not end up in a corrupt
- //JAVA: * index if exceptions are thrown at any point during replication. Either when
- //JAVA: * a client copies files from the server to the temporary space, or when the
- //JAVA: * handler copies them to the index directory.
- //JAVA: */
+ // This test verifies that the client and handler do not end up in a corrupt
+ // index if exceptions are thrown at any point during replication. Either when
+ // a client copies files from the server to the temporary space, or when the
+ // handler copies them to the index directory.
[Test]
public void TestConsistencyOnExceptions()
{
@@ -352,7 +221,6 @@ namespace Lucene.Net.Tests.Replicator
// where the handler overwrites an existing index file, but
// there's nothing currently we can do about it, unless we don't
// use MDW.
- //JAVA: handlerDir.setPreventDoubleWrite(false);
handlerDir.PreventDoubleWrite = false;
// wrap sourceDirFactory to return a MockDirWrapper so we can simulate errors
@@ -478,12 +346,6 @@ namespace Lucene.Net.Tests.Replicator
// verify index consistency
TestUtil.CheckIndex(test.handlerDir.Delegate);
}
- //TODO: Java had this, but considering what it does do we need it?
- //JAVA: catch (IOException e)
- //JAVA: {
- //JAVA: // exceptions here are bad, don't ignore them
- //JAVA: throw new RuntimeException(e);
- //JAVA: }
finally
{
// count-down number of failures
@@ -502,8 +364,6 @@ namespace Lucene.Net.Tests.Replicator
}
}
} else {
- //JAVA: if (t instanceof RuntimeException) throw (RuntimeException) t;
- //JAVA: throw new RuntimeException(t);
throw exception;
}
}
http://git-wip-us.apache.org/repos/asf/lucenenet/blob/e3305307/src/Lucene.Net.Tests.Replicator/IndexRevisionTest.cs
----------------------------------------------------------------------
diff --git a/src/Lucene.Net.Tests.Replicator/IndexRevisionTest.cs b/src/Lucene.Net.Tests.Replicator/IndexRevisionTest.cs
index de4dbb4..ee0108b 100644
--- a/src/Lucene.Net.Tests.Replicator/IndexRevisionTest.cs
+++ b/src/Lucene.Net.Tests.Replicator/IndexRevisionTest.cs
@@ -1,6 +1,7 @@
//STATUS: DRAFT - 4.8.0
using System;
+using System.IO;
using System.Linq;
using Lucene.Net.Documents;
using Lucene.Net.Index;
@@ -8,6 +9,7 @@ using Lucene.Net.Replicator;
using Lucene.Net.Store;
using Lucene.Net.Util;
using NUnit.Framework;
+using Directory = Lucene.Net.Store.Directory;
namespace Lucene.Net.Tests.Replicator
{
@@ -144,7 +146,7 @@ namespace Lucene.Net.Tests.Replicator
foreach (RevisionFile file in sourceFiles.Values.First())
{
IndexInput src = dir.OpenInput(file.FileName, IOContext.READ_ONCE);
- System.IO.Stream @in = rev.Open(source, file.FileName);
+ Stream @in = rev.Open(source, file.FileName);
assertEquals(src.Length, @in.Length);
byte[] srcBytes = new byte[(int) src.Length];
byte[] inBytes = new byte[(int) src.Length];
@@ -156,9 +158,7 @@ namespace Lucene.Net.Tests.Replicator
{
skip = 0;
}
- //JAVA: in.skip(skip);
- byte[] skips = new byte[skip];
- @in.Read(skips, 0, skip);
+ @in.Seek(skip, SeekOrigin.Current);
src.Seek(skip);
offset = skip;
}
http://git-wip-us.apache.org/repos/asf/lucenenet/blob/e3305307/src/Lucene.Net.Tests.Replicator/LocalReplicatorTest.cs
----------------------------------------------------------------------
diff --git a/src/Lucene.Net.Tests.Replicator/LocalReplicatorTest.cs b/src/Lucene.Net.Tests.Replicator/LocalReplicatorTest.cs
index 9946457..d54e2e1 100644
--- a/src/Lucene.Net.Tests.Replicator/LocalReplicatorTest.cs
+++ b/src/Lucene.Net.Tests.Replicator/LocalReplicatorTest.cs
@@ -61,9 +61,6 @@ namespace Lucene.Net.Tests.Replicator
private IRevision CreateRevision(int id)
{
sourceWriter.AddDocument(new Document());
- //JAVA: sourceWriter.setCommitData(new HashMap<String, String>() {{
- //JAVA: put(VERSION_ID, Integer.toString(id, 16));
- //JAVA: }
sourceWriter.SetCommitData(new Dictionary<string, string> {
{ VERSION_ID, id.ToString() }
});
@@ -175,8 +172,7 @@ namespace Lucene.Net.Tests.Replicator
replicator.ObtainFile(res.Id, res.SourceFiles.Keys.First(), "madeUpFile");
fail("should have failed obtaining an unrecognized file");
}
- //JAVA: } catch (FileNotFoundException | NoSuchFileException e) { -> Could not find a "NoSuchFileException" ?NoSuchItemException
- catch (Exception e) when (e is FileNotFoundException)//|| e is NoSuchItemException)
+ catch (FileNotFoundException e)
{
// expected
}
http://git-wip-us.apache.org/repos/asf/lucenenet/blob/e3305307/src/Lucene.Net.Tests.Replicator/ReplicatorTestCase.cs
----------------------------------------------------------------------
diff --git a/src/Lucene.Net.Tests.Replicator/ReplicatorTestCase.cs b/src/Lucene.Net.Tests.Replicator/ReplicatorTestCase.cs
index 1b8ec1e..58e6ea9 100644
--- a/src/Lucene.Net.Tests.Replicator/ReplicatorTestCase.cs
+++ b/src/Lucene.Net.Tests.Replicator/ReplicatorTestCase.cs
@@ -28,99 +28,8 @@ namespace Lucene.Net.Tests.Replicator
public class ReplicatorTestCase : LuceneTestCase
{
- //JAVA: private static ClientConnectionManager clientConnectionManager;
- //JAVA:
- //JAVA: @AfterClass
- //JAVA: public static void afterClassReplicatorTestCase() throws Exception {
- //JAVA: if (clientConnectionManager != null) {
- //JAVA: clientConnectionManager.shutdown();
- //JAVA: clientConnectionManager = null;
- //JAVA: }
- //JAVA: }
- //JAVA:
-
-
public static TestServer NewHttpServer<TStartUp>(ReplicationService service) where TStartUp : class
{
- #region JAVA
- //JAVA: /**
- //JAVA: * Returns a new {@link Server HTTP Server} instance. To obtain its port, use
- //JAVA: * {@link #serverPort(Server)}.
- //JAVA: */
- //JAVA: public static synchronized Server newHttpServer(Handler handler) throws Exception {
- //JAVA: Server server = new Server(0);
- //JAVA:
- //JAVA: server.setHandler(handler);
- //JAVA:
- //JAVA: final String connectorName = System.getProperty("tests.jettyConnector", "SelectChannel");
- //JAVA:
- //JAVA: // if this property is true, then jetty will be configured to use SSL
- //JAVA: // leveraging the same system properties as java to specify
- //JAVA: // the keystore/truststore if they are set
- //JAVA: //
- //JAVA: // This means we will use the same truststore, keystore (and keys) for
- //JAVA: // the server as well as any client actions taken by this JVM in
- //JAVA: // talking to that server, but for the purposes of testing that should
- //JAVA: // be good enough
- //JAVA: final boolean useSsl = Boolean.getBoolean("tests.jettySsl");
- //JAVA: final SslContextFactory sslcontext = new SslContextFactory(false);
- //JAVA:
- //JAVA: if (useSsl) {
- //JAVA: if (null != System.getProperty("javax.net.ssl.keyStore")) {
- //JAVA: sslcontext.setKeyStorePath
- //JAVA: (System.getProperty("javax.net.ssl.keyStore"));
- //JAVA: }
- //JAVA: if (null != System.getProperty("javax.net.ssl.keyStorePassword")) {
- //JAVA: sslcontext.setKeyStorePassword
- //JAVA: (System.getProperty("javax.net.ssl.keyStorePassword"));
- //JAVA: }
- //JAVA: if (null != System.getProperty("javax.net.ssl.trustStore")) {
- //JAVA: sslcontext.setTrustStore
- //JAVA: (System.getProperty("javax.net.ssl.trustStore"));
- //JAVA: }
- //JAVA: if (null != System.getProperty("javax.net.ssl.trustStorePassword")) {
- //JAVA: sslcontext.setTrustStorePassword
- //JAVA: (System.getProperty("javax.net.ssl.trustStorePassword"));
- //JAVA: }
- //JAVA: sslcontext.setNeedClientAuth(Boolean.getBoolean("tests.jettySsl.clientAuth"));
- //JAVA: }
- //JAVA:
- //JAVA: final Connector connector;
- //JAVA: final QueuedThreadPool threadPool;
- //JAVA: if ("SelectChannel".equals(connectorName)) {
- //JAVA: final SelectChannelConnector c = useSsl ? new SslSelectChannelConnector(sslcontext) : new SelectChannelConnector();
- //JAVA: c.setReuseAddress(true);
- //JAVA: c.setLowResourcesMaxIdleTime(1500);
- //JAVA: connector = c;
- //JAVA: threadPool = (QueuedThreadPool) c.getThreadPool();
- //JAVA: } else if ("Socket".equals(connectorName)) {
- //JAVA: final SocketConnector c = useSsl ? new SslSocketConnector(sslcontext) : new SocketConnector();
- //JAVA: c.setReuseAddress(true);
- //JAVA: connector = c;
- //JAVA: threadPool = (QueuedThreadPool) c.getThreadPool();
- //JAVA: } else {
- //JAVA: throw new IllegalArgumentException("Illegal value for system property 'tests.jettyConnector': " + connectorName);
- //JAVA: }
- //JAVA:
- //JAVA: connector.setPort(0);
- //JAVA: connector.setHost("127.0.0.1");
- //JAVA: if (threadPool != null) {
- //JAVA: threadPool.setDaemon(true);
- //JAVA: threadPool.setMaxThreads(10000);
- //JAVA: threadPool.setMaxIdleTimeMs(5000);
- //JAVA: threadPool.setMaxStopTimeMs(30000);
- //JAVA: }
- //JAVA:
- //JAVA: server.setConnectors(new Connector[] {connector});
- //JAVA: server.setSessionIdManager(new HashSessionIdManager(new Random(random().nextLong())));
- //JAVA:
- //JAVA: server.start();
- //JAVA:
- //JAVA: return server;
- //JAVA: }
- //JAVA:
- #endregion
-
var server = new TestServer(new WebHostBuilder()
.ConfigureServices(container =>
{
@@ -135,10 +44,6 @@ namespace Lucene.Net.Tests.Replicator
/// </summary>
public static int ServerPort(TestServer server)
{
- //JAVA: /** Returns a {@link Server}'s port. */
- //JAVA: public static int serverPort(Server server) {
- //JAVA: return server.getConnectors()[0].getLocalPort();
- //JAVA: }
return server.BaseAddress.Port;
}
@@ -147,10 +52,6 @@ namespace Lucene.Net.Tests.Replicator
/// </summary>
public static string ServerHost(TestServer server)
{
- //JAVA: /** Returns a {@link Server}'s host. */
- //JAVA: public static String serverHost(Server server) {
- //JAVA: return server.getConnectors()[0].getHost();
- //JAVA: }
return server.BaseAddress.Host;
}
@@ -159,34 +60,7 @@ namespace Lucene.Net.Tests.Replicator
/// </summary>
public static void StopHttpServer(TestServer server)
{
- //JAVA: /**
- //JAVA: * Stops the given HTTP Server instance. This method does its best to guarantee
- //JAVA: * that no threads will be left running following this method.
- //JAVA: */
- //JAVA: public static void stopHttpServer(Server httpServer) throws Exception {
- //JAVA: httpServer.stop();
- //JAVA: httpServer.join();
- //JAVA: }
server.Dispose();
}
-
- //JAVA:
- //JAVA: /**
- //JAVA: * Returns a {@link ClientConnectionManager}.
- //JAVA: * <p>
- //JAVA: * <b>NOTE:</b> do not {@link ClientConnectionManager#shutdown()} this
- //JAVA: * connection manager, it will be shutdown automatically after all tests have
- //JAVA: * finished.
- //JAVA: */
- //JAVA: public static synchronized ClientConnectionManager getClientConnectionManager() {
- //JAVA: if (clientConnectionManager == null) {
- //JAVA: PoolingClientConnectionManager ccm = new PoolingClientConnectionManager();
- //JAVA: ccm.setDefaultMaxPerRoute(128);
- //JAVA: ccm.setMaxTotal(128);
- //JAVA: clientConnectionManager = ccm;
- //JAVA: }
- //JAVA:
- //JAVA: return clientConnectionManager;
- //JAVA: }
}
}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/lucenenet/blob/e3305307/src/Lucene.Net/Lucene.Net.csproj
----------------------------------------------------------------------
diff --git a/src/Lucene.Net/Lucene.Net.csproj b/src/Lucene.Net/Lucene.Net.csproj
index d2b8e6e..50b1b14 100644
--- a/src/Lucene.Net/Lucene.Net.csproj
+++ b/src/Lucene.Net/Lucene.Net.csproj
@@ -395,6 +395,7 @@
<Compile Include="Index\UpgradeIndexMergePolicy.cs" />
<Compile Include="LucenePackage.cs" />
<Compile Include="Support\Document\DocumentExtensions.cs" />
+ <Compile Include="Support\EnumerableExtensions.cs" />
<Compile Include="Support\IO\Compression\LZOCompressor.cs" />
<Compile Include="Properties\AssemblyInfo.cs" />
<Compile Include="Search\AutomatonQuery.cs" />
http://git-wip-us.apache.org/repos/asf/lucenenet/blob/e3305307/src/Lucene.Net/Support/EnumerableExtensions.cs
----------------------------------------------------------------------
diff --git a/src/Lucene.Net/Support/EnumerableExtensions.cs b/src/Lucene.Net/Support/EnumerableExtensions.cs
new file mode 100644
index 0000000..f621289
--- /dev/null
+++ b/src/Lucene.Net/Support/EnumerableExtensions.cs
@@ -0,0 +1,63 @@
+using System;
+using System.Collections.Generic;
+
+namespace Lucene.Net.Support
+{
+ /*
+ * 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.
+ */
+
+ /// <summary>
+ /// .NET Specific Helper Extensions for IEnumerable
+ /// </summary>
+ //Note: LUCENENET specific
+ public static class EnumerableExtensions
+ {
+ /// <summary>
+ /// Enumerates a sequence in pairs
+ /// </summary>
+ /// <remarks>
+ /// In the case of an uneven amount of elements, the list call to <paramref name="join" /> pases <code>default(T)</code> as the second parameter.
+ /// </remarks>
+ /// <typeparam name="T">The type of the elements of <paramref name="source" />.</typeparam>
+ /// <typeparam name="TOut">The type of the elements returned from <paramref name="join" />.</typeparam>
+ /// <param name="source">An <see cref="T:System.Collections.Generic.IEnumerable`1" /> to enumerate in pairs.</param>
+ /// <param name="join">A function that is invoked for each pair of elements.</param>
+ /// <exception cref="T:System.ArgumentNullException"><paramref name="source" /> or <paramref name="join" /> is <see langword="null" />.</exception>
+ /// <returns>A new <see cref="T:System.Collections.Generic.IEnumerable`1" /> containing the results from each pair.</returns>
+ public static IEnumerable<TOut> InPairs<T, TOut>(this IEnumerable<T> source, Func<T, T, TOut> join)
+ {
+ if (source == null)
+ throw new ArgumentNullException("source");
+ if (join == null)
+ throw new ArgumentNullException("join");
+
+ using (IEnumerator<T> enumerator = source.GetEnumerator())
+ {
+ while (true)
+ {
+ if (!enumerator.MoveNext())
+ yield break;
+
+ T x = enumerator.Current;
+ if (!enumerator.MoveNext())
+ yield return join(x, default(T));
+ yield return join(x, enumerator.Current);
+ }
+ }
+ }
+ }
+}
\ No newline at end of file