So, the last question I have is, what is the effect of using a zero
instead of the flags? Sorry if everybody else already knows this,
but if there is a flag that says "temporary", I would suppose that
not using it means "permanent". Likewise, I would suppose that not
using the "immediate" flag means "later". So, what is the difference
between using and not using these flags?

Tony Nguyen wrote:
> FYI, Brian used 0 instead of those flags and it solved the problem. A 
> quick look at the code suggests that we probably don't using 
> SMF_IMMEDIATE or SMF_TEMPORARY flags. In svcadm.c,
> 
>                while ((o = getopt(argc, argv, "It")) != -1) {
>                        if (o == 'I')
>                                flags |= MARK_IMMEDIATE;
>                        else if (o == 't')
>                                flags |= MARK_TEMPORARY;
>                        else if (o == '?')
>                                usage();
> ......
> ......
>                } else if (strcmp(argv[optind], "maintenance") == 0) {
>                        callback = force_maintenance;
>                } else {
>                        usage();
>                }
> 
>                if ((err = scf_walk_fmri(h, argc - optind - 1,
>                    argv + optind + 1, 0, callback, NULL, &exit_status,
>                    uu_warn)) != 0) {
> 
> The 6th argument, NULL value, is what we use to call force_maintenance. 
> As the result, force_maintenance always calls set_inst_action with 
> SCF_PROPERTY_MAINT_ON which is the same if we call smf_maintain_instance 
> with 0 flag. Below are snippets from force_maintenance and 
> smf_maintain_instance
> 
> force_maintenance()
> ....
>        if (flags & MARK_IMMEDIATE) {
>                prop = (flags & MARK_TEMPORARY) ?
>                    SCF_PROPERTY_MAINT_ON_IMMTEMP :
>                    SCF_PROPERTY_MAINT_ON_IMMEDIATE;
>        } else {
>                prop = (flags & MARK_TEMPORARY) ?
>                    SCF_PROPERTY_MAINT_ON_TEMPORARY :
>                    SCF_PROPERTY_MAINT_ON;
>        }
> 
>        set_inst_action(wip->fmri, wip->inst, prop);
> 
> smf_maintain_instance()
> ...
>       if (flags & SMF_TEMPORARY)
>                return (set_inst_action(instance,
>                    (flags & SMF_IMMEDIATE) ?
>                    SCF_PROPERTY_MAINT_ON_IMMTEMP :
>                    SCF_PROPERTY_MAINT_ON_TEMPORARY));
>        else
>                return (set_inst_action(instance,
>                    (flags & SMF_IMMEDIATE) ?
>                    SCF_PROPERTY_MAINT_ON_IMMEDIATE :
>                    SCF_PROPERTY_MAINT_ON));
> 
> I'll file a bug so we can further investigate the issue.
> -tony
> 
> Brian Utterback wrote:
>> Notice that my first attempt did not use SMF_IMMEDIATE. I just added
>> that hopefully. I have now removed it again.
>>
>> The output of svcs -l is:
>>
>> # svcs -l ntp
>> fmri         svc:/network/ntp:default
>> name         Network Time Protocol (NTP)
>> enabled      true
>> state        online
>> next_state   none
>> state_time   Tue May 01 09:59:39 2007
>> logfile      /var/svc/log/network-ntp:default.log
>> restarter    svc:/system/svc/restarter:default
>> contract_id  228
>> dependency   require_all/error file://localhost/usr/sbin/ntpq (online) 
>> file://localhost/usr/sbin/ntpdate (online)
>> dependency   require_any/error svc:/network/service (online)
>>
>>
>> The /var/svc/log/network-ntp:default.log has no entries in it from after
>> the startup. The last line is:
>> [ May  1 09:59:39 Method "start" exited with status 0 ]
>>
>>
>>
>> David Bustos wrote:
>>> Quoth Brian Utterback on Tue, May 01, 2007 at 12:26:03PM -0400:
>>>> Okay, I tried that, and smf never kills the process nor even puts it
>>>> into maintenance status. Here is the code I have:
>>>>
>>>>                /* enter the maintenance mode */
>>>>                if ((fmri = getenv("SMF_FMRI")) != NULL) {
>>>>                        if (0 > smf_maintain_instance(fmri,    
>>>>                 SMF_TEMPORARY|SMF_IMMEDIATE)) {
>>>>                                   
>>>> printf("smf_maintain_instance:%s\n",scf_error());
>>>>                                exit(1);
>>>>                        }
>>>>                        /* sleep until SMF kills us */
>>>>                        while (1) {
>>>>                                pause();
>>>>                        }
>>>>                }
>>>
>>> Don't use _IMMEDIATE.  What does "svcs -l" report while you're sleeping?
>>> What does your /var/svc/log file say?
>>>
>>>
>>> David
>>
> 

-- 
blu

"When Congress started Daylight Savings Time earlier, did
they even consider what affect an extra hour of daylight
would have on global warming? Well, did they?"
----------------------------------------------------------------------
Brian Utterback - Solaris RPE, Sun Microsystems, Inc.
Ph:877-259-7345, Em:brian.utterback-at-ess-you-enn-dot-kom

Reply via email to