diff --git a/castor/messages/Constants.hpp b/castor/messages/Constants.hpp index 52051550f5c787d6a790980b7a38e26f04ef898a..2e7f4c9ec560faecb352f2e4e099da14b8459413 100644 --- a/castor/messages/Constants.hpp +++ b/castor/messages/Constants.hpp @@ -35,31 +35,30 @@ enum MsgType { /* 0 */ MSG_TYPE_NONE, /* 1 */ MSG_TYPE_EXCEPTION, /* 2 */ MSG_TYPE_FORKCLEANER, - /* 3 */ MSG_TYPE_FORKPROBE, - /* 4 */ MSG_TYPE_FORKDATATRANSFER, - /* 5 */ MSG_TYPE_FORKLABEL, - /* 6 */ MSG_TYPE_FORKSUCCEEDED, - /* 7 */ MSG_TYPE_HEARTBEAT, - /* 8 */ MSG_TYPE_MIGRATIONJOBFROMTAPEGATEWAY, - /* 9 */ MSG_TYPE_MIGRATIONJOBFROMWRITETP, - /* 10 */ MSG_TYPE_NBFILESONTAPE, - /* 11 */ MSG_TYPE_PROCESSCRASHED, - /* 12 */ MSG_TYPE_PROCESSEXITED, - /* 13 */ MSG_TYPE_RECALLJOBFROMREADTP, - /* 14 */ MSG_TYPE_RECALLJOBFROMTAPEGATEWAY, - /* 15 */ MSG_TYPE_RETURNVALUE, - /* 16 */ MSG_TYPE_STOPPROCESSFORKER, - /* 17 */ MSG_TYPE_TAPEMOUNTEDFORMIGRATION, - /* 18 */ MSG_TYPE_TAPEMOUNTEDFORRECALL, - /* 19 */ MSG_TYPE_TAPEUNMOUNTSTARTED, - /* 20 */ MSG_TYPE_TAPEUNMOUNTED, - /* 21 */ MSG_TYPE_LABELERROR, - /* 22 */ MSG_TYPE_ACSMOUNTTAPEREADONLY, - /* 23 */ MSG_TYPE_ACSMOUNTTAPEREADWRITE, - /* 24 */ MSG_TYPE_ACSDISMOUNTTAPE, - /* 25 */ MSG_TYPE_ACSFORCEDISMOUNTTAPE, - /* 26 */ MSG_TYPE_ADDLOGPARAMS, - /* 27 */ MSG_TYPE_DELETELOGPARAMS + /* 3 */ MSG_TYPE_FORKDATATRANSFER, + /* 4 */ MSG_TYPE_FORKLABEL, + /* 5 */ MSG_TYPE_FORKSUCCEEDED, + /* 6 */ MSG_TYPE_HEARTBEAT, + /* 7 */ MSG_TYPE_MIGRATIONJOBFROMTAPEGATEWAY, + /* 8 */ MSG_TYPE_MIGRATIONJOBFROMWRITETP, + /* 9 */ MSG_TYPE_NBFILESONTAPE, + /* 10 */ MSG_TYPE_PROCESSCRASHED, + /* 11 */ MSG_TYPE_PROCESSEXITED, + /* 12 */ MSG_TYPE_RECALLJOBFROMREADTP, + /* 13 */ MSG_TYPE_RECALLJOBFROMTAPEGATEWAY, + /* 14 */ MSG_TYPE_RETURNVALUE, + /* 15 */ MSG_TYPE_STOPPROCESSFORKER, + /* 16 */ MSG_TYPE_TAPEMOUNTEDFORMIGRATION, + /* 17 */ MSG_TYPE_TAPEMOUNTEDFORRECALL, + /* 18 */ MSG_TYPE_TAPEUNMOUNTSTARTED, + /* 19 */ MSG_TYPE_TAPEUNMOUNTED, + /* 20 */ MSG_TYPE_LABELERROR, + /* 21 */ MSG_TYPE_ACSMOUNTTAPEREADONLY, + /* 22 */ MSG_TYPE_ACSMOUNTTAPEREADWRITE, + /* 23 */ MSG_TYPE_ACSDISMOUNTTAPE, + /* 24 */ MSG_TYPE_ACSFORCEDISMOUNTTAPE, + /* 25 */ MSG_TYPE_ADDLOGPARAMS, + /* 26 */ MSG_TYPE_DELETELOGPARAMS }; enum ProtocolVersion { diff --git a/castor/messages/ForkProbe.proto b/castor/messages/ForkProbe.proto deleted file mode 100644 index b4e0e9589bcbc820a93c0a7676b6cf3b466c77f2..0000000000000000000000000000000000000000 --- a/castor/messages/ForkProbe.proto +++ /dev/null @@ -1,29 +0,0 @@ -// This file is part of the Castor project. -// See http://castor.web.cern.ch/castor -// -// Copyright (C) 2003 CERN -// This program is free software; you can redistribute it and/or -// modify it under the terms of the GNU General Public License -// as published by the Free Software Foundation; either version 2 -// of the License, or (at your option) any later version. -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// You should have received a copy of the GNU General Public License -// along with this program; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. -// -// -// -// @author Castor Dev team, castor-dev@cern.ch - -package castor.messages; - -message ForkProbe { - // Description of the tape drive - required string unitname = 1; - required string dgn = 2; - required string devfilename = 3; - required string libraryslot = 4; -} \ No newline at end of file diff --git a/castor/tape/tapeserver/daemon/CatalogueDrive.cpp b/castor/tape/tapeserver/daemon/CatalogueDrive.cpp index 840832d85981f5b5d57c1888cccd06fdea409535..1f485fce4ecd11f95c4335f3440088e727db5ff9 100644 --- a/castor/tape/tapeserver/daemon/CatalogueDrive.cpp +++ b/castor/tape/tapeserver/daemon/CatalogueDrive.cpp @@ -24,6 +24,7 @@ #include "castor/exception/Exception.hpp" #include "castor/tape/tapeserver/daemon/CatalogueDrive.hpp" #include "castor/tape/tapeserver/daemon/Constants.hpp" +#include "castor/tape/tapeserver/daemon/ProbeSession.hpp" #include "castor/utils/utils.hpp" #include "h/Ctape_constants.h" #include "h/rmc_constants.h" @@ -357,22 +358,17 @@ void castor::tape::tapeserver::daemon::CatalogueDrive:: // configureUp //------------------------------------------------------------------------------ void castor::tape::tapeserver::daemon::CatalogueDrive::configureUp() { - bool vdqmNeedsUpdate = false; switch(m_state) { case DRIVE_STATE_UP: - // It is safe to refresh the status of the vdqm to up, so let's to it. - vdqmNeedsUpdate = true; - break; case DRIVE_STATE_RUNNING: - // We are in RUNNING in the VDQM: leave it like that. + // This state transition is idempotent break; case DRIVE_STATE_DOWN: - changeState(DRIVE_STATE_UP); - vdqmNeedsUpdate = true; + transitionFromDownToUp(); break; case DRIVE_STATE_WAITDOWN: - // We are in RUNNING in the VDQM: leave it like that. - // We just cancel the WAIT DOWN internally. + // Leave state in vdqm as RUNNING, just update internally state to reflect + // the future intention of transitioning to DOWN changeState(DRIVE_STATE_RUNNING); break; default: @@ -384,8 +380,32 @@ void castor::tape::tapeserver::daemon::CatalogueDrive::configureUp() { throw ex; } } - if (vdqmNeedsUpdate) - m_vdqm.setDriveUp(m_hostName, m_config.getUnitName(), m_config.getDgn()); +} + +//----------------------------------------------------------------------------- +// transitionFromDownToUp +//----------------------------------------------------------------------------- +void castor::tape::tapeserver::daemon::CatalogueDrive:: + transitionFromDownToUp() { + checkDriveIsEmpty(); + changeState(DRIVE_STATE_UP); + m_vdqm.setDriveUp(m_hostName, m_config.getUnitName(), m_config.getDgn()); +} + +//----------------------------------------------------------------------------- +// checkDriveIsEmpty +//----------------------------------------------------------------------------- +void castor::tape::tapeserver::daemon::CatalogueDrive::checkDriveIsEmpty() { + castor::tape::System::realWrapper sWrapper; + ProbeSession probeSession(m_log, m_config, sWrapper); + + const int probeSessionExitCode = probeSession.execute(); + + if(Session::MARK_DRIVE_AS_UP != probeSessionExitCode) { + castor::exception::Exception ex; + ex.getMessage() << "Drive " << m_config.getUnitName() << " is not empty"; + throw ex; + } } //----------------------------------------------------------------------------- diff --git a/castor/tape/tapeserver/daemon/CatalogueDrive.hpp b/castor/tape/tapeserver/daemon/CatalogueDrive.hpp index 304d063ea5e1bfd1645decfaa66c9286105e4d87..037deb4ebb5e20e421a06229d89e75f1cee2842e 100644 --- a/castor/tape/tapeserver/daemon/CatalogueDrive.hpp +++ b/castor/tape/tapeserver/daemon/CatalogueDrive.hpp @@ -322,6 +322,16 @@ private: */ CatalogueDrive& operator=(const CatalogueDrive&); + /** + * Transition from DRIVE_STATE_DOWN to DRIVE_STATE_UP. + */ + void transitionFromDownToUp(); + + /** + * Throws an exception if the physical tape drive is not empty. + */ + void checkDriveIsEmpty(); + /** * Timeout in seconds to be used when performing network I/O. */ diff --git a/castor/tape/tapeserver/daemon/ProbeSession.cpp b/castor/tape/tapeserver/daemon/ProbeSession.cpp index a370b8cd0280aa383fe4aadaaec99cb98cc42af6..7fa7717dc9d34594bcc613ee5c280b86a0d3158c 100644 --- a/castor/tape/tapeserver/daemon/ProbeSession.cpp +++ b/castor/tape/tapeserver/daemon/ProbeSession.cpp @@ -27,11 +27,9 @@ // constructor //------------------------------------------------------------------------------ castor::tape::tapeserver::daemon::ProbeSession::ProbeSession( - server::ProcessCap &capUtils, castor::log::Logger &log, const DriveConfig &driveConfig, System::virtualWrapper &sysWrapper): - m_capUtils(capUtils), m_log(log), m_driveConfig(driveConfig), m_sysWrapper(sysWrapper) { @@ -70,30 +68,15 @@ castor::tape::tapeserver::daemon::Session::EndOfSessionAction std::list<log::Param> params; params.push_back(log::Param("unitName", m_driveConfig.getUnitName())); - setProcessCapabilities("cap_sys_rawio+ep"); - std::auto_ptr<drive::DriveInterface> drivePtr = createDrive(); drive::DriveInterface &drive = *drivePtr.get(); if(drive.hasTapeInPlace()) { m_log(LOG_INFO, "Probe found tape drive with a tape inside", params); return MARK_DRIVE_AS_DOWN; - } - - return MARK_DRIVE_AS_UP; -} - -//------------------------------------------------------------------------------ -// setProcessCapabilities -//------------------------------------------------------------------------------ -void castor::tape::tapeserver::daemon::ProbeSession::setProcessCapabilities( - const std::string &capabilities) { - m_capUtils.setProcText(capabilities); - { - log::Param params[] = { - log::Param("capabilities", m_capUtils.getProcText())}; - m_log(LOG_INFO, "Probe set process capabilities for using tape", - params); + } else { + m_log(LOG_INFO, "Probe found tape drive is empty", params); + return MARK_DRIVE_AS_UP; } } diff --git a/castor/tape/tapeserver/daemon/ProbeSession.hpp b/castor/tape/tapeserver/daemon/ProbeSession.hpp index 11703513f093faa31186ab425f0add3c6b4988e3..561c5a649191b5f02af38e4c695e0ff81c7f34d4 100644 --- a/castor/tape/tapeserver/daemon/ProbeSession.hpp +++ b/castor/tape/tapeserver/daemon/ProbeSession.hpp @@ -26,7 +26,6 @@ #include "castor/log/LogContext.hpp" #include "castor/log/Logger.hpp" #include "castor/mediachanger/MediaChangerFacade.hpp" -#include "castor/server/ProcessCap.hpp" #include "castor/tape/tapeserver/daemon/DriveConfig.hpp" #include "castor/tape/tapeserver/daemon/Session.hpp" #include "castor/tape/tapeserver/drive/DriveInterface.hpp" @@ -40,21 +39,22 @@ namespace tape { namespace tapeserver { namespace daemon { /** - * Class responsible for probing a tape drive. + * Class responsible for probing a tape drive to see if it empty and + * accessible. If the drive satisfies both of these criteria then the probe + * will recommend that the state of the drive should be marked as UP, else + * it will recommend DOWN. */ class ProbeSession : public Session { - public: + /** * Constructor * - * @param capUtils Object providing support for UNIX capabilities. * @param log Object representing the API to the CASTOR logging system. * @param driveConfig Configuration of the tape drive to be probed. * @param sysWrapper Object representing the operating system. */ ProbeSession( - server::ProcessCap &capUtils, castor::log::Logger &log, const DriveConfig &driveConfig, System::virtualWrapper &sysWrapper); @@ -70,15 +70,10 @@ namespace daemon { private: - /** - * Object providing support for UNIX capabilities. - */ - server::ProcessCap &m_capUtils; - /** * The logging object */ - castor::log::Logger & m_log; + castor::log::Logger &m_log; /** * The configuration of the tape drive to be probed. @@ -88,7 +83,7 @@ namespace daemon { /** * The system wrapper used to find the device and instantiate the drive object */ - System::virtualWrapper & m_sysWrapper; + System::virtualWrapper &m_sysWrapper; /** * Execute the session and return the type of action to be performed @@ -99,13 +94,6 @@ namespace daemon { */ EndOfSessionAction exceptionThrowingExecute(); - /** - * Sets the capabilities of the process and logs the result. - * - * @param capabilities The string representation of the capabilities. - */ - void setProcessCapabilities(const std::string &capabilities); - /** * Creates and returns the object that represents the tape drive to be * probed. diff --git a/castor/tape/tapeserver/daemon/ProcessForker.cpp b/castor/tape/tapeserver/daemon/ProcessForker.cpp index 09b45b3d077d612fc5b3323e93fcc42223e2b867..4b1f148cdc331330387db40afa213e32d2784d9b 100644 --- a/castor/tape/tapeserver/daemon/ProcessForker.cpp +++ b/castor/tape/tapeserver/daemon/ProcessForker.cpp @@ -258,8 +258,6 @@ castor::tape::tapeserver::daemon::ProcessForker::MsgHandlerResult switch(frame.type) { case messages::MSG_TYPE_FORKCLEANER: return handleForkCleanerMsg(frame); - case messages::MSG_TYPE_FORKPROBE: - return handleForkProbeMsg(frame); case messages::MSG_TYPE_FORKDATATRANSFER: return handleForkDataTransferMsg(frame); case messages::MSG_TYPE_FORKLABEL: @@ -335,60 +333,6 @@ castor::tape::tapeserver::daemon::ProcessForker::MsgHandlerResult } } -//------------------------------------------------------------------------------ -// handleForkProbeMsg -//------------------------------------------------------------------------------ -castor::tape::tapeserver::daemon::ProcessForker::MsgHandlerResult - castor::tape::tapeserver::daemon::ProcessForker::handleForkProbeMsg( - const ProcessForkerFrame &frame) { - - // Parse the incoming request - messages::ForkProbe rqst; - ProcessForkerUtils::parsePayload(frame, rqst); - - // Log the contents of the incomming request - std::list<log::Param> params; - params.push_back(log::Param("unitName", rqst.unitname())); - m_log(LOG_INFO, "ProcessForker handling ForkProbe message", params); - - // Fork a label session - const pid_t forkRc = fork(); - - // If fork failed - if(0 > forkRc) { - return createExceptionResult(SEINTERNAL, - "Failed to fork probe session for tape drive", true); - - // Else if this is the parent process - } else if(0 < forkRc) { - log::Param params[] = {log::Param("pid", forkRc)}; - m_log(LOG_INFO, "ProcessForker forked probe session", params); - - return createForkSucceededResult(forkRc, true); - - // Else this is the child process - } else { - closeCmdReceiverSocket(); - - castor::utils::setProcessNameAndCmdLine(m_argv0, "probe"); - - try { - exit(runProbeSession(rqst)); - } catch(castor::exception::Exception &ne) { - log::Param params[] = {log::Param("message", ne.getMessage().str())}; - m_log(LOG_ERR, "Probe session failed", params); - } catch(std::exception &ne) { - log::Param params[] = {log::Param("message", ne.what())}; - m_log(LOG_ERR, "Probe session failed", params); - } catch(...) { - log::Param params[] = {log::Param("message", - "Caught an unknown exception")}; - m_log(LOG_ERR, "Probe session failed", params); - } - exit(Session::MARK_DRIVE_AS_DOWN); - } -} - //------------------------------------------------------------------------------ // handleForkDataTransferMsg //------------------------------------------------------------------------------ @@ -572,46 +516,6 @@ castor::tape::tapeserver::daemon::Session::EndOfSessionAction } } -//------------------------------------------------------------------------------ -// runProbeSession -//------------------------------------------------------------------------------ -castor::tape::tapeserver::daemon::Session::EndOfSessionAction - castor::tape::tapeserver::daemon::ProcessForker::runProbeSession( - const messages::ForkProbe &rqst) { - try { - server::ProcessCap capUtils; - - const DriveConfig driveConfig = getDriveConfig(rqst); - std::list<log::Param> params; - params.push_back(log::Param("unitName", driveConfig.getUnitName())); - m_log(LOG_INFO, "Probe-session child-process started", params); - - const int sizeOfIOThreadPoolForZMQ = 1; - messages::SmartZmqContext - zmqContext(instantiateZmqContext(sizeOfIOThreadPoolForZMQ)); - - messages::AcsProxyZmq acs(acs::ACS_PORT, zmqContext.get()); - - castor::tape::System::realWrapper sWrapper; - ProbeSession probeSession( - capUtils, - m_log, - driveConfig, - sWrapper); - return probeSession.execute(); - } catch(castor::exception::Exception &ex) { - throw ex; - } catch(std::exception &se) { - castor::exception::Exception ex; - ex.getMessage() << se.what(); - throw ex; - } catch(...) { - castor::exception::Exception ex; - ex.getMessage() << "Caught an unknown exception"; - throw ex; - } -} - //------------------------------------------------------------------------------ // runDataTransferSession //------------------------------------------------------------------------------ diff --git a/castor/tape/tapeserver/daemon/ProcessForker.hpp b/castor/tape/tapeserver/daemon/ProcessForker.hpp index 5609326717f317a1fd48bba6ef45db412d19a0ba..766ac8a70c85128480df2a07407a698b4e9eec3b 100644 --- a/castor/tape/tapeserver/daemon/ProcessForker.hpp +++ b/castor/tape/tapeserver/daemon/ProcessForker.hpp @@ -28,7 +28,6 @@ #include "castor/messages/ForkCleaner.pb.h" #include "castor/messages/ForkDataTransfer.pb.h" #include "castor/messages/ForkLabel.pb.h" -#include "castor/messages/ForkProbe.pb.h" #include "castor/tape/tapeserver/daemon/DataTransferSession.hpp" #include "castor/tape/tapeserver/daemon/ProcessForkerFrame.hpp" #include "castor/tape/tapeserver/daemon/TapeDaemonConfig.hpp" @@ -221,14 +220,6 @@ private: */ MsgHandlerResult handleForkCleanerMsg(const ProcessForkerFrame &frame); - /** - * Handles a ForkProbe message. - * - * @param frame The frame containing the message. - * @return The result of the message handler. - */ - MsgHandlerResult handleForkProbeMsg(const ProcessForkerFrame &frame); - /** * Runs a cleaner session. This method is to be called within the child * process responsible for running the cleaner session. @@ -238,15 +229,6 @@ private: */ Session::EndOfSessionAction runCleanerSession(const messages::ForkCleaner &rqst); - /** - * Runs a probe session. This method is to be called within the child - * process responsible for running the probe session. - * - * @param rqst The ForkProbe message. - * @return The value to be used when exiting the child process. - */ - Session::EndOfSessionAction runProbeSession(const messages::ForkProbe &rqst); - /** * Runs a data-transfer session. This method is to be called within the * child process responsible for running the data-transfer session. diff --git a/castor/tape/tapeserver/daemon/ProcessForkerProxy.hpp b/castor/tape/tapeserver/daemon/ProcessForkerProxy.hpp index 2603d0c9e25705a83858fa4253b700dc79949949..8231e6936cb96fdca8b1ba1ef5780cf7162422af 100644 --- a/castor/tape/tapeserver/daemon/ProcessForkerProxy.hpp +++ b/castor/tape/tapeserver/daemon/ProcessForkerProxy.hpp @@ -91,14 +91,6 @@ public: const std::string &vid, const bool waitMediaInDrive, const uint32_t waitMediaInDriveTimeout) = 0; - /** - * Forks a probe session for the specified tape drive. - * - * @param driveConfig The configuration of the tape drive. - * @return The process identifier of the newly forked session. - */ - virtual pid_t forkProbe(const DriveConfig &driveConfig) = 0; - }; // class ProcessForkerProxy } // namespace daemon diff --git a/castor/tape/tapeserver/daemon/ProcessForkerProxyDummy.cpp b/castor/tape/tapeserver/daemon/ProcessForkerProxyDummy.cpp index 01638dd671b5bd85033d23cf8c025d03b66cbc32..f714bfe700e6e97ca3dab0b5fd5649d9ea4ac7ab 100644 --- a/castor/tape/tapeserver/daemon/ProcessForkerProxyDummy.cpp +++ b/castor/tape/tapeserver/daemon/ProcessForkerProxyDummy.cpp @@ -60,12 +60,3 @@ pid_t castor::tape::tapeserver::daemon::ProcessForkerProxyDummy:: // This is a dummy method and so intentionally does nothing return 0; } - -//------------------------------------------------------------------------------ -// forkProbe -//------------------------------------------------------------------------------ -pid_t castor::tape::tapeserver::daemon::ProcessForkerProxyDummy:: - forkProbe(const DriveConfig &driveConfig) { - // This is a dummy method and so intentionally does nothing - return 0; -} diff --git a/castor/tape/tapeserver/daemon/ProcessForkerProxyDummy.hpp b/castor/tape/tapeserver/daemon/ProcessForkerProxyDummy.hpp index 2a03117a0c85edfbbb2e0ec05afd309435c7649d..19a3a5f9ee64d7da044aa89288fa4e8dd2f2f9f1 100644 --- a/castor/tape/tapeserver/daemon/ProcessForkerProxyDummy.hpp +++ b/castor/tape/tapeserver/daemon/ProcessForkerProxyDummy.hpp @@ -74,7 +74,6 @@ public: * @param labelJob The job received from the tape-labeling command-line tool. * @return The process identifier of the newly forked session which will * always be 0 because this is a dummy method. - */ pid_t forkLabel(const DriveConfig &driveConfig, const legacymsg::TapeLabelRqstMsgBody &labelJob); @@ -97,15 +96,7 @@ public: const std::string &vid, const bool waitMediaInDrive, const uint32_t waitMediaInDriveTimeout); - /** - * Forks a probe session for the specified tape drive. - * - * @param driveConfig The configuration of the tape drive. - * @return The process identifier of the newly forked session. - */ - virtual pid_t forkProbe(const DriveConfig &driveConfig); - -}; // class ProcessForkerProxySocket +}; // class ProcessForkerProxyDummy } // namespace daemon } // namespace tapeserver diff --git a/castor/tape/tapeserver/daemon/ProcessForkerProxySocket.cpp b/castor/tape/tapeserver/daemon/ProcessForkerProxySocket.cpp index 8756c0e51e83180d08f9a22f4a18e0f29e732d3f..64a85e99c23fe36cf0f28307e2e2348b61e9b8b7 100644 --- a/castor/tape/tapeserver/daemon/ProcessForkerProxySocket.cpp +++ b/castor/tape/tapeserver/daemon/ProcessForkerProxySocket.cpp @@ -226,38 +226,3 @@ castor::messages::ForkCleaner castor::tape::tapeserver::daemon:: return msg; } - -//------------------------------------------------------------------------------ -// forkProbe -//------------------------------------------------------------------------------ -pid_t castor::tape::tapeserver::daemon::ProcessForkerProxySocket:: - forkProbe(const DriveConfig &driveConfig) { - - // Request the process forker to fork a probe session - const messages::ForkProbe rqst = createForkProbeMsg(driveConfig); - ProcessForkerUtils::writeFrame(m_socketFd, rqst); - - // Read back the reply - const int timeout = 10; // Timeout in seconds - messages::ForkSucceeded reply; - ProcessForkerUtils::readReplyOrEx(m_socketFd, timeout, reply); - log::Param params[] = {log::Param("pid", reply.pid())}; - m_log(LOG_INFO, - "Got process ID of the probe session from the ProcessForker", params); - - return reply.pid(); -} - -//------------------------------------------------------------------------------ -// createForkProbeMsg -//------------------------------------------------------------------------------ -castor::messages::ForkProbe castor::tape::tapeserver::daemon:: - ProcessForkerProxySocket::createForkProbeMsg( - const DriveConfig &driveConfig) { - messages::ForkProbe msg; - - // Description of the tape drive - fillMsgWithDriveConfig(msg, driveConfig); - - return msg; -} diff --git a/castor/tape/tapeserver/daemon/ProcessForkerProxySocket.hpp b/castor/tape/tapeserver/daemon/ProcessForkerProxySocket.hpp index 0b36eb76324d19fae1191c7c47b48599ca6437dc..a89164bdb30d1935a0a1b2d0f108e23b30229f75 100644 --- a/castor/tape/tapeserver/daemon/ProcessForkerProxySocket.hpp +++ b/castor/tape/tapeserver/daemon/ProcessForkerProxySocket.hpp @@ -110,14 +110,6 @@ public: */ pid_t forkCleaner(const DriveConfig &driveConfig, const std::string &vid, const bool waitMediaInDrive, const uint32_t waitMediaInDriveTimeout); - - /** - * Forks a probe session for the specified tape drive. - * - * @param driveConfig The configuration of the tape drive. - * @return The process identifier of the newly forked session. - */ - virtual pid_t forkProbe(const DriveConfig &driveConfig); private: @@ -216,16 +208,6 @@ private: const bool waitMediaInDrive, const uint32_t waitMediaInDriveTimeout); - /** - * Creates a ForkProbe message from the specified tape-drive - * configuration and probe job. - * - * @param driveConfig The configuration of the tape drive. - * @return The message. - */ - messages::ForkProbe createForkProbeMsg( - const DriveConfig &driveConfig); - }; // class ProcessForkerProxySocket } // namespace daemon diff --git a/castor/tape/tapeserver/daemon/ProcessForkerUtils.cpp b/castor/tape/tapeserver/daemon/ProcessForkerUtils.cpp index d49a5cb6ac2293530a8b450403860e03f90c9c15..37aec678053dccf58cb5c0761e9625304b7fda1b 100644 --- a/castor/tape/tapeserver/daemon/ProcessForkerUtils.cpp +++ b/castor/tape/tapeserver/daemon/ProcessForkerUtils.cpp @@ -44,20 +44,6 @@ void castor::tape::tapeserver::daemon::ProcessForkerUtils::serializePayload( } } -//------------------------------------------------------------------------------ -// serializePayload -//------------------------------------------------------------------------------ -void castor::tape::tapeserver::daemon::ProcessForkerUtils::serializePayload( - ProcessForkerFrame &frame, const messages::ForkProbe &msg) { - frame.type = messages::MSG_TYPE_FORKPROBE; - if(!msg.SerializeToString(&frame.payload)) { - castor::exception::Exception ex; - ex.getMessage() << "Failed to serialize ForkProbe payload" - ": SerializeToString() returned false"; - throw ex; - } -} - //------------------------------------------------------------------------------ // serializePayload //------------------------------------------------------------------------------ @@ -178,14 +164,6 @@ void castor::tape::tapeserver::daemon::ProcessForkerUtils::writeFrame( writeFrame(fd, messages::MSG_TYPE_FORKCLEANER, msg, log); } -//------------------------------------------------------------------------------ -// writeFrame -//------------------------------------------------------------------------------ -void castor::tape::tapeserver::daemon::ProcessForkerUtils::writeFrame( - const int fd, const messages::ForkProbe &msg, log::Logger *const log) { - writeFrame(fd, messages::MSG_TYPE_FORKPROBE, msg, log); -} - //------------------------------------------------------------------------------ // writeFrame //------------------------------------------------------------------------------ @@ -546,27 +524,6 @@ void castor::tape::tapeserver::daemon::ProcessForkerUtils::parsePayload( } } -//------------------------------------------------------------------------------ -// parsePayload -//------------------------------------------------------------------------------ -void castor::tape::tapeserver::daemon::ProcessForkerUtils::parsePayload( - const ProcessForkerFrame &frame, messages::ForkProbe &msg) { - if(messages::MSG_TYPE_FORKPROBE != frame.type) { - castor::exception::Exception ex; - ex.getMessage() << "Failed to parse ForkProbe payload" - ": Unexpected message type: type=" << - messages::msgTypeToString(frame.type); - throw ex; - } - - if(!msg.ParseFromString(frame.payload)) { - castor::exception::Exception ex; - ex.getMessage() << "Failed to parse ForkProbe payload" - ": ParseString() returned false: payloadLen=" << frame.payload.length(); - throw ex; - } -} - //------------------------------------------------------------------------------ // parsePayload //------------------------------------------------------------------------------