You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@uima.apache.org by ch...@apache.org on 2013/04/01 23:58:54 UTC
svn commit: r1463312 -
/uima/sandbox/uima-ducc/trunk/uima-ducc-rm/src/main/java/org/apache/uima/ducc/rm/scheduler/Scheduler.java
Author: challngr
Date: Mon Apr 1 21:58:54 2013
New Revision: 1463312
URL: http://svn.apache.org/r1463312
Log:
UIMA-2789
Unique, persisted friendly IDs for RM assigned shares.
Modified:
uima/sandbox/uima-ducc/trunk/uima-ducc-rm/src/main/java/org/apache/uima/ducc/rm/scheduler/Scheduler.java
Modified: uima/sandbox/uima-ducc/trunk/uima-ducc-rm/src/main/java/org/apache/uima/ducc/rm/scheduler/Scheduler.java
URL: http://svn.apache.org/viewvc/uima/sandbox/uima-ducc/trunk/uima-ducc-rm/src/main/java/org/apache/uima/ducc/rm/scheduler/Scheduler.java?rev=1463312&r1=1463311&r2=1463312&view=diff
==============================================================================
--- uima/sandbox/uima-ducc/trunk/uima-ducc-rm/src/main/java/org/apache/uima/ducc/rm/scheduler/Scheduler.java (original)
+++ uima/sandbox/uima-ducc/trunk/uima-ducc-rm/src/main/java/org/apache/uima/ducc/rm/scheduler/Scheduler.java Mon Apr 1 21:58:54 2013
@@ -19,7 +19,10 @@
package org.apache.uima.ducc.rm.scheduler;
import java.io.BufferedReader;
+import java.io.File;
+import java.io.FileInputStream;
import java.io.FileNotFoundException;
+import java.io.FileOutputStream;
import java.io.FileReader;
import java.io.IOException;
import java.util.ArrayList;
@@ -53,7 +56,7 @@ public class Scheduler
SchedConstants
{
IJobManager jobManager;
- DuccLogger logger = DuccLogger.getLogger(Scheduler.class, COMPONENT_NAME);
+ static DuccLogger logger = DuccLogger.getLogger(Scheduler.class, COMPONENT_NAME);
boolean done = false;
// Boolean force_epoch = false;
@@ -109,6 +112,13 @@ public class Scheduler
int nodeStability = 3;
boolean stability = false;
+ // all the stuff needed to manage persistent monotonically-increasing "friendly" ids
+ private String state_dir = null;
+ private static String rm_seqno = "rm.seqno";
+ private static String state_file = null;
+ private static DuccProperties rm_state = null;
+ private static DuccIdFactory idFactory;
+
// static boolean expandByDoubling = true;
// static int initializationCap = 2; // Max allocation until we know initialization works in
// units of *processes*, not shares (i.e.N-shares).
@@ -157,13 +167,30 @@ public class Scheduler
nodeStability = SystemPropertyResolver.getIntProperty("ducc.rm.node.stability", 3); // number of node metrics updates to wait for before scheduling
// 0 means, just jump right in and don't wait
- // initializationCap = RmUtil.getIntProperty("ducc.rm.initialization.cap", 2);
dramOverride = SystemPropertyResolver.getLongProperty("ducc.rm.override.dram", 0);
if ( dramOverride > 0 ) {
dramOverride = dramOverride * (1024 * 1024); // convert to KB
}
+ state_dir = System.getProperty("DUCC_HOME") + "/state";
+ state_file = state_dir + "/rm.properties";
+ rm_state = new DuccProperties();
+ File sf = new File(state_file);
+ int seq = 0;
+ FileInputStream fos;
+ if ( sf.exists() ) {
+ fos = new FileInputStream(state_file);
+ try {
+ rm_state.load(fos);
+ String s = rm_state.getProperty(rm_seqno);
+ seq = Integer.parseInt(s) + 1;
+ } finally {
+ fos.close();
+ }
+ }
+ idFactory = new DuccIdFactory(seq);
+
try {
schedImplName = SystemPropertyResolver.getStringProperty("ducc.rm.scheduler", "org.apache.uima.ducc.rm.rm.ClassBasedScheduler");
@SuppressWarnings("unchecked")
@@ -1128,10 +1155,22 @@ public class Scheduler
m.removeShare(s);
}
- private static DuccIdFactory idFactory = new DuccIdFactory();
- public static DuccId newId()
+ public synchronized static DuccId newId()
{
- return idFactory.next();
+ String methodName = "newId";
+ DuccId id = idFactory.next();
+ try {
+ rm_state.setProperty(rm_seqno, id.toString());
+ FileOutputStream fos = new FileOutputStream(state_file);
+ rm_state.store(fos, "Resource Manager Properties");
+ fos.close();
+ } catch ( Exception e ) {
+ logger.error(methodName, null, "CANNOT ALLOCATE NEW DUCC ID");
+ logger.error(methodName, null, "CANNOT ALLOCATE NEW DUCC ID");
+ logger.error(methodName, null, "CANNOT ALLOCATE NEW DUCC ID BECAUSE OF", e);
+ System.exit(1);
+ }
+ return id;
}
public void queryMachines()