[svn] commit: r2012 - in /trunk/src/bin/bind10: TODO bind10.py.in bob.spec
BIND 10 source code commits
bind10-changes at lists.isc.org
Tue Jun 1 03:53:16 UTC 2010
Author: shane
Date: Tue Jun 1 03:53:15 2010
New Revision: 2012
Log:
Merging changes from Trac ticket #40.
See https://bind10.isc.org/ticket/40 for a full description of the changes.
Modified:
trunk/src/bin/bind10/TODO
trunk/src/bin/bind10/bind10.py.in
trunk/src/bin/bind10/bob.spec
Modified: trunk/src/bin/bind10/TODO
==============================================================================
--- trunk/src/bin/bind10/TODO (original)
+++ trunk/src/bin/bind10/TODO Tue Jun 1 03:53:15 2010
@@ -1,4 +1,5 @@
-- Read msgq configuration from configuration manager
+- Read msgq configuration from configuration manager (Trac #213)
+ https://bind10.isc.org/ticket/213
- Provide more administrator options:
- Get process list
- Get information on a process (returns list of times started & stopped,
Modified: trunk/src/bin/bind10/bind10.py.in
==============================================================================
--- trunk/src/bin/bind10/bind10.py.in (original)
+++ trunk/src/bin/bind10/bind10.py.in Tue Jun 1 03:53:15 2010
@@ -49,8 +49,6 @@
DATAROOTDIR = "@datarootdir@"
SPECFILE_LOCATION = "@datadir@/@PACKAGE@/bob.spec".replace("${datarootdir}", DATAROOTDIR).replace("${prefix}", PREFIX)
-# TODO: start up statistics thingy
-
import subprocess
import signal
import re
@@ -63,10 +61,7 @@
import isc.cc
# This is the version that gets displayed to the user.
-__version__ = "v20100310"
-
-# Nothing at all to do with the 1990-12-10 article here:
-# http://www.subgenius.com/subg-digest/v2/0056.html
+__version__ = "v20100531"
class RestartSchedule:
"""
@@ -116,7 +111,18 @@
class ProcessInfo:
"""Information about a process"""
- dev_null = open("/dev/null", "w")
+ dev_null = open(os.devnull, "w")
+
+ def __init__(self, name, args, env={}, dev_null_stdout=False,
+ dev_null_stderr=False):
+ self.name = name
+ self.args = args
+ self.env = env
+ self.dev_null_stdout = dev_null_stdout
+ self.dev_null_stderr = dev_null_stderr
+ self.restart_schedule = RestartSchedule()
+ self._spawn()
+
def _spawn(self):
if self.dev_null_stdout:
@@ -143,16 +149,6 @@
self.pid = self.process.pid
self.restart_schedule.set_run_start_time()
- def __init__(self, name, args, env={}, dev_null_stdout=False,
- dev_null_stderr=False):
- self.name = name
- self.args = args
- self.env = env
- self.dev_null_stdout = dev_null_stdout
- self.dev_null_stderr = dev_null_stderr
- self.restart_schedule = RestartSchedule()
- self._spawn()
-
def respawn(self):
self._spawn()
@@ -178,37 +174,28 @@
def config_handler(self, new_config):
if self.verbose:
- print("[bind10] handling new config:")
- print(new_config)
+ sys.stdout.write("[bind10] handling new config:\n")
+ sys.stdout.write(new_config + "\n")
answer = isc.config.ccsession.create_answer(0)
return answer
# TODO
def command_handler(self, command, args):
if self.verbose:
- print("[bind10] Boss got command:")
- print(command)
+ sys.stdout.write("[bind10] Boss got command:\n")
+ sys.stdout.write(command + "\n")
answer = isc.config.ccsession.create_answer(1, "command not implemented")
if type(command) != str:
answer = isc.config.ccsession.create_answer(1, "bad command")
else:
cmd = command
if cmd == "shutdown":
- print("[bind10] got shutdown command")
+ sys.stdout.write("[bind10] got shutdown command\n")
self.runnable = False
answer = isc.config.ccsession.create_answer(0)
- elif cmd == "print_message":
- if args:
- print(args)
- answer = isc.config.ccsession.create_answer(0, args)
- elif cmd == "print_settings":
- print("[bind10] Full Config:")
- full_config = self.ccs.get_full_config()
- for item in full_config:
- print(item + ": " + str(full_config[item]))
- answer = isc.config.ccsession.create_answer(0)
else:
- answer = isc.config.ccsession.create_answer(1, "Unknown command")
+ answer = isc.config.ccsession.create_answer(1,
+ "Unknown command")
return answer
def startup(self):
@@ -229,6 +216,7 @@
self.cc_session = isc.cc.Session(self.msgq_socket_file)
return "b10-msgq already running, or socket file not cleaned , cannot start"
except isc.cc.session.SessionError:
+ # this is the case we want, where the msgq is not running
pass
# start the c-channel daemon
@@ -256,7 +244,6 @@
self.cc_session = isc.cc.Session(self.msgq_socket_file)
except isc.cc.session.SessionError:
time.sleep(0.1)
- #self.cc_session.group_subscribe("Boss", "boss")
# start the configuration manager
if self.verbose:
@@ -269,24 +256,24 @@
return "Unable to start b10-cfgmgr; " + str(e)
self.processes[bind_cfgd.pid] = bind_cfgd
if self.verbose:
- sys.stdout.write("[bind10] Started b10-cfgmgr (PID %d)\n" % bind_cfgd.pid)
-
- # TODO: once this interface is done, replace self.cc_session
- # by this one
+ sys.stdout.write("[bind10] Started b10-cfgmgr (PID %d)\n" %
+ bind_cfgd.pid)
+
# sleep until b10-cfgmgr is fully up and running, this is a good place
# to have a (short) timeout on synchronized groupsend/receive
# TODO: replace the sleep by a listen for ConfigManager started
# message
time.sleep(1)
if self.verbose:
- print("[bind10] starting ccsession")
- self.ccs = isc.config.ModuleCCSession(SPECFILE_LOCATION, self.config_handler, self.command_handler)
+ sys.stdout.write("[bind10] starting ccsession\n")
+ self.ccs = isc.config.ModuleCCSession(SPECFILE_LOCATION,
+ self.config_handler, self.command_handler)
self.ccs.start()
if self.verbose:
- print("[bind10] ccsession started")
-
- # start the xfrout before auth-server, to make sure every xfr-query can be
- # processed properly.
+ sys.stdout.write("[bind10] ccsession started\n")
+
+ # start the xfrout before auth-server, to make sure every xfr-query can
+ # be processed properly.
xfrout_args = ['b10-xfrout']
if self.verbose:
sys.stdout.write("Starting b10-xfrout\n")
@@ -442,65 +429,10 @@
if proc_info.name == "b10-msgq":
if self.verbose and self.runnable:
sys.stdout.write(
- "The b10-msgq process died, shutting down.\n")
+ "The b10-msgq process died, shutting down.\n")
self.runnable = False
else:
sys.stdout.write("Unknown child pid %d exited.\n" % pid)
-
- # 'old' command style, uncommented for now
- # move the handling below move to command_handler please
- #def recv_and_process_cc_msg(self):
- #"""Receive and process the next message on the c-channel,
- #if any."""
- #self.ccs.checkCommand()
- #msg, envelope = self.cc_session.group_recvmsg(False)
- #print(msg)
- #if msg is None:
- # return
- #if not ((type(msg) is dict) and (type(envelope) is dict)):
- # if self.verbose:
- # sys.stdout.write("Non-dictionary message\n")
- # return
- #if not "command" in msg:
- # if self.verbose:
- # if "msg" in envelope:
- # del envelope['msg']
- # sys.stdout.write("Unknown message received\n")
- # sys.stdout.write(pprint.pformat(envelope) + "\n")
- # sys.stdout.write(pprint.pformat(msg) + "\n")
- # return
-
- #cmd = msg['command']
- #if not (type(cmd) is list):
- # if self.verbose:
- # sys.stdout.write("Non-list command\n")
- # return
- #
- # done checking and extracting... time to execute the command
- #if cmd[0] == "shutdown":
- # if self.verbose:
- # sys.stdout.write("shutdown command received\n")
- # self.runnable = False
- # # XXX: reply here?
- #elif cmd[0] == "getProcessList":
- # if self.verbose:
- # sys.stdout.write("getProcessList command received\n")
- # live_processes = [ ]
- # for proc_info in processes:
- # live_processes.append({ "name": proc_info.name,
- # "args": proc_info.args,
- # "pid": proc_info.pid, })
- # dead_processes = [ ]
- # for proc_info in dead_processes:
- # dead_processes.append({ "name": proc_info.name,
- # "args": proc_info.args, })
- # cc.group_reply(envelope, { "response": cmd,
- # "sent": msg["sent"],
- # "live_processes": live_processes,
- # "dead_processes": dead_processes, })
- #else:
- # if self.verbose:
- # sys.stdout.write("Unknown command %s\n" % str(cmd))
def restart_processes(self):
"""Restart any dead processes."""
@@ -514,10 +446,6 @@
for proc_info in self.dead_processes.values():
restart_time = proc_info.restart_schedule.get_restart_time(now)
if restart_time > now:
-# if self.verbose:
-# sys.stdout.write("Dead %s process waiting %.1f seconds "\
-# "for resurrection\n" %
-# (proc_info.name, (restart_time-now)))
if (next_restart is None) or (next_restart > restart_time):
next_restart = restart_time
still_dead[proc_info.pid] = proc_info
Modified: trunk/src/bin/bind10/bob.spec
==============================================================================
--- trunk/src/bin/bind10/bob.spec (original)
+++ trunk/src/bin/bind10/bob.spec Tue Jun 1 03:53:15 2010
@@ -3,35 +3,8 @@
"module_name": "Boss",
"module_description": "Master process",
"config_data": [
- {
- "item_name": "example_string",
- "item_type": "string",
- "item_optional": False,
- "item_default": "Just an example string configuration value"
- },
- {
- "item_name": "example_int",
- "item_type": "integer",
- "item_optional": False,
- "item_default": 1
- }
],
"commands": [
- {
- "command_name": "print_message",
- "command_description": "Print the given message to stdout",
- "command_args": [ {
- "item_name": "message",
- "item_type": "string",
- "item_optional": False,
- "item_default": ""
- } ]
- },
- {
- "command_name": "print_settings",
- "command_description": "Print some_string and some_int to stdout",
- "command_args": []
- },
{
"command_name": "shutdown",
"command_description": "Shut down BIND 10",
More information about the bind10-changes
mailing list