Mercurial Hosting > luan
comparison src/goodjava/lucene/backup/BackupServer.java @ 1697:aff2309ae510
add copy_backups.luan
| author | Franklin Schmidt <fschmidt@gmail.com> |
|---|---|
| date | Mon, 27 Jun 2022 18:36:56 -0600 |
| parents | 973d3039c421 |
| children | 2dbcc8360a3e |
comparison
equal
deleted
inserted
replaced
| 1696:2958cf04d844 | 1697:aff2309ae510 |
|---|---|
| 90 } | 90 } |
| 91 String name = (String)args[1]; | 91 String name = (String)args[1]; |
| 92 return name==null ? domain : domain + "~" + name; | 92 return name==null ? domain : domain + "~" + name; |
| 93 } | 93 } |
| 94 | 94 |
| 95 private Backup getBackup(String name) { | |
| 96 synchronized(backups) { | |
| 97 Backup backup = backups.get(name); | |
| 98 if( backup == null ) { | |
| 99 backup = new Backup( new File(backupDir,name) ); | |
| 100 backups.put(name,backup); | |
| 101 } | |
| 102 return backup; | |
| 103 } | |
| 104 } | |
| 105 | |
| 95 private void handle(Socket socket) { | 106 private void handle(Socket socket) { |
| 96 RpcServer rpc = new RpcServer(socket); | 107 RpcServer rpc = new RpcServer(socket); |
| 97 Backup backup = null; | 108 Backup backup = null; |
| 98 while( !rpc.isClosed() ) { | 109 while( !rpc.isClosed() ) { |
| 99 RpcCall call = rpc.read(); | 110 RpcCall call = rpc.read(); |
| 104 if( name==null ) return; | 115 if( name==null ) return; |
| 105 rpc.write( new RpcResult(new Object[]{new File(backupDir,name).exists()}) ); | 116 rpc.write( new RpcResult(new Object[]{new File(backupDir,name).exists()}) ); |
| 106 } else if( call.cmd.equals("login") ) { | 117 } else if( call.cmd.equals("login") ) { |
| 107 String name = getName(rpc,call.args); | 118 String name = getName(rpc,call.args); |
| 108 if( name==null ) return; | 119 if( name==null ) return; |
| 109 synchronized(backups) { | 120 backup = getBackup(name); |
| 110 backup = backups.get(name); | |
| 111 if( backup == null ) { | |
| 112 backup = new Backup(new File(backupDir,name)); | |
| 113 backups.put(name,backup); | |
| 114 } | |
| 115 } | |
| 116 rpc.write(Rpc.OK); | 121 rpc.write(Rpc.OK); |
| 117 } else if( backup != null ) { | 122 } else if( backup != null ) { |
| 118 backup.handle(rpc,call); | 123 backup.handle(rpc,call); |
| 124 } else if( call.cmd.equals("copy") ) { | |
| 125 String dirName = (String)call.args[0]; | |
| 126 copy(new File(dirName)); | |
| 127 rpc.write(Rpc.OK); | |
| 119 } else { | 128 } else { |
| 120 rpc.write( new RpcException("login expected") ); | 129 rpc.write( new RpcException("login expected") ); |
| 121 rpc.close(); | 130 rpc.close(); |
| 122 return; | 131 return; |
| 123 } | 132 } |
| 133 } | |
| 134 } | |
| 135 | |
| 136 private void copy(File dir) { | |
| 137 try { | |
| 138 IoUtils.deleteRecursively(dir); | |
| 139 IoUtils.mkdirs(dir); | |
| 140 for( File f : backupDir.listFiles() ) { | |
| 141 if( f.isDirectory() && new File(f,"index.json").exists() ) { | |
| 142 String name = f.getName(); | |
| 143 Backup backup = getBackup(name); | |
| 144 backup.copyTo( new File(dir,name) ); | |
| 145 } | |
| 146 } | |
| 147 } catch(IOException e) { | |
| 148 throw new RuntimeException(e); | |
| 124 } | 149 } |
| 125 } | 150 } |
| 126 | 151 |
| 127 | 152 |
| 128 // for client | 153 // for client |
| 136 ((SSLSocket)socket).setEnabledCipherSuites(BackupServer.cipherSuites); | 161 ((SSLSocket)socket).setEnabledCipherSuites(BackupServer.cipherSuites); |
| 137 } | 162 } |
| 138 return new RpcClient(socket); | 163 return new RpcClient(socket); |
| 139 } | 164 } |
| 140 | 165 |
| 166 public static void copyBackupTo(String dirName) throws IOException, RpcException { | |
| 167 RpcClient rpc = BackupServer.rpcClient("localhost"); | |
| 168 rpc.write( new RpcCall("copy",dirName) ); | |
| 169 RpcResult result = rpc.read(); | |
| 170 rpc.close(); | |
| 171 } | |
| 172 | |
| 141 } | 173 } |
