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
0c3b30f7
Commit
0c3b30f7
authored
Nov 25, 2014
by
Eric Cano
Browse files
Increased the timeout for bulk requests to the tape gateway from the default 20s to 5minutes.
parent
e7f83a26
Changes
3
Hide whitespace changes
Inline
Side-by-side
castor/tape/tapeserver/client/ClientProxy.cpp
View file @
0c3b30f7
...
...
@@ -35,6 +35,7 @@
#include
"castor/tape/tapegateway/Volume.hpp"
#include
"castor/tape/tapegateway/VolumeRequest.hpp"
#include
"castor/tape/tapeserver/client/ClientProxy.hpp"
#include
"castor/tape/tapeserver/daemon/Constants.hpp"
#include
"castor/utils/Timer.hpp"
#include
<cxxabi.h>
...
...
@@ -73,13 +74,15 @@ castor::exception::Exception(w) {
tapegateway
::
GatewayMessage
*
ClientProxy
::
requestResponseSession
(
const
tapegateway
::
GatewayMessage
&
req
,
RequestReport
&
report
)
RequestReport
&
report
,
int
timeout
)
{
// 0) Start the stopwatch
castor
::
utils
::
Timer
timer
;
// 1) We re-open connection to client for each request-response exchange
castor
::
io
::
ClientSocket
clientConnection
(
m_request
.
clientPort
,
m_request
.
clientHost
);
if
(
timeout
)
clientConnection
.
setTimeout
(
timeout
);
clientConnection
.
connect
();
report
.
connectDuration
=
timer
.
secs
();
// 2) The actual exchange over the network.
...
...
@@ -122,9 +125,8 @@ void ClientProxy::fetchVolumeId(
// 1) Build the request
castor
::
tape
::
tapegateway
::
VolumeRequest
request
;
request
.
setMountTransactionId
(
m_request
.
volReqId
);
// The transaction id is auto-incremented (through the cast operator)
// so we just need to use it (and save the value locally if we need to reuse
// it)
// The transaction id has to he incremented for each message exchage.
// This counter is atomic, so it's thread safe.
report
.
transactionId
=
++
m_transactionId
;
request
.
setAggregatorTransactionId
(
report
.
transactionId
);
request
.
setUnit
(
m_request
.
driveUnit
);
...
...
@@ -171,7 +173,8 @@ RequestReport &transactionReport)
endReport
.
setAggregatorTransactionId
(
transactionReport
.
transactionId
);
// 2) Send the report
std
::
auto_ptr
<
tapegateway
::
GatewayMessage
>
ack
(
requestResponseSession
(
endReport
,
transactionReport
));
requestResponseSession
(
endReport
,
transactionReport
,
castor
::
tape
::
tapeserver
::
daemon
::
TAPESERVER_DB_TIMEOUT
));
// 3) If we did not get a ack, complain (not much more we can do)
// We could use the castor typing here, but we stick to case for homogeneity
// of the code.
...
...
@@ -205,7 +208,8 @@ const std::string & errorMsg, int errorCode, RequestReport &transactionReport)
endReport
.
setErrorCode
(
errorCode
);
// 2) Send the report
std
::
auto_ptr
<
tapegateway
::
GatewayMessage
>
ack
(
requestResponseSession
(
endReport
,
transactionReport
));
requestResponseSession
(
endReport
,
transactionReport
,
castor
::
tape
::
tapeserver
::
daemon
::
TAPESERVER_DB_TIMEOUT
));
// 3) If we did not get a ack, complain (not much more we can do)
// We could use the castor typing here, but we stick to case for homogeneity
// of the code.
...
...
@@ -240,7 +244,8 @@ uint64_t files, uint64_t bytes, RequestReport& report)
ftmReq
.
setMaxBytes
(
bytes
);
// 2) Exchange messages with the server
std
::
auto_ptr
<
tapegateway
::
GatewayMessage
>
resp
(
requestResponseSession
(
ftmReq
,
report
));
requestResponseSession
(
ftmReq
,
report
,
castor
::
tape
::
tapeserver
::
daemon
::
TAPESERVER_DB_TIMEOUT
));
// 3) We expect either a NoMoreFiles response or FilesToMigrateList
// 3a) Handle the FilesToMigrateList
try
{
...
...
@@ -283,7 +288,8 @@ tapegateway::FileMigrationReportList & migrationReport,
migrationReport
.
setFseq
(
0
);
// 2) Exchange messages with the server
std
::
auto_ptr
<
tapegateway
::
GatewayMessage
>
resp
(
requestResponseSession
(
migrationReport
,
report
));
requestResponseSession
(
migrationReport
,
report
,
castor
::
tape
::
tapeserver
::
daemon
::
TAPESERVER_DB_TIMEOUT
));
// 3) We expect 2 types of return messages: NotificationAcknowledge and
// EndNotificationErrorReport.
// 3a) Handle the NotificationAcknowledge
...
...
@@ -323,7 +329,8 @@ uint64_t files, uint64_t bytes, RequestReport& report)
ftrReq
.
setMaxBytes
(
bytes
);
// 2) Exchange messages with the server
std
::
auto_ptr
<
tapegateway
::
GatewayMessage
>
resp
(
requestResponseSession
(
ftrReq
,
report
));
requestResponseSession
(
ftrReq
,
report
,
castor
::
tape
::
tapeserver
::
daemon
::
TAPESERVER_DB_TIMEOUT
));
// 3) We expect either a NoMoreFiles response or FilesToRecallList
// 3a) Handle the FilesToRecallListl
try
{
...
...
@@ -360,7 +367,8 @@ RequestReport& report) {
recallReport
.
setAggregatorTransactionId
(
report
.
transactionId
);
// 2) Exchange messages with the server
std
::
auto_ptr
<
tapegateway
::
GatewayMessage
>
resp
(
requestResponseSession
(
recallReport
,
report
));
requestResponseSession
(
recallReport
,
report
,
castor
::
tape
::
tapeserver
::
daemon
::
TAPESERVER_DB_TIMEOUT
));
// 3) We expect 2 types of return messages: NotificationAcknowledge and
// EndNotificationErrorReport.
// 3a) Handle the NotificationAcknowledge
...
...
castor/tape/tapeserver/client/ClientProxy.hpp
View file @
0c3b30f7
...
...
@@ -158,11 +158,15 @@ namespace client {
* A helper function managing a single request-response session with the
* client.
* @param req the request to send to the client
* @param report Report of the connection and request-reply time
* @param timeout (optional) read response timeout (castor wide default if
* not set, currently 20 seconds)
* @return the response from the client
*/
tapegateway
::
GatewayMessage
*
requestResponseSession
(
const
tapegateway
::
GatewayMessage
&
req
,
RequestReport
&
report
);
RequestReport
&
report
,
int
timeout
=
0
);
/** The file transaction id a.k.a. aggregator transaction id. This is the
* serial number of the message in the session */
...
...
castor/tape/tapeserver/daemon/Constants.hpp
View file @
0c3b30f7
...
...
@@ -80,6 +80,14 @@ const uint32_t TAPESERVER_NB_DISK_THREAD_DEFAULT = 10;
*/
const
size_t
TAPESERVER_BUFSZ_DEFAULT
=
5
*
1024
*
1024
;
/**
* The compile time timeout value for the potentially DB based calls to the client.
* As those can take time on a contended and for bulk communications, we go above
* the default 20 seconds.
* This value is not configurable.
*/
const
int
TAPESERVER_DB_TIMEOUT
=
60
*
5
;
// 5 minutes
}
// namespace daemon
}
// namespace tapeserver
}
// namespace tape
...
...
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