comparison src/luan/modules/lucene/SupplementingConfig.java @ 1578:c922446f53aa

immutable threading
author Franklin Schmidt <fschmidt@gmail.com>
date Mon, 08 Feb 2021 14:16:19 -0700
parents 8fbcc4747091
children 46cf5137cb6b
comparison
equal deleted inserted replaced
1577:60e5c324adf9 1578:c922446f53aa
11 import goodjava.lucene.api.MultiFieldParserConfig; 11 import goodjava.lucene.api.MultiFieldParserConfig;
12 import goodjava.lucene.api.MoreFieldInfo; 12 import goodjava.lucene.api.MoreFieldInfo;
13 import luan.Luan; 13 import luan.Luan;
14 import luan.LuanFunction; 14 import luan.LuanFunction;
15 import luan.LuanTable; 15 import luan.LuanTable;
16 import luan.LuanCloner; 16 import luan.LuanMutable;
17 import luan.LuanException; 17 import luan.LuanException;
18 import luan.LuanRuntimeException; 18 import luan.LuanRuntimeException;
19 19
20 20
21 final class SupplementingConfig extends MultiFieldParserConfig { 21 final class SupplementingConfig extends MultiFieldParserConfig {
22 private final Luan luan; 22 private final Luan luan;
23 private final LuanFunction supplementer; 23 private final LuanFunction supplementer;
24 24
25 SupplementingConfig(Version luceneVersion,MultiFieldParser mfp,Luan luan,LuanFunction supplementer) { 25 SupplementingConfig(Version luceneVersion,MultiFieldParser mfp,Luan luan,LuanFunction supplementer) throws LuanException {
26 super(luceneVersion,mfp); 26 super(luceneVersion,mfp);
27 LuanCloner cloner = new LuanCloner(LuanCloner.Type.COMPLETE); 27 this.luan = new Luan(luan);
28 this.luan = (Luan)cloner.get(luan); 28 LuanMutable.makeImmutable(supplementer);
29 this.supplementer = (LuanFunction)cloner.get(supplementer); 29 this.supplementer = supplementer;
30 } 30 }
31 31
32 @Override public IndexWriterConfig newLuceneConfig() { 32 @Override public IndexWriterConfig newLuceneConfig() {
33 IndexWriterConfig luceneConfig = super.newLuceneConfig(); 33 IndexWriterConfig luceneConfig = super.newLuceneConfig();
34 SnapshotDeletionPolicy snapshotDeletionPolicy = new SnapshotDeletionPolicy(luceneConfig.getIndexDeletionPolicy()); 34 SnapshotDeletionPolicy snapshotDeletionPolicy = new SnapshotDeletionPolicy(luceneConfig.getIndexDeletionPolicy());
39 @Override public MoreFieldInfo getMoreFieldInfo(Map<String,Object> storedFields) { 39 @Override public MoreFieldInfo getMoreFieldInfo(Map<String,Object> storedFields) {
40 if( supplementer == null ) 40 if( supplementer == null )
41 return super.getMoreFieldInfo(storedFields); 41 return super.getMoreFieldInfo(storedFields);
42 try { 42 try {
43 LuanTable tbl = toTable(storedFields); 43 LuanTable tbl = toTable(storedFields);
44 tbl = (LuanTable)supplementer.call(luan,tbl); 44 synchronized(luan) {
45 tbl = (LuanTable)supplementer.call(luan,tbl);
46 }
45 if( tbl == null ) { 47 if( tbl == null ) {
46 return super.getMoreFieldInfo(storedFields); 48 return super.getMoreFieldInfo(storedFields);
47 } else { 49 } else {
48 return new MoreFieldInfo(toLucene(tbl),Collections.emptyMap()); 50 return new MoreFieldInfo(toLucene(tbl),Collections.emptyMap());
49 } 51 }