Modified: uima/sandbox/uima-ducc/trunk/uima-ducc-transport/src/main/java/org/apache/uima/ducc/transport/event/common/IDuccPerWorkItemStatistics.java URL: http://svn.apache.org/viewvc/uima/sandbox/uima-ducc/trunk/uima-ducc-transport/src/main/java/org/apache/uima/ducc/transport/event/common/IDuccPerWorkItemStatistics.java?rev=1703203&r1=1703202&r2=1703203&view=diff ============================================================================== --- uima/sandbox/uima-ducc/trunk/uima-ducc-transport/src/main/java/org/apache/uima/ducc/transport/event/common/IDuccPerWorkItemStatistics.java (original) +++ uima/sandbox/uima-ducc/trunk/uima-ducc-transport/src/main/java/org/apache/uima/ducc/transport/event/common/IDuccPerWorkItemStatistics.java Tue Sep 15 14:31:24 2015 @@ -26,4 +26,5 @@ public interface IDuccPerWorkItemStatist public double getMin(); public double getMean(); public double getStandardDeviation(); + public void setStandardDeviation(double s); }
Modified: uima/sandbox/uima-ducc/trunk/uima-ducc-transport/src/main/java/org/apache/uima/ducc/transport/event/common/history/HistoryFactory.java URL: http://svn.apache.org/viewvc/uima/sandbox/uima-ducc/trunk/uima-ducc-transport/src/main/java/org/apache/uima/ducc/transport/event/common/history/HistoryFactory.java?rev=1703203&r1=1703202&r2=1703203&view=diff ============================================================================== --- uima/sandbox/uima-ducc/trunk/uima-ducc-transport/src/main/java/org/apache/uima/ducc/transport/event/common/history/HistoryFactory.java (original) +++ uima/sandbox/uima-ducc/trunk/uima-ducc-transport/src/main/java/org/apache/uima/ducc/transport/event/common/history/HistoryFactory.java Tue Sep 15 14:31:24 2015 @@ -18,15 +18,62 @@ */ package org.apache.uima.ducc.transport.event.common.history; +import org.apache.uima.ducc.common.main.DuccService; +import org.apache.uima.ducc.common.persistence.services.IStateServices; +import org.apache.uima.ducc.common.utils.DuccLogger; + public class HistoryFactory { - private static IHistoryPersistenceManager instance = new HistoryPersistenceManager(); + private static IHistoryPersistenceManager instance = null; //new HistoryPersistenceManager(); - public static IHistoryPersistenceManager getInstance() { - return instance; + public static IHistoryPersistenceManager getInstance(String callerClass) + { + if ( instance != null ) return instance; + + String methodName = "getInstance"; + + // log4j logging annoyance. We require the caller to give us its base package so + // we can configure a logger that writes to the right appender + int ndx = callerClass.lastIndexOf("."); + String stem = callerClass.substring(0, ndx); + + String clname = System.getProperty("ducc.job.history.impl"); + + if ( clname == null ) { + DuccLogger logger = DuccService.getDuccLogger(); + logger.error(methodName, null, "Job history class is not configured."); + instance = new NullHistoryManager(); + return instance; + } + + ndx = clname.lastIndexOf("."); + String clfile = clname.substring(ndx+1); + // + // We try to construct the persistence object. If it fails, we return a + // "null" object conforming to the interface but doing nothing to hopefully + // reduce NPEs. + // + DuccLogger logger = DuccLogger.getLogger(stem + "." + clfile, "DB"); // get the component logger + + // + // We try to construct the persistence object. If it fails, we return a + // "null" object conforming to the interface but doing nothing to hopefully + // reduce NPEs. + // + + try { + @SuppressWarnings("unchecked") + Class<IStateServices> iss = (Class<IStateServices>) Class.forName(clname); + instance = (IHistoryPersistenceManager) iss.newInstance(); + instance.setLogger(logger); + } catch ( Throwable t ) { + logger.error(methodName, null, "Cannot instantiate service persistence class", clname, ":", t); + instance = new NullHistoryManager(); + } + return instance; } } Modified: uima/sandbox/uima-ducc/trunk/uima-ducc-transport/src/main/java/org/apache/uima/ducc/transport/event/common/history/HistoryPersistenceManager.java URL: http://svn.apache.org/viewvc/uima/sandbox/uima-ducc/trunk/uima-ducc-transport/src/main/java/org/apache/uima/ducc/transport/event/common/history/HistoryPersistenceManager.java?rev=1703203&r1=1703202&r2=1703203&view=diff ============================================================================== --- uima/sandbox/uima-ducc/trunk/uima-ducc-transport/src/main/java/org/apache/uima/ducc/transport/event/common/history/HistoryPersistenceManager.java (original) +++ uima/sandbox/uima-ducc/trunk/uima-ducc-transport/src/main/java/org/apache/uima/ducc/transport/event/common/history/HistoryPersistenceManager.java Tue Sep 15 14:31:24 2015 @@ -25,7 +25,10 @@ import java.io.IOException; import java.io.ObjectInputStream; import java.io.ObjectOutputStream; import java.util.ArrayList; +import java.util.Collections; +import java.util.List; import java.util.ListIterator; +import java.util.Map; import org.apache.uima.ducc.common.IDuccEnv; import org.apache.uima.ducc.common.main.DuccService; @@ -33,6 +36,7 @@ import org.apache.uima.ducc.common.utils import org.apache.uima.ducc.common.utils.IOHelper; import org.apache.uima.ducc.common.utils.Utils; import org.apache.uima.ducc.common.utils.id.DuccId; +import org.apache.uima.ducc.transport.event.common.DuccWorkMap; import org.apache.uima.ducc.transport.event.common.IDuccWorkJob; import org.apache.uima.ducc.transport.event.common.IDuccWorkReservation; import org.apache.uima.ducc.transport.event.common.IDuccWorkService; @@ -40,353 +44,551 @@ import org.apache.uima.ducc.transport.ev public class HistoryPersistenceManager implements IHistoryPersistenceManager { - - // private static final DuccLogger logger = DuccLoggerComponents.getTrLogger(HistoryPersistenceManager.class.getName()); - private static final DuccLogger logger = DuccService.getDuccLogger(HistoryPersistenceManager.class.getName()); - - private String historyDirectory_jobs = IDuccEnv.DUCC_HISTORY_JOBS_DIR; - private String historyDirectory_reservations = IDuccEnv.DUCC_HISTORY_RESERVATIONS_DIR; - private String historyDirectory_services = IDuccEnv.DUCC_HISTORY_SERVICES_DIR; - - private String dwj = "dwj"; - private String dwr = "dwr"; - private String dws = "dws"; - - private enum Verbosity { - QUIET, - SPEAK, - } - - HistoryPersistenceManager() { - mkdirs(); - } - - private void mkdirs() { - IOHelper.mkdirs(historyDirectory_jobs); - IOHelper.mkdirs(historyDirectory_reservations); - IOHelper.mkdirs(historyDirectory_services); - } - - private String normalize(String id) { - String retVal = id; - return retVal; - } - - - public void jobSaveConditional(IDuccWorkJob duccWorkJob) throws IOException { - String id = normalize(""+duccWorkJob.getDuccId().getFriendly()); - String fileName = historyDirectory_jobs+File.separator+id+"."+dwj; - File file = new File(fileName); - if(!file.exists()) { - jobSave(duccWorkJob); - } - } - - - public void jobSave(IDuccWorkJob duccWorkJob) throws IOException { - String id = normalize(""+duccWorkJob.getDuccId().getFriendly()); - String fileName = historyDirectory_jobs+File.separator+id+"."+dwj; - FileOutputStream fos = null; - ObjectOutputStream out = null; - fos = new FileOutputStream(fileName); - out = new ObjectOutputStream(fos); - out.writeObject(duccWorkJob); - out.close(); - } - - public IDuccWorkJob jobRestore(String fileName) { - return jobRestore(fileName, Verbosity.SPEAK); - } - - private IDuccWorkJob jobRestore(String fileName, Verbosity level) { - String methodName = "jobRestore"; - IDuccWorkJob job = null; + + // private static final DuccLogger logger = DuccLoggerComponents.getTrLogger(HistoryPersistenceManager.class.getName()); + private DuccLogger logger = DuccService.getDuccLogger(HistoryPersistenceManager.class.getName()); + + private String historyDirectory_jobs = IDuccEnv.DUCC_HISTORY_JOBS_DIR; + private String historyDirectory_reservations = IDuccEnv.DUCC_HISTORY_RESERVATIONS_DIR; + private String historyDirectory_services = IDuccEnv.DUCC_HISTORY_SERVICES_DIR; + + private String dwj = "dwj"; + private String dwr = "dwr"; + private String dws = "dws"; + + private enum Verbosity { + QUIET, + SPEAK, + } + + HistoryPersistenceManager() { + mkdirs(); + } + + public void setLogger(DuccLogger logger) + { + this.logger = logger; + } + + private void mkdirs() { + IOHelper.mkdirs(historyDirectory_jobs); + IOHelper.mkdirs(historyDirectory_reservations); + IOHelper.mkdirs(historyDirectory_services); + } + + private String normalize(String id) { + String retVal = id; + return retVal; + } + + public void saveJob(IDuccWorkJob duccWorkJob) throws IOException { + String id = normalize(""+duccWorkJob.getDuccId().getFriendly()); + String fileName = historyDirectory_jobs+File.separator+id+"."+dwj; + FileOutputStream fos = null; + ObjectOutputStream out = null; + fos = new FileOutputStream(fileName); + out = new ObjectOutputStream(fos); + out.writeObject(duccWorkJob); + out.close(); + } + + public List<IDuccWorkJob> restoreJobs(long max) + throws Exception + { + String methodName = "restoreJobs"; + // Find the 'max' most current jobs. + // How: list all files; if ends with 'dwj' the first part is the duccid. + // put all the duccids into an array and sort it, (ascending so we don't need a comparator) + // Starting at the end, call restoreJob(Long) to get the file. + // + List<Long> allJobs = new ArrayList<Long>(); + File folder = new File(historyDirectory_jobs); + File[] listOfFiles = folder.listFiles(); + if(listOfFiles != null) { + for (int i = 0; i < listOfFiles.length; i++) { + if (listOfFiles[i].isFile()) { + String name = listOfFiles[i].getName(); + if(name.endsWith("."+dwj)) { + int ndx = name.indexOf("."); + try { + allJobs.add(Long.parseLong(name.substring(0, ndx))); + } catch ( NumberFormatException e ) { + logger.warn(methodName, null, "Job file", name, ": cannot extract ducc id. Not restored."); + } + + } + } + } + } + + max = Math.min(allJobs.size(), max); + Collections.sort(allJobs); + List<IDuccWorkJob> ret = new ArrayList<IDuccWorkJob>((int)max); + for ( int i = allJobs.size()-1; i >= 0; i-- ) { + ret.add(restoreJob(allJobs.get(i))); + } + + return ret; + } + + public IDuccWorkJob restoreJob(long duccid) + throws Exception + { + //String methodName = "jobRestore"; + IDuccWorkJob job = null; + String fileName = ""+duccid + "." + dwj; + FileInputStream fis = null; + ObjectInputStream in = null; + fis = new FileInputStream(historyDirectory_jobs+File.separator+fileName); + in = new ObjectInputStream(fis); + job = (IDuccWorkJob) in.readObject(); + in.close(); + return job; + } + + // public IDuccWorkJob jobRestore(String fileName) { + // return jobRestore(fileName, Verbosity.SPEAK); + // } + + // private IDuccWorkJob jobRestore(String fileName, Verbosity level) { + // String methodName = "jobRestore"; + // IDuccWorkJob job = null; + // try { + // logger.trace(methodName, null, "restore:"+fileName); + // FileInputStream fis = null; + // ObjectInputStream in = null; + // fis = new FileInputStream(historyDirectory_jobs+File.separator+fileName); + // in = new ObjectInputStream(fis); + // job = (IDuccWorkJob) in.readObject(); + // in.close(); + // } + // catch(Exception e) { + // switch(level) { + // case QUIET: + // break; + // case SPEAK: + // logger.warn(methodName, null, "unable to restore:"+fileName, e); + // break; + // } + // } + // return job; + // } + + + // public IDuccWorkJob jobRestore(DuccId duccId) { + // String fileName = duccId.getFriendly()+"."+dwj; + // return jobRestore(fileName, Verbosity.QUIET); + // } + + + // public ArrayList<Long> jobList() { return null; } +// public ArrayList<String> jobList() { +// ArrayList<String> retVal = new ArrayList<String>(); +// File folder = new File(historyDirectory_jobs); +// File[] listOfFiles = folder.listFiles(); +// if(listOfFiles != null) { +// for (int i = 0; i < listOfFiles.length; i++) { +// if (listOfFiles[i].isFile()) { +// String name = listOfFiles[i].getName(); +// if(name.endsWith("."+dwj)) { +// retVal.add(name); +// } +// } +// } +// } +// return retVal; +// } + + + // public ArrayList<IDuccWorkJob> jobRestore() throws IOException, ClassNotFoundException { + // ArrayList<IDuccWorkJob> retVal = new ArrayList<IDuccWorkJob>(); + // ArrayList<String> jobFileNames = jobList(); + // ListIterator<String> listIterator = jobFileNames.listIterator(); + // while(listIterator.hasNext()) { + // String fileName = listIterator.next(); + // IDuccWorkJob job = jobRestore(fileName); + // if(job != null) { + // retVal.add(job); + // } + // } + // return retVal; + // } + + // public ArrayList<IDuccWorkJob> jobRestore() throws IOException, ClassNotFoundException + // { + // return null; + // } + + +// public void reservationSaveConditional(IDuccWorkReservation duccWorkReservation) throws IOException { +// String id = normalize(""+duccWorkReservation.getDuccId().getFriendly()); +// String fileName = historyDirectory_jobs+File.separator+id+"."+dwr; +// File file = new File(fileName); +// if(!file.exists()) { +// reservationSave(duccWorkReservation); +// } +// } + + + public void saveReservation(IDuccWorkReservation duccWorkReservation) + throws Exception + { + String id = normalize(""+duccWorkReservation.getDuccId().getFriendly()); + String fileName = historyDirectory_reservations+File.separator+id+"."+dwr; + FileOutputStream fos = null; + ObjectOutputStream out = null; + fos = new FileOutputStream(fileName); + out = new ObjectOutputStream(fos); + out.writeObject(duccWorkReservation); + out.close(); + } + + + public IDuccWorkReservation restoreReservation(long duccid) + throws Exception + { + //String methodName = "reservationRestore"; + IDuccWorkReservation reservation = null; + FileInputStream fis = null; + ObjectInputStream in = null; + String fileName = ""+duccid + "." + dwr; + + fis = new FileInputStream(historyDirectory_reservations+File.separator+fileName); + in = new ObjectInputStream(fis); + reservation = (IDuccWorkReservation) in.readObject(); + in.close(); + return reservation; + } + + public List<IDuccWorkReservation> restoreReservations(long max) + throws Exception + { + String methodName = "restoreReservations"; + // Find the 'max' most current jobs. + // How: list all files; if ends with 'dwj' the first part is the duccid. + // put all the duccids into an array and sort it, (ascending so we don't need a comparator) + // Starting at the end, call restoreJob(Long) to get the file. + // + List<Long> allReservations = new ArrayList<Long>(); + File folder = new File(historyDirectory_reservations); + File[] listOfFiles = folder.listFiles(); + if(listOfFiles != null) { + for (int i = 0; i < listOfFiles.length; i++) { + if (listOfFiles[i].isFile()) { + String name = listOfFiles[i].getName(); + if(name.endsWith("."+dwr)) { + int ndx = name.indexOf("."); + try { + allReservations.add(Long.parseLong(name.substring(0, ndx))); + } catch ( NumberFormatException e ) { + logger.warn(methodName, null, "Reservation file", name, ": cannot extract ducc id. Not restored."); + } + + } + } + } + } + + max = Math.min(allReservations.size(), max); + Collections.sort(allReservations); + List<IDuccWorkReservation> ret = new ArrayList<IDuccWorkReservation>((int)max); + for ( int i = allReservations.size()-1; i >= 0; i-- ) { + ret.add(restoreReservation(allReservations.get(i))); + } + + return ret; + } + + + // private IDuccWorkReservation reservationRestore(String fileName, Verbosity level) { + // String methodName = "reservationRestore"; + // IDuccWorkReservation reservation = null; + // try { + // logger.trace(methodName, null, "restore:"+fileName); + // FileInputStream fis = null; + // ObjectInputStream in = null; + // fis = new FileInputStream(historyDirectory_reservations+File.separator+fileName); + // in = new ObjectInputStream(fis); + // reservation = (IDuccWorkReservation) in.readObject(); + // in.close(); + // } + // catch(Exception e) { + // switch(level) { + // case QUIET: + // break; + // case SPEAK: + // logger.warn(methodName, null, "unable to restore:"+fileName); + // break; + // } + // } + // return reservation; + // } + + + // public ArrayList<String> reservationList() { + // ArrayList<String> retVal = new ArrayList<String>(); + // File folder = new File(historyDirectory_reservations); + // File[] listOfFiles = folder.listFiles(); + // if(listOfFiles != null) { + // for (int i = 0; i < listOfFiles.length; i++) { + // if (listOfFiles[i].isFile()) { + // String name = listOfFiles[i].getName(); + // if(name.endsWith("."+dwr)) { + // retVal.add(name); + // } + // } + // } + // } + // return retVal; + // } + + + // public ArrayList<IDuccWorkReservation> reservationRestore() throws IOException, ClassNotFoundException { + // ArrayList<IDuccWorkReservation> retVal = new ArrayList<IDuccWorkReservation>(); + // ArrayList<String> reservationFileNames = reservationList(); + // ListIterator<String> listIterator = reservationFileNames.listIterator(); + // while(listIterator.hasNext()) { + // String fileName = listIterator.next(); + // IDuccWorkReservation reservation = reservationRestore(fileName); + // if(reservation != null) { + // retVal.add(reservation); + // } + // } + // return retVal; + // } + + + // public IDuccWorkReservation reservationRestore(DuccId duccId) { + // String fileName = duccId.getFriendly()+"."+dwr; + // return reservationRestore(fileName, Verbosity.QUIET); + // } + + + public void saveService(IDuccWorkService duccWorkService) + throws Exception + { + String id = normalize(""+duccWorkService.getDuccId().getFriendly()); + String fileName = historyDirectory_services+File.separator+id+"."+dws; + FileOutputStream fos = null; + ObjectOutputStream out = null; + fos = new FileOutputStream(fileName); + out = new ObjectOutputStream(fos); + out.writeObject(duccWorkService); + out.close(); + } + + + public IDuccWorkService restoreService(long duccid) + throws Exception + { + //String methodName = "restoreService"; + IDuccWorkService service = null; + FileInputStream fis = null; + ObjectInputStream in = null; + String fileName = ""+duccid + "." + dws; + + fis = new FileInputStream(historyDirectory_services+File.separator+fileName); + in = new ObjectInputStream(fis); + service = (IDuccWorkService) in.readObject(); + in.close(); + return service; + } + + public List<IDuccWorkService> restoreServices(long max) + throws Exception + { + String methodName = "restoreServices"; + // Find the 'max' most current jobs. + // How: list all files; if ends with 'dwj' the first part is the duccid. + // put all the duccids into an array and sort it, (ascending so we don't need a comparator) + // Starting at the end, call restoreJob(Long) to get the file. + // + List<Long> allServices = new ArrayList<Long>(); + File folder = new File(historyDirectory_services); + File[] listOfFiles = folder.listFiles(); + if(listOfFiles != null) { + for (int i = 0; i < listOfFiles.length; i++) { + if (listOfFiles[i].isFile()) { + String name = listOfFiles[i].getName(); + if(name.endsWith("."+dws)) { + int ndx = name.indexOf("."); + try { + allServices.add(Long.parseLong(name.substring(0, ndx))); + } catch ( NumberFormatException e ) { + logger.warn(methodName, null, "Reservation file", name, ": cannot extract ducc id. Not restored."); + } + + } + } + } + } + + max = Math.min(allServices.size(), max); + Collections.sort(allServices); + List<IDuccWorkService> ret = new ArrayList<IDuccWorkService>((int)max); + for ( int i = allServices.size()-1; i >= 0; i-- ) { + ret.add(restoreService(allServices.get(i))); + } + + return ret; + } + + // public void serviceSaveConditional(IDuccWorkService duccWorkService) + // throws IOException { + // String id = normalize(""+duccWorkService.getDuccId().getFriendly()); + // String fileName = historyDirectory_services+File.separator+id+"."+dws; + // File file = new File(fileName); + // if(!file.exists()) { + // serviceSave(duccWorkService); + // } + // } + + + + public void serviceSave(IDuccWorkService duccWorkService) + throws IOException { + String id = normalize(""+duccWorkService.getDuccId().getFriendly()); + String fileName = historyDirectory_services+File.separator+id+"."+dws; + FileOutputStream fos = null; + ObjectOutputStream out = null; + fos = new FileOutputStream(fileName); + out = new ObjectOutputStream(fos); + out.writeObject(duccWorkService); + out.close(); + } + + + public IDuccWorkService serviceRestore(String fileName) { + return serviceRestore(fileName, Verbosity.SPEAK); + } + + private IDuccWorkService serviceRestore(String fileName, Verbosity level) { + String methodName = "serviceRestore"; + IDuccWorkService service = null; + try { + logger.trace(methodName, null, "restore:"+fileName); + FileInputStream fis = null; + ObjectInputStream in = null; + fis = new FileInputStream(historyDirectory_services+File.separator+fileName); + in = new ObjectInputStream(fis); + service = (IDuccWorkService) in.readObject(); + in.close(); + } + catch(Exception e) { + switch(level) { + case QUIET: + break; + case SPEAK: + logger.warn(methodName, null, "unable to restore:"+fileName); + break; + } + } + return service; + } + + + public ArrayList<String> serviceList() { + ArrayList<String> retVal = new ArrayList<String>(); + File folder = new File(historyDirectory_services); + File[] listOfFiles = folder.listFiles(); + if(listOfFiles != null) { + for (int i = 0; i < listOfFiles.length; i++) { + if (listOfFiles[i].isFile()) { + String name = listOfFiles[i].getName(); + if(name.endsWith("."+dws)) { + retVal.add(name); + } + } + } + } + return retVal; + } + + + public ArrayList<IDuccWorkService> serviceRestore() throws IOException, + ClassNotFoundException { + ArrayList<IDuccWorkService> retVal = new ArrayList<IDuccWorkService>(); + ArrayList<String> serviceFileNames = serviceList(); + ListIterator<String> listIterator = serviceFileNames.listIterator(); + while(listIterator.hasNext()) { + String fileName = listIterator.next(); + IDuccWorkService service = serviceRestore(fileName); + if(service != null) { + retVal.add(service); + } + } + return retVal; + } + + + public IDuccWorkService serviceRestore(DuccId duccId) { + String fileName = duccId.getFriendly()+"."+dws; + return serviceRestore(fileName, Verbosity.QUIET); + } + + public boolean checkpoint(DuccWorkMap m, Map<DuccId, DuccId> processToJob) + throws Exception + { + return false; + } + + public boolean restore(DuccWorkMap m, Map<DuccId, DuccId> processToJob) + throws Exception + { + return false; + } + + private static int doJobs(HistoryPersistenceManager hpm) + throws Exception + { + List<IDuccWorkJob> duccWorkJobs = hpm.restoreJobs(-1L); + ListIterator<IDuccWorkJob> listIterator = duccWorkJobs.listIterator(); + int acc = 0; + while(listIterator.hasNext()) { + IDuccWorkJob duccWorkJob = listIterator.next(); + System.out.println(duccWorkJob.getId()); + acc++; + } + return acc; + } + + private static int doReservations(HistoryPersistenceManager hpm) + throws Exception + { + List<IDuccWorkReservation> duccWorkReservations = hpm.restoreReservations(-1L); + ListIterator<IDuccWorkReservation> listIterator = duccWorkReservations.listIterator(); + int acc = 0; + while(listIterator.hasNext()) { + IDuccWorkReservation duccWorkReservation = listIterator.next(); + System.out.println(duccWorkReservation.getId()); + acc++; + } + return acc; + } + + public static void main(String[] args) throws IOException, ClassNotFoundException { + String ducc_home = Utils.findDuccHome(); + if(ducc_home == null) { + System.out.println("DUCC_HOME not set in environment"); + return; + } + if(ducc_home.trim() == "") { + System.out.println("DUCC_HOME not set in environment"); + return; + } + int reservations = 0; try { - logger.trace(methodName, null, "restore:"+fileName); - FileInputStream fis = null; - ObjectInputStream in = null; - fis = new FileInputStream(historyDirectory_jobs+File.separator+fileName); - in = new ObjectInputStream(fis); - job = (IDuccWorkJob) in.readObject(); - in.close(); - } - catch(Exception e) { - switch(level) { - case QUIET: - break; - case SPEAK: - logger.warn(methodName, null, "unable to restore:"+fileName, e); - break; - } - } - return job; - } - - - public IDuccWorkJob jobRestore(DuccId duccId) { - String fileName = duccId.getFriendly()+"."+dwj; - return jobRestore(fileName, Verbosity.QUIET); - } - - - public ArrayList<String> jobList() { - ArrayList<String> retVal = new ArrayList<String>(); - File folder = new File(historyDirectory_jobs); - File[] listOfFiles = folder.listFiles(); - if(listOfFiles != null) { - for (int i = 0; i < listOfFiles.length; i++) { - if (listOfFiles[i].isFile()) { - String name = listOfFiles[i].getName(); - if(name.endsWith("."+dwj)) { - retVal.add(name); - } - } - } - } - return retVal; - } - - - public ArrayList<IDuccWorkJob> jobRestore() throws IOException, ClassNotFoundException { - ArrayList<IDuccWorkJob> retVal = new ArrayList<IDuccWorkJob>(); - ArrayList<String> jobFileNames = jobList(); - ListIterator<String> listIterator = jobFileNames.listIterator(); - while(listIterator.hasNext()) { - String fileName = listIterator.next(); - IDuccWorkJob job = jobRestore(fileName); - if(job != null) { - retVal.add(job); - } - } - return retVal; - } - - - public void reservationSaveConditional(IDuccWorkReservation duccWorkReservation) throws IOException { - String id = normalize(""+duccWorkReservation.getDuccId().getFriendly()); - String fileName = historyDirectory_jobs+File.separator+id+"."+dwr; - File file = new File(fileName); - if(!file.exists()) { - reservationSave(duccWorkReservation); - } - } - - - public void reservationSave(IDuccWorkReservation duccWorkReservation) throws IOException { - String id = normalize(""+duccWorkReservation.getDuccId().getFriendly()); - String fileName = historyDirectory_reservations+File.separator+id+"."+dwr; - FileOutputStream fos = null; - ObjectOutputStream out = null; - fos = new FileOutputStream(fileName); - out = new ObjectOutputStream(fos); - out.writeObject(duccWorkReservation); - out.close(); - } - - - public IDuccWorkReservation reservationRestore(String fileName) { - return reservationRestore(fileName, Verbosity.SPEAK); - } - - private IDuccWorkReservation reservationRestore(String fileName, Verbosity level) { - String methodName = "reservationRestore"; - IDuccWorkReservation reservation = null; - try { - logger.trace(methodName, null, "restore:"+fileName); - FileInputStream fis = null; - ObjectInputStream in = null; - fis = new FileInputStream(historyDirectory_reservations+File.separator+fileName); - in = new ObjectInputStream(fis); - reservation = (IDuccWorkReservation) in.readObject(); - in.close(); - } - catch(Exception e) { - switch(level) { - case QUIET: - break; - case SPEAK: - logger.warn(methodName, null, "unable to restore:"+fileName); - break; - } - } - return reservation; - } - - - public ArrayList<String> reservationList() { - ArrayList<String> retVal = new ArrayList<String>(); - File folder = new File(historyDirectory_reservations); - File[] listOfFiles = folder.listFiles(); - if(listOfFiles != null) { - for (int i = 0; i < listOfFiles.length; i++) { - if (listOfFiles[i].isFile()) { - String name = listOfFiles[i].getName(); - if(name.endsWith("."+dwr)) { - retVal.add(name); - } - } - } - } - return retVal; - } - - - public ArrayList<IDuccWorkReservation> reservationRestore() throws IOException, ClassNotFoundException { - ArrayList<IDuccWorkReservation> retVal = new ArrayList<IDuccWorkReservation>(); - ArrayList<String> reservationFileNames = reservationList(); - ListIterator<String> listIterator = reservationFileNames.listIterator(); - while(listIterator.hasNext()) { - String fileName = listIterator.next(); - IDuccWorkReservation reservation = reservationRestore(fileName); - if(reservation != null) { - retVal.add(reservation); - } - } - return retVal; - } - - - public IDuccWorkReservation reservationRestore(DuccId duccId) { - String fileName = duccId.getFriendly()+"."+dwr; - return reservationRestore(fileName, Verbosity.QUIET); - } - - - public void serviceSaveConditional(IDuccWorkService duccWorkService) - throws IOException { - String id = normalize(""+duccWorkService.getDuccId().getFriendly()); - String fileName = historyDirectory_services+File.separator+id+"."+dws; - File file = new File(fileName); - if(!file.exists()) { - serviceSave(duccWorkService); - } - } - - - public void serviceSave(IDuccWorkService duccWorkService) - throws IOException { - String id = normalize(""+duccWorkService.getDuccId().getFriendly()); - String fileName = historyDirectory_services+File.separator+id+"."+dws; - FileOutputStream fos = null; - ObjectOutputStream out = null; - fos = new FileOutputStream(fileName); - out = new ObjectOutputStream(fos); - out.writeObject(duccWorkService); - out.close(); - } - - - public IDuccWorkService serviceRestore(String fileName) { - return serviceRestore(fileName, Verbosity.SPEAK); - } - - private IDuccWorkService serviceRestore(String fileName, Verbosity level) { - String methodName = "serviceRestore"; - IDuccWorkService service = null; - try { - logger.trace(methodName, null, "restore:"+fileName); - FileInputStream fis = null; - ObjectInputStream in = null; - fis = new FileInputStream(historyDirectory_services+File.separator+fileName); - in = new ObjectInputStream(fis); - service = (IDuccWorkService) in.readObject(); - in.close(); - } - catch(Exception e) { - switch(level) { - case QUIET: - break; - case SPEAK: - logger.warn(methodName, null, "unable to restore:"+fileName); - break; - } - } - return service; - } - - - public ArrayList<String> serviceList() { - ArrayList<String> retVal = new ArrayList<String>(); - File folder = new File(historyDirectory_services); - File[] listOfFiles = folder.listFiles(); - if(listOfFiles != null) { - for (int i = 0; i < listOfFiles.length; i++) { - if (listOfFiles[i].isFile()) { - String name = listOfFiles[i].getName(); - if(name.endsWith("."+dws)) { - retVal.add(name); - } - } - } - } - return retVal; - } - - - public ArrayList<IDuccWorkService> serviceRestore() throws IOException, - ClassNotFoundException { - ArrayList<IDuccWorkService> retVal = new ArrayList<IDuccWorkService>(); - ArrayList<String> serviceFileNames = serviceList(); - ListIterator<String> listIterator = serviceFileNames.listIterator(); - while(listIterator.hasNext()) { - String fileName = listIterator.next(); - IDuccWorkService service = serviceRestore(fileName); - if(service != null) { - retVal.add(service); - } - } - return retVal; - } - - - public IDuccWorkService serviceRestore(DuccId duccId) { - String fileName = duccId.getFriendly()+"."+dws; - return serviceRestore(fileName, Verbosity.QUIET); - } - - ///// <tool> - - private static int doJobs(HistoryPersistenceManager hpm) throws IOException, ClassNotFoundException { - ArrayList<IDuccWorkJob> duccWorkJobs = hpm.jobRestore(); - ListIterator<IDuccWorkJob> listIterator = duccWorkJobs.listIterator(); - int acc = 0; - while(listIterator.hasNext()) { - IDuccWorkJob duccWorkJob = listIterator.next(); - System.out.println(duccWorkJob.getId()); - acc++; - } - return acc; - } - - private static int doReservations(HistoryPersistenceManager hpm) throws IOException, ClassNotFoundException { - ArrayList<IDuccWorkReservation> duccWorkReservations = hpm.reservationRestore(); - ListIterator<IDuccWorkReservation> listIterator = duccWorkReservations.listIterator(); - int acc = 0; - while(listIterator.hasNext()) { - IDuccWorkReservation duccWorkReservation = listIterator.next(); - System.out.println(duccWorkReservation.getId()); - acc++; - } - return acc; - } - - public static void main(String[] args) throws IOException, ClassNotFoundException { - String ducc_home = Utils.findDuccHome(); - if(ducc_home == null) { - System.out.println("DUCC_HOME not set in environment"); - return; - } - if(ducc_home.trim() == "") { - System.out.println("DUCC_HOME not set in environment"); - return; + HistoryPersistenceManager hpm = new HistoryPersistenceManager(); + int jobs = doJobs(hpm); + System.out.println("jobs: "+jobs); + reservations = doReservations(hpm); + } catch (Exception e) { + // TODO Auto-generated catch block + e.printStackTrace(); } - HistoryPersistenceManager hpm = new HistoryPersistenceManager(); - int jobs = doJobs(hpm); - System.out.println("jobs: "+jobs); - int reservations = doReservations(hpm); - System.out.println("reservations: "+reservations); - } + System.out.println("reservations: "+reservations); + } - ///// </tool> + ///// </tool> } Modified: uima/sandbox/uima-ducc/trunk/uima-ducc-transport/src/main/java/org/apache/uima/ducc/transport/event/common/history/IHistoryPersistenceManager.java URL: http://svn.apache.org/viewvc/uima/sandbox/uima-ducc/trunk/uima-ducc-transport/src/main/java/org/apache/uima/ducc/transport/event/common/history/IHistoryPersistenceManager.java?rev=1703203&r1=1703202&r2=1703203&view=diff ============================================================================== --- uima/sandbox/uima-ducc/trunk/uima-ducc-transport/src/main/java/org/apache/uima/ducc/transport/event/common/history/IHistoryPersistenceManager.java (original) +++ uima/sandbox/uima-ducc/trunk/uima-ducc-transport/src/main/java/org/apache/uima/ducc/transport/event/common/history/IHistoryPersistenceManager.java Tue Sep 15 14:31:24 2015 @@ -18,35 +18,39 @@ */ package org.apache.uima.ducc.transport.event.common.history; -import java.io.IOException; -import java.util.ArrayList; +import java.util.List; +import java.util.Map; +import org.apache.uima.ducc.common.utils.DuccLogger; import org.apache.uima.ducc.common.utils.id.DuccId; +import org.apache.uima.ducc.transport.event.common.DuccWorkMap; import org.apache.uima.ducc.transport.event.common.IDuccWorkJob; import org.apache.uima.ducc.transport.event.common.IDuccWorkReservation; import org.apache.uima.ducc.transport.event.common.IDuccWorkService; -public interface IHistoryPersistenceManager { - - public void jobSaveConditional(IDuccWorkJob duccWorkJob) throws IOException; - public void jobSave(IDuccWorkJob duccWorkJob) throws IOException; - public IDuccWorkJob jobRestore(String fileName); - public IDuccWorkJob jobRestore(DuccId duccId); - public ArrayList<String> jobList(); - public ArrayList<IDuccWorkJob> jobRestore() throws IOException, ClassNotFoundException; - - public void reservationSaveConditional(IDuccWorkReservation duccWorkReservation) throws IOException; - public void reservationSave(IDuccWorkReservation duccWorkReservation) throws IOException; - public IDuccWorkReservation reservationRestore(String fileName); - public IDuccWorkReservation reservationRestore(DuccId duccId); - public ArrayList<String> reservationList(); - public ArrayList<IDuccWorkReservation> reservationRestore() throws IOException, ClassNotFoundException; +public interface IHistoryPersistenceManager +{ + public void saveJob(IDuccWorkJob duccWorkJob) throws Exception; + public IDuccWorkJob restoreJob(long friendly_id) throws Exception; + public List<IDuccWorkJob> restoreJobs(long max) throws Exception; - public void serviceSaveConditional(IDuccWorkService duccWorkService) throws IOException; - public void serviceSave(IDuccWorkService duccWorkService) throws IOException; - public IDuccWorkService serviceRestore(String fileName); - public IDuccWorkService serviceRestore(DuccId duccId); - public ArrayList<String> serviceList(); - public ArrayList<IDuccWorkService> serviceRestore() throws IOException, ClassNotFoundException; + public void saveReservation(IDuccWorkReservation reservation) throws Exception; + public IDuccWorkReservation restoreReservation(long friendly_id) throws Exception; + public List<IDuccWorkReservation> restoreReservations(long max) throws Exception; + + public void saveService(IDuccWorkService duccWorkService) throws Exception; + public IDuccWorkService restoreService(long friendly_id) throws Exception; + public List<IDuccWorkService> restoreServices(long max) throws Exception; + + public boolean checkpoint(DuccWorkMap work, Map<DuccId, DuccId> processToJob) throws Exception; + public boolean restore(DuccWorkMap work, Map<DuccId, DuccId> processToJob) throws Exception; + + public void setLogger(DuccLogger logger); + //public void serviceSaveConditional(IDuccWorkService duccWorkService) throws Exception; + // public void serviceSave(IDuccWorkService duccWorkService) throws Exception; + //public IDuccWorkService serviceRestore(String fileName); + //public IDuccWorkService serviceRestore(DuccId duccId); + //public ArrayList<String> serviceList(); + //public ArrayList<IDuccWorkService> serviceRestore() throws IOException, ClassNotFoundException; } Added: uima/sandbox/uima-ducc/trunk/uima-ducc-transport/src/main/java/org/apache/uima/ducc/transport/event/common/history/NullHistoryManager.java URL: http://svn.apache.org/viewvc/uima/sandbox/uima-ducc/trunk/uima-ducc-transport/src/main/java/org/apache/uima/ducc/transport/event/common/history/NullHistoryManager.java?rev=1703203&view=auto ============================================================================== --- uima/sandbox/uima-ducc/trunk/uima-ducc-transport/src/main/java/org/apache/uima/ducc/transport/event/common/history/NullHistoryManager.java (added) +++ uima/sandbox/uima-ducc/trunk/uima-ducc-transport/src/main/java/org/apache/uima/ducc/transport/event/common/history/NullHistoryManager.java Tue Sep 15 14:31:24 2015 @@ -0,0 +1,131 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. +*/ +package org.apache.uima.ducc.transport.event.common.history; + +import java.io.IOException; +import java.util.ArrayList; +import java.util.List; +import java.util.Map; + +import org.apache.uima.ducc.common.utils.DuccLogger; +import org.apache.uima.ducc.common.utils.id.DuccId; +import org.apache.uima.ducc.transport.event.common.DuccWorkMap; +import org.apache.uima.ducc.transport.event.common.IDuccWorkJob; +import org.apache.uima.ducc.transport.event.common.IDuccWorkReservation; +import org.apache.uima.ducc.transport.event.common.IDuccWorkService; + + +public class NullHistoryManager + implements IHistoryPersistenceManager +{ + NullHistoryManager() + { + } + + public void setLogger(DuccLogger logger) {} + + public void saveJob(IDuccWorkJob duccWorkJob) + throws Exception + { + } + + public IDuccWorkJob restoreJob(long duccid) + throws Exception + { + return null; + } + + public List<IDuccWorkJob> restoreJobs(long max) + throws Exception + { + return new ArrayList<IDuccWorkJob>(); + } + + + public void saveReservation(IDuccWorkReservation reservation) + throws Exception + { + } + + public IDuccWorkReservation restoreReservation(long friendly_id) + throws Exception + { + return null; + } + + public List<IDuccWorkReservation> restoreReservations(long max) + throws Exception + { + return new ArrayList<IDuccWorkReservation>(); + } + + + public void saveService(IDuccWorkService service) + throws Exception + { + } + + + public void serviceSave(IDuccWorkService service) + throws Exception + { + } + + + public IDuccWorkService restoreService(long duccid) + throws Exception + { + return null; + } + + public List<IDuccWorkService> restoreServices(long max) + throws Exception + { + return new ArrayList<IDuccWorkService>(); + } + + + public IDuccWorkService serviceRestore(String fileName) + { + return null; + } + + public ArrayList<String> serviceList() + { + return new ArrayList<String>(); + } + + + public ArrayList<IDuccWorkService> serviceRestore() + throws IOException, + ClassNotFoundException + { + return new ArrayList<IDuccWorkService>(); + } + + + public IDuccWorkService serviceRestore(DuccId duccId) + { + return null; + } + + public boolean checkpoint(DuccWorkMap work, Map<DuccId, DuccId> processToJob) throws Exception { return false; } + public boolean restore(DuccWorkMap work, Map<DuccId, DuccId> processToJob) throws Exception { return false; } + +} Modified: uima/sandbox/uima-ducc/trunk/uima-ducc-web/src/main/java/org/apache/uima/ducc/ws/DuccBoot.java URL: http://svn.apache.org/viewvc/uima/sandbox/uima-ducc/trunk/uima-ducc-web/src/main/java/org/apache/uima/ducc/ws/DuccBoot.java?rev=1703203&r1=1703202&r2=1703203&view=diff ============================================================================== --- uima/sandbox/uima-ducc/trunk/uima-ducc-web/src/main/java/org/apache/uima/ducc/ws/DuccBoot.java (original) +++ uima/sandbox/uima-ducc/trunk/uima-ducc-web/src/main/java/org/apache/uima/ducc/ws/DuccBoot.java Tue Sep 15 14:31:24 2015 @@ -19,7 +19,7 @@ package org.apache.uima.ducc.ws; import java.util.ArrayList; -import java.util.Iterator; +import java.util.List; import java.util.ListIterator; import java.util.TreeMap; @@ -105,89 +105,176 @@ public class DuccBoot extends Thread { return map; } - private void restoreReservations(IHistoryPersistenceManager hpm, DuccData duccData) { - String location = "restoreReservations"; - ArrayList<String> duccWorkReservations = hpm.reservationList(); - logger.info(location, jobid, messages.fetchLabel("Number of Reservations to restore")+duccWorkReservations.size()); - TreeMap<Integer,String> map = sort(duccWorkReservations); - Iterator<Integer> iterator = map.descendingKeySet().iterator(); - int i = 0; - int restored = 0; - while(iterator.hasNext() && (++i < maxReservations)) { - try { - Integer key = iterator.next(); - logger.debug(location, jobid, messages.fetchLabel("restore")+key); - String fileName = map.get(key); - IDuccWorkReservation duccWorkReservation; - duccWorkReservation = hpm.reservationRestore(fileName); - if(duccWorkReservation != null) { - duccData.putIfNotPresent(duccWorkReservation); - duccPlugins.restore(duccWorkReservation); - restored++; - } - } - catch(Throwable t) { - logger.warn(location, jobid, t); - } + // private void restoreReservations(IHistoryPersistenceManager hpm, DuccData duccData) { + // String location = "restoreReservations"; + // ArrayList<String> duccWorkReservations = hpm.reservationList(); + // logger.info(location, jobid, messages.fetchLabel("Number of Reservations to restore")+duccWorkReservations.size()); + // TreeMap<Integer,String> map = sort(duccWorkReservations); + // Iterator<Integer> iterator = map.descendingKeySet().iterator(); + // int i = 0; + // int restored = 0; + // while(iterator.hasNext() && (++i < maxReservations)) { + // try { + // Integer key = iterator.next(); + // logger.debug(location, jobid, messages.fetchLabel("restore")+key); + // String fileName = map.get(key); + // IDuccWorkReservation duccWorkReservation; + // duccWorkReservation = hpm.reservationRestore(fileName); + // if(duccWorkReservation != null) { + // duccData.putIfNotPresent(duccWorkReservation); + // duccPlugins.restore(duccWorkReservation); + // restored++; + // } + // } + // catch(Throwable t) { + // logger.warn(location, jobid, t); + // } + // } + // logger.info(location, jobid, messages.fetch("Reservations restored: "+restored)); + // } + + private void restoreReservations(IHistoryPersistenceManager hpm, DuccData duccData) + { + // Replaced for database. Both file and database now do all the looping and sorting internally. + String location = "restoreReservations"; + List<IDuccWorkReservation> duccWorkReservations = null;; + try { + duccWorkReservations = hpm.restoreReservations(maxReservations); + } catch (Exception e) { + logger.warn(location, null, e); + return; // Nothing to do if this fails } - logger.info(location, jobid, messages.fetch("Reservations restored: "+restored)); - } - - private void restoreJobs(IHistoryPersistenceManager hpm, DuccData duccData) { - String location = "restoreJobs"; - ArrayList<String> duccWorkJobs = hpm.jobList(); - logger.info(location, jobid, messages.fetchLabel("Number of Jobs to restore")+duccWorkJobs.size()); - TreeMap<Integer,String> map = sort(duccWorkJobs); - Iterator<Integer> iterator = map.descendingKeySet().iterator(); - int i = 0; - int restored = 0; - while(iterator.hasNext() && (++i < maxJobs)) { - try { - Integer key = iterator.next(); - logger.debug(location, jobid, messages.fetchLabel("restore")+key); - String fileName = map.get(key); - IDuccWorkJob duccWorkJob; - duccWorkJob = hpm.jobRestore(fileName); - if(duccWorkJob != null) { - duccData.putIfNotPresent(duccWorkJob); - duccPlugins.restore(duccWorkJob); - restored++; - } - } - catch(Throwable t) { - logger.warn(location, jobid, t); - } + + logger.info(location, jobid, messages.fetchLabel("Number of Reservations fetched from DB"), duccWorkReservations.size()); + + int restored = 0; + for ( IDuccWorkReservation duccWorkReservation : duccWorkReservations ) { + try { + logger.debug(location, duccWorkReservation.getDuccId(), messages.fetchLabel("restore")); + duccData.putIfNotPresent(duccWorkReservation); + duccPlugins.restore(duccWorkReservation); + restored++; + } + catch(Throwable t) { + logger.warn(location, duccWorkReservation.getDuccId(), t); + } + } + logger.info(location,null, messages.fetch("Reservations restored: "+restored)); + } + + private void restoreJobs(IHistoryPersistenceManager hpm, DuccData duccData) + { + // Replaced for database. Both file and database now do all the looping and sorting internally. + String location = "restoreJobs"; + List<IDuccWorkJob> duccWorkJobs = null;; + try { + duccWorkJobs = hpm.restoreJobs(maxJobs); + } catch (Exception e) { + logger.warn(location, null, e); + return; // Nothing to do if this fails } - logger.info(location, jobid, messages.fetch("Jobs restored: "+restored)); - } - - private void restoreServices(IHistoryPersistenceManager hpm, DuccData duccData) { - String location = "restoreServices"; - ArrayList<String> duccWorkServices = hpm.serviceList(); - logger.info(location, jobid, messages.fetchLabel("Number of Services to restore")+duccWorkServices.size()); - TreeMap<Integer,String> map = sort(duccWorkServices); - Iterator<Integer> iterator = map.descendingKeySet().iterator(); - int i = 0; - int restored = 0; - while(iterator.hasNext() && (++i < maxServices)) { - try { - Integer key = iterator.next(); - logger.debug(location, jobid, messages.fetchLabel("restore")+key); - String fileName = map.get(key); - IDuccWorkService duccWorkService; - duccWorkService = hpm.serviceRestore(fileName); - if(duccWorkService != null) { - duccData.putIfNotPresent(duccWorkService); - duccPlugins.restore(duccWorkService); - restored++; - } - } - catch(Throwable t) { - logger.warn(location, jobid, t); - } + + logger.info(location, jobid, messages.fetchLabel("Number of Jobs fetched from DB"), duccWorkJobs.size()); + + int restored = 0; + for ( IDuccWorkJob duccWorkJob : duccWorkJobs ) { + try { + logger.debug(location, duccWorkJob.getDuccId(), messages.fetchLabel("restore")); + duccData.putIfNotPresent(duccWorkJob); + duccPlugins.restore(duccWorkJob); + restored++; + } + catch(Throwable t) { + logger.warn(location, duccWorkJob.getDuccId(), t); + } + } + logger.info(location,null, messages.fetch("Jobs restored: "+restored)); + } + +// private void restoreJobsX(IHistoryPersistenceManager hpm, DuccData duccData) { +// String location = "restoreJobs"; +// ArrayList<String> duccWorkJobs = hpm.jobList(); +// logger.info(location, jobid, messages.fetchLabel("Number of Jobs to restore")+duccWorkJobs.size()); +// TreeMap<Integer,String> map = sort(duccWorkJobs); +// Iterator<Integer> iterator = map.descendingKeySet().iterator(); +// int i = 0; +// int restored = 0; +// while(iterator.hasNext() && (++i < maxJobs)) { +// try { +// Integer key = iterator.next(); +// logger.debug(location, jobid, messages.fetchLabel("restore")+key); +// String fileName = map.get(key); +// IDuccWorkJob duccWorkJob; +// duccWorkJob = hpm.jobRestore(fileName); +// if(duccWorkJob != null) { +// duccData.putIfNotPresent(duccWorkJob); +// duccPlugins.restore(duccWorkJob); +// restored++; +// } +// } +// catch(Throwable t) { +// logger.warn(location, jobid, t); +// } +// } +// logger.info(location, jobid, messages.fetch("Jobs restored: "+restored)); +// } + + private void restoreServices(IHistoryPersistenceManager hpm, DuccData duccData) + { + // Replaced for database. Both file and database now do all the looping and sorting internally. + String location = "restoreServices"; + List<IDuccWorkService> duccWorkServices = null;; + try { + duccWorkServices = hpm.restoreServices(maxServices); + } catch (Exception e) { + logger.warn(location, null, e); + return; // Nothing to do if this fails } - logger.info(location, jobid, messages.fetch("Services restored: "+restored)); - } + + logger.info(location, jobid, messages.fetchLabel("Number of services fetched from DB"), duccWorkServices.size()); + + int restored = 0; + for ( IDuccWorkService duccWorkService : duccWorkServices ) { + try { + logger.debug(location, duccWorkService.getDuccId(), messages.fetchLabel("restore")); + duccData.putIfNotPresent(duccWorkService); + duccPlugins.restore(duccWorkService); + restored++; + } + catch(Throwable t) { + logger.warn(location, duccWorkService.getDuccId(), t); + } + } + logger.info(location,null, messages.fetch("Services restored: "+restored)); + } + + // private void restoreServices(IHistoryPersistenceManager hpm, DuccData duccData) { + // String location = "restoreServices"; + // ArrayList<String> duccWorkServices = hpm.serviceList(); + // logger.info(location, jobid, messages.fetchLabel("Number of Services to restore")+duccWorkServices.size()); + // TreeMap<Integer,String> map = sort(duccWorkServices); + // Iterator<Integer> iterator = map.descendingKeySet().iterator(); + // int i = 0; + // int restored = 0; + // while(iterator.hasNext() && (++i < maxServices)) { + // try { + // Integer key = iterator.next(); + // logger.debug(location, jobid, messages.fetchLabel("restore")+key); + // String fileName = map.get(key); + // IDuccWorkService duccWorkService; + // duccWorkService = hpm.serviceRestore(fileName); + // if(duccWorkService != null) { + // duccData.putIfNotPresent(duccWorkService); + // duccPlugins.restore(duccWorkService); + // restored++; + // } + // } + // catch(Throwable t) { + // logger.warn(location, jobid, t); + // } + // } + // logger.info(location, jobid, messages.fetch("Services restored: "+restored)); + // } private void initialize(CommonConfiguration commonConfiguration) { String location = "initialize"; @@ -203,7 +290,7 @@ public class DuccBoot extends Thread { private void restore() { String location = "restore"; logger.info(location, jobid, messages.fetchLabel("History directory")+IDuccEnv.DUCC_HISTORY_DIR); - IHistoryPersistenceManager hpm = HistoryFactory.getInstance(); + IHistoryPersistenceManager hpm = HistoryFactory.getInstance(this.getClass().getName()); DuccData duccData = DuccData.getInstance(); restoreReservations(hpm, duccData); restoreJobs(hpm, duccData); Modified: uima/sandbox/uima-ducc/trunk/uima-ducc-web/src/main/java/org/apache/uima/ducc/ws/DuccData.java URL: http://svn.apache.org/viewvc/uima/sandbox/uima-ducc/trunk/uima-ducc-web/src/main/java/org/apache/uima/ducc/ws/DuccData.java?rev=1703203&r1=1703202&r2=1703203&view=diff ============================================================================== --- uima/sandbox/uima-ducc/trunk/uima-ducc-web/src/main/java/org/apache/uima/ducc/ws/DuccData.java (original) +++ uima/sandbox/uima-ducc/trunk/uima-ducc-web/src/main/java/org/apache/uima/ducc/ws/DuccData.java Tue Sep 15 14:31:24 2015 @@ -70,7 +70,7 @@ public class DuccData { private volatile String published = null; - private IHistoryPersistenceManager hpm = HistoryFactory.getInstance(); + private IHistoryPersistenceManager hpm = HistoryFactory.getInstance(this.getClass().getName()); public boolean isPublished() { return published != null; @@ -95,26 +95,32 @@ public class DuccData { } @SuppressWarnings("unchecked") - private void mergeHistory(IDuccWorkMap map) { + private void mergeHistory(IDuccWorkMap map) + { + String methodName = "mergeHistory"; Iterator<DuccId> iterator = duccWorkLive.keySet().iterator(); while(iterator.hasNext()) { DuccId duccId = iterator.next(); IDuccWork duccWork = duccWorkLive.findDuccWork(duccId); IDuccWork history = null; - switch(duccWork.getDuccType()) { - case Job: - history = hpm.jobRestore(duccId); - break; - case Reservation: - history = hpm.reservationRestore(duccId); - break; - case Service: - history = hpm.serviceRestore(duccId); - break; - } - if(history != null) { - map.put(duccId, history); - } + try { + switch(duccWork.getDuccType()) { + case Job: + history = hpm.restoreJob(duccId.getFriendly()); + break; + case Reservation: + history = hpm.restoreReservation(duccId.getFriendly()); + break; + case Service: + history = hpm.restoreService(duccId.getFriendly()); + break; + } + if(history != null) { + map.put(duccId, history); + } + } catch ( Exception e ) { + logger.warn(methodName, duccId, "Cannot recover", duccWork.getDuccType(), "from database"); + } } } Modified: uima/sandbox/uima-ducc/trunk/uima-ducc-web/src/main/java/org/apache/uima/ducc/ws/registry/IServicesRegistry.java URL: http://svn.apache.org/viewvc/uima/sandbox/uima-ducc/trunk/uima-ducc-web/src/main/java/org/apache/uima/ducc/ws/registry/IServicesRegistry.java?rev=1703203&r1=1703202&r2=1703203&view=diff ============================================================================== --- uima/sandbox/uima-ducc/trunk/uima-ducc-web/src/main/java/org/apache/uima/ducc/ws/registry/IServicesRegistry.java (original) +++ uima/sandbox/uima-ducc/trunk/uima-ducc-web/src/main/java/org/apache/uima/ducc/ws/registry/IServicesRegistry.java Tue Sep 15 14:31:24 2015 @@ -26,28 +26,28 @@ public class IServicesRegistry { public static final String svc = IStateServices.svc; // meta - public static final String autostart = IStateServices.autostart; - public static final String reference = IStateServices.reference; - public static final String enabled = IStateServices.enabled; - public static final String disable_reason = IStateServices.disable_reason; - public static final String endpoint = IStateServices.endpoint; - public static final String implementors = IStateServices.implementors; - public static final String instances = IStateServices.instances; - public static final String numeric_id = IStateServices.numeric_id; - public static final String ping_active = IStateServices.ping_active; - public static final String ping_only = IStateServices.ping_only; - public static final String service_alive = IStateServices.service_alive; - public static final String service_class = IStateServices.service_class; - public static final String service_dependency = IStateServices.service_dependency; - public static final String service_healthy = IStateServices.service_healthy; - public static final String service_state = IStateServices.service_state; - public static final String last_use = IStateServices.last_use; - public static final String service_statistics = IStateServices.service_statistics; - public static final String service_type = IStateServices.service_type; - public static final String submit_error = IStateServices.submit_error; - public static final String user = IStateServices.user; + public static final String autostart = IStateServices.SvcProps.autostart.pname(); + public static final String reference = IStateServices.SvcProps.reference.pname(); + public static final String enabled = IStateServices.SvcProps.enabled.pname(); + public static final String disable_reason = IStateServices.SvcProps.disable_reason.pname(); + public static final String endpoint = IStateServices.SvcProps.endpoint.pname(); + public static final String implementors = IStateServices.SvcProps.implementors.pname(); + public static final String instances = IStateServices.SvcProps.instances.pname(); + public static final String numeric_id = IStateServices.SvcProps.numeric_id.pname(); + public static final String ping_active = IStateServices.SvcProps.ping_active.pname(); + public static final String ping_only = IStateServices.SvcProps.ping_only.pname(); + public static final String service_alive = IStateServices.SvcProps.service_alive.pname(); + public static final String service_class = IStateServices.SvcProps.service_class.pname(); + public static final String service_dependency = IStateServices.SvcProps.service_dependency.pname(); + public static final String service_healthy = IStateServices.SvcProps.service_healthy.pname(); + public static final String service_state = IStateServices.SvcProps.service_state.pname(); + public static final String last_use = IStateServices.SvcProps.last_use.pname(); + public static final String service_statistics = IStateServices.SvcProps.service_statistics.pname(); + public static final String service_type = IStateServices.SvcProps.service_type.pname(); + public static final String submit_error = IStateServices.SvcProps.submit_error.pname(); + public static final String user = IStateServices.SvcProps.user.pname(); - public static final String service_type_CUSTOM = "CUSTOM"; + public static final String service_type_CUSTOM = IStateServices.SvcProps.CUSTOM.pname(); public static final String constant_Available = "Available"; public static final String constant_true = "true"; @@ -60,9 +60,9 @@ public class IServicesRegistry { public static final String constant_OK = "OK"; // svc - public static final String description = IStateServices.description; - public static final String process_memory_size = IStateServices.process_memory_size; - public static final String scheduling_class = IStateServices.scheduling_class; - public static final String log_directory = IStateServices.log_directory; + public static final String description = IStateServices.SvcProps.description.pname(); + public static final String process_memory_size = IStateServices.SvcProps.process_memory_size.pname(); + public static final String scheduling_class = IStateServices.SvcProps.scheduling_class.pname(); + public static final String log_directory = IStateServices.SvcProps.log_directory.pname(); } Modified: uima/sandbox/uima-ducc/trunk/uima-ducc-web/src/main/java/org/apache/uima/ducc/ws/registry/ServicesRegistry.java URL: http://svn.apache.org/viewvc/uima/sandbox/uima-ducc/trunk/uima-ducc-web/src/main/java/org/apache/uima/ducc/ws/registry/ServicesRegistry.java?rev=1703203&r1=1703202&r2=1703203&view=diff ============================================================================== --- uima/sandbox/uima-ducc/trunk/uima-ducc-web/src/main/java/org/apache/uima/ducc/ws/registry/ServicesRegistry.java (original) +++ uima/sandbox/uima-ducc/trunk/uima-ducc-web/src/main/java/org/apache/uima/ducc/ws/registry/ServicesRegistry.java Tue Sep 15 14:31:24 2015 @@ -18,7 +18,6 @@ */ package org.apache.uima.ducc.ws.registry; -import java.io.IOException; import java.util.ArrayList; import java.util.Properties; import java.util.concurrent.atomic.AtomicBoolean; @@ -75,10 +74,10 @@ public class ServicesRegistry { String location = "refreshCache"; try { ServicesRegistryMap mapRevised = new ServicesRegistryMap(); - IStateServices iss = StateServicesFactory.getInstance(); + IStateServices iss = StateServicesFactory.getInstance(this.getClass().getName(), "WS"); StateServicesDirectory ssd = iss.getStateServicesDirectory(); if(!ssd.getDescendingKeySet().isEmpty()) { - for(Integer key : ssd.getDescendingKeySet()) { + for(Long key : ssd.getDescendingKeySet()) { StateServicesSet entry = ssd.get(key); Properties propertiesSvc = entry.get(IServicesRegistry.svc); Properties propertiesMeta = entry.get(IServicesRegistry.meta); @@ -92,7 +91,7 @@ public class ServicesRegistry { logger.debug(location, jobid, "size: "+map.size()); ServicesSortCache.getInstance().update(map); } - catch(IOException e) { + catch(Exception e) { logger.error(location, jobid, e); } } @@ -149,7 +148,7 @@ public class ServicesRegistry { try { logger.debug(location, jobid, "size: "+map.size()); logger.debug(location, jobid, "search: "+name); - for(Integer key : map.keySet()) { + for(Long key : map.keySet()) { ServicesRegistryMapPayload payload = map.get(key); Properties meta = payload.meta; if(meta != null) { @@ -176,7 +175,7 @@ public class ServicesRegistry { public String findServiceUser(String id) { String retVal = null; try { - for(Integer key : map.keySet()) { + for(Long key : map.keySet()) { ServicesRegistryMapPayload payload = map.get(key); Properties meta = payload.meta; if(meta != null) { @@ -200,7 +199,7 @@ public class ServicesRegistry { String retVal = null; try { long id = duccId.getFriendly(); - for(Integer key : map.keySet()) { + for(Long key : map.keySet()) { ServicesRegistryMapPayload payload = map.get(key); Properties meta = payload.meta; if(meta != null) { Modified: uima/sandbox/uima-ducc/trunk/uima-ducc-web/src/main/java/org/apache/uima/ducc/ws/registry/ServicesRegistryMap.java URL: http://svn.apache.org/viewvc/uima/sandbox/uima-ducc/trunk/uima-ducc-web/src/main/java/org/apache/uima/ducc/ws/registry/ServicesRegistryMap.java?rev=1703203&r1=1703202&r2=1703203&view=diff ============================================================================== --- uima/sandbox/uima-ducc/trunk/uima-ducc-web/src/main/java/org/apache/uima/ducc/ws/registry/ServicesRegistryMap.java (original) +++ uima/sandbox/uima-ducc/trunk/uima-ducc-web/src/main/java/org/apache/uima/ducc/ws/registry/ServicesRegistryMap.java Tue Sep 15 14:31:24 2015 @@ -23,15 +23,15 @@ import java.util.NavigableSet; import java.util.TreeMap; import java.util.concurrent.ConcurrentHashMap; -public class ServicesRegistryMap extends ConcurrentHashMap<Integer,ServicesRegistryMapPayload> { +public class ServicesRegistryMap extends ConcurrentHashMap<Long,ServicesRegistryMapPayload> { private static final long serialVersionUID = 1L; - public NavigableSet<Integer> getDescendingKeySet() { - TreeMap<Integer,ServicesRegistryMapPayload> tMap = new TreeMap<Integer,ServicesRegistryMapPayload>(); - Iterator<java.util.Map.Entry<Integer, ServicesRegistryMapPayload>> iterator = entrySet().iterator(); + public NavigableSet<Long> getDescendingKeySet() { + TreeMap<Long,ServicesRegistryMapPayload> tMap = new TreeMap<Long,ServicesRegistryMapPayload>(); + Iterator<java.util.Map.Entry<Long, ServicesRegistryMapPayload>> iterator = entrySet().iterator(); while(iterator.hasNext()) { - java.util.Map.Entry<Integer, ServicesRegistryMapPayload> entry = iterator.next(); + java.util.Map.Entry<Long, ServicesRegistryMapPayload> entry = iterator.next(); tMap.put(entry.getKey(), entry.getValue()); } return tMap.descendingKeySet(); Modified: uima/sandbox/uima-ducc/trunk/uima-ducc-web/src/main/java/org/apache/uima/ducc/ws/registry/sort/ServicesSortCache.java URL: http://svn.apache.org/viewvc/uima/sandbox/uima-ducc/trunk/uima-ducc-web/src/main/java/org/apache/uima/ducc/ws/registry/sort/ServicesSortCache.java?rev=1703203&r1=1703202&r2=1703203&view=diff ============================================================================== --- uima/sandbox/uima-ducc/trunk/uima-ducc-web/src/main/java/org/apache/uima/ducc/ws/registry/sort/ServicesSortCache.java (original) +++ uima/sandbox/uima-ducc/trunk/uima-ducc-web/src/main/java/org/apache/uima/ducc/ws/registry/sort/ServicesSortCache.java Tue Sep 15 14:31:24 2015 @@ -46,7 +46,7 @@ public class ServicesSortCache { public void update(ServicesRegistryMap registryMap) { TreeMap<SortableService,IServiceAdapter> mapRevised = new TreeMap<SortableService,IServiceAdapter>(); - for(Entry<Integer, ServicesRegistryMapPayload> entry : registryMap.entrySet()) { + for(Entry<Long, ServicesRegistryMapPayload> entry : registryMap.entrySet()) { ServicesRegistryMapPayload payload = entry.getValue(); Properties meta = payload.meta; Properties svc = payload.svc; @@ -62,11 +62,11 @@ public class ServicesSortCache { for(Entry<SortableService, IServiceAdapter> entry : map.entrySet()) { IServiceAdapter payload = entry.getValue(); Properties meta = payload.getMeta(); - String key = IStateServices.numeric_id; + String key = IStateServices.SvcProps.numeric_id.pname(); String value = meta.getProperty(key); int numeric_id = Integer.parseInt(value); if(numeric_id == id) { - meta.setProperty(IStateServices.enabled, Boolean.toString(bool)); + meta.setProperty(IStateServices.SvcProps.enabled.pname(), Boolean.toString(bool)); payload.setMeta(meta); break; }