SMF users and developers,

What would you think about something like this:

        $ svcadm enable nfs/server
        Error: svc:/network/nfs/server:default is locked.
        Use share(1M) to administer this service.
        $ echo $?
        1
        $

        $ svccfg -s nfs/server:default
        svc:/network/nfs/server:default> setprop general/enabled = true
        Error: The general/enabled property is locked.
        Use share(1M) to administer this service.
        svc:/network/nfs/server> exit
        $

The idea is that the NFS developers want to enforce NFS-specific
consistency between the general/enabled properties of the NFS services
(nfsd, statd, lockd, mountd, etc.) and with configuration outside the
repository (sharetab).  Since the repository doesn't provide hooks for
the developer to execute code when a property changes (not that I'm
saying it should), the NFS developers provide the share(1M) command
which knows how to make coordinated changes.  However, one of the
benefits of SMF is actually a problem here -- a standard way to enable
and disable services (svcadm) allows the user to make uncoordinated
changes, which could put the system into an unsupported configuration,
which not only might cause problems, but might cause problems that he
won't discover until later.  So this would allow the NFS developers to
specify that the nfs/server service should be locked and to supply text
which user tools would print if a change is attempted (the bit about
share(1M), here).

I believe this is also a better way to solve the problem that

        6245225 RFE: SMF_EXIT_DISABLE and SMF_EXIT_DISABLE_TEMPORARILY

was filed for.  That is, if the developer knows that a service shouldn't
be enabled, then rather than having the enable operation succeed and the
service magically disable itself, the user should be prevented from
enabling it in the first place and redirected to the appropriate
interface.

One concern I have with this approach is that developers will be tempted
to declare their service as locked in the enabled state and not provide
an interface through which the administrator can disable the service.
This suggests that there should be a way to really override properties,
though it may require extra work (like a -f flag, or extra svccfg
commands).

A detail which isn't clear to me is the granularity at which this
mechanism should operate.  Should the developer be allowed to lock
certain properties, but not others?  Or does it only make sense to lock
an entire service?  It seems that the latter would force an untenable
maintenance problem on the developer, since he would have to add ways to
change all of the properties of the service to the system-specific
interface, including SMF framework properties (like the privileges for
a method), which might grow in the future.


David

Reply via email to