BIND 10 trac800, updated. d9e757fb15b711464cfc8ba344f2563f3e2b9195 [trac800] Provide logging for the sockcreator parser
BIND 10 source code commits
bind10-changes at lists.isc.org
Mon Jul 25 11:48:27 UTC 2011
The branch, trac800 has been updated
via d9e757fb15b711464cfc8ba344f2563f3e2b9195 (commit)
from 517c31a58af1f7b97f308e77caeb8cbe9ef99cf1 (commit)
Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.
- Log -----------------------------------------------------------------
commit d9e757fb15b711464cfc8ba344f2563f3e2b9195
Author: Michal 'vorner' Vaner <michal.vaner at nic.cz>
Date: Mon Jul 25 13:48:15 2011 +0200
[trac800] Provide logging for the sockcreator parser
-----------------------------------------------------------------------
Summary of changes:
src/bin/bind10/bind10_messages.mes | 34 ++++++++++++++++++++++++++++++
src/bin/bind10/sockcreator.py | 17 ++++++++++++++-
src/bin/bind10/tests/sockcreator_test.py | 9 +++++++-
3 files changed, 58 insertions(+), 2 deletions(-)
-----------------------------------------------------------------------
diff --git a/src/bin/bind10/bind10_messages.mes b/src/bin/bind10/bind10_messages.mes
index 3f5f637..392b6c7 100644
--- a/src/bin/bind10/bind10_messages.mes
+++ b/src/bin/bind10/bind10_messages.mes
@@ -155,3 +155,37 @@ the message channel.
An unknown child process has exited. The PID is printed, but no further
action will be taken by the boss process.
+% BIND10_SOCKCREATOR_INIT initializing socket creator parser
+The boss module initializes routines for parsing the socket creator
+protocol.
+
+% BIND10_SOCKCREATOR_TERMINATE terminating socket creator
+The boss module sends a request to terminate to the socket creator.
+
+% BIND10_SOCKET_GET requesting socket [%1]:%2 of type %3 from the creator
+The boss forwards a request for a socket to the socket creator.
+
+% BIND10_SOCKCREATOR_EOF eof while expecting data from socket creator
+There should be more data from the socket creator, but it closed the socket.
+It probably crashed.
+
+% BIND10_SOCKCREATOR_BAD_RESPONSE unknown response for socket request: %1
+The boss requested a socket from the creator, but the answer is unknown. This
+looks like programmer error.
+
+% BIND10_SOCKET_ERROR error on %1 call in the creator: %2/%3
+The socket creator failed to create the requested socket. It failed on the
+indicated OS API function with given error.
+
+% BIND10_SOCKCREATOR_BAD_CAUSE unknown error cause from socket creator: %1
+The socket creator reported an error when creating a socket. But the function
+which failed is unknown (not one of 'S' for socket or 'B' for bind).
+
+% BIND10_SOCKET_CREATED successfully created socket %1
+The socket creator successfully created and sent a requested socket, it has
+the given file number.
+
+% BIND10_SOCKCREATOR_TRANSPORT_ERROR transport error when talking to the socket creator: %1
+Either sending or receiving data from the socket creator failed with the given
+error. The creator probably crashed or some serious OS-level problem happened,
+as the communication happens only on local host.
diff --git a/src/bin/bind10/sockcreator.py b/src/bin/bind10/sockcreator.py
index 44e1d8e..36815ef 100644
--- a/src/bin/bind10/sockcreator.py
+++ b/src/bin/bind10/sockcreator.py
@@ -15,6 +15,10 @@
import socket
import struct
+import os
+from bind10_messages import *
+
+logger = isc.log.Logger("boss")
"""
Module that comunicates with the priviledget socket creator (b10-sockcreator).
@@ -59,6 +63,7 @@ class Parser:
unusual modification of socket object is used to easy up testing.
"""
self.__socket = creator_socket
+ logger.info(BIND10_SOCKCREATOR_INIT)
def terminate(self):
"""
@@ -67,6 +72,7 @@ class Parser:
"""
if self.__socket is None:
raise CreatorError('Terminated already', True)
+ logger.info(BIND10_SOCKCREATOR_TERMINATE)
try:
self.__socket.sendall(b'T')
# Wait for an EOF - it will return empty data
@@ -93,6 +99,7 @@ class Parser:
if self.__socket is None:
raise CreatorError('Socket requested on terminated creator', True)
# First, assemble the request from parts
+ logger.info(BIND10_SOCKET_GET, address, port, socktype)
data = b'S'
if socktype == 'UDP' or socktype == socket.SOCK_DGRAM:
data += b'U'
@@ -114,7 +121,9 @@ class Parser:
answer = self.__socket.recv(1)
if answer == b'S':
# Success!
- return self.__socket.read_fd()
+ result = self.__socket.read_fd()
+ logger.info(BIND10_SOCKET_CREATED, result)
+ return result
elif answer == b'E':
# There was an error, read the error as well
error = self.__socket.recv(1)
@@ -127,14 +136,19 @@ class Parser:
cause = 'bind'
else:
self.__socket = None
+ logger.fatal(BIND10_SOCKCREATOR_BAD_CAUSE, error)
raise CreatorError('Unknown error cause' + str(answer), True)
+ logger.error(BIND10_SOCKET_ERROR, cause, errno[0],
+ os.strerror(errno[0]))
raise CreatorError('Error creating socket on ' + cause, False,
errno[0])
else:
self.__socket = None
+ logger.fatal(BIND10_SOCKCREATOR_BAD_RESPONSE, answer)
raise CreatorError('Unknown response ' + str(answer), True)
except socket.error as se:
self.__socket = None
+ logger.fatal(BIND10_SOCKCREATOR_TRANSPORT_ERROR, str(se))
raise CreatorError(str(se), True)
def __read_all(self, length):
@@ -148,6 +162,7 @@ class Parser:
data = self.__socket.recv(length - len(result))
if len(data) == 0:
self.__socket = None
+ logger.fatal(BIND10_SOCKCREATOR_EOF)
raise CreatorError('Unexpected EOF', True)
result += data
return result
diff --git a/src/bin/bind10/tests/sockcreator_test.py b/src/bin/bind10/tests/sockcreator_test.py
index fee691f..d61254a 100644
--- a/src/bin/bind10/tests/sockcreator_test.py
+++ b/src/bin/bind10/tests/sockcreator_test.py
@@ -22,6 +22,7 @@ import struct
import socket
from bind10.sockcreator import Parser, CreatorError
from isc.net.addr import IPAddr
+import isc.log
class FakeCreator:
"""
@@ -262,10 +263,16 @@ class ParserTests(unittest.TestCase):
"""
Test it rejects invalid address family.
"""
+ # Note: this produces a bad logger output, since this address
+ # can not be converted to string, so the original message with
+ # placeholders is output. This should not happen in practice, so
+ # it is harmless.
addr = IPAddr('0.0.0.0')
- addr.family = 'Nonsense'
+ addr.family = 42
self.assertRaises(ValueError, Parser(FakeCreator([])).get_socket,
addr, 42, socket.SOCK_DGRAM)
if __name__ == '__main__':
+ isc.log.init("bind10") # FIXME Should this be needed?
+ isc.log.resetUnitTestRootLogger()
unittest.main()
More information about the bind10-changes
mailing list