diff options
author | Ulrich Germann <Ulrich.Germann@gmail.com> | 2015-08-03 02:29:34 +0300 |
---|---|---|
committer | Ulrich Germann <Ulrich.Germann@gmail.com> | 2015-08-03 02:29:34 +0300 |
commit | 44df19aa3bcc87842aece6796e867cf44debcd8c (patch) | |
tree | 4177ed5d08089a2a150ea407540283c0f830baa7 /moses/server | |
parent | 6c5c5f60dafb6a1e09a33ce5c99a6dad45fdecbd (diff) |
Make translation sessions in the server actually work. Time-out yet to be implemented.
Diffstat (limited to 'moses/server')
-rw-r--r-- | moses/server/TranslationRequest.cpp | 21 | ||||
-rw-r--r-- | moses/server/TranslationRequest.h | 3 | ||||
-rw-r--r-- | moses/server/Translator.cpp | 2 | ||||
-rw-r--r-- | moses/server/session.h | 4 |
4 files changed, 20 insertions, 10 deletions
diff --git a/moses/server/TranslationRequest.cpp b/moses/server/TranslationRequest.cpp index a73c31962..bba57fc9f 100644 --- a/moses/server/TranslationRequest.cpp +++ b/moses/server/TranslationRequest.cpp @@ -24,17 +24,14 @@ using Moses::Sentence; boost::shared_ptr<TranslationRequest> TranslationRequest:: -create(Translator& translator, xmlrpc_c::paramList const& paramList, +create(Translator* translator, xmlrpc_c::paramList const& paramList, boost::condition_variable& cond, boost::mutex& mut) { boost::shared_ptr<TranslationRequest> ret; ret.reset(new TranslationRequest(paramList,cond, mut)); ret->m_self = ret; - if (ret->m_session_id) - ret->m_scope = translator.get_session(ret->m_session_id).scope; - else - ret->m_scope.reset(new Moses::ContextScope); + ret->m_translator = translator; return ret; } @@ -43,6 +40,16 @@ TranslationRequest:: Run() { parse_request(m_paramList.getStruct(0)); + // cerr << "SESSION ID" << ret->m_session_id << endl; + if (m_session_id) + { + Session const& S = m_translator->get_session(m_session_id); + m_scope = S.scope; + m_session_id = S.id; + // cerr << "SESSION ID" << m_session_id << endl; + } + else + m_scope.reset(new Moses::ContextScope); Moses::StaticData const& SD = Moses::StaticData::Instance(); @@ -378,7 +385,9 @@ run_phrase_decoder() manager.Decode(); pack_hypothesis(manager.GetBestHypothesis(), "text", m_retData); - + if (m_session_id) + m_retData["session_id"] = xmlrpc_c::value_int(m_session_id); + if (m_withGraphInfo) insertGraphInfo(manager,m_retData); if (m_withTopts) insertTranslationOptions(manager,m_retData); if (m_nbestSize) outputNBest(manager, m_retData); diff --git a/moses/server/TranslationRequest.h b/moses/server/TranslationRequest.h index 728b6c525..866eca20e 100644 --- a/moses/server/TranslationRequest.h +++ b/moses/server/TranslationRequest.h @@ -36,6 +36,7 @@ TranslationRequest : public virtual Moses::TranslationTask std::map<std::string, xmlrpc_c::value> m_retData; std::map<uint32_t,float> m_bias; // for biased sampling + Translator* m_translator; std::string m_source_string, m_target_string; bool m_withAlignInfo; bool m_withWordAlignInfo; @@ -103,7 +104,7 @@ public: static boost::shared_ptr<TranslationRequest> - create(Translator& translator, + create(Translator* translator, xmlrpc_c::paramList const& paramList, boost::condition_variable& cond, boost::mutex& mut); diff --git a/moses/server/Translator.cpp b/moses/server/Translator.cpp index b91385066..7a159b611 100644 --- a/moses/server/Translator.cpp +++ b/moses/server/Translator.cpp @@ -27,7 +27,7 @@ execute(xmlrpc_c::paramList const& paramList, boost::condition_variable cond; boost::mutex mut; boost::shared_ptr<TranslationRequest> task; - task = TranslationRequest::create(*this, paramList,cond,mut); + task = TranslationRequest::create(this, paramList,cond,mut); m_threadPool.Submit(task); boost::unique_lock<boost::mutex> lock(mut); while (!task->IsDone()) diff --git a/moses/server/session.h b/moses/server/session.h index b396d50ce..cc0135615 100644 --- a/moses/server/session.h +++ b/moses/server/session.h @@ -39,7 +39,7 @@ namespace MosesServer{ operator[](uint32_t id) { boost::upgrade_lock<boost::shared_mutex> lock(m_lock); - if (id) + if (id > 1) { boost::unordered_map<uint64_t, Session>::iterator m = m_cache.find(id); if (m != m_cache.end()) @@ -49,7 +49,7 @@ namespace MosesServer{ } } boost::upgrade_to_unique_lock<boost::shared_mutex> xlock(lock); - if (!id) id = ++m_session_counter; + if (id==1) id = ++m_session_counter; std::pair<uint64_t, Session> foo(id, Session(id)); return m_cache.insert(foo).first->second; } |