@@ -27,8 +27,8 @@ public class SyncedFileSystemDirectoryFactory : FileSystemDirectoryFactory
2727 private readonly ILoggerFactory _loggerFactory ;
2828 private readonly bool _tryFixMainIndexIfCorrupt ;
2929 private readonly ILogger < SyncedFileSystemDirectoryFactory > _logger ;
30- private ExamineReplicator _replicator ;
31- private Directory _mainLuceneDir ;
30+ private readonly ILogger < ExamineReplicator > _replicatorLogger ;
31+ private readonly ILogger < LoggingReplicationClient > _clientLogger ;
3232
3333 [ Obsolete ( "Use ctor with all dependencies" ) ]
3434 public SyncedFileSystemDirectoryFactory (
@@ -75,6 +75,8 @@ public SyncedFileSystemDirectoryFactory(
7575 _loggerFactory = loggerFactory ;
7676 _tryFixMainIndexIfCorrupt = tryFixMainIndexIfCorrupt ;
7777 _logger = _loggerFactory . CreateLogger < SyncedFileSystemDirectoryFactory > ( ) ;
78+ _replicatorLogger = _loggerFactory . CreateLogger < ExamineReplicator > ( ) ;
79+ _clientLogger = _loggerFactory . CreateLogger < LoggingReplicationClient > ( ) ;
7880 }
7981
8082 internal CreateResult TryCreateDirectory ( LuceneIndex luceneIndex , bool forceUnlock , out Directory directory )
@@ -88,24 +90,27 @@ internal CreateResult TryCreateDirectory(LuceneIndex luceneIndex, bool forceUnlo
8890 // used by the replicator, will be a short lived directory for each synced revision and deleted when finished.
8991 var tempDir = new DirectoryInfo ( Path . Combine ( _localDir . FullName , "Rep" , Guid . NewGuid ( ) . ToString ( "N" ) ) ) ;
9092
91- _mainLuceneDir = base . CreateDirectory ( luceneIndex , forceUnlock ) ;
93+ var mainLuceneDir = base . CreateDirectory ( luceneIndex , forceUnlock ) ;
9294 var localLuceneDir = FSDirectory . Open (
9395 localLuceneIndexFolder ,
9496 LockFactory . GetLockFactory ( localLuceneIndexFolder ) ) ;
9597
96- var mainIndexExists = DirectoryReader . IndexExists ( _mainLuceneDir ) ;
98+ var mainIndexExists = DirectoryReader . IndexExists ( mainLuceneDir ) ;
9799 var localIndexExists = DirectoryReader . IndexExists ( localLuceneDir ) ;
98100
99101 var mainResult = CreateResult . Init ;
100102
101103 if ( mainIndexExists )
102104 {
103- mainResult = CheckIndexHealthAndFix ( _mainLuceneDir , luceneIndex . Name , _tryFixMainIndexIfCorrupt ) ;
105+ mainResult = CheckIndexHealthAndFix ( mainLuceneDir , luceneIndex . Name , _tryFixMainIndexIfCorrupt ) ;
104106 }
105107
106108 // the main index is/was unhealthy or missing, lets check the local index if it exists
107109 if ( localIndexExists && ( ! mainIndexExists || mainResult . HasFlag ( CreateResult . NotClean ) || mainResult . HasFlag ( CreateResult . MissingSegments ) ) )
108110 {
111+ // TODO: add details here and more below too
112+ _logger . LogInformation ( "" ) ;
113+
109114 var localResult = CheckIndexHealthAndFix ( localLuceneDir , luceneIndex . Name , false ) ;
110115
111116 if ( localResult == CreateResult . Init )
@@ -132,7 +137,7 @@ internal CreateResult TryCreateDirectory(LuceneIndex luceneIndex, bool forceUnlo
132137 ? OpenMode . APPEND
133138 : OpenMode . CREATE ;
134139
135- mainResult |= TryGetIndexWriter ( openMode , _mainLuceneDir , true , luceneIndex . Name , out var indexWriter ) ;
140+ mainResult |= TryGetIndexWriter ( openMode , mainLuceneDir , true , luceneIndex . Name , out var indexWriter ) ;
136141 using ( indexWriter )
137142 {
138143 if ( ! mainResult . HasFlag ( CreateResult . SyncedFromLocal ) )
@@ -142,27 +147,25 @@ internal CreateResult TryCreateDirectory(LuceneIndex luceneIndex, bool forceUnlo
142147 }
143148 }
144149
145- // now create the replicator that will copy from local to main on schedule
146- _replicator = new ExamineReplicator ( _loggerFactory , luceneIndex , _mainLuceneDir , tempDir ) ;
147-
148150 if ( forceUnlock )
149151 {
150152 IndexWriter . Unlock ( localLuceneDir ) ;
151153 }
152154
153- // Start replicating back to main
154- _replicator . StartIndexReplicationOnSchedule ( 1000 ) ;
155+ Directory luceneDir ;
155156
156157 var options = IndexOptions . GetNamedOptions ( luceneIndex . Name ) ;
157158 if ( options . NrtEnabled )
158159 {
159- directory = new NRTCachingDirectory ( localLuceneDir , options . NrtCacheMaxMergeSizeMB , options . NrtCacheMaxCachedMB ) ;
160+ luceneDir = new NRTCachingDirectory ( localLuceneDir , options . NrtCacheMaxMergeSizeMB , options . NrtCacheMaxCachedMB ) ;
160161 }
161162 else
162163 {
163- directory = localLuceneDir ;
164+ luceneDir = localLuceneDir ;
164165 }
165166
167+ directory = new SyncedFileSystemDirectory ( _replicatorLogger , _clientLogger , luceneDir , mainLuceneDir , luceneIndex , tempDir ) ;
168+
166169 return mainResult ;
167170 }
168171
@@ -186,16 +189,6 @@ protected override Directory CreateDirectory(LuceneIndex luceneIndex, bool force
186189 return directory ;
187190 }
188191
189- protected override void Dispose ( bool disposing )
190- {
191- base . Dispose ( disposing ) ;
192- if ( disposing )
193- {
194- _replicator ? . Dispose ( ) ;
195- _mainLuceneDir ? . Dispose ( ) ;
196- }
197- }
198-
199192 private CreateResult TryGetIndexWriter (
200193 OpenMode openMode ,
201194 Directory luceneDirectory ,
@@ -228,6 +221,8 @@ private CreateResult TryGetIndexWriter(
228221 // Index is corrupted, typically this will be FileNotFoundException or CorruptIndexException
229222 _logger . LogError ( ex , "{IndexName} index is corrupt, a new one will be created" , indexName ) ;
230223
224+ // TODO: Here I think we need to totally clear all files in the directory
225+
231226 indexWriter = GetIndexWriter ( luceneDirectory , OpenMode . CREATE ) ;
232227 }
233228 else
@@ -252,7 +247,7 @@ private void SyncIndex(IndexWriter sourceIndexWriter, bool forceUnlock, string i
252247
253248 using ( var sourceIndex = new LuceneIndex ( _loggerFactory , indexName , new TempOptions ( ) , sourceIndexWriter ) )
254249 using ( var destinationLuceneDirectory = FSDirectory . Open ( destinationDirectory , LockFactory . GetLockFactory ( destinationDirectory ) ) )
255- using ( var replicator = new ExamineReplicator ( _loggerFactory , sourceIndex , destinationLuceneDirectory , tempDir ) )
250+ using ( var replicator = new ExamineReplicator ( _replicatorLogger , _clientLogger , sourceIndex , sourceIndexWriter . Directory , destinationLuceneDirectory , tempDir ) )
256251 {
257252 if ( forceUnlock )
258253 {
@@ -328,7 +323,7 @@ private CreateResult CheckIndexHealthAndFix(
328323 return result ;
329324 }
330325
331- private IndexWriter GetIndexWriter ( Directory mainDir , OpenMode openMode )
326+ private static IndexWriter GetIndexWriter ( Directory mainDir , OpenMode openMode )
332327 {
333328 var indexWriter = new IndexWriter (
334329 mainDir ,
0 commit comments