You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@uima.apache.org by bu...@apache.org on 2015/09/23 21:07:40 UTC

svn commit: r1704917 - /uima/sandbox/uima-ducc/branches/uima-ducc-2.0.1/uima-ducc-common/src/main/java/org/apache/uima/ducc/common/utils/DuccSchedulerClasses.java

Author: burn
Date: Wed Sep 23 19:07:40 2015
New Revision: 1704917

URL: http://svn.apache.org/viewvc?rev=1704917&view=rev
Log:
UIMA-4610 merge revision 1704853 into the 2.0.1 branch

Modified:
    uima/sandbox/uima-ducc/branches/uima-ducc-2.0.1/uima-ducc-common/src/main/java/org/apache/uima/ducc/common/utils/DuccSchedulerClasses.java   (contents, props changed)

Modified: uima/sandbox/uima-ducc/branches/uima-ducc-2.0.1/uima-ducc-common/src/main/java/org/apache/uima/ducc/common/utils/DuccSchedulerClasses.java
URL: http://svn.apache.org/viewvc/uima/sandbox/uima-ducc/branches/uima-ducc-2.0.1/uima-ducc-common/src/main/java/org/apache/uima/ducc/common/utils/DuccSchedulerClasses.java?rev=1704917&r1=1704916&r2=1704917&view=diff
==============================================================================
--- uima/sandbox/uima-ducc/branches/uima-ducc-2.0.1/uima-ducc-common/src/main/java/org/apache/uima/ducc/common/utils/DuccSchedulerClasses.java (original)
+++ uima/sandbox/uima-ducc/branches/uima-ducc-2.0.1/uima-ducc-common/src/main/java/org/apache/uima/ducc/common/utils/DuccSchedulerClasses.java Wed Sep 23 19:07:40 2015
@@ -33,20 +33,25 @@ public class DuccSchedulerClasses {
 	public static final String JobDriver = "JobDriver";
 	
 	private static DuccSchedulerClasses instance = null;
-
+	 
 	private long lastModified = 0;
-    NodeConfiguration nodeConfiguration = null;
-    DuccLogger logger = null;
+	private DuccLogger logger = null;
+	private NodeConfiguration nodeConfiguration = null;
 
 	private String fileName = null;
 	
 	public static DuccSchedulerClasses getInstance() {
-		if(instance == null) {
-			instance = new DuccSchedulerClasses();
+	    // Use double check locking for safety
+		if (instance == null) {
+		    synchronized(DuccSchedulerClasses.class){
+                if (instance == null) {
+                    instance = new DuccSchedulerClasses();
+                }
+		    }
 		}
 		return instance;
 	}
-	
+
 	private DuccSchedulerClasses() {
 	    String dir_home = Utils.findDuccHome();  // Ensure DUCC_HOME is in the System properties
 		String key = DuccPropertiesResolver.ducc_rm_class_definitions;
@@ -69,32 +74,29 @@ public class DuccSchedulerClasses {
 	public NodeConfiguration readConfiguration() 
         throws Exception
     {
-        instance = getInstance();
-
         File file = new File(fileName);
         if ( lastModified != file.lastModified() ) {         // reread if it looks like it changed
             synchronized(this) {    // Ensure parallel threads see a valid nodeConfiguration 
-                nodeConfiguration = new NodeConfiguration(fileName, null, null, logger); // UIMA-4275 use single common constructor
-                nodeConfiguration.readConfiguration();
-                lastModified = file.lastModified();   // Update this AFTER the nodeConfiguration is valid
+                if ( lastModified != file.lastModified() ) { // an earlier thread may have already done the work
+                    nodeConfiguration = new NodeConfiguration(fileName, null, null, logger); // UIMA-4275 use single common constructor
+                    nodeConfiguration.readConfiguration();
+                    lastModified = file.lastModified();   // Update this AFTER the nodeConfiguration is valid
+                }
             }
         }
-
 		return nodeConfiguration;
 	}
     
     public Map<String, DuccProperties> getClasses()
     	throws Exception
     {
-        readConfiguration();
-        return nodeConfiguration.getClasses();
+        return readConfiguration().getClasses();
     }
 
   public boolean isPreemptable(String class_name) throws Exception {
     boolean retVal = false;
-    readConfiguration();
 
-    DuccProperties properties = nodeConfiguration.getClass(class_name);
+    DuccProperties properties = readConfiguration().getClass(class_name);
     if (properties == null) {
       throw new IllegalArgumentException("Invalid scheduling_class: " + class_name);
     }
@@ -109,8 +111,7 @@ public class DuccSchedulerClasses {
 	    throws Exception
 	{
 		String retVal = null;
-        readConfiguration();
-        DuccProperties properties = nodeConfiguration.getDefaultFairShareClass();
+        DuccProperties properties = readConfiguration().getDefaultFairShareClass();
         if ( properties != null ) {
             retVal = properties.getProperty("name");
         }
@@ -122,8 +123,7 @@ public class DuccSchedulerClasses {
      */
     public String getDebugClassDefaultName() throws Exception {
         String retVal = null;
-        readConfiguration();
-        DuccProperties properties = nodeConfiguration.getDefaultFixedClass();
+        DuccProperties properties = readConfiguration().getDefaultFixedClass();
         if (properties != null) {
             retVal = properties.getProperty("name");
         }
@@ -134,8 +134,7 @@ public class DuccSchedulerClasses {
 	    throws Exception
 	{
 		String retVal = null;
-        readConfiguration();
-        DuccProperties properties = nodeConfiguration.getClass(class_name);
+        DuccProperties properties = readConfiguration().getClass(class_name);
         if ( properties != null ) {
             retVal = properties.getProperty("debug");
         }
@@ -148,8 +147,7 @@ public class DuccSchedulerClasses {
 	public String[] getReserveClasses()
         throws Exception
     {
-        readConfiguration();
-        Map<String, DuccProperties> allClasses = nodeConfiguration.getClasses();
+        Map<String, DuccProperties> allClasses = readConfiguration().getClasses();
         ArrayList<String> classList = new ArrayList<String>();
         for ( DuccProperties p : allClasses.values() ) {
             String pol = p.getProperty("policy");
@@ -166,8 +164,7 @@ public class DuccSchedulerClasses {
 	public String[] getFixedClasses()
         throws Exception
     {
-        readConfiguration();
-        Map<String, DuccProperties> allClasses = nodeConfiguration.getClasses();
+        Map<String, DuccProperties> allClasses = readConfiguration().getClasses();
         ArrayList<String> classList = new ArrayList<String>();
         for ( DuccProperties p : allClasses.values() ) {
             String pol = p.getProperty("policy");
@@ -185,8 +182,7 @@ public class DuccSchedulerClasses {
 		throws Exception
 	{
 		String retVal = "";
-        readConfiguration();
-        DuccProperties properties = nodeConfiguration.getDefaultReserveClass();
+        DuccProperties properties = readConfiguration().getDefaultReserveClass();
         if ( properties != null ) {
             retVal = properties.getProperty("name");
         }

Propchange: uima/sandbox/uima-ducc/branches/uima-ducc-2.0.1/uima-ducc-common/src/main/java/org/apache/uima/ducc/common/utils/DuccSchedulerClasses.java
------------------------------------------------------------------------------
--- svn:mergeinfo (added)
+++ svn:mergeinfo Wed Sep 23 19:07:40 2015
@@ -0,0 +1 @@
+/uima/sandbox/uima-ducc/trunk/uima-ducc-common/src/main/java/org/apache/uima/ducc/common/utils/DuccSchedulerClasses.java:1704853