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 > ----------------------------------------------------------------------- > --