comparison src/goodjava/lucene/backup/BackupIndexWriter.java @ 1674:af18eacf187c

automatic restore
author Franklin Schmidt <fschmidt@gmail.com>
date Sun, 29 May 2022 23:38:34 -0600
parents 1b9f9fdb3b41
children 445048f9eca7
comparison
equal deleted inserted replaced
1673:1b9f9fdb3b41 1674:af18eacf187c
1 package goodjava.lucene.backup; 1 package goodjava.lucene.backup;
2 2
3 import java.io.File; 3 import java.io.File;
4 import java.io.InputStream; 4 import java.io.InputStream;
5 import java.io.OutputStream;
6 import java.io.BufferedOutputStream;
7 import java.io.FileOutputStream;
5 import java.io.IOException; 8 import java.io.IOException;
6 import java.net.Socket; 9 import java.net.Socket;
7 import java.net.ConnectException; 10 import java.net.ConnectException;
8 import java.util.List; 11 import java.util.List;
9 import java.util.ArrayList; 12 import java.util.ArrayList;
179 for( File f : dir.listFiles() ) { 182 for( File f : dir.listFiles() ) {
180 IoUtils.delete(f); 183 IoUtils.delete(f);
181 } 184 }
182 } 185 }
183 186
187 public static BackupIndexWriter newWithRestore(LuceneIndexWriter indexWriter,File logDir,long logTime,String name)
188 throws IOException
189 {
190 if( !logDir.exists() ) {
191 RpcClient rpc = BackupServer.rpcClient(backupDomains[0]);
192 try {
193 RpcCall call;
194 RpcResult result;
195 call = new RpcCall("exists",name);
196 rpc.write(call);
197 result = rpc.read();
198 boolean exists = (Boolean)result.returnValues[0];
199 if( exists ) {
200 logger.error("restoring "+logDir+" from backup");
201 File zip = File.createTempFile("luan_",".zip");
202 IoUtils.delete(zip);
203 call = new RpcCall("login",name);
204 rpc.write(call);
205 rpc.read();
206 call = new RpcCall("zip");
207 rpc.write(call);
208 result = rpc.read();
209 OutputStream out = new BufferedOutputStream(new FileOutputStream(zip));
210 IoUtils.copyAll(result.in,out);
211 out.close();
212 IoUtils.mkdirs(logDir);
213 String cmd = "unzip " + zip;
214 Process proc = Runtime.getRuntime().exec(cmd,null,logDir);
215 IoUtils.waitFor(proc);
216 IoUtils.delete(zip);
217 }
218 } catch(RpcException e) {
219 throw new RuntimeException(e);
220 }
221 rpc.close();
222 }
223 return new BackupIndexWriter(indexWriter,logDir,logTime,name);
224 }
225
184 } 226 }