You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@lucenenet.apache.org by di...@apache.org on 2011/03/24 16:40:54 UTC

[Lucene.Net] svn commit: r1085005 - /incubator/lucene.net/trunk/C#/src/Lucene.Net/Index/DirectoryReader.cs

Author: digy
Date: Thu Mar 24 15:40:54 2011
New Revision: 1085005

URL: http://svn.apache.org/viewvc?rev=1085005&view=rev
Log:
[LUCENENET-399] Some changes to DirectoryReader. TestIndexWriterReader.TestDuringAddIndexes still fails.

Modified:
    incubator/lucene.net/trunk/C#/src/Lucene.Net/Index/DirectoryReader.cs

Modified: incubator/lucene.net/trunk/C#/src/Lucene.Net/Index/DirectoryReader.cs
URL: http://svn.apache.org/viewvc/incubator/lucene.net/trunk/C%23/src/Lucene.Net/Index/DirectoryReader.cs?rev=1085005&r1=1085004&r2=1085005&view=diff
==============================================================================
--- incubator/lucene.net/trunk/C#/src/Lucene.Net/Index/DirectoryReader.cs (original)
+++ incubator/lucene.net/trunk/C#/src/Lucene.Net/Index/DirectoryReader.cs Thu Mar 24 15:40:54 2011
@@ -273,17 +273,17 @@ namespace Lucene.Net.Index
 			for (int i = infos.Count - 1; i >= 0; i--)
 			{
 				// find SegmentReader for this segment
-                if (!segmentReaders.Contains(infos.Info(i).name))
-				{
-					// this is a new segment, no old SegmentReader can be reused
-					newReaders[i] = null;
-				}
-				else
-				{
-                    System.Int32 oldReaderIndex = (System.Int32) segmentReaders[infos.Info(i).name];
-					// there is an old reader for this segment - we'll try to reopen it
-					newReaders[i] = oldReaders[oldReaderIndex];
-				}
+                int? oldReaderIndex = (int?)segmentReaders[infos.Info(i).name];
+                if (oldReaderIndex.HasValue == false)
+                {
+                    // this is a new segment, no old SegmentReader can be reused
+                    newReaders[i] = null;
+                }
+                else
+                {
+                    // there is an old reader for this segment - we'll try to reopen it
+                    newReaders[i] = oldReaders[oldReaderIndex.Value];
+                }
 				
 				bool success = false;
 				try
@@ -371,26 +371,22 @@ namespace Lucene.Net.Index
 					
 					for (int i = 0; i < subReaders.Length; i++)
 					{
-                        bool exist = segmentReaders.Contains(subReaders[i].GetSegmentName());
-                        int oldReaderIndex = -1;
-                        if (exist)
+                        int? oldReaderIndex = (int?)segmentReaders[subReaders[i].GetSegmentName()];
+
+                        // this SegmentReader was not re-opened, we can copy all of its norms 
+                        if (oldReaderIndex.HasValue &&
+                             (oldReaders[oldReaderIndex.Value] == subReaders[i]
+                               || oldReaders[oldReaderIndex.Value].norms[field] == subReaders[i].norms[field]))
                         {
-                            oldReaderIndex = (System.Int32)segmentReaders[subReaders[i].GetSegmentName()];
+                            // we don't have to synchronize here: either this constructor is called from a SegmentReader,
+                            // in which case no old norms cache is present, or it is called from MultiReader.reopen(),
+                            // which is synchronized
+                            Array.Copy(oldBytes, oldStarts[oldReaderIndex.Value], bytes, starts[i], starts[i + 1] - starts[i]);
+                        }
+                        else
+                        {
+                            subReaders[i].Norms(field, bytes, starts[i]);
                         }
-                        
-						
-						// this SegmentReader was not re-opened, we can copy all of its norms 
-                        if (exist && (oldReaders[oldReaderIndex] == subReaders[i] || oldReaders[oldReaderIndex].norms[field] == subReaders[i].norms[field]))
-						{
-							// we don't have to synchronize here: either this constructor is called from a SegmentReader,
-							// in which case no old norms cache is present, or it is called from MultiReader.reopen(),
-							// which is synchronized
-							Array.Copy(oldBytes, oldStarts[oldReaderIndex], bytes, starts[i], starts[i + 1] - starts[i]);
-						}
-						else
-						{
-							subReaders[i].Norms(field, bytes, starts[i]);
-						}
 					}
 					
 					normsCache[field] = bytes; // update cache
@@ -420,14 +416,17 @@ namespace Lucene.Net.Index
 		
 		public override System.Object Clone()
 		{
-			try
-			{
-				return Clone(readOnly); // Preserve current readOnly
-			}
-			catch (System.Exception ex)
-			{
-				throw new System.SystemException(ex.Message, ex);
-			}
+            lock (this)
+            {
+                try
+                {
+                    return Clone(readOnly); // Preserve current readOnly
+                }
+                catch (System.Exception ex)
+                {
+                    throw new System.SystemException(ex.Message, ex);
+                }
+            }
 		}
 		
 		public override IndexReader Clone(bool openReadOnly)
@@ -797,7 +796,7 @@ namespace Lucene.Net.Index
 				if (bytes == null && !HasNorms(field))
 				{
                     byte val = DefaultSimilarity.EncodeNorm(1.0f);
-			        for (int index = (offset > 0) ? offset-- : offset; index < result.Length; index++)
+			        for (int index = offset; index < result.Length; index++)
 				        result.SetValue(val, index);
 				}
 				else if (bytes != null)
@@ -954,8 +953,8 @@ namespace Lucene.Net.Index
                         {
                             System.Diagnostics.Debug.Assert(directory.FileExists(fileName));
 							directory.Sync(fileName);
-                            synced.Add(fileName,fileName);
-                        }
+                            synced[fileName]=fileName;
+                        }   
                     }
 					
 					segmentInfos.Commit(directory);