diff 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
line wrap: on
line diff
--- a/lucene/src/luan/modules/lucene/Lucene.luan	Mon Jul 18 05:01:38 2016 -0600
+++ b/lucene/src/luan/modules/lucene/Lucene.luan	Mon Jul 18 05:14:19 2016 -0600
@@ -9,8 +9,6 @@
 local String = require "luan:String.luan"
 local matches = String.matches or error()
 local Rpc = require "luan:Rpc.luan"
-local Thread = require "luan:Thread.luan"
-local synchronized = Thread.synchronized or error()
 local LuceneIndex = require "java:luan.modules.lucene.LuceneIndex"
 local NumberFieldParser = require "java:luan.modules.lucene.queryparser.NumberFieldParser"
 local StringFieldParser = require "java:luan.modules.lucene.queryparser.StringFieldParser"
@@ -116,15 +114,16 @@
 	end
 
 	function index.restore(zip_file)
-		local lucene_dir = uri("file:"..index.dir)
-		local before_restore = lucene_dir.parent().child("before_restore.zip")
-		index.zip(before_restore)
-		java_index.close()
-		lucene_dir.delete()
-		zip_file.unzip(lucene_dir.parent().to_string())
-		java_index.reopen()
+		java_index.run_in_lock( function()
+			local lucene_dir = uri("file:"..index.dir)
+			local before_restore = lucene_dir.parent().child("before_restore.zip")
+			index.zip(before_restore)
+			java_index.close()
+			lucene_dir.delete()
+			zip_file.unzip(lucene_dir.parent().to_string())
+			java_index.reopen()
+		end )
 	end
-	index.restore = synchronized(index.restore)
 
 	local function multi_error()
 		error "multiple lucene instances"