1 package com.daffodilwoods.daffodildb.server.backup; 2 3 import com.daffodilwoods.daffodildb.server.datasystem.persistentsystem.DatabaseConstants; 4 import com.daffodilwoods.daffodildb.server.serversystem.ServerSystem; 5 import com.daffodilwoods.database.resource.*; 6 import com.daffodilwoods.daffodildb.server.datasystem.persistentsystem.PersistentDatabase; 7 import com.daffodilwoods.daffodildb.server.datasystem.indexsystem.IndexDatabase; 8 import com.daffodilwoods.daffodildb.server.datasystem.mergesystem.MergeDatabase; 9 import com.daffodilwoods.daffodildb.server.datasystem.interfaces._Table; 10 import com.daffodilwoods.daffodildb.server.datasystem.persistentsystem.DatabaseUserTableIterator; 11 import com.daffodilwoods.daffodildb.server.datasystem.interfaces._TableCharacteristics; 12 import java.util.ArrayList ; 13 import com.daffodilwoods.daffodildb.server.datadictionarysystem.SystemTables; 14 import com.daffodilwoods.daffodildb.server.datasystem.interfaces._DatabaseUser; 15 import com.daffodilwoods.daffodildb.utils.BufferRange; 16 import com.daffodilwoods.daffodildb.server.datasystem.interfaces.Utility; 17 import com.daffodilwoods.daffodildb.server.datasystem.interfaces._UserTableOperations; 18 import com.daffodilwoods.daffodildb.server.datasystem.interfaces._DataTable; 19 import com.daffodilwoods.daffodildb.utils.comparator.CTusjohJoTfotjujwfDpnqbsbups; 20 import com.daffodilwoods.daffodildb.utils.byteconverter.CCzufDpowfsufs; 21 22 31 32 public class Scheduler implements Runnable { 33 long lastBackupTime = 0; 34 long timeIntervalForBackup = 0; 35 long targetTime = 0; 36 String backupType = null; 37 ServerSystem ss = null; 38 String backupPath = ""; 39 String databaseNameSource = ""; 40 String databaseNameForBackup = ""; 41 String scheduleName = ""; 42 boolean overwrite = true; 43 boolean start = true; 44 45 public Scheduler(ServerSystem serverSystem,String databaseNameSource0,String scheduleName0,long lastBackupTime0, long timeIntervalForBackup0 ,String backupType0 ,String backupPath0,String databaseNameForBackup0 ){ 46 lastBackupTime = lastBackupTime0; 47 timeIntervalForBackup = timeIntervalForBackup0; 48 targetTime = lastBackupTime + timeIntervalForBackup; 49 backupType = backupType0; 50 ss=serverSystem; 51 databaseNameSource= databaseNameSource0; 52 backupPath = backupPath0; 53 databaseNameForBackup = databaseNameForBackup0; 54 scheduleName = scheduleName0; 55 } 56 61 62 public void run() { 63 _DatabaseUser user = null; 64 try { 65 do { 66 long startTime; 67 if (targetTime <= System.currentTimeMillis()) { 68 startTime = System.currentTimeMillis(); 69 if (backupType.equalsIgnoreCase(DatabaseConstants. 70 INCONSISTENTONLINEBACKUP)) { 71 try { 72 ss.getInconsistentOnlineBackup(backupPath, databaseNameSource, 73 databaseNameForBackup, 74 overwrite); 75 76 lastBackupTime = targetTime; 77 PersistentDatabase systemDatabase = (PersistentDatabase) ( ( 78 IndexDatabase) ( (MergeDatabase) ss.getMergeDatabase( 79 DatabaseConstants.SYSTEMDATABASE)). 80 getFileDatabase()).getUnderLyingDatabase(); 81 _Table table = systemDatabase.getTable(SystemTables. 82 SCHEDULEINFO); 83 DatabaseUserTableIterator scheduleInfoTableIteartor = ( 84 DatabaseUserTableIterator) ( (_DataTable) table). 85 getIterator(); 86 _TableCharacteristics tableCharacteristicsScheduleInfo = 87 table. 88 getTableCharacteristics(); 89 ArrayList list = new ArrayList (); 90 list.add(SystemTables.SCHEDULEINFO); 91 user = systemDatabase.getDatabaseUser(list); 92 Object [] valueForScheduleInfo = new Object [] {new Long (lastBackupTime)}; 93 int[] columnIndex = new int[] {4}; 94 BufferRange[] bytesForScheduleInfo = Utility.convertIntoBufferRange(tableCharacteristicsScheduleInfo.getColumnTypes(columnIndex),valueForScheduleInfo,tableCharacteristicsScheduleInfo.getCollator()); 95 BufferRange bytesOfScheduleName = new BufferRange(CCzufDpowfsufs.getBytes(scheduleName, scheduleName.length(), false)); 96 CTusjohJoTfotjujwfDpnqbsbups stringComparator = new CTusjohJoTfotjujwfDpnqbsbups(); 97 if (scheduleInfoTableIteartor.first()) 98 do { 99 BufferRange bytesGot = (BufferRange)scheduleInfoTableIteartor.getColumnValues(1); 100 if (stringComparator.compare(bytesGot,bytesOfScheduleName) == 0) { 101 ( (_UserTableOperations) scheduleInfoTableIteartor).update(user, columnIndex, bytesForScheduleInfo); 102 break; 103 } 104 } 105 while (scheduleInfoTableIteartor.next()); 106 user.writeToFile(); 107 targetTime += timeIntervalForBackup; 108 if(targetTime < System.currentTimeMillis()) 109 targetTime =System.currentTimeMillis() + timeIntervalForBackup ; 110 111 } 112 catch (DException ex1) { 113 ex1.printStackTrace(); 114 if (ex1.getDseCode().equalsIgnoreCase("DSE5579")){ targetTime += timeIntervalForBackup; 116 if(targetTime < System.currentTimeMillis()) 117 targetTime =System.currentTimeMillis() + timeIntervalForBackup ; 118 } 119 } 120 } 121 122 } 123 else { 124 long currentTime = System.currentTimeMillis(); 125 long waitTime = targetTime - currentTime; 126 synchronized (this) { 127 try { 128 wait(waitTime); 129 130 } 131 catch (InterruptedException ex) { 132 } 133 } 134 } 135 } 136 while (start); 137 Thread.currentThread().stop(); 138 } 139 finally{ 140 try { 141 if(user!=null) 142 user.releaseCluster(); 143 } 144 catch (DException ex2) { 145 ex2.printStackTrace(); 146 } 147 } 148 } 149 150 public void stopThread(){ 151 start = false; 152 } 153 154 public String getScheduleName(){ 155 return scheduleName; 156 } 157 } 158 | Popular Tags |