CONF_PARSER_TERMINATOR
};
+#ifndef NDEBUG
+/** Map request states to trigger names
+ *
+ * Must stay in the same order as #fr_trunk_connection_state_t
+ */
+static fr_table_num_indexed_bit_pos_t const fr_trunk_req_trigger_names[] = {
+ { "pool.request_init", FR_TRUNK_REQUEST_STATE_INIT }, /* 0x0000 - bit 0 */
+ { "pool.request_unassigned", FR_TRUNK_REQUEST_STATE_UNASSIGNED }, /* 0x0001 - bit 1 */
+ { "pool.request_backlog", FR_TRUNK_REQUEST_STATE_BACKLOG }, /* 0x0002 - bit 2 */
+ { "pool.request_pending", FR_TRUNK_REQUEST_STATE_PENDING }, /* 0x0004 - bit 3 */
+ { "pool.request_partial", FR_TRUNK_REQUEST_STATE_PARTIAL }, /* 0x0008 - bit 4 */
+ { "pool.request_sent", FR_TRUNK_REQUEST_STATE_SENT }, /* 0x0010 - bit 5 */
+ { "pool.request_complete", FR_TRUNK_REQUEST_STATE_COMPLETE }, /* 0x0020 - bit 6 */
+ { "pool.request_state_failed", FR_TRUNK_REQUEST_STATE_FAILED }, /* 0x0040 - bit 7 */
+ { "pool.request_state_cancel", FR_TRUNK_REQUEST_STATE_CANCEL }, /* 0x0080 - bit 8 */
+ { "pool.request_state_cancel_sent", FR_TRUNK_REQUEST_STATE_CANCEL_SENT }, /* 0x0100 - bit 9 */
+ { "pool.request_state_cancel_partial", FR_TRUNK_REQUEST_STATE_CANCEL_PARTIAL }, /* 0x0200 - bit 10 */
+ { "pool.request_state_cancel_complete", FR_TRUNK_REQUEST_STATE_CANCEL_COMPLETE } /* 0x0400 - bit 11 */
+};
+static size_t fr_trunk_req_trigger_names_len = NUM_ELEMENTS(fr_trunk_req_trigger_names);
+#endif
+
static fr_table_num_ordered_t const fr_trunk_request_states[] = {
{ "INIT", FR_TRUNK_REQUEST_STATE_INIT },
{ "UNASSIGNED", FR_TRUNK_REQUEST_STATE_UNASSIGNED },
{ "CANCEL", FR_TRUNK_REQUEST_STATE_CANCEL },
{ "CANCEL-SENT", FR_TRUNK_REQUEST_STATE_CANCEL_SENT },
{ "CANCEL-PARTIAL", FR_TRUNK_REQUEST_STATE_CANCEL_PARTIAL },
- { "CANCEL-COMPLETE", FR_TRUNK_REQUEST_STATE_CANCEL_COMPLETE}
+ { "CANCEL-COMPLETE", FR_TRUNK_REQUEST_STATE_CANCEL_COMPLETE }
};
static size_t fr_trunk_request_states_len = NUM_ELEMENTS(fr_trunk_request_states);
* Must stay in the same order as #fr_trunk_connection_state_t
*/
static fr_table_num_indexed_bit_pos_t const fr_trunk_conn_trigger_names[] = {
- { "pool.conn_halted", FR_TRUNK_CONN_HALTED },
- { "pool.conn_init", FR_TRUNK_CONN_INIT },
- { "pool.conn_connecting", FR_TRUNK_CONN_CONNECTING },
- { "pool.conn_active", FR_TRUNK_CONN_ACTIVE },
- { "pool.conn_closed", FR_TRUNK_CONN_CLOSED },
- { "pool.conn_full", FR_TRUNK_CONN_FULL },
- { "pool.conn_inactive", FR_TRUNK_CONN_INACTIVE },
- { "pool.conn_inactive_draining", FR_TRUNK_CONN_INACTIVE_DRAINING },
- { "pool.conn_draining", FR_TRUNK_CONN_DRAINING },
- { "pool.conn_draining_to_free", FR_TRUNK_CONN_DRAINING_TO_FREE }
+ { "pool.connection_halted", FR_TRUNK_CONN_HALTED }, /* 0x0000 - bit 0 */
+ { "pool.connection_init", FR_TRUNK_CONN_INIT }, /* 0x0001 - bit 1 */
+ { "pool.connection_connecting", FR_TRUNK_CONN_CONNECTING }, /* 0x0002 - bit 2 */
+ { "pool.connection_active", FR_TRUNK_CONN_ACTIVE }, /* 0x0004 - bit 3 */
+ { "pool.connection_closed", FR_TRUNK_CONN_CLOSED }, /* 0x0008 - bit 4 */
+ { "pool.connection_full", FR_TRUNK_CONN_FULL }, /* 0x0010 - bit 5 */
+ { "pool.connection_inactive", FR_TRUNK_CONN_INACTIVE }, /* 0x0020 - bit 6 */
+ { "pool.connection_inactive_draining", FR_TRUNK_CONN_INACTIVE_DRAINING }, /* 0x0040 - bit 7 */
+ { "pool.connection_draining", FR_TRUNK_CONN_DRAINING }, /* 0x0080 - bit 8 */
+ { "pool.connection_draining_to_free", FR_TRUNK_CONN_DRAINING_TO_FREE } /* 0x0100 - bit 9 */
};
static size_t fr_trunk_conn_trigger_names_len = NUM_ELEMENTS(fr_trunk_conn_trigger_names);
static fr_table_num_ordered_t const fr_trunk_connection_states[] = {
- { "INIT", FR_TRUNK_CONN_INIT },
- { "HALTED", FR_TRUNK_CONN_HALTED },
- { "CONNECTING", FR_TRUNK_CONN_CONNECTING },
- { "ACTIVE", FR_TRUNK_CONN_ACTIVE },
- { "CLOSED", FR_TRUNK_CONN_CLOSED },
- { "FULL", FR_TRUNK_CONN_FULL },
- { "INACTIVE", FR_TRUNK_CONN_INACTIVE },
- { "INACTIVE-DRAINING", FR_TRUNK_CONN_INACTIVE_DRAINING },
- { "DRAINING", FR_TRUNK_CONN_DRAINING },
- { "DRAINING-TO-FREE", FR_TRUNK_CONN_DRAINING_TO_FREE }
+ { "INIT", FR_TRUNK_CONN_INIT },
+ { "HALTED", FR_TRUNK_CONN_HALTED },
+ { "CONNECTING", FR_TRUNK_CONN_CONNECTING },
+ { "ACTIVE", FR_TRUNK_CONN_ACTIVE },
+ { "CLOSED", FR_TRUNK_CONN_CLOSED },
+ { "FULL", FR_TRUNK_CONN_FULL },
+ { "INACTIVE", FR_TRUNK_CONN_INACTIVE },
+ { "INACTIVE-DRAINING", FR_TRUNK_CONN_INACTIVE_DRAINING },
+ { "DRAINING", FR_TRUNK_CONN_DRAINING },
+ { "DRAINING-TO-FREE", FR_TRUNK_CONN_DRAINING_TO_FREE }
};
static size_t fr_trunk_connection_states_len = NUM_ELEMENTS(fr_trunk_connection_states);
static fr_table_num_ordered_t const fr_trunk_cancellation_reasons[] = {
- { "FR_TRUNK_CANCEL_REASON_NONE", FR_TRUNK_CANCEL_REASON_NONE },
- { "FR_TRUNK_CANCEL_REASON_SIGNAL", FR_TRUNK_CANCEL_REASON_SIGNAL },
- { "FR_TRUNK_CANCEL_REASON_MOVE", FR_TRUNK_CANCEL_REASON_MOVE },
- { "FR_TRUNK_CANCEL_REASON_REQUEUE", FR_TRUNK_CANCEL_REASON_REQUEUE }
+ { "FR_TRUNK_CANCEL_REASON_NONE", FR_TRUNK_CANCEL_REASON_NONE },
+ { "FR_TRUNK_CANCEL_REASON_SIGNAL", FR_TRUNK_CANCEL_REASON_SIGNAL },
+ { "FR_TRUNK_CANCEL_REASON_MOVE", FR_TRUNK_CANCEL_REASON_MOVE },
+ { "FR_TRUNK_CANCEL_REASON_REQUEUE", FR_TRUNK_CANCEL_REASON_REQUEUE }
};
static size_t fr_trunk_cancellation_reasons_len = NUM_ELEMENTS(fr_trunk_cancellation_reasons);
static fr_table_num_ordered_t const fr_trunk_connection_events[] = {
- { "FR_TRUNK_CONN_EVENT_NONE", FR_TRUNK_CONN_EVENT_NONE },
- { "FR_TRUNK_CONN_EVENT_READ", FR_TRUNK_CONN_EVENT_READ },
- { "FR_TRUNK_CONN_EVENT_WRITE", FR_TRUNK_CONN_EVENT_WRITE },
- { "FR_TRUNK_CONN_EVENT_BOTH", FR_TRUNK_CONN_EVENT_BOTH },
+ { "FR_TRUNK_CONN_EVENT_NONE", FR_TRUNK_CONN_EVENT_NONE },
+ { "FR_TRUNK_CONN_EVENT_READ", FR_TRUNK_CONN_EVENT_READ },
+ { "FR_TRUNK_CONN_EVENT_WRITE", FR_TRUNK_CONN_EVENT_WRITE },
+ { "FR_TRUNK_CONN_EVENT_BOTH", FR_TRUNK_CONN_EVENT_BOTH },
};
static size_t fr_trunk_connection_events_len = NUM_ELEMENTS(fr_trunk_connection_events);
void trunk_request_state_log_entry_add(char const *function, int line,
fr_trunk_request_t *treq, fr_trunk_request_state_t new) CC_HINT(nonnull);
+#define REQUEST_TRIGGER(_state) do { \
+ if (trunk->pub.triggers) { \
+ trigger_exec(NULL, NULL, fr_table_str_by_value(fr_trunk_req_trigger_names, _state, \
+ "<INVALID>"), true, NULL); \
+ } \
+} while (0)
+
/** Record a request state transition and log appropriate output
*
*/
fr_table_str_by_value(fr_trunk_request_states, _new, "<INVALID>")); \
trunk_request_state_log_entry_add(__FUNCTION__, __LINE__, treq, _new); \
treq->pub.state = _new; \
+ REQUEST_TRIGGER(_new); \
} while (0)
#define REQUEST_BAD_STATE_TRANSITION(_new) \
do { \