Skip to content
GitLab
Projects
Groups
Snippets
/
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
Menu
Open sidebar
dCache
cta
Commits
97b42e85
Commit
97b42e85
authored
May 18, 2021
by
Michael Davis
Browse files
Cta/cta584
parent
bb410bd7
Changes
3
Hide whitespace changes
Inline
Side-by-side
ReleaseNotes.md
View file @
97b42e85
...
...
@@ -10,6 +10,7 @@
-
Upgraded eos-xrootd to 4.12.8 in CI versionlock.list file
-
cta/CTA#966 Unable to distinguish empty and wrong tape pool
-
cta/CTA#926 Improve MigrationReportPacker::ReportSkipped::execute() exception message
-
cta/CTA#584 Validate checksum when recalling from tape
### Bug fixes
...
...
tapeserver/castor/tape/tapeserver/daemon/DiskWriteTask.cpp
View file @
97b42e85
...
...
@@ -239,7 +239,7 @@ void DiskWriteTask::releaseAllBlock(){
//errCode=mb->errorCode();
}
else
{
errorMsg
=
"Mismatch between expected and received filed or blockid"
;
errorMsg
=
"Mismatch between expected and received file
i
d or blockid"
;
//errCode=666;
}
lc
.
log
(
cta
::
log
::
ERR
,
errorMsg
);
...
...
tapeserver/castor/tape/tapeserver/daemon/TapeReadTask.hpp
View file @
97b42e85
...
...
@@ -127,16 +127,12 @@ public:
// end of file. append() also protects against reading too big tape blocks.
while
(
mb
->
m_payload
.
append
(
*
rf
))
{
tapeBlock
++
;
if
(
isVerifyOnly
)
{
// Normally, the checksum is calculated in DiskWriteTask::execute(). In verification-only mode, there is no
// write to disk. As we need to validate the checksum, we calculate it here.
checksum_adler32
=
mb
->
m_payload
.
adler32
(
checksum_adler32
);
}
}
}
catch
(
const
cta
::
exception
::
EndOfFile
&
)
{
// append() signaled the end of the file.
stillReading
=
false
;
}
checksum_adler32
=
mb
->
m_payload
.
adler32
(
checksum_adler32
);
localStats
.
readWriteTime
+=
timer
.
secs
(
cta
::
utils
::
Timer
::
resetCounter
);
auto
blockSize
=
mb
->
m_payload
.
size
();
localStats
.
dataVolume
+=
blockSize
;
...
...
@@ -144,12 +140,15 @@ public:
localStats
.
repackBytesCount
+=
blockSize
;
}
else
if
(
isVerifyOnly
)
{
localStats
.
verifiedBytesCount
+=
blockSize
;
// Don't write the file to disk
mb
->
markAsVerifyOnly
();
}
else
{
localStats
.
userBytesCount
+=
blockSize
;
}
if
(
isVerifyOnly
)
{
// Don't write the file to disk
mb
->
markAsVerifyOnly
();
// If we reached the end of the file, validate the checksum (throws an exception on bad checksum)
if
(
!
stillReading
)
{
tapeReadChecksum
.
insert
(
cta
::
checksum
::
ADLER32
,
checksum_adler32
);
m_retrieveJob
->
archiveFile
.
checksumBlob
.
validate
(
tapeReadChecksum
);
}
// Pass the block to the disk write task
m_fifo
.
pushDataBlock
(
mb
);
...
...
@@ -157,11 +156,7 @@ public:
watchdog
.
notify
(
blockSize
);
localStats
.
waitReportingTime
+=
timer
.
secs
(
cta
::
utils
::
Timer
::
resetCounter
);
}
//end of while(stillReading)
if
(
isVerifyOnly
)
{
tapeReadChecksum
.
insert
(
cta
::
checksum
::
ADLER32
,
checksum_adler32
);
m_retrieveJob
->
archiveFile
.
checksumBlob
.
validate
(
tapeReadChecksum
);
}
// we have to signal the end of the tape read to the disk write task.
// We have to signal the end of the tape read to the disk write task.
m_fifo
.
pushDataBlock
(
NULL
);
// Log the successful transfer
localStats
.
totalTime
=
localTime
.
secs
();
...
...
@@ -195,19 +190,18 @@ public:
.
add
(
"userFilesCount"
,
localStats
.
userFilesCount
)
.
add
(
"userBytesCount"
,
localStats
.
userBytesCount
)
.
add
(
"verifiedFilesCount"
,
localStats
.
verifiedFilesCount
)
.
add
(
"verifiedBytesCount"
,
localStats
.
verifiedBytesCount
);
if
(
isVerifyOnly
)
{
params
.
add
(
"checksumType"
,
"ADLER32"
)
.
add
(
"checksumValue"
,
cta
::
checksum
::
ChecksumBlob
::
ByteArrayToHex
(
tapeReadChecksum
.
at
(
cta
::
checksum
::
ADLER32
)));
}
.
add
(
"verifiedBytesCount"
,
localStats
.
verifiedBytesCount
)
.
add
(
"checksumType"
,
"ADLER32"
)
.
add
(
"checksumValue"
,
cta
::
checksum
::
ChecksumBlob
::
ByteArrayToHex
(
tapeReadChecksum
.
at
(
cta
::
checksum
::
ADLER32
)));
lc
.
log
(
cta
::
log
::
INFO
,
"File successfully read from tape"
);
// Add the local counts to the session's
stats
.
add
(
localStats
);
}
//end of try
catch
(
const
cta
::
exception
::
Exception
&
ex
)
{
//
w
e end up
t
here because
:
//-- openReadFile brought us here (cant position to the file)
//
W
e end up here because:
//-- openReadFile brought us here (can
'
t position to the file)
//-- m_payload.append brought us here (error while reading the file)
//-- checksum validation failed (after reading the last block from tape)
// Record the error in the watchdog
if
(
currentErrorToCount
.
size
())
{
watchdog
.
addToErrorCount
(
currentErrorToCount
);
...
...
Write
Preview
Supports
Markdown
0%
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment