comparison src/goodjava/lucene/backup/BackupIndexWriter.java @ 1690:973d3039c421

backup server checks client domain
author Franklin Schmidt <fschmidt@gmail.com>
date Sun, 12 Jun 2022 20:13:24 -0600
parents 445048f9eca7
children 1578324d2aac
comparison
equal deleted inserted replaced
1689:af22d6c120e4 1690:973d3039c421
30 30
31 31
32 public final class BackupIndexWriter extends LoggingIndexWriter { 32 public final class BackupIndexWriter extends LoggingIndexWriter {
33 private static final Logger logger = LoggerFactory.getLogger(BackupIndexWriter.class); 33 private static final Logger logger = LoggerFactory.getLogger(BackupIndexWriter.class);
34 public static String[] backupDomains; 34 public static String[] backupDomains;
35 private final String domain;
35 private final String name; 36 private final String name;
36 private final File dir; 37 private final File dir;
37 private boolean isSyncPending = false; 38 private boolean isSyncPending = false;
38 private final ExecutorService exec = Executors.newSingleThreadExecutor(); 39 private final ExecutorService exec = Executors.newSingleThreadExecutor();
39 40
40 public BackupIndexWriter(LuceneIndexWriter indexWriter,File logDir,long logTime,String name) 41 public BackupIndexWriter(LuceneIndexWriter indexWriter,File logDir,long logTime,String domain,String name)
41 throws IOException 42 throws IOException
42 { 43 {
43 super(indexWriter,logDir,logTime); 44 super(indexWriter,logDir,logTime);
44 if( backupDomains == null ) 45 if( backupDomains == null )
45 throw new RuntimeException("must set backupDomains"); 46 throw new RuntimeException("must set backupDomains");
47 this.domain = domain;
46 this.name = name; 48 this.name = name;
47 File f = new File(System.getProperty("java.io.tmpdir")); 49 File f = new File(System.getProperty("java.io.tmpdir"));
48 dir = new File(f,"goodjava.lucene/"+name); 50 dir = new File(f,"goodjava.lucene/"+domain+"~"+name);
49 IoUtils.mkdirs(dir); 51 IoUtils.mkdirs(dir);
50 } 52 }
51 53
52 @Override public synchronized void close() throws IOException { 54 @Override public synchronized void close() throws IOException {
53 super.close(); 55 super.close();
138 logMap.put(log.file.getName(),log); 140 logMap.put(log.file.getName(),log);
139 } 141 }
140 for( String backupDomain : backupDomains ) { 142 for( String backupDomain : backupDomains ) {
141 RpcClient rpc = BackupServer.rpcClient(backupDomain); 143 RpcClient rpc = BackupServer.rpcClient(backupDomain);
142 try { 144 try {
143 RpcCall call = new RpcCall("login",name); 145 RpcCall call = new RpcCall("login",domain,name);
144 rpc.write(call); 146 rpc.write(call);
145 rpc.read(); 147 rpc.read();
146 call = new RpcCall("check",logInfo); 148 call = new RpcCall("check",logInfo);
147 while(true) { 149 while(true) {
148 rpc.write(call); 150 rpc.write(call);
184 for( File f : dir.listFiles() ) { 186 for( File f : dir.listFiles() ) {
185 IoUtils.delete(f); 187 IoUtils.delete(f);
186 } 188 }
187 } 189 }
188 190
189 public static BackupIndexWriter newWithRestore(LuceneIndexWriter indexWriter,File logDir,long logTime,String name) 191 public static BackupIndexWriter newWithRestore(LuceneIndexWriter indexWriter,File logDir,long logTime,String domain,String name)
190 throws IOException 192 throws IOException
191 { 193 {
192 if( !logDir.exists() ) { 194 if( !logDir.exists() ) {
193 RpcClient rpc = BackupServer.rpcClient(backupDomains[0]); 195 RpcClient rpc = BackupServer.rpcClient(backupDomains[0]);
194 try { 196 try {
195 RpcCall call; 197 RpcCall call;
196 RpcResult result; 198 RpcResult result;
197 call = new RpcCall("exists",name); 199 call = new RpcCall("exists",domain,name);
198 rpc.write(call); 200 rpc.write(call);
199 result = rpc.read(); 201 result = rpc.read();
200 boolean exists = (Boolean)result.returnValues[0]; 202 boolean exists = (Boolean)result.returnValues[0];
201 if( exists ) { 203 if( exists ) {
202 logger.error("restoring "+logDir+" from backup"); 204 logger.error("restoring "+logDir+" from backup");
203 File zip = File.createTempFile("luan_",".zip"); 205 File zip = File.createTempFile("luan_",".zip");
204 IoUtils.delete(zip); 206 IoUtils.delete(zip);
205 call = new RpcCall("login",name); 207 call = new RpcCall("login",domain,name);
206 rpc.write(call); 208 rpc.write(call);
207 rpc.read(); 209 rpc.read();
208 call = new RpcCall("zip"); 210 call = new RpcCall("zip");
209 rpc.write(call); 211 rpc.write(call);
210 result = rpc.read(); 212 result = rpc.read();
220 } catch(RpcException e) { 222 } catch(RpcException e) {
221 throw new RuntimeException(e); 223 throw new RuntimeException(e);
222 } 224 }
223 rpc.close(); 225 rpc.close();
224 } 226 }
225 return new BackupIndexWriter(indexWriter,logDir,logTime,name); 227 return new BackupIndexWriter(indexWriter,logDir,logTime,domain,name);
226 } 228 }
227 229
228 } 230 }