The base encoding comes from the RFC 3230 that describes how the checksum
should be returned. The RFC essentially says that legacy checksums
need to be returned unencoded while other checksums should be returned
encoded base64. It winds up that crc32c is a new checksum while crc32 is a
legacy checksum (adler32 was not mentioned). At least, that's the reading
of the RFC 3230.
On Wed, 8 Mar 2023, Petr Vokac wrote:
> Following document doesn't speak about base64 encoding for crc32c
>
> https://www.iana.org/assignments/http-dig-alg/http-dig-alg.xml
>
> and Davix checksum extraction magic also don't really expect base64 encoded
> crc32c
>
> https://gitlab.cern.ch/dmc/davix/-/blob/devel/src/utils/checksum_extractor.cpp#L72-L111
>
> btw: crc32c is not supported by all our storage implementation (e.g. dCache)
>
> https://github.com/dCache/dcache/blob/master/modules/dcache/src/main/java/org/dcache/util/Checksums.java#L50-L55
>
> Petr
>
> On 3/8/23 16:00, Doidge, Matt wrote:
>> Hello all,
>> I've was tinkering after adding crc32c support to one of our xrootd servers
>> and saw an odd behaviour with gfal-sum over https when trying to return a
>> crc32c checksum - it's returning an encoded version of the checksum.
>> gfal-sum over root works as expected. xrdcrc32c performed on the file
>> locally returns the expected result.
>>
>> gfal-sum
>> root://stor015.hec.lancs.ac.uk:1095/cephfs/grid/dteam/crc32chttpstest5.txt
>> crc32c
>> root://stor015.hec.lancs.ac.uk:1095/cephfs/grid/dteam/crc32chttpstest5.txt
>> d98fa965
>>
>> $gfal-sum
>> https://stor015.hec.lancs.ac.uk:1095/cephfs/grid/dteam/crc32chttpstest5.txt
>> crc32c
>> https://stor015.hec.lancs.ac.uk:1095/cephfs/grid/dteam/crc32chttpstest5.txt
>> 2Y+pZQ==
>>
>> $ echo "2Y+pZQ==" | base64 -d | xxd -ps
>> d98fa965
>>
>> I tried to deduce if this is a problem within gfal tools, and looking into
>> the verbose output (-vvv) I think the "2Y+pZQ==" is what is being returned
>> by the server, from a snippet below:
>>
>> DEBUG Davix: Request sent; retry is 0.
>> INFO Davix: < HTTP/1.1 200 OK
>> INFO Davix: < Connection: Keep-Alive
>> INFO Davix: < Server: XrootD/v5.5.2
>> INFO Davix: < Content-Length: 996
>> INFO Davix: < Digest: crc32c=2Y+pZQ==
>> INFO Davix: <
>> DEBUG Davix: End of headers.
>>
>> The file exists on disk with the extended attribute below:
>> user.XrdCks.crc32c=0sY3JjMzJjAAAAAAAAAAAAAAAAAABkCJzmAAAAAAAAAATZj6llAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
>>
>> (which again if you binary decode you can see the checksum in there).
>>
>> Note with adler32 we do not see anything out of the ordinary, checksums are
>> returned as expected with https:// or root:// Our filesystem xroot is
>> writing to is cephfs, the operating system is Rocky8, and xroot version
>> 5.5.3. The line used to configure our checksums is just:
>>
>> xrootd.chksum max 32 adler32 crc32c
>>
>> I am wondering if this is an xroot bug (then I'll open an issue), a likely
>> bug in our setup (then I'd appreciate a pointer to it!) or a problem with
>> gfal (where I'll throw them a ticket).
>>
>> Thanks in advance all,
>> Matt
>> ########################################################################
>> Use REPLY-ALL to reply to list
>>
>> To unsubscribe from the XROOTD-L list, click the following link:
>> https://listserv.slac.stanford.edu/cgi-bin/wa?SUBED1=XROOTD-L&A=1
>
> ########################################################################
> Use REPLY-ALL to reply to list
>
> To unsubscribe from the XROOTD-L list, click the following link:
> https://listserv.slac.stanford.edu/cgi-bin/wa?SUBED1=XROOTD-L&A=1
>
########################################################################
Use REPLY-ALL to reply to list
To unsubscribe from the XROOTD-L list, click the following link:
https://listserv.slac.stanford.edu/cgi-bin/wa?SUBED1=XROOTD-L&A=1
|