private void testConcurrentOnlineBackup() throws Exception { String fileName = getBaseDir() + "/onlineBackup.h3"; String fileNameRestore = getBaseDir() + "/onlineRestore.h3"; final MVStore s = openStore(fileName); final MVMap<Integer, byte[]> map = s.openMap("test"); final Random r = new Random(); Task t = new Task() { @Override public void call() throws Exception { while (!stop) { for (int i = 0; i < 10; i++) { map.put(i, new byte[100 * r.nextInt(100)]); } s.commit(); map.clear(); s.commit(); long len = s.getFileStore().size(); if (len > 1024 * 1024) { // slow down writing a lot Thread.sleep(200); } else if (len > 20 * 1024) { // slow down writing Thread.sleep(20); } } } }; t.execute(); for (int i = 0; i < 10; i++) { // System.out.println("test " + i); s.setReuseSpace(false); byte[] buff = readFileSlowly(s.getFileStore().getFile(), s.getFileStore().size()); s.setReuseSpace(true); FileOutputStream out = new FileOutputStream(fileNameRestore); out.write(buff); MVStore s2 = openStore(fileNameRestore); MVMap<Integer, byte[]> test = s2.openMap("test"); for (Integer k : test.keySet()) { test.get(k); } s2.close(); // let it compact Thread.sleep(10); } t.get(); s.close(); }