David,

All right, please enter the bug. :)

        Anton Pak

On Tue, 11 Oct 2011 21:50:07 +0400, David McKinley <[email protected]>  
wrote:

> Hi Anton,
>
> I guess I have some more to say about the OpenHPI use of saHpiDiscover().
>
> You wrote,
>
>>
>>  From my point of view the code:
>>
>> -------------------
>> saHpiSessionOpen();
>> saHpiDiscover();
>> ...
>> -------------------
>>
>> is better than
>>
>> -------------------
>> do {
>>    rv = saHpiSessionOpen();
>> while ( rv != SA_OK );
>> ...
>> -------------------
>>
>
> But, that's not the choice!  If the HPI daemon is not yet started, the  
> call to saHpiSessionOpen() will fail, so you will still need to have a  
> retry built-in for that case.  Once the daemon has started, and gets  
> part-way through initialization, it then returns SA_OK, but you still  
> don't have a usable session - because the data reflecting the  
> pre-existing state of the system is not yet initialized in the domain.   
> So, for the "benefit" of exiting your retry loop early, you have to  
> include a second call to wait for the rest of the initialization to  
> complete.  There is no up side to that for the user.
>
> But, the much bigger problem with this is the potential performance  
> issue.  Although, it may be that OpenHPI does not implement  
> saHpiDiscover() as it was intended to be used, other implementations  
> might.  And, if it is a plug-in issue in OpenHPI, maybe the behavior  
> even differs between plug-ins.  If it *is* implemented correctly, it is  
> very likely an expensive operation whenever it is called.  For the  
> record, the intended purpose for this call is to force the HPI  
> implementation to make sure the domain tables (RPT, DRT, and potentially  
> DAT, although it is not mentioned in the specification with regard to  
> saHpiDiscover) have the latest data available from the platform before  
> returning.  Thus, if the HPI implementation has a polling mechanism of  
> some sort, it should force a poll cycle before it returns.
>
> Why would a user want to control the HPI implementation's polling?  Not  
> for any very good reason, in my opinion, but the argument was that if  
> the user application makes some call that initiates a state change, and  
> then is going to do a query of the cached data, as in the RPT, that  
> application may want to make sure that the updated state from their  
> previous operation is returned.  There is always going to be some  
> latency between a state change happening, and it getting reflected in  
> the domain tables, so if the user is expecting to see a state change, it  
> may be important to control this latency.
>
> On the other hand, unless there is some state change that the user is  
> specifically expecting to see, there is no good reason to care whether  
> the state returned on a particular query is one poll-cycle behind or  
> not.  Thus, requiring the user to make a call to saHpiDiscover() every  
> time they open a session, and incur a potentially significant delay on  
> each startup of their application, is really not very nice.
>
> It is especially unpleasant for HPI user applications that are  
> short-lived.  For example, I wrote a web-based HPI viewer a few years  
> ago that operated by running individual HPI user programs that read  
> specific pieces of data for the web page.  Displaying a web page might  
> entail running a dozen or more of these applets, each of which would  
> open a session, read a little bit of data, then terminate.  Other  
> script-based management agents have similar designs.  But, if each one  
> of those applets need to call saHpiDiscover(), which might block for a  
> few seconds while it waits for a poll cycle to complete, then the  
> performance quickly becomes unacceptable.
>
> So, bottom line, I think that using saHpiDiscover() this way as a  
> workaround for a bug in the implementation is OK, but the daemon really  
> ought to be fixed to work correctly during initialization.  Either delay  
> accepting sessions until the domain tables are populated, or make the  
> functions that query these tables smart enough to know when the tables  
> are not yet initialized, so that the correct data can be fetched  
> just-in-time if the user requests it.  My guess is that delaying  
> accepting sessions is the easier option.
>
> Regards,
>
> David
> ------------------------------------------------------------------------------
> All the data continuously generated in your IT infrastructure contains a
> definitive record of customers, application performance, security
> threats, fraudulent activity and more. Splunk takes this data and makes
> sense of it. Business sense. IT sense. Common sense.
> http://p.sf.net/sfu/splunk-d2d-oct
> _______________________________________________
> Openhpi-devel mailing list
> [email protected]
> https://lists.sourceforge.net/lists/listinfo/openhpi-devel

------------------------------------------------------------------------------
All the data continuously generated in your IT infrastructure contains a
definitive record of customers, application performance, security
threats, fraudulent activity and more. Splunk takes this data and makes
sense of it. Business sense. IT sense. Common sense.
http://p.sf.net/sfu/splunk-d2d-oct
_______________________________________________
Openhpi-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/openhpi-devel

Reply via email to