The Distributed Database System
Description of important data structures:
The important data structures in this application include the following: Capability, Message, and NameContext.
For this design, the capability includes a ComHandle of the node holding the resource for which the capability was issued, a ClassID, and Class Version Number for which the capability was issued, and an objectID. The ComHandle includes the IP address, the port number, and the epoch number of the machine at the particular IP address.
The ClassID and Class Version numbers are used to identify what type of object the capability is for (eg. a Cell object, a Table object, etc). The ClassID and Class Version numbers are used when capabilities are either sent as arguments to a method, or when they are returned as out arguments in a response message. In the case where the capability is used as a target capability to identify a particular object on which to invoke methods, the ClassID and Class Version numbers are redundant, as these values are included in the RPC.ResponseMessage class header.
The ObjectID identifies a particular instance of an object on the server at the given ComHandle. For this implementation, the ObjectID is an integer which increments by one each time a new capability is created.
The RPC.Message super class is the main data structure used for communication (requests) between different nodes. There are two types of RPC Messages: the RequestMessage and the ResponseMessage.
The RequestMessage format includes the following:
Request type (Class Request or Object Request)
ClassID and Class Version Number (for Class Requests only)
Target object capability (for object requests only)
The Method Version number
Note: for class based RPC, the target object capability is set as null (eg. For NameServer.getRootContext())