[ClusterLabs] Q: Implementing "reload" operation

Ulrich Windl Ulrich.Windl at rz.uni-regensburg.de
Thu Mar 19 03:28:52 EDT 2020


Hi!

I have a question on my own RA. Consider the following code:

    reload)
        if validate; then
            status=$OCF_SUCCESS
            if ! status; then
                ocf_log info "$1: restarting $subject"
                if start; then
                    ocf_log debug "$1: restarting $subject"
                else
                    ocf_exit_reason "$1: failed to restart $subject"
                    status=$OCF_ERR_GENERIC
                fi
            else
                ocf_log info "$1: $subject active already"
            fi
        else
            status=$?
        fi
        exit $status

The crucial point is "status"'s result depends on the current parameters: If there was a "reload" due to parameter changes, status will have the new parameters and won't see the "old" instance as running, thus just starting the new instance. So stopping the old instance would require having the old parameters.

I wonder how the correct code would look like.

Despite of that the "unique"ness concept has a problem (compare it to the primary key of a database table): It's not possible to express that a combination of parameters has to be unique (e.g. IP address, port number, and protocol). One could merge them into one string, but that looks ugly.

A similar issue exists for "required"ness of a parameter: Depending on another parameter, it could be required, but optional otherwise. Again an ugly solution would be to "glue-together" all required parameters, but in the end you would end up with one complex parameter that is required, and all the parsing and validation checking would happen in the RA. An ugly solution!

(Such issues appear if a resource instance does reflect some kind of setting (like a firewall rule) instead of a process that is running)

Regards,
Ulrich





More information about the Users mailing list