comparison src/goodjava/lucene/backup/Backup.java @ 1697:aff2309ae510

add copy_backups.luan
author Franklin Schmidt <fschmidt@gmail.com>
date Mon, 27 Jun 2022 18:36:56 -0600
parents ea7075b7afe1
children
comparison
equal deleted inserted replaced
1696:2958cf04d844 1697:aff2309ae510
24 final class Backup { 24 final class Backup {
25 private static final Logger logger = LoggerFactory.getLogger(Backup.class); 25 private static final Logger logger = LoggerFactory.getLogger(Backup.class);
26 26
27 private final File dir; 27 private final File dir;
28 private final File indexFile; 28 private final File indexFile;
29 private boolean updated = false;
29 30
30 Backup(File dir) { 31 Backup(File dir) {
31 this.dir = dir; 32 this.dir = dir;
32 this.indexFile = new File(dir,"index.json"); 33 this.indexFile = new File(dir,"index.json");
33 dir.setLastModified(System.currentTimeMillis());
34 } 34 }
35 35
36 void handle(RpcServer rpc,RpcCall call) { 36 void handle(RpcServer rpc,RpcCall call) {
37 synchronized(this) {
38 if( !updated ) {
39 dir.setLastModified(System.currentTimeMillis());
40 updated = true;
41 }
42 }
37 try { 43 try {
38 IoUtils.mkdirs(dir); 44 IoUtils.mkdirs(dir);
39 if( call.cmd.equals("zip") ) { 45 if( call.cmd.equals("zip") ) {
40 handleZip(rpc); 46 handleZip(rpc);
41 } else { 47 } else {
46 } 52 }
47 } 53 }
48 54
49 private static final RpcResult OK = new RpcResult(new Object[]{"ok"}); 55 private static final RpcResult OK = new RpcResult(new Object[]{"ok"});
50 56
51 synchronized void handle2(RpcServer rpc,RpcCall call) throws IOException { 57 private synchronized void handle2(RpcServer rpc,RpcCall call) throws IOException {
52 //logger.info(call.cmd+" "+Arrays.asList(call.args)); 58 //logger.info(call.cmd+" "+Arrays.asList(call.args));
53 String fileName = null; 59 String fileName = null;
54 if( call.cmd.equals("check") ) { 60 if( call.cmd.equals("check") ) {
55 // nothing 61 // nothing
56 } else if( call.cmd.equals("add") || call.cmd.equals("append") ) { 62 } else if( call.cmd.equals("add") || call.cmd.equals("append") ) {
123 } 129 }
124 } 130 }
125 rpc.write(result); 131 rpc.write(result);
126 } 132 }
127 133
128 void handleZip(RpcServer rpc) throws IOException { 134 private void handleZip(RpcServer rpc) throws IOException {
129 File zip = File.createTempFile("luan_",".zip"); 135 File zip = File.createTempFile("luan_",".zip");
130 IoUtils.delete(zip); 136 IoUtils.delete(zip);
131 String cmd = "zip " + zip + " *"; 137 String cmd = "zip " + zip + " *";
132 synchronized(this) { 138 synchronized(this) {
133 Process proc = Runtime.getRuntime().exec(new String[]{"bash","-c",cmd},null,dir); 139 Process proc = Runtime.getRuntime().exec(new String[]{"bash","-c",cmd},null,dir);
137 RpcResult result = new RpcResult(in,zip.length(),new Object[0]); 143 RpcResult result = new RpcResult(in,zip.length(),new Object[0]);
138 rpc.write(result); 144 rpc.write(result);
139 IoUtils.delete(zip); 145 IoUtils.delete(zip);
140 } 146 }
141 147
148 synchronized void copyTo(File dirTo) throws IOException {
149 IoUtils.mkdirs(dirTo);
150 for( File f : dir.listFiles() ) {
151 String name = f.getName();
152 File to = new File(dirTo,name);
153 if( name.equals("index.json") ) {
154 IoUtils.copy(f,to);
155 } else {
156 IoUtils.link(f,to);
157 }
158 }
159 }
160
142 } 161 }