summary |
shortlog |
log |
commit | commitdiff |
tree
raw |
patch |
inline | side by side (from parent 1:
2984282)
Introduce operations timeout. It replaces connect timeout and is the
maximum waiting time before giving up an active operation. Its
default value is 30 seconds.
Timeout values may be given per-service. That's element 'timeout'
which takes three attribute values (a subset may be given): 'session',
Timeout values may be given per-service. That's element 'timeout'
which takes three attribute values (a subset may be given): 'session',
-'z3950_connect', 'z3950_session'. Option -T is no longer supported
+'z3950_operation', 'z3950_session'. Option -T is no longer supported
- used to specify session timeout.
Option -t tests the Pazpar2 configuration and returns exit code
- used to specify session timeout.
Option -t tests the Pazpar2 configuration and returns exit code
Specifies timeout parameters for this service.
The <literal>timeout</literal>
element supports the following attributes:
Specifies timeout parameters for this service.
The <literal>timeout</literal>
element supports the following attributes:
- <literal>session</literal>, <literal>z3950_connect</literal>,
+ <literal>session</literal>, <literal>z3950_operation</literal>,
<literal>z3950_session</literal> which specifies
<literal>z3950_session</literal> which specifies
- 'session timeout', 'Z39.50 connect timeout', 'Z39.50 session timeout'
- respectively.
+ 'session timeout', 'Z39.50 operation timeout',
+ 'Z39.50 session timeout' respectively. The Z39.50 operation
+ timeout is the time Pazpar2 will wait for an active Z39.50/SRU
+ operation before it gives up (times out). The Z39.50 session
+ time out is the time Pazpar2 will keep the session alive for
+ an idle session (no operation).
+ </para>
+ <para>
+ The following is recommended but not required:
+ z3950_operation (30) < session (60) < z3950_session (180) .
+ The default values are given in parantheses.
</para>
</listitem>
</varlistentry>
</para>
</listitem>
</varlistentry>
void client_set_connection(struct client *cl, struct connection *con);
void client_disconnect(struct client *cl);
int client_prep_connection(struct client *cl,
void client_set_connection(struct client *cl, struct connection *con);
void client_disconnect(struct client *cl);
int client_prep_connection(struct client *cl,
- int connect_timeout, int session_timeout);
+ int operation_timeout, int session_timeout);
void client_start_search(struct client *cl);
void client_set_session(struct client *cl, struct session *se);
int client_is_active(struct client *cl);
void client_start_search(struct client *cl);
void client_set_session(struct client *cl, struct session *se);
int client_is_active(struct client *cl);
Conn_Connecting,
Conn_Open
} state;
Conn_Connecting,
Conn_Open
} state;
int session_timeout;
struct connection *next; // next for same host or next in free list
};
int session_timeout;
struct connection *next; // next for same host or next in free list
};
// Creates a new connection for client, associated with the host of
// client's database
static struct connection *connection_create(struct client *cl,
// Creates a new connection for client, associated with the host of
// client's database
static struct connection *connection_create(struct client *cl,
int session_timeout)
{
struct connection *new;
int session_timeout)
{
struct connection *new;
client_set_connection(cl, new);
new->link = 0;
new->state = Conn_Resolving;
client_set_connection(cl, new);
new->link = 0;
new->state = Conn_Resolving;
- new->connect_timeout = connect_timeout;
+ new->operation_timeout = operation_timeout;
new->session_timeout = session_timeout;
if (host->ipport)
connection_connect(new);
new->session_timeout = session_timeout;
if (host->ipport)
connection_connect(new);
yaz_log(YLOG_LOG, "Error %s from %s",
error, client_get_url(cl));
}
yaz_log(YLOG_LOG, "Error %s from %s",
error, client_get_url(cl));
}
+ iochan_settimeout(iochan, co->session_timeout);
client_set_state(cl, Client_Idle);
}
break;
client_set_state(cl, Client_Idle);
}
break;
break;
case ZOOM_EVENT_SEND_APDU:
client_set_state(co->client, Client_Working);
break;
case ZOOM_EVENT_SEND_APDU:
client_set_state(co->client, Client_Working);
+ iochan_settimeout(iochan, co->operation_timeout);
break;
case ZOOM_EVENT_RECV_APDU:
break;
case ZOOM_EVENT_CONNECT:
yaz_log(YLOG_LOG, "Connected to %s", client_get_url(cl));
co->state = Conn_Open;
break;
case ZOOM_EVENT_RECV_APDU:
break;
case ZOOM_EVENT_CONNECT:
yaz_log(YLOG_LOG, "Connected to %s", client_get_url(cl));
co->state = Conn_Open;
- iochan_settimeout(iochan, co->session_timeout);
break;
case ZOOM_EVENT_RECV_SEARCH:
client_search_response(cl);
break;
case ZOOM_EVENT_RECV_SEARCH:
client_search_response(cl);
con->link = link;
con->iochan = iochan_create(0, connection_handler, 0);
con->state = Conn_Connecting;
con->link = link;
con->iochan = iochan_create(0, connection_handler, 0);
con->state = Conn_Connecting;
- iochan_settimeout(con->iochan, con->connect_timeout);
+ iochan_settimeout(con->iochan, con->operation_timeout);
iochan_setdata(con->iochan, con);
iochan_setsocketfun(con->iochan, socketfun);
iochan_setmaskfun(con->iochan, maskfun);
iochan_setdata(con->iochan, con);
iochan_setsocketfun(con->iochan, socketfun);
iochan_setmaskfun(con->iochan, maskfun);
// Ensure that client has a connection associated
int client_prep_connection(struct client *cl,
// Ensure that client has a connection associated
int client_prep_connection(struct client *cl,
- int connect_timeout, int session_timeout)
+ int operation_timeout, int session_timeout)
{
struct connection *co;
struct session *se = client_get_session(cl);
{
struct connection *co;
struct session *se = client_get_session(cl);
connection_release(co);
client_set_connection(cl, co);
co->client = cl;
connection_release(co);
client_set_connection(cl, co);
co->client = cl;
+ co->operation_timeout = operation_timeout;
+ co->session_timeout = session_timeout;
/* tells ZOOM to reconnect if necessary. Disabled becuase
the ZOOM_connection_connect flushes the task queue */
/* tells ZOOM to reconnect if necessary. Disabled becuase
the ZOOM_connection_connect flushes the task queue */
- co->connect_timeout = connect_timeout;
- co->session_timeout = session_timeout;
ZOOM_connection_connect(co->link, 0, 0);
}
else
{
ZOOM_connection_connect(co->link, 0, 0);
}
else
{
- co = connection_create(cl, connect_timeout, session_timeout);
+ co = connection_create(cl, operation_timeout, session_timeout);
- if (client_prep_connection(cl, se->service->z3950_connect_timeout,
+ if (client_prep_connection(cl, se->service->z3950_operation_timeout,
se->service->z3950_session_timeout))
client_start_search(cl);
}
se->service->z3950_session_timeout))
client_start_search(cl);
}
service->server = server;
service->session_timeout = 60; /* default session timeout */
service->z3950_session_timeout = 180;
service->server = server;
service->session_timeout = 60; /* default session timeout */
service->z3950_session_timeout = 180;
- service->z3950_connect_timeout = 15;
+ service->z3950_operation_timeout = 30;
service->relevance_pct = 0;
service->sort_pct = 0;
service->relevance_pct = 0;
service->sort_pct = 0;
- src = xmlGetProp(n, (xmlChar *) "z3950_connect");
+ src = xmlGetProp(n, (xmlChar *) "z3950_operation");
- service->z3950_connect_timeout = atoi((const char *) src);
+ service->z3950_operation_timeout = atoi((const char *) src);
xmlFree(src);
if (service->z3950_session_timeout < 9)
{
xmlFree(src);
if (service->z3950_session_timeout < 9)
{
- yaz_log(YLOG_FATAL, "Z39.50 connect timeout out of range");
+ yaz_log(YLOG_FATAL, "Z39.50 operation timeout out of range");
NMEM nmem;
int session_timeout;
int z3950_session_timeout;
NMEM nmem;
int session_timeout;
int z3950_session_timeout;
- int z3950_connect_timeout;
+ int z3950_operation_timeout;
int ref_count;
/* duplicated from conf_server */
int ref_count;
/* duplicated from conf_server */