MINOR: stream_interface: add reporting of ressouce allocation errors

SSL and keep-alive will need to be able to fail on allocation errors,
and the stream interface did not allow to report such a cause. The flag
will then be "RC" as already documented.
This commit is contained in:
Willy Tarreau 2012-05-14 12:11:47 +02:00
parent 05efc0f33a
commit 2d400bb931
3 changed files with 12 additions and 4 deletions

View File

@ -57,10 +57,11 @@ enum {
SI_ET_CONN_TO = 0x0008, /* connection timeout */
SI_ET_CONN_ERR = 0x0010, /* connection error (eg: no server available) */
SI_ET_CONN_ABRT = 0x0020, /* connection aborted by external cause (eg: abort) */
SI_ET_CONN_OTHER = 0x0040, /* connection aborted for other reason (eg: 500) */
SI_ET_DATA_TO = 0x0080, /* timeout during data phase */
SI_ET_DATA_ERR = 0x0100, /* error during data phase */
SI_ET_DATA_ABRT = 0x0200, /* data phase aborted by external cause */
SI_ET_CONN_RES = 0x0040, /* connection aborted due to lack of resources */
SI_ET_CONN_OTHER = 0x0080, /* connection aborted for other reason (eg: 500) */
SI_ET_DATA_TO = 0x0100, /* timeout during data phase */
SI_ET_DATA_ERR = 0x0200, /* error during data phase */
SI_ET_DATA_ABRT = 0x0400, /* data phase aborted by external cause */
};
/* flags set after I/O (16 bit) */

View File

@ -936,6 +936,9 @@ void http_return_srv_error(struct session *s, struct stream_interface *si)
else if (err_type & SI_ET_CONN_ERR)
http_server_error(s, si, SN_ERR_SRVCL, SN_FINST_C,
503, http_error_message(s, HTTP_ERR_503));
else if (err_type & SI_ET_CONN_RES)
http_server_error(s, si, SN_ERR_RESOURCE, SN_FINST_C,
503, http_error_message(s, HTTP_ERR_503));
else /* SI_ET_CONN_OTHER and others */
http_server_error(s, si, SN_ERR_INTERNAL, SN_FINST_C,
500, http_error_message(s, HTTP_ERR_500));

View File

@ -2576,6 +2576,10 @@ void default_srv_error(struct session *s, struct stream_interface *si)
err = SN_ERR_SRVCL;
fin = SN_FINST_C;
}
else if (err_type & SI_ET_CONN_RES) {
err = SN_ERR_RESOURCE;
fin = SN_FINST_C;
}
else /* SI_ET_CONN_OTHER and others */ {
err = SN_ERR_INTERNAL;
fin = SN_FINST_C;