Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

V5.7.2 #20

Merged
merged 68 commits into from
Dec 2, 2024
Merged

V5.7.2 #20

merged 68 commits into from
Dec 2, 2024

Conversation

Jo-stfc
Copy link

@Jo-stfc Jo-stfc commented Dec 2, 2024

No description provided.

abh3 and others added 30 commits October 16, 2024 04:41
Seen on hppa Linux where EBADE is 160.

In function ‘int {anonymous}::initErrTable()’,
    inlined from ‘void __static_initialization_and_destruction_0()’ at /<<PKGBUILDDIR>>/src/XrdSys/XrdSysE2T.cc:92:28,
    inlined from ‘(static initializers for /<<PKGBUILDDIR>>/src/XrdSys/XrdSysE2T.cc)’ at /<<PKGBUILDDIR>>/src/XrdSys/XrdSysE2T.cc:128:1:
/<<PKGBUILDDIR>>/src/XrdSys/XrdSysE2T.cc:70:26: warning: array subscript 160 is above array bounds of ‘const char* [144]’ [-Warray-bounds=]
   70 |    if (Errno2String[EBADE]) {
      |        ~~~~~~~~~~~~~~~~~~^
/<<PKGBUILDDIR>>/src/XrdSys/XrdSysE2T.cc: In function ‘(static initializers for /<<PKGBUILDDIR>>/src/XrdSys/XrdSysE2T.cc)’:
/<<PKGBUILDDIR>>/src/XrdSys/XrdSysE2T.cc:48:28: note: while referencing ‘{anonymous}::Errno2String’
   48 |        const char*         Errno2String[errSlots] = {0};
      |                            ^~~~~~~~~~~~
In function ‘int {anonymous}::initErrTable()’,
    inlined from ‘void __static_initialization_and_destruction_0()’ at /<<PKGBUILDDIR>>/src/XrdSys/XrdSysE2T.cc:92:28,
    inlined from ‘(static initializers for /<<PKGBUILDDIR>>/src/XrdSys/XrdSysE2T.cc)’ at /<<PKGBUILDDIR>>/src/XrdSys/XrdSysE2T.cc:128:1:
/<<PKGBUILDDIR>>/src/XrdSys/XrdSysE2T.cc:74:22: warning: array subscript 160 is above array bounds of ‘const char* [144]’ [-Warray-bounds=]
   74 |    Errno2String[EBADE] = "authentication failed - possible invalid exchange";
      |    ~~~~~~~~~~~~~~~~~~^
/<<PKGBUILDDIR>>/src/XrdSys/XrdSysE2T.cc: In function ‘(static initializers for /<<PKGBUILDDIR>>/src/XrdSys/XrdSysE2T.cc)’:
/<<PKGBUILDDIR>>/src/XrdSys/XrdSysE2T.cc:48:28: note: while referencing ‘{anonymous}::Errno2String’
   48 |        const char*         Errno2String[errSlots] = {0};
      |                            ^~~~~~~~~~~~
The XrdSutCacheArg_t type is used to pass arguments of different
types. The type used must be wide enough to fit the widest of the
types passed. One of the types passed is time_t, which can be 64 bits
wide also on 32-bit systems. So a long, which is 32 bits wide on a
32-bit system is not sufficient.

This commit changes the type to long long.

Fixes: xrootd#2272
Calling openssl rand with 0 as the argument is an error:

$ openssl rand -base64 0
rand: Use -help for summary.
$ echo $?
1
The files generated by doxygen whose file names contain the string
unnamedN where N is a number are not generated using predictable
names.

This happens when running doxygen using multiple threads.

Set NUM_PROC_THREADS=1 to work around this issue.

See: doxygen/doxygen#11138
All supported platforms are now on C++17, so the pipeline API can
be enabled everywhere.

Issue: xrootd#2361
XRootD may be built as part of ROOT as a "builtin", so try to be nice
by suppressing nvc++ warnings to avoid polluting ROOT's own build log.

Issue: xrootd#2361
Causes problems due to unlimited parallel compilation with make.
Better let this be controlled by setting CMAKE_BUILD_PARALLEL_LEVEL
environment variable, which only works if --parallel option is not
passed in the command line.

https://cmake.org/cmake/help/latest/envvar/CMAKE_BUILD_PARALLEL_LEVEL.html

Fixes: xrootd#2356
This directive was always set to true from the XrdTpc.cmake. We
therefore don't need this directive. Removed it and removed the code
that was never used because if it.
Also removed the redundant second transfer size request to improve
efficiency.

Fixes: xrootd#2354
These are very verbose, which may cause short test timeouts to
trigger on slow systems. This change decreases the server log
size from about 10k lines to about 1.8k for the noauth tests.

Issue: xrootd#2336
If one does a GET /path/to/file.txt?authz=... the authz will be
obfuscated in the logline "Parsing first line:"
Instead of invoking a filesystem 'stat', then opening the path,
change the GET code to always try the 'open' first.

If the open fails with an kXR_isDirectory (i.e., `EISDIR`), then 
the code falls back to doing a directory listing.

At a minimum, this will halve the number of 'stat' requests the
underlying storage will see as 'stat' is done twice per request if 
the requests are sent sequentially. At best, it'll eliminate nearly 
all stat calls under high concurrency given the OFS will collapse 
the open files into a single handle and some OSS's will cache the 
results of the first fstat.

Co-authored-by: Fabrizio Furano <[email protected]>
Each time we process successfully from the redrive thread, we should
decrement the status counter.

Otherwise, after multiple requests, the attempt to `Run` from XrdHttp
will fail.  This was observed to cause failures in closing files
100% of the time when the open was delayed, causing failures in
the XrdHttp response.

This additionally adds logging on failures for submitting the run.
Report each error only once for each IO object, then report total counts for
each error type once the IO object is detached.

Previous repeating errors have been downgraded to Debug level.
…#2349

- For most parts, uses stat of the data file for reporting.

- st_size is always set to the full size of the remote file. This is
  either obtained from cinfo file or from xattr variable created when the file
  is initially placed into cache (this is a new optimization).

- st_atim is set to 0 when the file is not considered to be
  fully cached, as determined by the pfc.onlyifcached config settings.
Use POSIX regex functions instead of std::regex, as the
latter is unusable due to the bug below.

https://gcc.gnu.org/bugzilla/show_bug.cgi?id=86164
amadio and others added 28 commits November 26, 2024 08:52
Between the call to stat and the open, the file size may change.
First open the file, then use fstat with the file descriptor to
ensure consistency.
First open then fstat, instead of stat then fopen, to guarantee that
the information from stat and open are consistent with each other.
Afterwards, convert file descriptor to FILE* with fdopen. Ensure also
that the file is closed should an error occur.
Make sure that the information is consistent by first opening and
subsequently using the same file descriptor for all operations.
Since we needed to add an include as well, make sure to include
our own headers first, then system headers.
The defaultID is created with defaultID = new XrdSecsssEnt(...); so
it cannot be deallocated with free(defaultID). Since the destructor
is private, we cannot call delete defaultID either. We must call the
specific function for this, which is defaultID->Delete(), which in
turn will call delete instead of free to deallocate the memory.
Using pointers in expressions that may cause overflow leads to
undefined behavior. See also https://lwn.net/Articles/278137/
The variable jkey is already checked to be non-null a few lines above.
In line 707, there is already an if(!ifList || !(*ifList)) which
makes the check in line 732 redundant.
The multiplication of int * int might be bigger than an int can hold,
but still fits in a size_t. Convert before multiplying to ensure no
overflow.
The multiplication is numq * xfrovhd, which if carried with ints
can overflow before being converted to unsigned long long. Convert
one of the operands to unsigned long long to avoid this.
From the man page for snprintf:

The functions snprintf() and vsnprintf() do not write more than size
bytes (including the terminating null byte ('\0')). If the output was
truncated due to this limit, then the return value is the number of
characters (excluding the terminating null byte) *which would have been
written to the final string if enough space had been available*. Thus,
a return value of size or more means that the output was truncated.

We therefore need to check if n > buffer size, and act accordingly.
The action to upload-artifact@v3 no longer works due to its
reliance on node16, which has just hit EOL and been removed.
Since upload-artifact@v4 also doesn't work on CentOS 7, the
only option to keep builds running is to not upload results.

https://github.blog/changelog/2024-04-16-deprecation-notice-v3-of-the-artifact-actions/
When moving to actions/checkout@v4, v1 was kept on Alpine Linux
by mistake. The previous commit moved CentOS 7 properly to v1,
and this commit fixes the problem in the Alpine Linux build.

Fixes: 9096834
This reverts commit 50209b3.
The fix is incorrect, as struct XrdSecsssRR_Data actually derives
from XrdSecsssRR_DataHdr, which introduces some members in between
such that prData.Data is not actually at the beginning of the struct,
but at some non-zero offset (i.e. different address than &prData).
@Jo-stfc Jo-stfc merged commit c127f3f into v5.7.2patched Dec 2, 2024
5 of 23 checks passed
@Jo-stfc Jo-stfc deleted the v5.7.2 branch December 6, 2024 08:38
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.

7 participants