diff --git a/arangod/Cluster/RestShardHandler.cpp b/arangod/Cluster/RestShardHandler.cpp index c4eec69ac4..522d6d90b2 100644 --- a/arangod/Cluster/RestShardHandler.cpp +++ b/arangod/Cluster/RestShardHandler.cpp @@ -32,6 +32,11 @@ #include "Rest/HttpRequest.h" #include "Rest/HttpResponse.h" +#include "HttpServer/HttpServer.h" +#include "HttpServer/HttpHandlerFactory.h" +#include "GeneralServer/GeneralServerJob.h" +#include "GeneralServer/GeneralServer.h" + using namespace triagens::arango; // ----------------------------------------------------------------------------- @@ -95,7 +100,7 @@ triagens::rest::HttpHandler::status_e RestShardHandler::execute () { "this API is meant to be called on a coordinator node"); return HANDLER_DONE; } - +/* bool found; char const* coordinator = _request->header("x-arango-coordinator", found); @@ -112,20 +117,21 @@ triagens::rest::HttpHandler::status_e RestShardHandler::execute () { (int) triagens::rest::HttpResponse::BAD, "header 'x-arango-operation' is missing"); } + + char const* url = _request->header("x-arango-url", found); + if (! found) { + generateError(triagens::rest::HttpResponse::BAD, + (int) triagens::rest::HttpResponse::BAD, + "header 'x-arango-url' is missing"); + } +*/ /* - Job* ajob = handler->createJob(this, true); - ServerJob* job = dynamic_cast(ajob); - if (jobId != 0) { - _jobManager->initAsyncJob(job, jobId); - } - if (! _dispatcher->addJob(job)) { - // could not add job to job queue - delete handler; - - return false; - } -*/ + triagens::rest::HttpHandler* handler = this->_server->createHandler(_request); + triagens::rest::Job* job = new triagens::rest::GeneralServerJob(0, handler, true); + + _dispatcher->addJob(job); +*/ // respond with a 202 _response = createResponse(triagens::rest::HttpResponse::ACCEPTED); diff --git a/lib/Dispatcher/Job.cpp b/lib/Dispatcher/Job.cpp index d508367513..c1e281bffb 100644 --- a/lib/Dispatcher/Job.cpp +++ b/lib/Dispatcher/Job.cpp @@ -47,8 +47,7 @@ using namespace std; //////////////////////////////////////////////////////////////////////////////// Job::Job (string const& name) - : _name(name), - _observers() { + : _name(name) { } //////////////////////////////////////////////////////////////////////////////// @@ -79,15 +78,6 @@ const string& Job::getName () const { return _name; } -//////////////////////////////////////////////////////////////////////////////// -/// @brief attach an observer -//////////////////////////////////////////////////////////////////////////////// - -void Job::attachObserver (JobObserver* observer) { - _observers.push_back(observer); -} - - //////////////////////////////////////////////////////////////////////////////// /// @} //////////////////////////////////////////////////////////////////////////////// @@ -121,50 +111,6 @@ void Job::setDispatcherThread (DispatcherThread*) { /// @} //////////////////////////////////////////////////////////////////////////////// -// ----------------------------------------------------------------------------- -// --SECTION-- protected methods -// ----------------------------------------------------------------------------- - -//////////////////////////////////////////////////////////////////////////////// -/// @addtogroup Dispatcher -/// @{ -//////////////////////////////////////////////////////////////////////////////// - -//////////////////////////////////////////////////////////////////////////////// -/// @brief notify attached observers -//////////////////////////////////////////////////////////////////////////////// - -void Job::notifyObservers (const Job::notification_e type) { - vector::iterator i; - - switch (type) { - case JOB_WORK: - for (i = _observers.begin(); i != _observers.end(); ++i) { - (*i)->workCallback(this); - } - - break; - - case JOB_CLEANUP: - for (i = _observers.begin(); i != _observers.end(); ++i) { - (*i)->cleanupCallback(this); - } - - break; - - case JOB_SHUTDOWN: - for (i = _observers.begin(); i != _observers.end(); ++i) { - (*i)->shutdownCallback(this); - } - - break; - } -} - -//////////////////////////////////////////////////////////////////////////////// -/// @} -//////////////////////////////////////////////////////////////////////////////// - // ----------------------------------------------------------------------------- // --SECTION-- END-OF-FILE // ----------------------------------------------------------------------------- diff --git a/lib/Dispatcher/Job.h b/lib/Dispatcher/Job.h index 671d31b442..79a4504d06 100644 --- a/lib/Dispatcher/Job.h +++ b/lib/Dispatcher/Job.h @@ -42,7 +42,6 @@ namespace triagens { namespace rest { class DispatcherThread; - class JobObserver; // ----------------------------------------------------------------------------- // --SECTION-- class Job @@ -98,16 +97,6 @@ namespace triagens { JOB_FAILED }; -//////////////////////////////////////////////////////////////////////////////// -/// @brief notification for job observers -//////////////////////////////////////////////////////////////////////////////// - - enum notification_e { - JOB_WORK, - JOB_CLEANUP, - JOB_SHUTDOWN - }; - //////////////////////////////////////////////////////////////////////////////// /// @} //////////////////////////////////////////////////////////////////////////////// @@ -157,12 +146,6 @@ namespace triagens { const string& getName () const; -//////////////////////////////////////////////////////////////////////////////// -/// @brief attach an observer -//////////////////////////////////////////////////////////////////////////////// - - void attachObserver (JobObserver* observer); - //////////////////////////////////////////////////////////////////////////////// /// @} //////////////////////////////////////////////////////////////////////////////// @@ -226,27 +209,6 @@ namespace triagens { /// @} //////////////////////////////////////////////////////////////////////////////// -// ----------------------------------------------------------------------------- -// --SECTION-- protected methods -// ----------------------------------------------------------------------------- - -//////////////////////////////////////////////////////////////////////////////// -/// @addtogroup Dispatcher -/// @{ -//////////////////////////////////////////////////////////////////////////////// - - protected: - -//////////////////////////////////////////////////////////////////////////////// -/// @brief notify attached observers -//////////////////////////////////////////////////////////////////////////////// - - void notifyObservers (const Job::notification_e type); - -//////////////////////////////////////////////////////////////////////////////// -/// @} -//////////////////////////////////////////////////////////////////////////////// - // ----------------------------------------------------------------------------- // --SECTION-- private variables // ----------------------------------------------------------------------------- @@ -264,11 +226,6 @@ namespace triagens { const string& _name; -//////////////////////////////////////////////////////////////////////////////// -/// @brief attached observers -//////////////////////////////////////////////////////////////////////////////// - - vector _observers; }; } } diff --git a/lib/GeneralServer/GeneralServerJob.h b/lib/GeneralServer/GeneralServerJob.h index 4bfbb5315a..e239e7c0ac 100644 --- a/lib/GeneralServer/GeneralServerJob.h +++ b/lib/GeneralServer/GeneralServerJob.h @@ -174,7 +174,7 @@ namespace triagens { /// @brief whether or not the job is detached //////////////////////////////////////////////////////////////////////////////// - bool isDetached () const { + inline bool isDetached () const { return _isDetached; } @@ -234,7 +234,7 @@ namespace triagens { abandon = _abandon; } - if (! abandon) { + if (! abandon && _server != 0) { _server->jobDone(this); } diff --git a/lib/HttpServer/AsyncJobManager.h b/lib/HttpServer/AsyncJobManager.h index bfdcad018a..146ff0551b 100644 --- a/lib/HttpServer/AsyncJobManager.h +++ b/lib/HttpServer/AsyncJobManager.h @@ -388,6 +388,8 @@ namespace triagens { return; } + assert(job != 0); + *jobId = (AsyncJobResult::IdType) generate(); job->assignId((uint64_t) *jobId); @@ -415,7 +417,7 @@ namespace triagens { return; } - double now = TRI_microtime(); + const double now = TRI_microtime(); WRITE_LOCKER(_lock); JobList::iterator it = _jobs.find(jobId);