@@ -293,6 +293,23 @@ void Source::determineHostExcludeString(XrdCl::File &file, const XrdCl::HostList
293293 // We assume this is a federation context if there's at least a regional, dCache door,
294294 // and dCache pool server (so, more than 2 servers!).
295295
296+ // Further explanation of the motivation from recollections of Brian Bockelman
297+ // 1. The way dCache sites are (were?) integrated into AAA they
298+ // required a standalone server, separate from dCache itself,
299+ // that would advertise file availability (via running the cmsd
300+ // component).
301+ // 2. When a file-open failed for a dCache "pool" (the disk server
302+ // itself), adding the pool name to the exclude list was useless
303+ // because the client was subsequently redirected to server in
304+ // item (1) which, unlike native XRootD solutions, was not aware
305+ // of what pool the client would land on (i.e., it didn't know it
306+ // would redirect again to the same bad pool).
307+ // 3. So, the code had to take an informed guess as to which the
308+ // site integration server (item 1) was by walking up the list of
309+ // redirects and try to hit the first native XRootD source.
310+ // That's what the heuristic in
311+ // Source::determineHostExcludeString is trying to do.
312+
296313 exclude = " " ;
297314 if (hostList && (hostList->size () > 3 ) && isDCachePool (file, hostList)) {
298315 const XrdCl::HostInfo &info = (*hostList)[hostList->size () - 3 ];
0 commit comments