#include <FountainServer.h>
Public Member Functions | |
| void | checkConnections () |
| Checks our listening port for incoming client requests and services existing connections. | |
Private Member Functions | |
| void | registerServiceDirectory () |
| Register with the SSS service directory and setup our listener sockets to take administrative and node monitor requests. | |
| void | handleClientRequest (FountainWireProtPtr clientConnection, ConstParseMsgPtr clientRequest) |
| Handles a client request. | |
| bool | isManager (const char *actor) const |
| Helper function to determine if an actor is granted permissions to administer this Fountain server. | |
| void | sendQuery () |
| Sends a query request to the Fountain nodes. | |
| void | handleNodeRequest (FountainWireProtPtr clientConnection, ConstParseMsgPtr clientRequest, FountainMessage::MessageAction action) |
| Handles a node request. | |
| unsigned int | processNodeQueryResponse (ConstParseMsgPtr nodeMessage) |
| Processes an incoming query response from the node master Fountain node and adds the information to the node monitor database accordingly. | |
| void | joinMasterNode () |
| joins a master Fountain node | |
| void | handleAdmin (FountainWireProtPtr clientConnection, ConstParseMsgPtr clientRequest) |
| Handles an admin client request. | |
| void | handleQuery (FountainWireProtPtr clientConnection, const BambooLib::XMLElement *requestElement) |
| Handles a query client request. | |
| FountainServer (const NodeID &myID, const NodeID &masterNodeID) | |
| Private constructor since we are using a singleton design pattern. | |
| ~FountainServer () | |
| Private destructor since we are using a singleton design pattern. | |
| const FountainServer & | operator= (const FountainServer &rhs) |
| Private assignment operator since we are using a singleton design pattern. | |
| FountainServer (const FountainServer &rhs) | |
| Private copy ctor since we are using a singleton design pattern. | |
Private Attributes | |
| ServerDataSource::NodeHashTable | nodeMonitorDatabase_ |
| ServerDataSource * | serverDataPtr_ |
| FountainSocketHandlers | serverConnections_ |
| std::vector< std::string > | managers_ |
| NodeID | masterNodeID_ |
| FountainWireProtPtr | nodeConnection_ |
| NodeID | myID_ |
| time_t | startTime_ |
| BambooLib::SSS_Protocols | nodeMonitorProtocol_ |
| int | nodeMonitorPort_ |
Friends | |
| class | FountainServerCreator |
The Fountain server is responsible for handling incoming client requests by sending a response message. Its primary purpose in life is to accept node monitor requests in the SSSRMAP format. It responds to these requests by maintaining a node monitor database and matching the request message parameters against each node entry in the database. The node monitor database can be populated and updated by a variety of methods:
Each of these options can be enabled or disabled during the configure step before compiling Fountain. When the Fountain node daemons are enabled, the Fountain server sends them a query request message at a user specified interval. The master Fountain daemon will respond to this request with a query response containing the node statistical information for each node in the Fountain tree topology. The Fountain server then parses this request and updates its node monitor database.
Fountain supports an extensible interface for obtaining statistics about server specific datasources. In this context, a server specific datasource is described as some quantitative source of information that can be gathered by the Fountain server. Certain server specific datasources are orthogonal to the Fountain node daemons, meaning support for the node daemons is disabled when that particular server specific datasource is enabled. For example, Fountain provides support for the Cray XT3 supercomputer by providing a wrapper around various Cray XT3 specific scripts to discover the number of compute nodes and their availability. Obviously on such a system like this, support for the Fountain node daemons should be disabled.
An instance where the Fountain daemons and a server specific datasource can coexist is the Infiniband datasource. In this case, Fountain provides a wrapper around the OpenIB software stack to discover and update Infiniband network resources.
|
||||||||||||
|
Private constructor since we are using a singleton design pattern.
|
|
||||||||||||
|
Handles an admin client request.
|
|
||||||||||||
|
Handles a client request.
|
|
||||||||||||||||
|
Handles a node request.
|
|
||||||||||||
|
Handles a query client request.
|
|
|
Helper function to determine if an actor is granted permissions to administer this Fountain server.
|
|
|
Processes an incoming query response from the node master Fountain node and adds the information to the node monitor database accordingly.
|
|
|
Sends a query request to the Fountain nodes.
|
|
|
A list of usernames who can administer this Fountain server |
|
|
NodeID of the master Fountain node |
|
|
NodeID of this Fountain server |
|
|
FountainWireProt handler to the master Fountain node |
|
|
The node monitor database holds node statistics for a collection of nodes in a cluster or parallel computer |
|
|
Port to listen for Node Monitor requests |
|
|
Protocol used for the Node Monitor port |
|
|
A socket handler instance to maintain our open sockets |
|
|
A bald pointer to our server specific data source |
|
|
The time this object was instantiated |
1.4.6