comparison lucene/src/luan/modules/lucene/Lucene.luan @ 756:9092e52f94eb

better synchronization for lucene restore
author Franklin Schmidt <fschmidt@gmail.com>
date Mon, 18 Jul 2016 05:14:19 -0600
parents 1a101ac9ea46
children e1dfeddfbc7b
comparison
equal deleted inserted replaced
755:ff865e954934 756:9092e52f94eb
7 local Io = require "luan:Io.luan" 7 local Io = require "luan:Io.luan"
8 local uri = Io.uri or error() 8 local uri = Io.uri or error()
9 local String = require "luan:String.luan" 9 local String = require "luan:String.luan"
10 local matches = String.matches or error() 10 local matches = String.matches or error()
11 local Rpc = require "luan:Rpc.luan" 11 local Rpc = require "luan:Rpc.luan"
12 local Thread = require "luan:Thread.luan"
13 local synchronized = Thread.synchronized or error()
14 local LuceneIndex = require "java:luan.modules.lucene.LuceneIndex" 12 local LuceneIndex = require "java:luan.modules.lucene.LuceneIndex"
15 local NumberFieldParser = require "java:luan.modules.lucene.queryparser.NumberFieldParser" 13 local NumberFieldParser = require "java:luan.modules.lucene.queryparser.NumberFieldParser"
16 local StringFieldParser = require "java:luan.modules.lucene.queryparser.StringFieldParser" 14 local StringFieldParser = require "java:luan.modules.lucene.queryparser.StringFieldParser"
17 local SaneQueryParser = require "java:luan.modules.lucene.queryparser.SaneQueryParser" 15 local SaneQueryParser = require "java:luan.modules.lucene.queryparser.SaneQueryParser"
18 local Version = require "java:org.apache.lucene.util.Version" 16 local Version = require "java:org.apache.lucene.util.Version"
114 zip_file.zip(base,t) 112 zip_file.zip(base,t)
115 end ) 113 end )
116 end 114 end
117 115
118 function index.restore(zip_file) 116 function index.restore(zip_file)
119 local lucene_dir = uri("file:"..index.dir) 117 java_index.run_in_lock( function()
120 local before_restore = lucene_dir.parent().child("before_restore.zip") 118 local lucene_dir = uri("file:"..index.dir)
121 index.zip(before_restore) 119 local before_restore = lucene_dir.parent().child("before_restore.zip")
122 java_index.close() 120 index.zip(before_restore)
123 lucene_dir.delete() 121 java_index.close()
124 zip_file.unzip(lucene_dir.parent().to_string()) 122 lucene_dir.delete()
125 java_index.reopen() 123 zip_file.unzip(lucene_dir.parent().to_string())
124 java_index.reopen()
125 end )
126 end 126 end
127 index.restore = synchronized(index.restore)
128 127
129 local function multi_error() 128 local function multi_error()
130 error "multiple lucene instances" 129 error "multiple lucene instances"
131 end 130 end
132 131