Nope, it is running on the same machine, and it doesn't matter if it is running in different appdomains or not on the same machine, same error.
We will be using one app that will populate the index with an one hourly interval and then shut down. While this is beeing done, the same machine will act search server which returns search results via a webservice. The unit test in the first post in this thread will generate the error. Just create a new solution and reference lucene.net and run the test with NUnit. If someone can fix the unit test so it don't generate the error, without special locking for the searcher as it will be running in another process, I would be very very happy:) Regards Simon -----Original Message----- From: Andy Berryman [mailto:[EMAIL PROTECTED] Sent: den 18 januari 2007 17:16 To: lucene-net-user@incubator.apache.org Subject: Re: FileNotFoundException, is this code supposed to work? Are your searches being executed from a different machine than your writes? Andy On 1/18/07, Simon Gartz <[EMAIL PROTECTED]> wrote: > > > The lock dir if not set manually is set to your temp directory. But > there may be something wrong anyway. I'll try your solution, I don't > have any other choice right now. > > Usually the locking error occurres when you are searching a lot and > indexing at the same time. We will be running on a quite small index > of 50-100MB and this will probably not be an issue in the beginning. > > //Lock dir is set here... If not specified :) FSDirectory.cs - > v2.0.0.001 - line 145 public static readonly System.String LOCK_DIR = > SupportClass.AppSettings.Get("Lucene.Net.lockDir", > System.IO.Path.GetTempPath()); > > Thanks > > /Simon > > > > -----Original Message----- > From: Ben Martz [mailto:[EMAIL PROTECTED] > Sent: den 18 januari 2007 16:08 > To: lucene-net-user@incubator.apache.org > Subject: Re: FileNotFoundException, is this code supposed to work? > > I should add further that the only reason I went with a thread for the > index changes (add/delete/update) is so that I could control the > frequency of index optimization to keep things running smoothly - I > didn't want every minor change to result in a blocking optimization > call. Other than that, I can instantiate multiple copies of my server > application and they all coexist quite cheerfully using the standard > Lucene.Net.lockdir parameter. > > On 1/18/07, Ben Martz <[EMAIL PROTECTED]> wrote: > > > > Out of curiosity, are you running into the multiple writer issue > > when you correctly set up the lock directory? I use the following > > code in my application prior to creating an index writer. > > > > private static bool m_LockInitted = false; > > public static void InitLockDir() > > { > > if (m_LockInitted) > > return; > > > > string lockPath = Common.GetIndexPath() + @"\lock"; > > > > if (!Directory.Exists(lockPath)) > > Directory.CreateDirectory(lockPath); > > > > ConfigurationManager.AppSettings["Lucene.Net.lockdir"] = > > lockPath; // <-- this is the important part > > > > m_LockInitted = true; > > } > > > > > > On 1/18/07, Torsten Rendelmann <[EMAIL PROTECTED]> wrote: > > > > > > AFAIK only index modifications require a lock, while a concurrent > > > search does not. We run into the same problem (concurrent index > > > writers) and "solved" it using a single index mod. thread working > > > with a queue of documents to add/delete/update. > > > > > > > -----Original Message----- > > > > From: [EMAIL PROTECTED] [mailto:[EMAIL PROTECTED] > > > > Sent: Monday, January 15, 2007 7:25 PM > > > > To: lucene-net-user@incubator.apache.org > > > > Subject: RE: FileNotFoundException, is this code supposed to work? > > > > > > > > > > > > I receive these kinds of errors when multiple threads are > > > > searching/writing to the index at the same time. So far, I have > > > > had to resort to .NET locks for key locations in code, such as: > > > > > > > > Dim hits As Hits = Nothing > > > > SyncLock aLock > > > > hits = searcher.Search(query, df1, custSort) > > > > End SyncLock > > > > > > > > SyncLock aLock > > > > Result = reader.DeleteDocuments(New Term("Id", > > > > CStr(Id))) > > > > reader.Close() > > > > End SyncLock > > > > > > > > SyncLock aLock > > > > writer.AddDocument(doc) > > > > writer.Close() > > > > End SyncLock > > > > > > > > > > > > This of course kills our scalability, so I am so interested in > > > > knowing how to address multi-process/multi-threaded access to > > > > any particular index. > > > > > > > > > > > > > > > > - Michael > > > > > > > > > > > > > > > > -----Original Message----- > > > > From: Simon Gartz [mailto:[EMAIL PROTECTED] > > > > Sent: Monday, January 15, 2007 6:54 AM > > > > To: lucene-net-user@incubator.apache.org > > > > Subject: FileNotFoundException, is this code supposed to work? > > > > > > > > Hi, > > > > > > > > I've seen this questions before with slightly different > > > > approaches, but non with sample code. Is this code supposed to > > > > work or not, using Lucene.net v1.9.1.3? > > > > I get follwing error executing the code below. Note that it > > > > might take some time to crash. > > > > > > > > System.IO.FileNotFoundException : Could not find file > > > > "C:\DOCUME~1\sgartz\LOCALS~1\Temp\lucene\_1ji.frq". > > > > at System.IO.__Error.WinIOError(Int32 errorCode, String str) > > > > at System.IO.FileStream..ctor(String path, FileMode mode, > > > > FileAccess access, FileShare share, Int32 bufferSize, Boolean > > > > useAsync, String msgPath, Boolean bFromProxy) > > > > at System.IO.FileStream..ctor(String path, FileMode mode, > > > > FileAccess access, FileShare share) > > > > at Lucene.Net.Store.Descriptor..ctor(FSIndexInput > > > > enclosingInstance, FileInfo file, FileAccess mode) > > > > at Lucene.Net.Store.FSIndexInput..ctor(FileInfo path) > > > > at Lucene.Net.Store.FSDirectory.OpenInput(String name) > > > > at Lucene.Net.Index.SegmentReader.Initialize(SegmentInfo si) > > > > at Lucene.Net.Index.SegmentReader.Get(Directory dir, > > > > SegmentInfo si, SegmentInfos sis, Boolean closeDir, Boolean > > > > ownDir) > > > > at Lucene.Net.Index.SegmentReader.Get(SegmentInfo si) > > > > at Lucene.Net.Index.AnonymousClassWith.DoBody () > > > > at Lucene.Net.Store.With.Run() > > > > at Lucene.Net.Index.IndexReader.Open(Directory > > > > directory, Boolean > > > > closeDirectory) > > > > at Lucene.Net.Index.IndexReader.Open(String path) > > > > at Lucene.Net.Search.IndexSearcher..ctor(String path) > > > > > > > > c:\projects\x\development\x.test\indexingservice\indexingservi > > > > cetest.cs( > > > > 128,0): at > > > > x.Test.IndexingService.IndexingServiceTest.LuceneThreadTest () > > > > > > > > > > > > private static readonly string directory = > > > > Path.Combine(Path.GetTempPath(), "lucene"); > > > > > > > > [Test] > > > > public void LuceneThreadTest(){ > > > > > > > > //Create index > > > > Lucene.Net.Analysis.Analyzer analyzer = new > > > > Lucene.Net.Analysis.SimpleAnalyzer(); > > > > Lucene.Net.Index.IndexWriter writer = new > > > > Lucene.Net.Index.IndexWriter(directory, analyzer, true); > > > > writer.Close(); > > > > > > > > //Start indexing thread > > > > Thread indexThread = new Thread(new > > > > ThreadStart(LuceneIndexThread)); > > > > indexThread.Start(); > > > > > > > > while(indexThread.IsAlive ){ > > > > Console.WriteLine("Searching..."); > > > > > > > > Lucene.Net.Search.Searcher searcher = new > > > > Lucene.Net.Search.IndexSearcher(directory); > > > > > > > > Lucene.Net.Search.Hits hits = null; > > > > Lucene.Net.QueryParsers.QueryParser parser = new > > > > Lucene.Net.QueryParsers.QueryParser("contents", analyzer); > > > > Lucene.Net.Search.Query query = parser.Parse("put"); > > > > Console.WriteLine("Query: " + query.ToString("contents")); > > > > > > > > hits = searcher.Search(query); > > > > Console.WriteLine(hits.Length() + " total results"); > > > > for (int i = 0; i < hits.Length() && i < 10; i++) { > > > > Lucene.Net.Documents.Document d = hits.Doc(i); > > > > Console.WriteLine(i + " " + hits.Score(i) + " " + > > > > d.Get("contents").Length + " " + d.Get("contents").Substring(0, > 20)); > > > > } > > > > searcher.Close(); > > > > Thread.Sleep(1000); > > > > } > > > > } > > > > private void LuceneIndexThread(){ > > > > Console.WriteLine("Start indexing files"); > > > > for(int j = 0; j < 100; j++){ > > > > > > > > Lucene.Net.Analysis.Analyzer analyzer = new > > > > Lucene.Net.Analysis.SimpleAnalyzer(); > > > > Lucene.Net.Index.IndexWriter writer = new > > > > Lucene.Net.Index.IndexWriter (directory, analyzer, false); > > > > > > > > for (int i = 0; i < 100; i++) { > > > > Lucene.Net.Documents.Document d = new > > > > Lucene.Net.Documents.Document(); > > > > string content = new string('a', (new Random()).Next(100) * > 10); > > > > d.Add(new Lucene.Net.Documents.Field("contents", "Put > > > > contents here " + content, Lucene.Net.Documents.Field.Store.YES, > > > > Lucene.Net.Documents.Field.Index.TOKENIZED)); > > > > writer.AddDocument(d); > > > > } > > > > writer.Close(); > > > > Console.WriteLine("Indexed 100 documents..."); > > > > } > > > > Console.WriteLine("Finished indexing files"); > > > > } > > > > > > > > > > > > Regards > > > > Simon > > > > > > > > > > > > > > > > > > > -- > > Mmmmmm...C8H11NO2 > > > > > -- > Mmmmmm...C8H11NO2 >