Skip to content

V5.8.2patched#34

Merged
Jo-stfc merged 261 commits intoxrdceph-otf-checksumsfrom
v5.8.2patched
May 12, 2025
Merged

V5.8.2patched#34
Jo-stfc merged 261 commits intoxrdceph-otf-checksumsfrom
v5.8.2patched

Conversation

@Jo-stfc
Copy link
Copy Markdown
Collaborator

@Jo-stfc Jo-stfc commented May 12, 2025

v5.8.2 merge

bbockelm and others added 30 commits February 13, 2025 15:20
Apache, when generating a HTML listing of a local directory,
will suffix directory names with a trailing slash.  This PR
tweaks the XRootD directory listing to do the same and adds
a corresponding integration test.

Beyond matching common practice, the HTTP fsspec plugin in
the Python ecosystem uses the trailing slash as a heuristic
to indicate a directory.  With this change, Python users
should be able to recursively list directories in XRootD.
While not strictly required, this makes a significant
improvement for the lives of Python users.
The resource string is unquoted when the request is handled but in
case of a redirect the resource should be quoted again otherwise
the client will be redirected with a different path than the initial
one.
that are accessed both via HTTP and XRootD.

Extend the cluster tests configuration by enabling HTTP support and
exercise uploads, downloads also via HTTP protocol for data that is
distributed in the cluster. The main target of the new tests is to
ensure the proper unquoting and quoting functionality in the XrdHttp
layer.
This adds some simple, statically-defined headers to the
integration test to ensure they are appropriately included in the
responses.
Map various connection-related errors in XrdCl in XCache all the
way through to the HTTP layer.

This allows a failure to connect to the origin to be represented
with the correct status code ("Bad Gateway"); currently, a down
origin results in a 500 ("Internal Server Error") which is misleading
for users.
In the new SciTag specification, the content of the emitted firefly
should always be created from the data sender point of view.
For HTTP PUT: the srcIp is the client, dstIP is the server,
sentBytes=socketReceivedBytes (~=fileSize),
receivedBytes=socketSentBytes (~=0)
For HTTP GET: the srcIP is the server, dstIP is the client,
sentBytes=socketSentBytes(~=fileSize)
receivedBytes=socketReceivedBytes(~=0)

The distinction is therefore done via the pmark.appname CGI that is
equal to "http-get" if the client request is a GET request or equal to
"http-put" if not.
This is needed in order to allow a planned change in the way substreams
are assigned to network pollers.
It was noticed that for reads there may be some inefficiencies when
xcache is involved. For writes, however, the buffering layer improved
pefromance significantly.

So, it make sense to introduce the write-only mode.
When trying to use XrdPosix on Apple, the code is not able to find
system calls like open64. This patch assumes that Apple is always 64bit
and maps these functions to the "regular" system calls. Using
XRDPOSIX_REPORT=1 reports two more missing functions, namely acl() and
Lgetxattr() which cannot be found. These are disabled by this patch when
running on this platform. With this fix in xrootd, the next version of
CERNLIB can be xrootd enabled as well on Apple.
…d xattr metadata item. (#9)

In the case a file has an existing (stuck) lock, when the file is requested to be deleted, it will fail with -EBUSY. In this case we remove the lock and retry the unlink command.
This asserts therefore that a delete should take precedence over other activities.
As libradosstriper uses shared locks for both reads and writes, there is little chance to catch the few edge cases where this behaviour may be less desirable.
The lock removal is achieved through the removal of the lock extended attribute, using libradosstriper methods.

Co-authored-by: James Walder <james.walder@stfc.ac.uk>
* set flags

* commented change
* Buffer implementation for XrdCeph

* Better error return code values

* Add timing into BufferIO

* Add timing into BufferSimple

* Utils code area

* Update raw data access and copy

* Adding Extents

* ReadV simple logic

* Add to own files the readV implementations

* Add to own files the readV implementations; cmake updated

* Logging improvements and write buffer updates

* Add IOadapter with blocking aio access

* Use IOadapter with blocking aio access

* Small logging update

* Reduce logging information; fix timeing to ms

* Reduce logging information;

* Reduced logging, and better use of aggregated metrics

* comment clean and typo fixes

* Remove uncessary file close

* Additional logging in case of problems

* Additional logging in case of problems

* allow option for buffering with IO or AIO buffer

Co-authored-by: james <james.walder@stfc.ac.uk>
Co-authored-by: root <root@host-172-16-112-239.nubes.stfc.ac.uk>

merge variable rpm name into bufferedIO (#19)

* variable rpm name

* Update xrootd-ceph.spec.in

* Update makesrpm.sh

* Update makesrpm.sh

Fixes to remove warnings from devtoolset-9 compilation

Master buffered ceph io (#20)

* Buffer implementation for XrdCeph

* Better error return code values

* Add timing into BufferIO

* Add timing into BufferSimple

* Utils code area

* Update raw data access and copy

* Adding Extents

* ReadV simple logic

* Add to own files the readV implementations

* Add to own files the readV implementations; cmake updated

* Logging improvements and write buffer updates

* Add IOadapter with blocking aio access

* Use IOadapter with blocking aio access

* Small logging update

* Reduce logging information; fix timeing to ms

* Reduce logging information;

* Reduced logging, and better use of aggregated metrics

* comment clean and typo fixes

* Remove uncessary file close

* Additional logging in case of problems

* Additional logging in case of problems

* allow option for buffering with IO or AIO buffer

* fix conflicts

* Allow for finite retries on EBUSY, else fail with EIO.

It is possible for a read/write from the buffer to return EBUSY due to an underlying issue.
In these cases, if the -EBUSY is returned out of XrdCeph, a large number of retries can originate.
It is better at this point for the transfer to be flagged as failed, and retried properly.
The code allows for 5 retries with a 1s sleep between them. If this doesn't work - which it might not -
then an -EIO error is returned to xrootd.
Other error messages are not affected.

* Better summary stats output for CephIOAdapterRaw

* Comment out a comment

Co-authored-by: james <james.walder@stfc.ac.uk>
Co-authored-by: root <root@host-172-16-112-239.nubes.stfc.ac.uk>

variable version/release for template (#21)

Update bufferedIO with updates from master (#26)

* variable rpm name (#17)

* variable rpm name

* Update xrootd-ceph.spec.in

* Update makesrpm.sh

* Update makesrpm.sh

* Master cephnamelib (#16)

* Allow ceph.namelib to take params and apply translation to full path

* Reduce logging

Remove extraneous logging messages

* simplify parsing of namelib and added a log line for any remapped file

Co-authored-by: James <James.walder@stfc.ac.uk>

* XRD-22 Fix ensuring the correct filename is passed to the CephFile instance. (#24)

A regression in previous commit meant that the filename was not correctly passed
to the CephFile instance. This fix ensures that the filename is set correctly.

Co-authored-by: james <james.walder@stfc.ac.uk>

* re-introduce variable names to spec input (#27)

Co-authored-by: Jo-stfc <71326101+Jo-stfc@users.noreply.github.com>
Co-authored-by: James <James.walder@stfc.ac.uk>

Decreased logging for bufferedIO operations. (#25)

Reduced printouts. Only summary stats now produced, rather than the logging per read.

Co-authored-by: James Walder <james.walder@stfc.ac.uk>

Updates from master to buffered io needed for 550 2 (#32)

* XRD-12 Add timestamp information for ceph logging methods

Update the logwrapper method to print out the current timestamp in the initial section of output.

* Return permission denied on write attempt on existing file with EXCL set (#31)

Co-authored-by: James Walder <james.walder@stfc.ac.uk>

* disable posc (#30)

posc is disabled for proxies, but not for a unified setup. XrdCeph does not support the posc flag as it misinterprets objects as folders

Co-authored-by: James Walder <james.walder@stfc.ac.uk>
Co-authored-by: Jo-stfc <71326101+Jo-stfc@users.noreply.github.com>

Buffered io multibuffers (#38)

* Add multiple buffer support for reads in case of simultaneous threads reading the same file.

* Further refinements to the simultaneous file reads code

 - Ensure all relevent read / write methods will create a buffer if needed
 - Validty check on close that a buffer was actually created (or bypass code if not)
 - Bugfix in case of odd read sizes combined with multi/split buffer reads (critical)
 - Clean of comments included for development

* Enhanced logging for cluster metrics and readV layer improvments (#35)

- dumpCLusterInfo to check on the rados connection info
  - extra logging in a delete to give info on delete times
  - update the readV basic alg to do a simple bulk request

Co-authored-by: James Walder <james.walder@stfc.ac.uk>

* Add time taken to unlink a file in the logging message

  - Logging an unlink now includes the time taken, in cases of (un)successful deletes
  - Remove some extraneous comments

* - Fix issue with buffer passthrough read
 - Add maximum number of simultaneous buffers for a given file
Once a given number of opens have been made against the same file, don't
create a large buffer, and only create a 1MiB buffer for each new file.
This should avoid issues with small paged reads, but would normally hope the
pasthrough mode would be triggered in each read.

* Additional statistics on buffered reading added.

 - Will report bytes read from ceph, bytes read but bypassed the cache, and the cache hit fraction

---------

Co-authored-by: James Walder <james.walder@stfc.ac.uk>

Bug fix for writes with bufferedIO when extending over buffer range.  (#40)

* Bug fix for writes with bufferedIO when extending over buffer range.
 - Fix for case where multiple writes to the buffer are needed for a given xrd write request
 - Previously threw an error; now will correctly perform the multiple writes as required.
 - Set the Simple Data buffer capacity to the input size, rather than the capacity of the vector, which could be larger.

---------

Co-authored-by: James Walder <james.walder@stfc.ac.uk>

variable rpm name (#17)

* variable rpm name

* Update xrootd-ceph.spec.in

* Update makesrpm.sh

* Update makesrpm.sh

re-introduce variable names to spec input (#27)
* test

* fix merge conflict

* extra bracket

* misplaced bracket

* StatLS only takes pool name from section of object path before first colon ':'

* Tidy reporting of pool name to ignore some exraneous characters

* Add XrdSys/XrdSysPlatform.h to get MAXPATHLEN

* Bug fix for writes with bufferedIO when extending over buffer range.  (#40) (#41)

* Bug fix for writes with bufferedIO when extending over buffer range.
 - Fix for case where multiple writes to the buffer are needed for a given xrd write request
 - Previously threw an error; now will correctly perform the multiple writes as required.
 - Set the Simple Data buffer capacity to the input size, rather than the capacity of the vector, which could be larger.

---------

Co-authored-by: snafus <james.walder@gmail.com>
Co-authored-by: James Walder <james.walder@stfc.ac.uk>

---------

Co-authored-by: Ian Johnson <ijjorama@gmail.com>
Co-authored-by: snafus <james.walder@gmail.com>
Co-authored-by: James Walder <james.walder@stfc.ac.uk>
* variable rpm name (#17)

* variable rpm name

* Update xrootd-ceph.spec.in

* Update makesrpm.sh

* Update makesrpm.sh

* Master cephnamelib (#16)

* Allow ceph.namelib to take params and apply translation to full path

* Reduce logging

Remove extraneous logging messages

* simplify parsing of namelib and added a log line for any remapped file

Co-authored-by: James <James.walder@stfc.ac.uk>

* XRD-22 Fix ensuring the correct filename is passed to the CephFile instance. (#24)

A regression in previous commit meant that the filename was not correctly passed
to the CephFile instance. This fix ensures that the filename is set correctly.

Co-authored-by: james <james.walder@stfc.ac.uk>

* XRD-12 Add timestamp information for ceph logging methods

Update the logwrapper method to print out the current timestamp in the initial section of output.

* re-introduce variable names to spec input (#27)

* Return permission denied on write attempt on existing file with EXCL set (#31)

Co-authored-by: James Walder <james.walder@stfc.ac.uk>

* disable posc (#30)

posc is disabled for proxies, but not for a unified setup. XrdCeph does not support the posc flag as it misinterprets objects as folders

* Disk space reporting (#36)

* Provide XrdCephOss::StatLS and ceph_posix_stat_pool to enable disk space reporting. Responds to the 'xrdfs query space' command as requested by ALICE VO

* Remove ts() timestamp function and unnecessary #defines

* Read ceph.poolnames setting from XRootD config to specify reportable pools.

* Support 'xrdfs spaceinfo' via Stat() method returning XrdOssOK for stat'ing 'pool:'

* Tidy up tracing of Stat* calls

* Remove unwanted method isPathReportablePool

* Add comments for need to support stat-ing '/'

* Return -ENOMEM if malloc fails

* Return -ENOMEM if malloc fails

* Rename disk space reporting config item to ceph,reportingppols and log if the list of names is not present. Report if ceph_posix_stat_pool call to get the amount of used space fails

* Sanitize incoming pool name and allow for MonALISA format

* Optional tracing of Stat* incoming paths and response. Remove double logging of ceph.reporting pools.

* Check that sanitized pool name is not marked invalid

* Use ceph namelib translation at Oss level by copying translateFileName logic from Posix level. More error checking if stat can't find pool name.

* Remove superfluous comments

* Ensure tracing of path arguments to Stat() and StatLS(). Add Doxygen-style commments to changed methods

* Make source tarball only as minimum output

* Add make-src-tar.sh to additionally place required source tarball in '--output' destination

* Change back usedSpace to totalSpace in ceph_posix_statfs

* feat: improve (vector) read implementation (#37)

Try to avoid usage of libradosstriper for readv operations
since it may impact performance significantly. To do so we explicitly
determine the objects that constitute a file and read from them using
rados only. Reads are async.

To do these async reads conveniently we introduce a class for handling
multiple async read requests.

* Initial implementation of ReadV at the XrdOss level

* Correct the signature of ReadV to XrdCephOssFile

* feat: do not use libradosstiper for readv operation

* feat: use atomic operations for readv requests

This should be the most efficient way of handling multiple read ops.

* feat: use nonstriper reads for pread requests

* feat: use nonstriper reads for read operations also

To do so we do complete refactoring: bulkAioRead class moved to a
separate file, and its features extended. Namely, it can do reads
from files, not only objects, now.

* feat: print warning message if waiting for aio reads from ceph takes long

This is useful for debugging the reasons of failures for read(v) requests.

* Added some comments

* fix: use size_t for start_block

We can use "%zx" in sprintf, so let's unify the types of variables in
the function. This will also allow us to extend limitations on the
file size.

* feat: refactor BulkAioRead::read method, suggested during review

1. Rename end_block to last_block
2. Move variable definitions closer to its usage
3. Use 'std::min' instead of 'if' for chunk_len determination
4. Use more efficient chunk_start calculation

* feat: add options to allow one to switch to standard read mechanisms

This may be useful for testing.

* feat: rename block_size to object_size in BulkAioRead

New name better describes reality, since we are talking about the size
of ceph objects.

* feat: rename wait_for_complete to submit_and_wait_for_complete

New name describes this function better.

* feat: use more meaningful names for variables that loops over operations map

op_data should describe the contents of the variables better.

* feat: move type definitions into the class

* feat: added comments with method's description

* feat: remove unnecessary semicolons

* feat: convert wait_for_complete method from void to int

This allow one to improve several things. Here we change key to the
operations and use object number instead of full its name.

* fix: fixed comment

* fix: fixed comments

* feat: refactor bulkAioRead class

Pointers were dropped from objectReadOperation and ceph_bufferlist objects.
The objects are moved to appropriate classes to simplify memory management
and usage.

* feat: take into account completion's return value

We can retrieve return code from completion and get meaningful status
of the whole operation with this value.

* feat: allow reading of sparse file

Since we do not really expect sparse files, we use a fallback mechanism:
if a read(v) failed with -ENOENT exit status, then just resubmit it using
striper-based functions.

* lint: remove trailing whitespaces

* feat: use meaningful names for read(v) functions

The name now indicates whether read(v)s are striper or non-striper
ones.

* feat: fallback to striper-based read if number of stripes > 1

Just in case, such files should not be present in our production setup

* feat: allow zero-sized reads

In principle, this is a correct request, so we should support it.

* fix: make sure we do not delete completion objects until submitted operation is completed

This is done to prevent some nasty side-effects, e.g. writing to a deleted buffer.

* fix: remove move constructor from bulkAioRead

We do not use it.

* fix: handle failure to allocate completion

Completion allocation can fail, we should take that into an account.

* feat: use file reference to construct readOp objects

There is no need to extract (and the copy) file name and object size
from file reference to construct read object, we can use file reference
directly.

* feat: replace conversion operator with explicit method

Implicit conversion was making code less readable.

* feat: remove call to is_complete() in completion wrapper destructor

There is no need to check for completion, we can call wait_for_complete
multiple times.

* feat: put warning threshold to config file

It is better to have this value as configurable instead of hardcoded.

* fix: initialize return code variable in ReadOpData

* Added comment

* feat: add comment for future optimization.

We should use `aio_cancel` to cancel all pending read operations in future.

* fix: remove vim's swp file

Commited by accident

* feat: improve logging

Add file descriptor to sparse file's logging, fix typos.

* fix: minor fixes

Remove unnecessary include, move variable declaration closer to the
usage, fix spelling in the comment.

* feat: BulkAioRead::read method refactoring

Refactoring was made to increase (hopefully) readability.

* fix: better wording for comment

* feat: BulkAioRead::read -- change loop exit condition

We can exit when `to_read == 0`. This allow us to drop `end_block`
variable.

* fix: add call to `clear` after getting results

This is to allow clients to use the same readOp object for future
operations.

---------

Co-authored-by: Ian Johnson <ijjorama@gmail.com>
Co-authored-by: Alexander Rogovskiy <alexander.rogovskiy@stfc.ac.uk>

* duplicate struct definition

* move struct definition to headers

* use bufferedIO version of path

* remove MAXPATHLEN redefinition

---------

Co-authored-by: snafus <james.walder@gmail.com>
Co-authored-by: James <James.walder@stfc.ac.uk>
Co-authored-by: root <root@host-172-16-100-119.nubes.stfc.ac.uk>
Co-authored-by: Ian Johnson <ijjorama@gmail.com>
Co-authored-by: alex-rg <alexander.rogovskiy@gmail.com>
Co-authored-by: Alexander Rogovskiy <alexander.rogovskiy@stfc.ac.uk>

Buffered io nonstriperbuffer (#43)

* Add capability for buffer io raw to use striperless reads

* Add capability for buffer io raw to use striperless reads

* Add a maybe striper for reading in ceph posix

* Use striperless reads when bypassing the buffer

feat: improve (vector) read implementation (#37)

Try to avoid usage of libradosstriper for readv operations
since it may impact performance significantly. To do so we explicitly
determine the objects that constitute a file and read from them using
rados only. Reads are async.

To do these async reads conveniently we introduce a class for handling
multiple async read requests.

* Initial implementation of ReadV at the XrdOss level

* Correct the signature of ReadV to XrdCephOssFile

* feat: do not use libradosstiper for readv operation

* feat: use atomic operations for readv requests

This should be the most efficient way of handling multiple read ops.

* feat: use nonstriper reads for pread requests

* feat: use nonstriper reads for read operations also

To do so we do complete refactoring: bulkAioRead class moved to a
separate file, and its features extended. Namely, it can do reads
from files, not only objects, now.

* feat: print warning message if waiting for aio reads from ceph takes long

This is useful for debugging the reasons of failures for read(v) requests.

* Added some comments

* fix: use size_t for start_block

We can use "%zx" in sprintf, so let's unify the types of variables in
the function. This will also allow us to extend limitations on the
file size.

* feat: refactor BulkAioRead::read method, suggested during review

1. Rename end_block to last_block
2. Move variable definitions closer to its usage
3. Use 'std::min' instead of 'if' for chunk_len determination
4. Use more efficient chunk_start calculation

* feat: add options to allow one to switch to standard read mechanisms

This may be useful for testing.

* feat: rename block_size to object_size in BulkAioRead

New name better describes reality, since we are talking about the size
of ceph objects.

* feat: rename wait_for_complete to submit_and_wait_for_complete

New name describes this function better.

* feat: use more meaningful names for variables that loops over operations map

op_data should describe the contents of the variables better.

* feat: move type definitions into the class

* feat: added comments with method's description

* feat: remove unnecessary semicolons

* feat: convert wait_for_complete method from void to int

This allow one to improve several things. Here we change key to the
operations and use object number instead of full its name.

* fix: fixed comment

* fix: fixed comments

* feat: refactor bulkAioRead class

Pointers were dropped from objectReadOperation and ceph_bufferlist objects.
The objects are moved to appropriate classes to simplify memory management
and usage.

* feat: take into account completion's return value

We can retrieve return code from completion and get meaningful status
of the whole operation with this value.

* feat: allow reading of sparse file

Since we do not really expect sparse files, we use a fallback mechanism:
if a read(v) failed with -ENOENT exit status, then just resubmit it using
striper-based functions.

* lint: remove trailing whitespaces

* feat: use meaningful names for read(v) functions

The name now indicates whether read(v)s are striper or non-striper
ones.

* feat: fallback to striper-based read if number of stripes > 1

Just in case, such files should not be present in our production setup

* feat: allow zero-sized reads

In principle, this is a correct request, so we should support it.

* fix: make sure we do not delete completion objects until submitted operation is completed

This is done to prevent some nasty side-effects, e.g. writing to a deleted buffer.

* fix: remove move constructor from bulkAioRead

We do not use it.

* fix: handle failure to allocate completion

Completion allocation can fail, we should take that into an account.

* feat: use file reference to construct readOp objects

There is no need to extract (and the copy) file name and object size
from file reference to construct read object, we can use file reference
directly.

* feat: replace conversion operator with explicit method

Implicit conversion was making code less readable.

* feat: remove call to is_complete() in completion wrapper destructor

There is no need to check for completion, we can call wait_for_complete
multiple times.

* feat: put warning threshold to config file

It is better to have this value as configurable instead of hardcoded.

* fix: initialize return code variable in ReadOpData

* Added comment

* feat: add comment for future optimization.

We should use `aio_cancel` to cancel all pending read operations in future.

* fix: remove vim's swp file

Commited by accident

* feat: improve logging

Add file descriptor to sparse file's logging, fix typos.

* fix: minor fixes

Remove unnecessary include, move variable declaration closer to the
usage, fix spelling in the comment.

* feat: BulkAioRead::read method refactoring

Refactoring was made to increase (hopefully) readability.

* fix: better wording for comment

* feat: BulkAioRead::read -- change loop exit condition

We can exit when `to_read == 0`. This allow us to drop `end_block`
variable.

* fix: add call to `clear` after getting results

This is to allow clients to use the same readOp object for future
operations.

---------

Co-authored-by: Ian Johnson <ijjorama@gmail.com>
Co-authored-by: Alexander Rogovskiy <alexander.rogovskiy@stfc.ac.uk>

Update XrdCephBufferAlgSimple.cc (#45)

Remove verbose logging for case when cache is bypassed, as the read size is at least the size of the buffer.

XRD-22 Fix ensuring the correct filename is passed to the CephFile instance. (#24)

A regression in previous commit meant that the filename was not correctly passed
to the CephFile instance. This fix ensures that the filename is set correctly.

Co-authored-by: james <james.walder@stfc.ac.uk>
* Provide XrdCephOss::StatLS and ceph_posix_stat_pool to enable disk space reporting. Responds to the 'xrdfs query space' command as requested by ALICE VO

* Remove ts() timestamp function and unnecessary #defines

* Read ceph.poolnames setting from XRootD config to specify reportable pools.

* Support 'xrdfs spaceinfo' via Stat() method returning XrdOssOK for stat'ing 'pool:'

* Tidy up tracing of Stat* calls

* Remove unwanted method isPathReportablePool

* Add comments for need to support stat-ing '/'

* Return -ENOMEM if malloc fails

* Return -ENOMEM if malloc fails

* Rename disk space reporting config item to ceph,reportingppols and log if the list of names is not present. Report if ceph_posix_stat_pool call to get the amount of used space fails

* Sanitize incoming pool name and allow for MonALISA format

* Optional tracing of Stat* incoming paths and response. Remove double logging of ceph.reporting pools.

* Check that sanitized pool name is not marked invalid

* Use ceph namelib translation at Oss level by copying translateFileName logic from Posix level. More error checking if stat can't find pool name.

* Remove superfluous comments

* Ensure tracing of path arguments to Stat() and StatLS(). Add Doxygen-style commments to changed methods

* Make source tarball only as minimum output

* Add make-src-tar.sh to additionally place required source tarball in '--output' destination

* Change back usedSpace to totalSpace in ceph_posix_statfs
amadio and others added 29 commits April 29, 2025 15:11
xrootd/src/XrdSecsss/XrdSecsssEnt.cc: In member function ‘bool XrdSecsssEnt::Serialize()’:
xrootd/src/XrdSecsss/XrdSecsssEnt.cc:198:34: warning: overflow in conversion from
  ‘int’ to ‘char’ changes value from ‘255’ to ‘-1’ [-Woverflow]
  198 |        if (!rBuff[0]) rBuff[0] = 0xff;
      |                                  ^~~~
In file included from xrootd/src/Xrd/XrdConfig.cc:65:
xrootd/src/Xrd/XrdConfig.cc: In member function
  ‘int XrdConfig::xrep(XrdSysError*, XrdOucStream&)’:
xrootd/src/Xrd/XrdStats.hh:36:26: warning: overflow in conversion from
  ‘int’ to ‘char’ changes value from ‘255’ to ‘-1’ [-Woverflow]
   36 | #define XRD_STATS_ALL    0x000000FF
      |                          ^~~~~~~~~~
xrootd/src/Xrd/XrdConfig.cc:2153:46: note: in expansion of macro ‘XRD_STATS_ALL’
 2153 |    if (!(val = Config.GetWord())) {repOpts = XRD_STATS_ALL; return 0; }
      |                                              ^~~~~~~~~~~~~
Fixes Clang compiler warning below:

xrootd/src/XrdSys/XrdSysFallocate.cc:81:75: warning: missing field
  'fst_bytesalloc' initializer [-Wmissing-field-initializers]
   81 |         fstore_t store = {F_ALLOCATECONTIG, F_PEOFPOSMODE, 0, offset + len};
      |                                                                           ^

xrootd/src/XrdOfs/XrdOfsCPFile.cc:366:65: warning: missing field
  'fst_bytesalloc' initializer [-Wmissing-field-initializers]
  366 |    fstore_t Store = {F_ALLOCATEALL, F_PEOFPOSMODE, ckpSize, dlen};
      |                                                                 ^
The main reason behind previous compiler warning fixes was to be able
to update the default compiler warning levels for both GCC and Clang.
All warnings for -Wall -Wextra -Wdeprecated, with a few exceptions,
have been fixed. Clang didn't have warnings enabled, now it does, at
the same level as GCC. Some Clang warnings are temporarily disabled
until they are fixed (some may require ABI breaking changes). Some
additional warnings are enabled as errors, such as -Wnull-dereference.
On macOS, AppleClang warns about usage of sprintf and friends, which
have many occurrences in the code, so we don't enable -Wdeprecated.
Inadvertently, the default build type was removed everywhere,
not just on Solaris as intended by the previous commit.

Fixes: a019ae2
These are used as fallback when all other methods of detecting the version fail.
Since the `XrdPss` did not implement the auto-stat protocol (i.e.,
implemented the `StatRet` virtual function in `XrdOssDF`), the
xrootd protocol handler does a directory listing followed by a
`stat` for each entry.  This would cause failures for `XrdPfc` since
stat'ing a subdirectory entry fails with:

```
Unable to locate <subdir name>; is a directory
```

but only if a file is cached in that subdirectory.  This results in
a strange user experience where

```
curl http://cache.example.com/dir
```

succeeds at first but, if you download an object in the subdirectory,

```
curl http://cache.example.com/dir/subdir/foo.txt
```

then the directory listing of `/dir` fails.

Luckily, since XrdCl returns sufficient information to always do the
auto-stat, this is not only an optimization in the proxy but also
serves as a bugfix.
Wrapped the previously created quote() and unquote() so that it returns
a std::string instead.
Modified quote() to take into account the '=' sign in the string encoding
Added a function to encode only the opaque query parameters
Added unit tests

Fixes xrootd#2491
Elsewhere, we use ETIME to indicate a server timeout (particularly,
XRootD uses it for "504 Gateway Timeout").  Many users have found
it confusing that timeouts result in "stale NFS file handle".
Beyond giving the correct HTTP status code, this will cause the
following message to be provided:

```
sTREAM ioctl timeout
```

It's not the greatest -- and the capitalization is strange -- but
at least it includes the word "timeout".  For the xroot protocol,
one receives 3035, `kXR_TimerExpired`.
Python 3.6 and 3.7 have been dropped from the Alma8 manylinux image.
@Jo-stfc Jo-stfc merged commit 75a7a8b into xrdceph-otf-checksums May 12, 2025
26 of 27 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.