Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
92 commits
Select commit Hold shift + click to select a range
1d2bde3
5.4.3 client compatibility patch
Jo-stfc Mar 28, 2023
44e8b22
SEGV fix for multistream
Jo-stfc Mar 28, 2023
afe6e32
CMS token patch for scope /
Jan 11, 2024
f2422ae
patch to reject /foobar paths when scope is set to /foo
Jan 17, 2024
445e69b
add stat permission to create/modify/delete in scitokens
Feb 9, 2024
5ab9a35
allow stat and folder creation of superfolders according to specs in …
Feb 9, 2024
c3ac3ad
allow stat and folder creation of superfolders according to specs in …
Feb 9, 2024
a3a69a6
restrict mkdir superfolder permission to create/modify scopes only
Jo-stfc Feb 15, 2024
fc51cea
revised load balancing algorithm - weighed random selection
Jo-stfc Feb 28, 2024
684d851
default to skip nodes
Jo-stfc Feb 28, 2024
d435439
sort compilation warnings
Jo-stfc Feb 29, 2024
b4d4962
Merge pull request #4 from stfc/superfolder_access
Jo-stfc Feb 29, 2024
1d846c8
remove stale checksum check in standard xrootd
Feb 13, 2024
8095f8a
Merge pull request #10 from stfc/noscript_checksum
Jo-stfc Mar 4, 2024
e8e6433
add case when multiple nodes report max load for selection to still h…
Jo-stfc Mar 4, 2024
975006c
Merge branch 'v5.5.4patched' into noscript_checksum
Jo-stfc Apr 30, 2024
025b629
Merge pull request #9 from stfc/noscript_checksum
Jo-stfc Apr 30, 2024
df37fd8
Merge pull request #12 from stfc/v5.5.4patched
Jo-stfc May 8, 2024
6db725d
case insensitive headers for xrdhttp
Jo-stfc May 8, 2024
8123a86
Merge pull request #13 from stfc/v5.5.4fix
Jo-stfc May 8, 2024
f9e1691
making random generation static to limit memory usage
Jun 13, 2024
553935d
prevent allocation overflow for weighed array when no nodes are logge…
Jun 14, 2024
1531255
restrict new LB to section previously taken by load selection
Jun 14, 2024
c071a30
restrict new LB to section previously taken by load selection
Jun 14, 2024
9986339
revert LB algorithm for rocky8 primary cmsd
Jun 14, 2024
8af86c8
static array
Jun 19, 2024
d81af68
static array
Jun 19, 2024
a8181eb
stop crashes due to CA
Jo-stfc Jun 21, 2024
9686073
pgrwdbg
Jo-stfc Jun 21, 2024
0d9a457
pgrwdbg
Jo-stfc Jun 21, 2024
f2fce2e
do not pgio
Jo-stfc Jun 21, 2024
cf22600
Amadio's fix
Jo-stfc Jun 25, 2024
09080c2
Merge pull request #15 from stfc/upstream_lb
Jo-stfc Jul 26, 2024
f753f67
Merge branch 'v5.5.4patched' into rocky8temp
Jo-stfc Jul 26, 2024
7764992
Merge branch 'v5.7.0patched' into rocky8temp
Jo-stfc Aug 4, 2024
d03e7e3
Merge pull request #16 from stfc/rocky8temp
Jo-stfc Aug 4, 2024
d2dc437
remove Centos7 CI
Jo-stfc Aug 4, 2024
ed754de
fixed version
Jo-stfc Aug 8, 2024
6dd8cd1
XrdCeph module back into core
Jo-stfc Aug 8, 2024
003d5e8
[XrdPfc] Make sure direct vread requests conform to protocol limits. …
osschar Aug 22, 2024
431f515
[Protocol] Define readv limits.
abh3 Aug 17, 2024
1796a3c
[Protocol] Indicate whether or not server has a cache in kXR_Protocol…
abh3 Jul 31, 2024
fdf0e65
spec tuning
Jo-stfc Sep 9, 2024
b53f318
Merge tag 'v5.7.1' of https://github.com/xrootd/xrootd
Jo-stfc Sep 9, 2024
bfcf7db
Merge branch 'v5.7.1withceph' into v5.7.1
Jo-stfc Sep 9, 2024
46dca9d
Merge pull request #18 from stfc/v5.7.1
Jo-stfc Sep 9, 2024
d583a7f
match spec
Jo-stfc Sep 18, 2024
441fd05
edit filenotfound response for dfs
Jo-stfc Sep 24, 2024
286bb3a
feat: allow redirection of write requests
Oct 10, 2024
16892b5
Merge branch 'v5.7.2patched' into v5.7.1withceph
Jo-stfc Dec 6, 2024
fb90ef3
Merge pull request #21 from stfc/v5.7.1withceph
Jo-stfc Dec 6, 2024
0a101bd
compiler warning fix
Jo-stfc Dec 6, 2024
e8d9f6a
add useratpool in server logs in case of failure
Jo-stfc Dec 16, 2024
192f76d
clear checksum on write completion
Jo-stfc Dec 16, 2024
e5062d8
Merge branch 'v5.7.3patched' into master
Jo-stfc Jan 30, 2025
4019669
Merge pull request #22 from stfc/master
Jo-stfc Feb 3, 2025
582009a
Merge branch 'xrootd:master' into master
Jo-stfc Feb 3, 2025
ffed5a7
Merge pull request #23 from stfc/master
Jo-stfc Feb 3, 2025
737888c
Add initial support for calculating Adler32 on-the-fly
Feb 4, 2025
d4fbe3d
Merge pull request #24 from stfc/v5.7.3patched
Jo-stfc Feb 4, 2025
686c08a
Lint
alex-rg Feb 10, 2025
e4a549b
fix: do not use RD_open2 option for redirecrts
alex-rg Feb 10, 2025
5b42730
Merge pull request #26 from alex-rg/add_redirection
Jo-stfc Feb 10, 2025
1e05c26
feat: allow buffering layer to work only for writes
alex-rg Feb 19, 2025
81e6c1b
version bump
Jo-stfc Feb 19, 2025
d9cb1ed
Change config options. The default is to not calculate the streamed c…
Feb 28, 2025
e5e1569
swap extern use to pass compilation
Jo-stfc Feb 28, 2025
2dd683d
update file not found response
Jo-stfc Mar 12, 2025
2f47f8f
Open checksum record file once, in XrdCephPosix.cc . Do not log unini…
Mar 13, 2025
de924c0
Use strdup to ensure that concatenation of C String .c_str() works co…
Mar 16, 2025
fd0f842
Remove duplicate definition of ts_rfc3339 in XrdCephOss
Mar 17, 2025
730ddaa
Merge branch 'v5.7.8patched' into v5.7.3patched
Jo-stfc Mar 18, 2025
7b57249
Move to use Use XRootD's own checksum calculator class rather than us…
Mar 26, 2025
e08d302
Merge branch 'use-xrdckscalc' into xrdceph-otf-checksums
Mar 26, 2025
b37f482
Add a delete call on XrdCksCalcalder32 object obtained by new
Mar 27, 2025
d5ce2bf
Adjust CMake so macaroons can build with json-c
bbockelm Mar 23, 2024
9e9b14b
Add support to replace scitoken with macaroon on redirects
bbockelm May 31, 2024
416a35c
Merge branch 'redirtoken' into v5.7.3patched
Jo-stfc Apr 28, 2025
e235eed
Merge pull request #31 from stfc/v5.7.3patched
Jo-stfc Apr 28, 2025
f1dc6fd
Merge pull request #32 from stfc/v5.7.3patched
Jo-stfc May 12, 2025
cebb439
Merge pull request #33 from stfc/redirtoken
Jo-stfc May 12, 2025
da9ee61
Merge branch 'xrdceph-otf-checksums' into v5.8.2patched
Jo-stfc May 12, 2025
75a7a8b
Merge pull request #34 from stfc/v5.8.2patched
Jo-stfc May 12, 2025
678a073
Update VERSION
Jo-stfc May 27, 2025
b65fd9f
lock writing to checksum log file
Jo-stfc Jun 10, 2025
881795a
cleanup, explicit declaration and initializations to avoid segfault
Jo-stfc Jun 10, 2025
eaedba3
linting improvements and disable streamed checksums for aio as it wou…
Jo-stfc Sep 23, 2025
68f172a
Merge branch 'v5.8.4patched' into xrdceph-otf-checksums
Jo-stfc Sep 23, 2025
6b2b7c0
Merge pull request #36 from stfc/xrdceph-otf-checksums
Jo-stfc Sep 23, 2025
7a88ed9
Merge branch 'v5.8.4patched' into v5.8.2patched
Jo-stfc Sep 23, 2025
f4d0934
Merge pull request #37 from stfc/v5.8.2patched
Jo-stfc Sep 23, 2025
d73cbdb
Merge branch 'v5.9.2patched' into v5.8.4patched
Jo-stfc Mar 30, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 0 additions & 1 deletion .github/workflows/CI.yml
Original file line number Diff line number Diff line change
Expand Up @@ -92,7 +92,6 @@ jobs:
run: |
tests/post-install.sh
tests/check-headers.sh

alma8:
name: Alma 8
runs-on: ubuntu-latest
Expand Down
2 changes: 1 addition & 1 deletion VERSION
Original file line number Diff line number Diff line change
@@ -1 +1 @@
$Format:%(describe)$
v5.8.2
5 changes: 5 additions & 0 deletions packaging/makesrpm.sh
Original file line number Diff line number Diff line change
Expand Up @@ -125,6 +125,11 @@ echo "[i] Working with version: $VERSION"
# Sanitize version to work with RPMs
# https://docs.fedoraproject.org/en-US/packaging-guidelines/Versioning/
#-------------------------------------------------------------------------------
RELEASE=4
if test x`echo $VERSION | grep -E $RCEXP` != x; then
RELEASE=0.`echo $VERSION | sed 's/.*-rc/rc/'`
VERSION=`echo $VERSION | sed 's/-rc.*//'`
fi

VERSION=${VERSION#v} # remove "v" prefix
VERSION=${VERSION/-rc/~rc} # release candidates use ~ in RPMs
Expand Down
7 changes: 5 additions & 2 deletions src/XrdCeph/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -13,12 +13,15 @@ else()
endif()
endif()

include_directories( ${RADOS_INCLUDE_DIR} )

set(BUILD_CEPH TRUE CACHE BOOL INTERNAL FORCE)

add_library(XrdCephPosix SHARED
XrdCephPosix.cc XrdCephPosix.hh
XrdCephBulkAioRead.cc XrdCephBulkAioRead.hh)


target_compile_options(XrdCephPosix
PRIVATE -Wno-deprecated-declarations)

Expand All @@ -29,7 +32,7 @@ target_include_directories(XrdCephPosix
PUBLIC ${RADOS_INCLUDE_DIR} $<BUILD_INTERFACE:${PROJECT_SOURCE_DIR}/src>)

set_target_properties(XrdCephPosix
PROPERTIES VERSION 0.0.1 SOVERSION 0)
PROPERTIES VERSION 5.7.0 SOVERSION 0)

set(LIB_XRD_CEPH XrdCeph-${PLUGIN_VERSION})

Expand All @@ -50,7 +53,7 @@ add_library(${LIB_XRD_CEPH} MODULE
)

target_link_libraries(${LIB_XRD_CEPH}
PRIVATE XrdCephPosix XrdUtils XrdServer ${RADOS_LIBS})
PRIVATE ${XROOTD_LIBRARIES} XrdCephPosix XrdUtils XrdServer ${RADOS_LIBS})

set(LIB_XRD_CEPH_XATTR XrdCephXattr-${PLUGIN_VERSION})

Expand Down
94 changes: 81 additions & 13 deletions src/XrdCeph/XrdCephOss.cc
Original file line number Diff line number Diff line change
Expand Up @@ -28,21 +28,21 @@
#include <fcntl.h>
#include <limits.h>

#include "XrdVersion.hh"
#include "XrdCeph/XrdCephOss.hh"
#include "XrdCeph/XrdCephOssDir.hh"
#include "XrdCeph/XrdCephOssFile.hh"
#include <chrono>
#include "XrdCeph/XrdCephPosix.hh"
#include "XrdCeph/XrdCephOssBufferedFile.hh"
#include "XrdCeph/XrdCephOssReadVFile.hh"

#include "XrdOuc/XrdOucEnv.hh"
#include "XrdSys/XrdSysError.hh"
#include "XrdSys/XrdSysPlatform.hh"
#include "XrdOuc/XrdOucTrace.hh"
#include "XrdOuc/XrdOucStream.hh"
#include "XrdOuc/XrdOucName2Name.hh"
#include "XrdOuc/XrdOucN2NLoader.hh"
#include "XrdVersion.hh"
#include "XrdCeph/XrdCephOss.hh"
#include "XrdCeph/XrdCephOssDir.hh"
#include "XrdCeph/XrdCephOssFile.hh"
#include "XrdCeph/XrdCephOssBufferedFile.hh"
#include "XrdCeph/XrdCephOssReadVFile.hh"

XrdVERSIONINFO(XrdOssGetStorageSystem, XrdCephOss);

Expand Down Expand Up @@ -115,7 +115,7 @@ ssize_t getNumericAttr(const char* const path, const char* attrName, const int m
if (attrLen <= 0) {
retval = -EINVAL;
} else {
attrValue[attrLen] = '\0';
attrValue[attrLen] = (char)'\0';
char *endPointer = (char *)NULL;
retval = strtoll(attrValue, &endPointer, 10);
}
Expand All @@ -127,6 +127,9 @@ ssize_t getNumericAttr(const char* const path, const char* attrName, const int m
return retval;

}
char *g_cksLogFileName;

extern FILE *g_cksLogFile;

extern "C"
{
Expand Down Expand Up @@ -165,6 +168,12 @@ XrdCephOss::~XrdCephOss() {
extern unsigned int g_maxCephPoolIdx;
extern unsigned int g_cephAioWaitThresh;

bool g_calcStreamedAdler32;
bool g_storeStreamedAdler32;
bool g_logStreamedAdler32;



int XrdCephOss::Configure(const char *configfn, XrdSysError &Eroute) {
int NoGo = 0;
XrdOucEnv myEnv;
Expand Down Expand Up @@ -348,7 +357,7 @@ int XrdCephOss::Configure(const char *configfn, XrdSysError &Eroute) {
if (!Config.GetRest(parms, sizeof(parms)) || parms[0]) {
Eroute.Emsg("Config", "readvalgname parameters will be ignored");
}
m_configBufferIOmode = var; // allowed values would be aio, io
m_configBufferIOmode = var; // allowed values would be aio, io, write-only-io
} else {
Eroute.Emsg("Config", "Missing value for ceph.bufferiomode in config file", configfn);
return 1;
Expand All @@ -361,19 +370,78 @@ int XrdCephOss::Configure(const char *configfn, XrdSysError &Eroute) {
m_configPoolnames = var;
} else {
Eroute.Emsg("Config", "Missing value for ceph.reportingpools in config file", configfn);
return 1;
return 1;
}
}
if (!strcmp(var, "ceph.streamed-cks-adler32")) { // Streaming Adler32 checksum

var = Config.GetWord();
if (var) {
/*
* Currently, actions are simply additive:
*
* Store implies calculate, log, store
* Log implies calculate, log
* Calc implies calculate
*
* Might want to make e.g. logging optional in the future,
* when storing is more prevalent.
*
* Instead of setting g_* flags in three conditionals,
* can switch to setting values in a single bitfield flag
*
*/
if (strstr(var, "calc")) {
g_calcStreamedAdler32 = true;
g_logStreamedAdler32 = false;
g_storeStreamedAdler32 = false;
}
if (strstr(var, "log")) {
g_calcStreamedAdler32 = true;
g_logStreamedAdler32 = true;
g_storeStreamedAdler32 = false;
}
if (strstr(var, "store")) {
g_calcStreamedAdler32 = true;
g_logStreamedAdler32 = true;
g_storeStreamedAdler32 = true;
}

}
}
} // while
}// "ceph.streamed-cks-adler32"

// Now check if any errors occurred during file i/o
if (!strcmp(var, "ceph.streamed-cks-logfile") ) {
var = Config.GetWord();
if (var) {
g_cksLogFileName = strdup(var);
} else {
const char *defLogFileName = "/tmp/checksums.log"; // To-DO: Move defLogFileName so it can also be used as fallback
// when attempt to open specified log file below fails
Eroute.Emsg("Config", "Missing value for ceph.streamed-cks-logfile in config file, setting to default = ", defLogFileName);
g_cksLogFileName = strdup(defLogFileName);
return 1;
}
}// "ceph.streamed-cks-logfile"

}
// Now check if any errors occured during file i/o
int retc = Config.LastError();
if (retc) {
NoGo = Eroute.Emsg("Config", -retc, "read config file",
configfn);
}
Config.Close();

if (g_logStreamedAdler32) {
if (NULL == (g_cksLogFile = fopen(g_cksLogFileName, "a"))) {
g_logStreamedAdler32 = false;
Eroute.Emsg("Config: ", "cannot open file for logging checksum values and pathname", g_cksLogFileName);
return 1;
} else {
Eroute.Emsg("Config: ", "Opened file for logging checksum values and pathname: ", g_cksLogFileName);
}
}

}
return NoGo;
}
Expand Down
2 changes: 0 additions & 2 deletions src/XrdCeph/XrdCephOss.hh
Original file line number Diff line number Diff line change
Expand Up @@ -26,9 +26,7 @@
#define __CEPH_OSS_HH__

#include <string>

#include <XrdOss/XrdOss.hh>
#include <XrdSys/XrdSysError.hh>

//------------------------------------------------------------------------------
//! This class implements XrdOss interface for usage with a CEPH storage.
Expand Down
9 changes: 7 additions & 2 deletions src/XrdCeph/XrdCephOssBufferedFile.cc
Original file line number Diff line number Diff line change
Expand Up @@ -151,6 +151,10 @@ ssize_t XrdCephOssBufferedFile::Read(off_t offset, size_t blen) {
ssize_t XrdCephOssBufferedFile::Read(void *buff, off_t offset, size_t blen) {
size_t thread_id = std::hash<std::thread::id>{}(std::this_thread::get_id());

if (m_bufferIOmode == "write-only-io") {
return m_xrdOssDF->Read(buff, offset, blen);
}

IXrdCephBufferAlg * buffer{nullptr};
// check for, and create if needed, a buffer
{
Expand Down Expand Up @@ -326,11 +330,12 @@ std::unique_ptr<XrdCephBuffer::IXrdCephBufferAlg> XrdCephOssBufferedFile::create
std::unique_ptr<ICephIOAdapter> cephio;
if (m_bufferIOmode == "aio") {
cephio = std::unique_ptr<ICephIOAdapter>(new CephIOAdapterAIORaw(cephbuffer.get(),m_fd));
} else if (m_bufferIOmode == "io") {
} else if (m_bufferIOmode == "io" || m_bufferIOmode == "write-only-io") {
cephio = std::unique_ptr<ICephIOAdapter>(new CephIOAdapterRaw(cephbuffer.get(),m_fd,
!m_cephoss->m_useDefaultPreadAlg));
} else {
BUFLOG("XrdCephOssBufferedFile: buffer mode needs to be one of aio|io " );
BUFLOG("XrdCephOssBufferedFile: buffer mode needs to be one of aio|io|write-only-io " );

m_xrdOssDF->Close();
return bufferAlg; // invalid instance;
}
Expand Down
Loading
Loading