Mercurial Hosting > luan
diff src/luan/modules/lucene/LuceneIndex.java @ 1398:67c0e47b5be3
more lucene
author | Franklin Schmidt <fschmidt@gmail.com> |
---|---|
date | Wed, 11 Sep 2019 15:48:49 -0600 |
parents | 0dc9837c16be |
children | 38a1c1b4279a |
line wrap: on
line diff
--- a/src/luan/modules/lucene/LuceneIndex.java Wed Sep 11 01:31:21 2019 -0600 +++ b/src/luan/modules/lucene/LuceneIndex.java Wed Sep 11 15:48:49 2019 -0600 @@ -85,7 +85,7 @@ import luan.lib.logging.LoggerFactory; -public final class LuceneIndex implements Closeable { +public final class LuceneIndex { private static final Logger sysLogger = LoggerFactory.getLogger(LuceneIndex.class); private static Map<String,Reference<LuceneIndex>> indexes = new HashMap<String,Reference<LuceneIndex>>(); @@ -98,8 +98,12 @@ Reference<LuceneIndex> ref = indexes.get(key); if( ref != null ) { LuceneIndex li = ref.get(); - if( li != null ) + if( li != null ) { + Object version = options.get("version"); + if( version==null || version.equals(li.version) ) + return li; li.closeWriter(); + } } LuceneIndex li = new LuceneIndex(luan,indexDir,options); indexes.put(key, new WeakReference<LuceneIndex>(li)); @@ -107,12 +111,13 @@ } } - private static final Version version = Version.LUCENE_4_9; + private static final Version luceneVersion = Version.LUCENE_4_9; private static final String FLD_NEXT_ID = "nextId"; public static final StringFieldParser STRING_FIELD_PARSER = new StringFieldParser(new KeywordAnalyzer()); - public static final StringFieldParser ENGLISH_FIELD_PARSER = new StringFieldParser(new EnglishAnalyzer(version)); + public static final StringFieldParser ENGLISH_FIELD_PARSER = new StringFieldParser(new EnglishAnalyzer(luceneVersion)); private final Logger luanLogger; + private final Object version; private final ReentrantLock writeLock = new ReentrantLock(); private final File indexDir; @@ -129,9 +134,6 @@ private AtomicInteger writeCounter = new AtomicInteger(); private Set<String> indexOnly = new HashSet<String>(); - - private boolean isClosed = false; - private final Exception created = new Exception("created"); private final FieldParser defaultFieldParser; private final String[] defaultFields; @@ -142,6 +144,7 @@ throws LuanException, IOException, ClassNotFoundException, SQLException { Map map = options.asMap(); + this.version = map.remove("version"); FieldParser defaultFieldParser = (FieldParser)map.remove("default_type"); LuanTable defaultFieldsTbl = Utils.removeTable(map,"default_fields"); String[] defaultFields = defaultFieldsTbl==null ? null : (String[])defaultFieldsTbl.asList().toArray(new String[0]); @@ -180,19 +183,10 @@ */ } } - luan.onClose(this); - } - - protected void finalize() throws Throwable { - if( !isClosed ) { - sysLogger.error("not closed",created); - close(); - } - super.finalize(); } public boolean reopen() throws IOException { - IndexWriterConfig conf = new IndexWriterConfig(version,analyzer); + IndexWriterConfig conf = new IndexWriterConfig(luceneVersion,analyzer); snapshotDeletionPolicy = new SnapshotDeletionPolicy(conf.getIndexDeletionPolicy()); conf.setIndexDeletionPolicy(snapshotDeletionPolicy); fsDir = FSDirectory.open(indexDir); @@ -434,26 +428,22 @@ return writer.getDirectory().toString(); } - public synchronized void close() throws IOException { - try { - doClose(); - } catch(SQLException e) { - throw new RuntimeException(e); - } - isClosed = true; + protected void finalize() throws Throwable { + close(); + super.finalize(); } - public void doClose() throws IOException, SQLException { - writer.close(); + public void close() throws IOException, SQLException { + closeWriter(); reader.close(); - if( postgresBackup != null ) - postgresBackup.close(); } - private void closeWriter() throws IOException { + private void closeWriter() throws IOException, SQLException { writeLock.lock(); try { writer.close(); + if( postgresBackup != null ) + postgresBackup.close(); } finally { writeLock.unlock(); } @@ -860,7 +850,6 @@ if( postgresBackup!=null && wasCreated && !postgresBackup.wasCreated ) { luanLogger.error("restoring from postgres"); force_restore_from_postgres(); - wasCreated = false; } } @@ -882,6 +871,7 @@ saveNextId(nextId); ok = true; writer.commit(); + wasCreated = false; } finally { if( !ok ) { writer.rollback();