Author: degenaro
Date: Thu Jun  9 15:06:18 2016
New Revision: 1747558

URL: http://svn.apache.org/viewvc?rev=1747558&view=rev
Log:
UIMA-4937 DUCC Resource Manager (RM) exception running rm_qload command

Added:
    uima/sandbox/uima-ducc/trunk/src/main/admin.future/
    uima/sandbox/uima-ducc/trunk/src/main/admin.future/rm_qload   (with props)
Removed:
    uima/sandbox/uima-ducc/trunk/src/main/admin/rm_qload

Added: uima/sandbox/uima-ducc/trunk/src/main/admin.future/rm_qload
URL: 
http://svn.apache.org/viewvc/uima/sandbox/uima-ducc/trunk/src/main/admin.future/rm_qload?rev=1747558&view=auto
==============================================================================
--- uima/sandbox/uima-ducc/trunk/src/main/admin.future/rm_qload (added)
+++ uima/sandbox/uima-ducc/trunk/src/main/admin.future/rm_qload Thu Jun  9 
15:06:18 2016
@@ -0,0 +1,138 @@
+#!/usr/bin/env python
+# -----------------------------------------------------------------------
+# 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.
+# -----------------------------------------------------------------------
+
+# Intended for cooperative scheduling.
+# Dumps important information that a "proxy" RM would need to make the 
+# bridge between an external scheduler and DUCC RM. 
+
+import os
+import sys
+import subprocess
+
+from ducc_util  import DuccUtil
+
+class DuccRmQLoad(DuccUtil):
+
+    def format_array(self, ar):
+        fmt = ''
+        for i in range(0, len(ar)):
+            fmt = fmt + '%4d '
+
+        return (fmt % tuple(ar))
+
+    def format_classes(self, cls):
+    
+        # print the list of classes; each class is a dictionary
+        for cl in cls:
+            print 'Class', cl['name'], 'policy', cl['policy']
+            print '   requested', self.format_array(cl['requested'])
+            print '   awarded  ', self.format_array(cl['awarded'])
+            print ''
+    
+    def format_nodepools(self, nps):
+    
+        # print the list of nodepools; each nodepool is a dictionary
+        for np in nps:
+            print 'Nodepool', np['name']
+            print '   online', np['online'], 'dead', np['dead'], 'offline', 
np['offline'], 'total-shares', np['total-shares'], 'free-shares', 
np['free-shares']
+            print '   all     machines:', self.format_array(np['all-machines'])
+            print '   online  machines:', 
self.format_array(np['online-machines'])
+            print '   free    machines:', 
self.format_array(np['free-machines'])
+            print '   virtual machines:', 
self.format_array(np['virtual-machines'])
+            print ''
+    
+    #
+    # The input is structured like this:
+    # A dictionary with these keys:
+    #     quantum
+    #        value is a single integer
+    #     classes
+    #        value is a list of dictionaries describing demand
+    #                with these keys
+    #                    name
+    #                       value is string, the name of the class
+    #                    policy
+    #                       value is the scheduling policy
+    #                    requested
+    #                       value is a list of integers
+    #                    awarded
+    #                       value is a list of integers
+    #     nodepools
+    #        value is a list of dictionaries describing a node pool
+    #                 with these keys
+    #                    name
+    #                       value is the namne of the nodepool
+    #                    online
+    #                       value is an integer
+    #                    dead
+    #                       value is an integer
+    #                    offline
+    #                       value is an integer
+    #                    total-shares
+    #                       value is an integer
+    #                    free-shares
+    #                       value is an integer
+    #                    all-machines
+    #                       value is a list of integers
+    #                    online-machines
+    #                       value is a list of integers
+    #                    free-machines
+    #                       value is a list of integers
+    #                    virtual-machines
+    #                       value is a list of integers
+    # 
+    def format(self, lines):
+        qload = eval(lines)
+    
+        print 'Quantum:', qload['quantum']
+        print ''
+        self.format_classes(qload['classes'])
+        self.format_nodepools(qload['nodepools'])
+    
+    def main(self, argv):
+    
+        if len(argv) > 0:
+            print 'rm_qload queries and formats the current state of the RM 
scheduling tables. It takes no parameters.'
+            sys.exit(1);
+
+        DUCC_JVM_OPTS = ' -Dducc.deploy.configuration=' + self.DUCC_HOME + 
"/resources/ducc.properties "
+        DUCC_JVM_OPTS = DUCC_JVM_OPTS + ' -DDUCC_HOME=' + self.DUCC_HOME
+        DUCC_JVM_OPTS = DUCC_JVM_OPTS + ' -Dducc.head=' + 
self.ducc_properties.get('ducc.head')
+
+        CMD = [self.java(), DUCC_JVM_OPTS, 
'org.apache.uima.ducc.common.main.DuccRmAdmin', '--qload']
+        CMD = ' '.join(CMD)
+        lines = ''
+        proc = subprocess.Popen(CMD, bufsize=0, stdout=subprocess.PIPE, 
shell=True)
+        for line in proc.stdout:
+            lines = lines + line
+
+        if 'not yet initialized' in lines:
+            print lines
+            return
+
+        self.format(lines)
+        
+        return
+
+if __name__ == "__main__":
+    query = DuccRmQLoad()
+    query.main(sys.argv[1:])
+
+    

Propchange: uima/sandbox/uima-ducc/trunk/src/main/admin.future/rm_qload
------------------------------------------------------------------------------
    svn:executable = *


Reply via email to