Mercurial Hosting > luan
comparison src/goodjava/lucene/logging/LoggingIndexWriter.java @ 1484:1fa6e8ec2d53
lucene.logging cleanup
author | Franklin Schmidt <fschmidt@gmail.com> |
---|---|
date | Sat, 25 Apr 2020 11:14:25 -0600 |
parents | 7d145095cc0b |
children | 2469aa31f31b |
comparison
equal
deleted
inserted
replaced
1483:97740900c820 | 1484:1fa6e8ec2d53 |
---|---|
62 try { | 62 try { |
63 if( dis.readInt() == version ) { | 63 if( dis.readInt() == version ) { |
64 final int n = dis.readInt(); | 64 final int n = dis.readInt(); |
65 for( int i=0; i<n; i++ ) { | 65 for( int i=0; i<n; i++ ) { |
66 File file = new File( logDir, dis.readUTF() ); | 66 File file = new File( logDir, dis.readUTF() ); |
67 logs.add( new LogFile(file,"rwd") ); | 67 logs.add( LogFile.newLogFile(file) ); |
68 } | 68 } |
69 deleteUnusedFiles(); | 69 deleteUnusedFiles(); |
70 return; | 70 return; |
71 } | 71 } |
72 } finally { | 72 } finally { |
117 private LogFile newLogFile() throws IOException { | 117 private LogFile newLogFile() throws IOException { |
118 File file; | 118 File file; |
119 do { | 119 do { |
120 file = new File(logDir,"_"+rnd.nextInt(100)+".log"); | 120 file = new File(logDir,"_"+rnd.nextInt(100)+".log"); |
121 } while( file.exists() ); | 121 } while( file.exists() ); |
122 return new LogFile(file,"rwd"); | 122 return LogFile.newLogFile(file); |
123 } | 123 } |
124 | 124 |
125 private void deleteUnusedFiles() throws IOException { | 125 private void deleteUnusedFiles() throws IOException { |
126 Set<String> used = new HashSet<String>(); | 126 Set<String> used = new HashSet<String>(); |
127 used.add( index.getName() ); | 127 used.add( index.getName() ); |
160 File dirFile = new File(logDir,"merge"); | 160 File dirFile = new File(logDir,"merge"); |
161 if( dirFile.exists() ) | 161 if( dirFile.exists() ) |
162 throw new RuntimeException(); | 162 throw new RuntimeException(); |
163 Directory dir = FSDirectory.open(dirFile); | 163 Directory dir = FSDirectory.open(dirFile); |
164 LuceneIndexWriter mergeWriter = new LuceneIndexWriter( indexWriter.luceneVersion, dir, indexWriter.goodConfig ); | 164 LuceneIndexWriter mergeWriter = new LuceneIndexWriter( indexWriter.luceneVersion, dir, indexWriter.goodConfig ); |
165 playLog(first,mergeWriter); | 165 playLog( first.input(), mergeWriter ); |
166 playLog(second,mergeWriter); | 166 playLog( second.input(), mergeWriter ); |
167 mergeWriter.commit(); | 167 mergeWriter.commit(); |
168 LogFile merge = newLogFile(); | 168 LogFile merge = newLogFile(); |
169 logLucene( lastTime, merge, mergeWriter ); | 169 logLucene( lastTime, merge, mergeWriter ); |
170 mergeWriter.close(); | 170 mergeWriter.close(); |
171 synchronized(this) { | 171 synchronized(this) { |
206 } | 206 } |
207 } | 207 } |
208 | 208 |
209 public void check(SortField sortField) throws IOException { | 209 public void check(SortField sortField) throws IOException { |
210 IndexReader indexReader; | 210 IndexReader indexReader; |
211 List<LogFile> logs; | 211 List<LogInputStream> logReaders; |
212 synchronized(this) { | 212 synchronized(this) { |
213 if( isMerging ) { | 213 if( isMerging ) { |
214 logger.warn("is merging, check aborted"); | 214 logger.warn("is merging, check aborted"); |
215 return; | 215 return; |
216 } | 216 } |
217 isMerging = true; | 217 isMerging = true; |
218 indexReader = indexWriter.openReader(); | 218 indexReader = indexWriter.openReader(); |
219 logs = new ArrayList<LogFile>(this.logs); | 219 logReaders = logReaders(logs); |
220 int i = logs.size() - 1; | |
221 LogFile last = logs.get(i); | |
222 logs.set(i,last.snapshot()); | |
223 } | 220 } |
224 try { | 221 try { |
225 logger.info("check start"); | 222 logger.info("check start"); |
226 indexWriter.check(); | 223 indexWriter.check(); |
227 File dirFile = new File(logDir,"check"); | 224 File dirFile = new File(logDir,"check"); |
228 IoUtils.deleteRecursively(dirFile); | 225 IoUtils.deleteRecursively(dirFile); |
229 Directory dir = FSDirectory.open(dirFile); | 226 Directory dir = FSDirectory.open(dirFile); |
230 LuceneIndexWriter checkWriter = new LuceneIndexWriter( indexWriter.luceneVersion, dir, indexWriter.goodConfig ); | 227 LuceneIndexWriter checkWriter = new LuceneIndexWriter( indexWriter.luceneVersion, dir, indexWriter.goodConfig ); |
231 playLogs(logs,checkWriter); | 228 playLogs(logReaders,checkWriter); |
232 logger.info("check lucene"); | 229 logger.info("check lucene"); |
233 IndexReader checkReader = checkWriter.openReader(); | 230 IndexReader checkReader = checkWriter.openReader(); |
234 if( sortField == null ) { | 231 if( sortField == null ) { |
235 int nCheck = checkReader.numDocs(); | 232 int nCheck = checkReader.numDocs(); |
236 int nOrig = indexReader.numDocs(); | 233 int nOrig = indexReader.numDocs(); |
378 log.writeLong(System.currentTimeMillis()); | 375 log.writeLong(System.currentTimeMillis()); |
379 log.writeByte(op); | 376 log.writeByte(op); |
380 } | 377 } |
381 | 378 |
382 public synchronized void playLogs() throws IOException { | 379 public synchronized void playLogs() throws IOException { |
383 playLogs(logs,indexWriter); | 380 playLogs( logReaders(logs), indexWriter ); |
384 } | 381 } |
385 | 382 |
386 private static void playLogs(List<LogFile> logs,LuceneIndexWriter indexWriter) throws IOException { | 383 private static List<LogInputStream> logReaders(List<LogFile> logs) throws IOException { |
384 List<LogInputStream> logReaders = new ArrayList<LogInputStream>(); | |
385 for( LogFile log : logs ) { | |
386 logReaders.add( log.input() ); | |
387 } | |
388 return logReaders; | |
389 } | |
390 | |
391 private static void playLogs(List<LogInputStream> logReaders,LuceneIndexWriter indexWriter) throws IOException { | |
387 if( numDocs(indexWriter) != 0 ) | 392 if( numDocs(indexWriter) != 0 ) |
388 throw new RuntimeException ("not empty"); | 393 throw new RuntimeException ("not empty"); |
389 for( LogFile log : logs ) { | 394 for( LogInputStream reader : logReaders ) { |
390 playLog(log,indexWriter); | 395 playLog(reader,indexWriter); |
391 } | 396 } |
392 indexWriter.commit(); | 397 indexWriter.commit(); |
393 } | 398 } |
394 | 399 |
395 private static int numDocs(LuceneIndexWriter indexWriter) throws IOException { | 400 private static int numDocs(LuceneIndexWriter indexWriter) throws IOException { |
397 int n = reader.numDocs(); | 402 int n = reader.numDocs(); |
398 reader.close(); | 403 reader.close(); |
399 return n; | 404 return n; |
400 } | 405 } |
401 | 406 |
402 private static void playLog(LogFile log,LuceneIndexWriter indexWriter) throws IOException { | 407 private static void playLog(LogInputStream in,LuceneIndexWriter indexWriter) throws IOException { |
403 LogInputStream in = log.input(); | |
404 while( in.available() > 0 ) { | 408 while( in.available() > 0 ) { |
405 playOp(in,indexWriter); | 409 playOp(in,indexWriter); |
406 } | 410 } |
411 in.close(); | |
407 } | 412 } |
408 | 413 |
409 private static void playOp(LogInputStream in,LuceneIndexWriter indexWriter) throws IOException { | 414 private static void playOp(LogInputStream in,LuceneIndexWriter indexWriter) throws IOException { |
410 in.readLong(); // time | 415 in.readLong(); // time |
411 int op = in.readByte(); | 416 int op = in.readByte(); |