Skip Navigation Links | |
Exit Print View | |
Oracle Solaris Cluster Data Services Developer's Guide Oracle Solaris Cluster 4.1 |
1. Overview of Resource Management
Analyzing the Application for Suitability
Determining the Interface to Use
Setting Up the Development Environment for Writing a Data Service
How to Set Up the Development Environment
Transferring a Data Service to a Cluster
Setting Resource and Resource Type Properties
Declaring Resource Type Properties
Declaring Extension Properties
Starting and Stopping a Resource
Deciding Which Start and Stop Methods to Use
Using the Optional Init, Fini, and Boot Methods
Guidelines for Implementing a Fini Method
Implementing Monitors and Methods That Execute Exclusively in the Global Zone
Adding Message Logging to a Resource
Providing Administrative Support for a Resource
Implementing a Failover Resource
Implementing a Scalable Resource
Validation Checks for Scalable Services
Writing and Testing Data Services
Using TCP Keep-Alives to Protect the Server
Coordinating Dependencies Between Resources
Rules for Names Except Resource Type Names
3. Resource Management API Reference
6. Data Service Development Library
8. Sample DSDL Resource Type Implementation
9. Oracle Solaris Cluster Agent Builder
12. Cluster Reconfiguration Notification Protocol
13. Security for Data Services
A. Sample Data Service Code Listings
B. DSDL Sample Resource Type Code Listings
C. Requirements for Non-Cluster-Aware Applications
D. Document Type Definitions for the CRNP
This section provides general information that pertains to implementing the callback methods.
Generally, callback methods require access to the properties of the resource. The RMAPI provides both shell commands and C functions that you can use in callback methods to access the system-defined and extension properties of resources. See the scha_resource_get(1HA) and scha_resource_get(3HA) man pages.
The DSDL provides a set of C functions (one function for each property) to access system-defined properties, and a function to access extension properties. See the scds_property_functions(3HA) and scds_get_ext_property(3HA) man pages.
You cannot use the property mechanism to store dynamic state information for a data service because no API functions are available for setting resource properties other than Status and Status_msg. Rather, you should store dynamic state information in global files.
Note - The cluster administrator can set particular resource properties by using the clresource command or through a graphical administrative command or interface. However, do not call clresource from any callback method because clresource fails during cluster reconfiguration, that is, when the RGM calls the method.
In general, the RGM does not call a method more than once in succession on the same resource with the same arguments. However, if a Start method fails, the RGM can call a Stop method on a resource even though the resource was never started. Likewise, a resource daemon could die of its own accord and the RGM might still run its Stop method on it. The same scenarios apply to the Monitor_start and Monitor_stop methods.
For these reasons, you must build idempotence into your Stop and Monitor_stop methods. In other words, repeated calls to Stop or Monitor_stop on the same resource with the same arguments must achieve the same results as a single call.
One implication of idempotence is that Stop and Monitor_stop must return 0 (success) even if the resource or monitor is already stopped and no work is to be done.
Note - The Init, Fini, Boot, and Update methods must also be idempotent. A Start method need not be idempotent.
If declared in the RTR file, the Global_zone resource type property indicates whether the methods of a resource type execute in the global zone. If the Global_zone property equals TRUE, methods execute in the global zone.
If the resource is configured in the global zone, the -Z zonename option is not invoked.
The Global_zone resource type property is described in more detail in Resource Type Properties and in the rt_properties(5) man page.