Print

Print


Hi Pete,

your proposal makes sense to me. We'll discuss it on the POOL meeting  
tomorrow
and will let you know after that.

	Cheers, Dirk

On 7 Mar 2005, at 13:05, Peter Elmer wrote:

>   [Add Dirk]
>
>   Hi All,
>
>   Once I removed the initial "if" block in TSystem::FindHelper(...),  
> so that
> the PluginManager was used and I could specify an alternate to  
> TNetSystem, I
> was able to read files via xrootd from CMS applications (i.e. via  
> POOL).
>
>   There was one additional thing, which IMO is actually a bad feature  
> of POOL.
> When it opens a file read-only in RootDBase::open(...), it does a:
>
>   Bool_t result = gSystem->AccessPathName(nam.c_str(), kFileExists);
>
> up-front _before_ it even tries to do the TFile::Open. While this  
> makes sense
> in the write or update case, I think it makes a lot less sense in the
> read-only case. This is particularly true in situations where:
>
>    o There may be multiple replicas around to read and the decision  
> about
>      which will be read takes place as a result of the TFile::Open.  
> (The
>      client could even wind up using more than one if the first copied  
> found
>      became unavailable and it had to switch.)
>
>    o The file may be obtained at file open time from a MSS or even from
>      another site behind the scenes. In this case the mechanics for  
> doing
>      the heavy work are only triggered by a TFile::Open (or an explicit
>      prestage/prepare, which if done in this particular case would be
>      redundant given the immediate TFile::Open)
>
>   With xrootd (and other systems, too) the more appropriate thing to  
> do in
> the read-only case would just be to open the file (since that was the  
> plan
> anyway) and check afterwards to see if the file open succeeded. One  
> could
> probably hack around this by providing a ::AccessPathName  
> implementation for
> xrootd which gives a fake answer, but the best solution would be to  
> modify
> what is in POOL (or at least provide an option to change the behaviour  
> for
> read-only). Dirk, what do you think?
>
>   (For the moment I just faked my around this in the alternative I  
> provided
> to TNetSystem when using xrootd.)
>
>                                    Pete
>
> On Mon, Mar 07, 2005 at 01:11:14AM +0100, Peter Elmer wrote:
>>   Hi Fons and Gerri,
>>
>>   I found another instance of a hard-coded check on "root://" in
>> TSystem::FindHelper(...), namely:
>>
>>    // create new helper
>>    TRegexp re("^root.*:");  // also roots, rootk, etc
>>    TString pname = path;
>>    if (pname.Index(re) != kNPOS) {
>>       // rootd daemon ...
>>       helper = new TNetSystem(path);
>>    } else if (!strcmp(url.GetProtocol(), "http") &&
>>                      pname.BeginsWith("http")) {
>>       // http ...
>>
>>    } else if ((h = gROOT->GetPluginManager()->FindHandler("TSystem",  
>> path))) {
>>       if (h->LoadPlugin() == -1)
>>          return 0;
>>       helper = (TSystem*) h->ExecPlugin(0);
>>    }
>>
>> This should probably be changed to use the PluginManager to find  
>> TNetSystem.
>> It looks like most (all?) of the functionality is there in the  
>> XrdClientAdmin
>> so presumably a "TXNetSystem" can be made. Fabrizio, what do you  
>> think?
>>
>>   Presumably this can be done as part of the merge of TXNetFile with  
>> the posix
>> client. Do you know of any backwards compatibility issues which will  
>> make it
>> difficult for a TXNetSystem to be backwards compatible with rootd  
>> (using
>> TNetSystem)?
>>
>>                                    Pete
>
>
>
> ----------------------------------------------------------------------- 
> --
> Peter Elmer     E-mail: [log in to unmask]      Phone: +41 (22)  
> 767-4644
> Address: CERN Division PPE, Bat. 32 2C-14, CH-1211 Geneva 23,  
> Switzerland
> ----------------------------------------------------------------------- 
> --