Beyond just making the process less ad hoc, other important
requirements should be established for the extension:
- The extension should be non-intrusive when used; use of the extension's facilities
should not change server behavior.
- Understood in the idea of being an extension is the notion
that control of the facility should be through X clients.
- The extension should be easy to disable. Using conditional compilation,
a version of the
server without XYZ support should be able to be built from the same
source tree as one with XYZ support.
The extension should
be able to be wholely removed from the server without affecting server
operation.
- The extension should be non-intensive; the extension should not
unduly denigrate server performance when used.
- The extension should be able to supply genuinely useful information
to the server implementor.
- The extension should integrate the notion of instrumentation
and tracing. A single mechanism should place tags in the code
and these tags should be usable by either method.
It is the explicit goal of XYZ to meet all of these requirements.
Implicit so far in our discussion is the idea that a server
extension is the right mechanism to provide server instrumentation
and tracing.
Before discussing the actual functionality of the XYZ extension,
some discussion should be presented for why a server extension
is an appropriate means to support X server instrumentation
and tracing.
As mentioned in the requirements, we want to be able to use
the facility through the client-server interface. This is natural
because some interface to the facility will be necessary and the
client-server interface is readily available and network
accessible. Additionally, providing access through the client-server
interface makes it easy to construct tests out of clients.
The facility might be able to be built on top of the current
properties mechanism to avoid implementing an extension. This
mechanism was rejected because it places the instrumentation and tracing
data in a very public data-space. Instead, it is preferable to
provide a private name-space for the instrumentation and tracing
data only accessible through an extension.