The FreeRADIUS server  $Id: 15bac2a4c627c01d1aa2047687b3418955ac7f00 $
Typedefs | Enumerations | Functions
pipeline.h File Reference

Redis asynchronous command pipelining. More...

#include <freeradius-devel/server/connection.h>
#include <freeradius-devel/server/request.h>
#include <freeradius-devel/server/trunk.h>
#include <freeradius-devel/redis/io.h>
#include <hiredis/async.h>
+ Include dependency graph for pipeline.h:
+ This graph shows which files directly or indirectly include this file:

Go to the source code of this file.

Typedefs

typedef struct fr_redis_cluster_thread_s fr_redis_cluster_thread_t
 
typedef void(* fr_redis_command_set_complete_t) (request_t *request, fr_dlist_head_t *completed, void *rctx)
 Do something meaningful with the replies to the commands previously issued. More...
 
typedef void(* fr_redis_command_set_fail_t) (request_t *request, fr_dlist_head_t *completed, void *rctx)
 Write a failure result to the rctx so that the module is aware that the request failed. More...
 
typedef struct fr_redis_command_set_s fr_redis_command_set_t
 
typedef struct fr_redis_command_s fr_redis_command_t
 
typedef struct fr_redis_trunk_s fr_redis_trunk_t
 

Enumerations

enum  fr_redis_pipeline_status_t {
  FR_REDIS_PIPELINE_OK = 0 ,
  FR_REDIS_PIPELINE_BAD_CMDS ,
  FR_REDIS_PIPELINE_DST_UNAVAILABLE ,
  FR_REDIS_PIPELINE_TOO_MANY_REDIRECTS ,
  FR_REDIS_PIPELINE_FAIL
}
 

Functions

fr_redis_cluster_thread_tfr_redis_cluster_thread_alloc (TALLOC_CTX *ctx, fr_event_list_t *el, fr_trunk_conf_t const *tconf)
 Allocate per-thread, per-cluster instance. More...
 
redisReply * fr_redis_command_get_result (fr_redis_command_t *cmd)
 
fr_redis_pipeline_status_t fr_redis_command_preformatted_add (fr_redis_command_set_t *cmds, char const *cmd_str, size_t cmd_len)
 Add a preformatted/expanded command to the command set. More...
 
fr_redis_command_set_tfr_redis_command_set_alloc (TALLOC_CTX *ctx, request_t *request, fr_redis_command_set_complete_t complete, fr_redis_command_set_fail_t fail, void *rctx)
 Allocate a new command set. More...
 
fr_redis_trunk_tfr_redis_trunk_alloc (fr_redis_cluster_thread_t *rtcluster, fr_redis_io_conf_t const *conf)
 Allocate a new trunk. More...
 
fr_redis_pipeline_status_t redis_command_set_enqueue (fr_redis_trunk_t *rtrunk, fr_redis_command_set_t *cmds)
 Enqueue a command set on a specific trunk. More...
 

Detailed Description

Redis asynchronous command pipelining.

Id
c7ea3b0460ce9b5043859bdcd3fd7becda4cc42a
Author
Arran Cudbard-Bell (a.cud.nosp@m.bard.nosp@m.b@fre.nosp@m.erad.nosp@m.ius.o.nosp@m.rg)

Definition in file pipeline.h.

Typedef Documentation

◆ fr_redis_cluster_thread_t

Definition at line 1 of file pipeline.h.

◆ fr_redis_command_set_complete_t

typedef void(* fr_redis_command_set_complete_t) (request_t *request, fr_dlist_head_t *completed, void *rctx)

Do something meaningful with the replies to the commands previously issued.

Should mark the request as runnable, if there's a request.

Definition at line 58 of file pipeline.h.

◆ fr_redis_command_set_fail_t

typedef void(* fr_redis_command_set_fail_t) (request_t *request, fr_dlist_head_t *completed, void *rctx)

Write a failure result to the rctx so that the module is aware that the request failed.

Should mark the request as runnable, if there's a request.

Definition at line 64 of file pipeline.h.

◆ fr_redis_command_set_t

Definition at line 1 of file pipeline.h.

◆ fr_redis_command_t

Definition at line 1 of file pipeline.h.

◆ fr_redis_trunk_t

Definition at line 1 of file pipeline.h.

Enumeration Type Documentation

◆ fr_redis_pipeline_status_t

Enumerator
FR_REDIS_PIPELINE_OK 

No failure.

FR_REDIS_PIPELINE_BAD_CMDS 

Malformed command set.

FR_REDIS_PIPELINE_DST_UNAVAILABLE 

Cluster or host is down.

FR_REDIS_PIPELINE_TOO_MANY_REDIRECTS 

Redirected too many times.

FR_REDIS_PIPELINE_FAIL 

Generic failure.

Definition at line 41 of file pipeline.h.

Function Documentation

◆ fr_redis_cluster_thread_alloc()

fr_redis_cluster_thread_t* fr_redis_cluster_thread_alloc ( TALLOC_CTX *  ctx,
fr_event_list_t el,
fr_trunk_conf_t const *  tconf 
)

Allocate per-thread, per-cluster instance.

This structure represents all the connections for a given thread for a given cluster. The structures holds the trunk connections to talk to each cluster member.

Definition at line 647 of file pipeline.c.

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ fr_redis_command_get_result()

redisReply* fr_redis_command_get_result ( fr_redis_command_t cmd)

Definition at line 270 of file pipeline.c.

+ Here is the caller graph for this function:

◆ fr_redis_command_preformatted_add()

fr_redis_pipeline_status_t fr_redis_command_preformatted_add ( fr_redis_command_set_t cmds,
char const *  cmd_str,
size_t  cmd_len 
)

Add a preformatted/expanded command to the command set.

The command must either be entirely static, or parented by the command set.

Note
Caller should disallow "SUBSCRIBE" et al, if they're not appropriate. As subscribing to a stream where we're not expecting it would break things, badly.
Parameters
[in]cmdsCommand set to add command to.
[in]cmd_strA fully expanded/formatted command to send to redis. Must be static, or have the same lifetime as the command set (allocated with the command set as the parent).
[in]cmd_lenLength of the command.
Returns
  • FR_REDIS_PIPELINE_BAD_CMDS if a bad command sequence is enqueued.
  • FR_REDIS_PIPELINE_OK if command was enqueued successfully.

Definition at line 292 of file pipeline.c.

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ fr_redis_command_set_alloc()

fr_redis_command_set_t* fr_redis_command_set_alloc ( TALLOC_CTX *  ctx,
request_t request,
fr_redis_command_set_complete_t  complete,
fr_redis_command_set_fail_t  fail,
void *  rctx 
)

Allocate a new command set.

This is a set of commands that the calling module wants to execute on the redis server in sequence.

Control will be returned to the caller via the registered complete and fail functions.

Parameters
[in]ctxto bind the command set's lifetime to.
[in]requestto pass to places that need it.
[in]completeFunction to call when all commands have been processed.
[in]failFunction to call if the command set was not executed or was partially executed.
[in]rctxResume context to pass to complete and fail functions.
Returns
A new or refurbished command set.

Definition at line 206 of file pipeline.c.

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ fr_redis_trunk_alloc()

fr_redis_trunk_t* fr_redis_trunk_alloc ( fr_redis_cluster_thread_t cluster_thread,
fr_redis_io_conf_t const *  io_conf 
)

Allocate a new trunk.

Parameters
[in]cluster_threadto allocate the trunk for.
[in]io_confDescribing the connection to a single REDIS host.
Returns
  • On success, a new fr_redis_trunk_t which can be used for pipelining commands.
  • NULL on failure.

Definition at line 615 of file pipeline.c.

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ redis_command_set_enqueue()

fr_redis_pipeline_status_t redis_command_set_enqueue ( fr_redis_trunk_t rtrunk,
fr_redis_command_set_t cmds 
)

Enqueue a command set on a specific trunk.

The command set may be passed around several trunks before it is complete. This is to allow it to follow MOVED and ASK responses.

Parameters
[in]rtrunkto enqueue command set on.
[in]cmdsCommand set to enqueue.
Returns
  • FR_REDIS_PIPELINE_OK if commands were immediately enqueued or placed in the backlog.
  • FR_REDIS_PIPELINE_DST_UNAVAILABLE if the REDIS host is unreachable.
  • FR_REDIS_PIPELINE_FAIL any other general error.

Definition at line 392 of file pipeline.c.

+ Here is the call graph for this function:
+ Here is the caller graph for this function: