1 21 22 package org.apache.derbyTesting.functionTests.tests.store; 23 import java.sql.Connection ; 24 import java.sql.CallableStatement ; 25 import java.sql.SQLException ; 26 import org.apache.derbyTesting.functionTests.util.TestUtil; 27 28 36 37 public class OnlineBackup implements Runnable { 38 39 private String dbName; private boolean beginBackup = false; 41 private boolean endBackup = false; 42 private boolean backupFailed = false; 43 private Throwable backupError = null; 44 private String backupPath; 45 46 OnlineBackup(String dbName, String backupPath) { 47 this.dbName = dbName; 48 this.backupPath = backupPath; 49 } 50 51 58 public void run() { 59 backupFailed = false; 60 try { 61 performBackup(); 62 } catch (Throwable error) { 63 synchronized(this) { 64 backupFailed = true; 67 backupError = error; 68 notifyAll(); 69 } 70 org.apache.derby.tools.JDBCDisplayUtil.ShowException(System.out, error); 71 error.printStackTrace(System.out); 72 } 73 } 74 75 78 void performBackup() throws SQLException { 79 Connection conn = TestUtil.getConnection(dbName , ""); 80 CallableStatement backupStmt = 81 conn.prepareCall("CALL SYSCS_UTIL.SYSCS_BACKUP_DATABASE(?)"); 82 backupStmt.setString(1, backupPath); 83 84 synchronized(this) { 85 beginBackup = true; 86 endBackup = false; 87 notifyAll(); 88 } 89 90 backupStmt.execute(); 91 backupStmt.close(); 92 conn.close(); 93 94 synchronized(this) { 95 beginBackup = false; 96 endBackup = true; 97 notifyAll(); 98 } 99 } 100 101 104 105 public void waitForBackupToBegin() throws Exception { 106 synchronized(this) { 107 while (!beginBackup) { 109 if (backupFailed) 112 throw new Exception ("BACKUP FAILED:" + 113 backupError.getMessage()); 114 else 115 wait(); 116 } 117 } 118 } 119 120 123 public void waitForBackupToEnd() throws Exception { 124 synchronized(this) { 125 if (!endBackup) { 126 if (!beginBackup) { 128 System.out.println("BACKUP IS NOT STARTED BY THE TEST YET"); 129 } else { 130 131 while (!endBackup) 133 { 134 if (backupFailed) 137 throw new Exception ("BACKUP FAILED:" + 138 backupError.getMessage()); 139 else 140 wait(); 141 } 142 } 143 } 144 145 } 146 } 147 148 153 public synchronized boolean isRunning() { 154 return beginBackup; 155 } 156 157 161 public void createFromBackup(String newDbName) throws SQLException { 162 163 Connection conn = TestUtil.getConnection(newDbName, 164 "createFrom=" + 165 backupPath + "/" + 166 dbName); 167 conn.close(); 168 169 } 170 171 172 175 public void restoreFromBackup() throws SQLException { 176 177 Connection conn = TestUtil.getConnection(dbName, 178 "restoreFrom=" + 179 backupPath + "/" + 180 dbName); 181 182 conn.close(); 183 } 184 } 185 | Popular Tags |