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/05/13 19:26:21 UTC
svn commit: r1481980 - /uima/sandbox/uima-ducc/trunk/src/main/admin/stop_ducc
Author: challngr
Date: Mon May 13 17:26:21 2013
New Revision: 1481980
URL: http://svn.apache.org/r1481980
Log:
UIMA-2877 Scripting support for agent quiesce.
Modified:
uima/sandbox/uima-ducc/trunk/src/main/admin/stop_ducc
Modified: uima/sandbox/uima-ducc/trunk/src/main/admin/stop_ducc
URL: http://svn.apache.org/viewvc/uima/sandbox/uima-ducc/trunk/src/main/admin/stop_ducc?rev=1481980&r1=1481979&r2=1481980&view=diff
==============================================================================
--- uima/sandbox/uima-ducc/trunk/src/main/admin/stop_ducc (original)
+++ uima/sandbox/uima-ducc/trunk/src/main/admin/stop_ducc Mon May 13 17:26:21 2013
@@ -86,6 +86,30 @@ class StopDucc(DuccUtil):
self.pids.delete(com)
self.pids.delete(component)
+ def quiesce_agents(self, components, nodes):
+ allnodes = []
+ for ( nf, nl ) in nodes.items():
+ allnodes = allnodes + nl
+
+ for c in components:
+ if ( c.find('@') >= 0 ):
+ com, target_node = c.split('@')
+ allnodes.append(target_node)
+ else:
+ self.invalid("Must specify hostname when stopping", component)
+
+ qparm = ','.join(allnodes)
+ print 'Quiescing', qparm
+ DUCC_JVM_OPTS = ' -Dducc.deploy.configuration=' + self.DUCC_HOME + "/resources/ducc.properties "
+ DUCC_JVM_OPTS = DUCC_JVM_OPTS + ' -Dducc.head=' + self.ducc_properties.get('ducc.head')
+ self.spawn(self.java(), DUCC_JVM_OPTS, 'org.apache.uima.ducc.common.main.DuccAdmin', '--quiesceAgents', qparm)
+
+ for n in allnodes:
+ k = 'agent@' + n
+ self.pids.delete(k)
+
+ return
+
def stop_agents(self, node, force):
self.stop_component('agent@' + node.strip(), force)
@@ -105,6 +129,9 @@ class StopDucc(DuccUtil):
print ''
print ' stop_ducc -n foo.nodes -n bar.nodes -n baz.nodes'
print ''
+ print ' -q --quiesce nodefile'
+ print ' Queesce the nodes in the nodefile.'
+ print ''
print ' -m --management'
print ' Stop the management processes (rm, pm, sm, or, and ws).'
print ''
@@ -150,10 +177,11 @@ class StopDucc(DuccUtil):
do_agents = False
do_components = False
force = False
+ quiesce = False
all = False
try:
- opts, args = getopt.getopt(argv, 'ac:n:kmmn:h?v', ['all', 'component=', 'components=', 'help', 'nodelist=', 'management', 'kill'])
+ opts, args = getopt.getopt(argv, 'ac:n:kmmn:qh?v', ['all', 'component=', 'components=', 'help', 'nodelist=', 'management', 'kill', 'quiesce'])
except:
self.invalid('Invalid arguments ' + ' '.join(argv))
@@ -172,6 +200,8 @@ class StopDucc(DuccUtil):
do_agents = True
elif o in ( '-k', '--kill' ):
force = True
+ elif o in ( '-q', '--quiesce' ):
+ quiesce = True
elif ( o == '-v' ) :
print self.version()
sys.exit(0)
@@ -183,6 +213,18 @@ class StopDucc(DuccUtil):
print 'badarg', a
self.invalid('bad arg: ' + a)
+ if ( quiesce ):
+ if ( management ):
+ self.invalid("May not quiesce management nodes.")
+ if ( all ):
+ self.invalid("May not quiesce 'all'.");
+ if ( force ):
+ self.invalid("May not both quiesce and force.");
+ for c in components:
+ if ( not c.startswith('agent') ):
+ self.invalid("Only agents may be quiesced.")
+
+
# 'management' means stop all the management daemons - if specific components are also specified
# there is at least a redundancy and maybe also a conflict.
if ( do_components and management ):
@@ -215,7 +257,8 @@ class StopDucc(DuccUtil):
self.pids = DuccProperties()
try:
- self.pids.load(self.pid_file)
+ #self.pids.load(self.pid_file)
+ pass
except DuccPropertiesException, (inst):
print inst.msg
print ''
@@ -242,12 +285,15 @@ class StopDucc(DuccUtil):
if ( not ok ):
sys.exit(1)
- for c in components:
- self.stop_component(c, force)
-
- for (nf, nl) in nodes.items():
- for n in nl:
- self.stop_agents(n, force)
+ if ( quiesce ):
+ self.quiesce_agents(components, nodes)
+ else:
+ for c in components:
+ self.stop_component(c, force)
+
+ for (nf, nl) in nodes.items():
+ for n in nl:
+ self.stop_agents(n, force)
if ( len(self.pids) > 0 ):
self.pids.write(self.pid_file)