[Cppfcplib] r14355 - trunk/apps/CppFCPLib

Top Page
Delete this message
Reply to this message
Author: mkolar
Date:  
To: cppfcplib
Subject: [Cppfcplib] r14355 - trunk/apps/CppFCPLib
Author: mkolar
Date: 2007-07-25 23:29:09 +0000 (Wed, 25 Jul 2007)
New Revision: 14355

Modified:
trunk/apps/CppFCPLib/Node.cpp
trunk/apps/CppFCPLib/Node.h
trunk/apps/CppFCPLib/ServerMessage.cpp
trunk/apps/CppFCPLib/ServerMessage.h
Log:
* RemovePersistentRequest
* ModifyPersistentRequest



Modified: trunk/apps/CppFCPLib/Node.cpp
===================================================================
--- trunk/apps/CppFCPLib/Node.cpp    2007-07-25 22:55:45 UTC (rev 14354)
+++ trunk/apps/CppFCPLib/Node.cpp    2007-07-25 23:29:09 UTC (rev 14355)
@@ -693,6 +693,49 @@
}

void
+Node::removePersistentRequest( JobTicket::Ptr job )
+{
+ if ( !job->isPersistent() )
+ throw std::invalid_argument("Job is not persistent");
+
+ Message::Ptr m = Message::factory( std::string("PersistentRequestRemoved ") );
+ m->setField( "Global", Converter::toString( job->isGlobal() ) );
+ m->setField( "Identifier", job->getId() );
+
+ JobTicket::Ptr job_ = JobTicket::factory( "", m );
+ clientReqQueue->put(job_);
+
+ // wait on job that is to be cancelled
+ job->wait(globalCommandsTimeout);
+}
+
+void
+Node::modifyPersistentRequest( JobTicket::Ptr job, const AdditionalFields& fields )
+{
+ if ( !job->isPersistent() )
+ throw std::invalid_argument("Job is not persistent");
+
+ bool changed = false;
+
+ Message::Ptr m = Message::factory( std::string("ModifyPersistentRequest ") );
+ m->setField( "Identifier", job->getId() );
+ m->setField( "Global", Converter::toString( job->isGlobal() ) );
+ if (fields.hasField("PriorityClass")) {
+ m->setField("PriorityClass", fields.getField("PriorityClass"));
+ changed = true;
+ }
+ if (fields.hasField("ClientToken")) {
+ m->setField("ClientToken", fields.getField("ClientToken"));
+ changed = true;
+ }
+ if (!changed)
+ throw std::invalid_argument("Either ClientToken or PriorityClass needs to be defined.");
+
+ JobTicket::Ptr job_ = JobTicket::factory( "", m );
+ clientReqQueue->put(job_);
+}
+
+void
Node::shutdown()
{
log().log(DEBUG, "about to shutdown the node");

Modified: trunk/apps/CppFCPLib/Node.h
===================================================================
--- trunk/apps/CppFCPLib/Node.h    2007-07-25 22:55:45 UTC (rev 14354)
+++ trunk/apps/CppFCPLib/Node.h    2007-07-25 23:29:09 UTC (rev 14355)
@@ -94,6 +94,8 @@
void refreshPersistentRequest();
JobCollection listGlobalJobs();
JobCollection listPersistentJobs();
+ void removePersistentRequest( JobTicket::Ptr job );
+ void modifyPersistentRequest( JobTicket::Ptr job, const AdditionalFields& );
};
}


Modified: trunk/apps/CppFCPLib/ServerMessage.cpp
===================================================================
--- trunk/apps/CppFCPLib/ServerMessage.cpp    2007-07-25 22:55:45 UTC (rev 14354)
+++ trunk/apps/CppFCPLib/ServerMessage.cpp    2007-07-25 23:29:09 UTC (rev 14355)
@@ -89,7 +89,7 @@
m = Ptr( new PersistentRequestRemovedMessage() );
} else
if (header == "PersistentRequestModified") {
- throw new std::runtime_error("Not implemented " + header);
+ m = Ptr( new PersistentRequestModifiedMessage() );
} else
if (header == "PutFailed") {
m = Ptr( new PutFailedMessage() );
@@ -171,3 +171,24 @@

throw NotImplemented("Unknown command");
}
+
+
+bool
+IsLastPutFailed::operator()(const JobTicketPtr job) const
+{
+ if ( boost::lexical_cast<int>( message->getField("Code") ) == 10 )
+ return false;
+ return true;
+}
+
+bool
+IsLastGetFailed::operator()(const JobTicketPtr job) const
+{
+ if ( boost::lexical_cast<int>( message->getField("Code") ) == 25 )
+ return false;
+ return true;
+}
+
+struct IsLastGetFailed {
+ bool operator()(const JobTicketPtr job) const;
+};

Modified: trunk/apps/CppFCPLib/ServerMessage.h
===================================================================
--- trunk/apps/CppFCPLib/ServerMessage.h    2007-07-25 22:55:45 UTC (rev 14354)
+++ trunk/apps/CppFCPLib/ServerMessage.h    2007-07-25 23:29:09 UTC (rev 14355)
@@ -52,6 +52,15 @@
bool operator()(const JobTicketPtr job) const;
};

+struct IsLastPutFailed {
+ bool operator()(const JobTicketPtr job) const;
+};
+
+struct IsLastGetFailed {
+ bool operator()(const JobTicketPtr job) const;
+};
+
+
template<typename isLastT = IsLastTrue, bool isErrorT = false>
class ServerMessageT : public ServerMessage {
ServerMessageT() {}
@@ -94,10 +103,11 @@
typedef class ServerMessageT<IsLastFalse, false> SimpleProgressMessage;

typedef class ServerMessageT<IsLastFalse, false> FinishedCompressionMessage;
-typedef class ServerMessageT<IsLastFalse, false> PersistentRequestRemovedMessage; // ????
+typedef class ServerMessageT<IsLastTrue, false> PersistentRequestRemovedMessage;
+typedef class ServerMessageT<IsLastTrue, false> PersistentRequestModifiedMessage;

-typedef class ServerMessageT<IsLastTrue, true> PutFailedMessage;
-typedef class ServerMessageT<IsLastTrue, true> GetFailedMessage;
+typedef class ServerMessageT<IsLastPutFailed, true> PutFailedMessage;
+typedef class ServerMessageT<IsLastGetFailed, true> GetFailedMessage;
typedef class ServerMessageT<IsLastTrue, true> ProtocolErrorMessage;
typedef class ServerMessageT<IsLastTrue, true> IdentifierCollisionMessage;
typedef class ServerMessageT<IsLastTrue, true> UnknownNodeIdentifierMessage;