projects
/
metaproxy-moved-to-github.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
multi: combines diagnostics from all backends
[metaproxy-moved-to-github.git]
/
src
/
filter_session_shared.cpp
diff --git
a/src/filter_session_shared.cpp
b/src/filter_session_shared.cpp
index
c243dea
..
e4b9efc
100644
(file)
--- a/
src/filter_session_shared.cpp
+++ b/
src/filter_session_shared.cpp
@@
-1,5
+1,5
@@
/* This file is part of Metaproxy.
/* This file is part of Metaproxy.
- Copyright (C) 2005-2011 Index Data
+ Copyright (C) 2005-2012 Index Data
Metaproxy 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
Metaproxy 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
@@
-104,6
+104,7
@@
namespace metaproxy_1 {
time_t m_time_last_use;
mp::Package * m_close_package;
~BackendInstance();
time_t m_time_last_use;
mp::Package * m_close_package;
~BackendInstance();
+ void timestamp();
};
// backends of some class (all with same InitKey)
class SessionShared::BackendClass : boost::noncopyable {
};
// backends of some class (all with same InitKey)
class SessionShared::BackendClass : boost::noncopyable {
@@
-331,10
+332,15
@@
yf::SessionShared::BackendClass::get_backend(
void yf::SessionShared::BackendClass::use_backend(BackendInstancePtr backend)
{
backend->m_in_use = true;
void yf::SessionShared::BackendClass::use_backend(BackendInstancePtr backend)
{
backend->m_in_use = true;
- time(&backend->m_time_last_use);
backend->m_sequence_this = m_sequence_top++;
}
backend->m_sequence_this = m_sequence_top++;
}
+void yf::SessionShared::BackendInstance::timestamp()
+{
+ assert(m_in_use);
+ time(&m_time_last_use);
+}
+
yf::SessionShared::BackendInstance::~BackendInstance()
{
delete m_close_package;
yf::SessionShared::BackendInstance::~BackendInstance()
{
delete m_close_package;
@@
-528,6
+534,10
@@
bool yf::SessionShared::BackendSet::search(
for (; it != m_databases.end(); it++)
req->databaseNames[i++] = odr_strdup(odr, it->c_str());
for (; it != m_databases.end(); it++)
req->databaseNames[i++] = odr_strdup(odr, it->c_str());
+ if (frontend_apdu->which == Z_APDU_searchRequest)
+ req->preferredRecordSyntax =
+ frontend_apdu->u.searchRequest->preferredRecordSyntax;
+
search_package.request() = apdu_req;
search_package.move();
search_package.request() = apdu_req;
search_package.move();
@@
-683,6
+693,8
@@
restart:
else
result_set_id = "default";
}
else
result_set_id = "default";
}
+ found_backend->timestamp();
+
// we must search ...
BackendSetPtr new_set(new BackendSet(result_set_id,
databases, query));
// we must search ...
BackendSetPtr new_set(new BackendSet(result_set_id,
databases, query));
@@
-877,6
+889,8
@@
void yf::SessionShared::Frontend::present(mp::Package &package,
bc->release_backend(found_backend);
return;
}
bc->release_backend(found_backend);
return;
}
+
+ found_backend->timestamp();
Z_APDU *p_apdu = zget_APDU(odr, Z_APDU_presentRequest);
Z_PresentRequest *p_req = p_apdu->u.presentRequest;
Z_APDU *p_apdu = zget_APDU(odr, Z_APDU_presentRequest);
Z_PresentRequest *p_req = p_apdu->u.presentRequest;
@@
-950,6
+964,7
@@
void yf::SessionShared::Frontend::scan(mp::Package &frontend_package,
else
{
Package scan_package(backend->m_session, frontend_package.origin());
else
{
Package scan_package(backend->m_session, frontend_package.origin());
+ backend->timestamp();
scan_package.copy_filter(frontend_package);
scan_package.request() = apdu_req;
scan_package.move();
scan_package.copy_filter(frontend_package);
scan_package.request() = apdu_req;
scan_package.move();
@@
-1011,7
+1026,7
@@
void yf::SessionShared::Rep::expire()
{
boost::xtime xt;
boost::xtime_get(&xt, boost::TIME_UTC);
{
boost::xtime xt;
boost::xtime_get(&xt, boost::TIME_UTC);
- xt.sec += 30;
+ xt.sec += m_session_ttl / 3;
boost::thread::sleep(xt);
BackendClassMap::const_iterator b_it = m_backend_map.begin();
boost::thread::sleep(xt);
BackendClassMap::const_iterator b_it = m_backend_map.begin();