Mercurial Hosting > luan
changeset 1484:1fa6e8ec2d53
lucene.logging cleanup
author | Franklin Schmidt <fschmidt@gmail.com> |
---|---|
date | Sat, 25 Apr 2020 11:14:25 -0600 |
parents | 97740900c820 |
children | 6a24c8b33d6b |
files | src/goodjava/lucene/logging/LogFile.java src/goodjava/lucene/logging/LoggingIndexWriter.java |
diffstat | 2 files changed, 32 insertions(+), 78 deletions(-) [+] |
line wrap: on
line diff
--- a/src/goodjava/lucene/logging/LogFile.java Sat Apr 25 10:31:49 2020 -0600 +++ b/src/goodjava/lucene/logging/LogFile.java Sat Apr 25 11:14:25 2020 -0600 @@ -29,23 +29,24 @@ import goodjava.io.BufferedInputStream; -public class LogFile { +public class LogFile extends DataOutputStream { private static final Logger logger = LoggerFactory.getLogger(LogFile.class); public final File file; private final RandomAccessFile raf; - private final DataOutputStream out; private long end; - public LogFile(File file,String mode) throws IOException { - this.file = file; - this.raf = new RandomAccessFile(file,mode); + public static LogFile newLogFile(File file) throws IOException { + RandomAccessFile raf = new RandomAccessFile(file,"rwd"); OutputStream out = new FileOutputStream(raf.getFD()); out = new BufferedOutputStream(out); - this.out = new DataOutputStream(out); - init(); + return new LogFile(file,raf,out); } - private void init() throws IOException { + protected LogFile(File file,RandomAccessFile raf,OutputStream out) throws IOException { + super(out); + this.file = file; + this.raf = raf; + if( raf.length() == 0 ) { end = 8; raf.writeLong(end); @@ -56,21 +57,6 @@ } } - private LogFile(LogFile lf) throws IOException { - this.file = lf.file; - this.raf = new RandomAccessFile(file,"r"); - this.out = null; - this.end = lf.end; - } - - public void close() throws IOException { - raf.close(); - } - - public LogFile snapshot() throws IOException { - return new LogFile(this); - } - public String toString() { return "LogFile<" + file.getName() + ">"; } @@ -93,7 +79,7 @@ } public void commit() throws IOException { - out.flush(); + flush(); end = raf.getFilePointer(); raf.seek(0L); raf.writeLong(end); @@ -101,7 +87,7 @@ } public void rollback() throws IOException { - out.flush(); + flush(); raf.seek(end); } @@ -267,41 +253,4 @@ writeBytesRef( term.bytes() ); } - - public void writeByte(int v) throws IOException { - out.writeByte(v); - } - - public void writeInt(int v) throws IOException { - out.writeInt(v); - } - - public void writeLong(long v) throws IOException { - out.writeLong(v); - } - - public void writeFloat(float v) throws IOException { - out.writeFloat(v); - } - - public void writeDouble(double v) throws IOException { - out.writeDouble(v); - } - - public void writeBoolean(boolean v) throws IOException { - out.writeBoolean(v); - } - - public void writeUTF(String s) throws IOException { - out.writeUTF(s); - } - - public void write(byte[] b) throws IOException { - out.write(b); - } - - public void write(byte[] b, int off, int len) throws IOException { - out.write(b,off,len); - } - }
--- a/src/goodjava/lucene/logging/LoggingIndexWriter.java Sat Apr 25 10:31:49 2020 -0600 +++ b/src/goodjava/lucene/logging/LoggingIndexWriter.java Sat Apr 25 11:14:25 2020 -0600 @@ -64,7 +64,7 @@ final int n = dis.readInt(); for( int i=0; i<n; i++ ) { File file = new File( logDir, dis.readUTF() ); - logs.add( new LogFile(file,"rwd") ); + logs.add( LogFile.newLogFile(file) ); } deleteUnusedFiles(); return; @@ -119,7 +119,7 @@ do { file = new File(logDir,"_"+rnd.nextInt(100)+".log"); } while( file.exists() ); - return new LogFile(file,"rwd"); + return LogFile.newLogFile(file); } private void deleteUnusedFiles() throws IOException { @@ -162,8 +162,8 @@ throw new RuntimeException(); Directory dir = FSDirectory.open(dirFile); LuceneIndexWriter mergeWriter = new LuceneIndexWriter( indexWriter.luceneVersion, dir, indexWriter.goodConfig ); - playLog(first,mergeWriter); - playLog(second,mergeWriter); + playLog( first.input(), mergeWriter ); + playLog( second.input(), mergeWriter ); mergeWriter.commit(); LogFile merge = newLogFile(); logLucene( lastTime, merge, mergeWriter ); @@ -208,7 +208,7 @@ public void check(SortField sortField) throws IOException { IndexReader indexReader; - List<LogFile> logs; + List<LogInputStream> logReaders; synchronized(this) { if( isMerging ) { logger.warn("is merging, check aborted"); @@ -216,10 +216,7 @@ } isMerging = true; indexReader = indexWriter.openReader(); - logs = new ArrayList<LogFile>(this.logs); - int i = logs.size() - 1; - LogFile last = logs.get(i); - logs.set(i,last.snapshot()); + logReaders = logReaders(logs); } try { logger.info("check start"); @@ -228,7 +225,7 @@ IoUtils.deleteRecursively(dirFile); Directory dir = FSDirectory.open(dirFile); LuceneIndexWriter checkWriter = new LuceneIndexWriter( indexWriter.luceneVersion, dir, indexWriter.goodConfig ); - playLogs(logs,checkWriter); + playLogs(logReaders,checkWriter); logger.info("check lucene"); IndexReader checkReader = checkWriter.openReader(); if( sortField == null ) { @@ -380,14 +377,22 @@ } public synchronized void playLogs() throws IOException { - playLogs(logs,indexWriter); + playLogs( logReaders(logs), indexWriter ); } - private static void playLogs(List<LogFile> logs,LuceneIndexWriter indexWriter) throws IOException { + private static List<LogInputStream> logReaders(List<LogFile> logs) throws IOException { + List<LogInputStream> logReaders = new ArrayList<LogInputStream>(); + for( LogFile log : logs ) { + logReaders.add( log.input() ); + } + return logReaders; + } + + private static void playLogs(List<LogInputStream> logReaders,LuceneIndexWriter indexWriter) throws IOException { if( numDocs(indexWriter) != 0 ) throw new RuntimeException ("not empty"); - for( LogFile log : logs ) { - playLog(log,indexWriter); + for( LogInputStream reader : logReaders ) { + playLog(reader,indexWriter); } indexWriter.commit(); } @@ -399,11 +404,11 @@ return n; } - private static void playLog(LogFile log,LuceneIndexWriter indexWriter) throws IOException { - LogInputStream in = log.input(); + private static void playLog(LogInputStream in,LuceneIndexWriter indexWriter) throws IOException { while( in.available() > 0 ) { playOp(in,indexWriter); } + in.close(); } private static void playOp(LogInputStream in,LuceneIndexWriter indexWriter) throws IOException {