Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/moses-smt/mosesdecoder.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorUlrich Germann <Ulrich.Germann@gmail.com>2015-08-03 02:29:34 +0300
committerUlrich Germann <Ulrich.Germann@gmail.com>2015-08-03 02:29:34 +0300
commit44df19aa3bcc87842aece6796e867cf44debcd8c (patch)
tree4177ed5d08089a2a150ea407540283c0f830baa7 /moses/server
parent6c5c5f60dafb6a1e09a33ce5c99a6dad45fdecbd (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.cpp21
-rw-r--r--moses/server/TranslationRequest.h3
-rw-r--r--moses/server/Translator.cpp2
-rw-r--r--moses/server/session.h4
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;
}