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


Reply via email to