![]() |
Diffusion C API 6.12.0
|
Allows a client session to configure session trees. More...
Data Structures | |
struct | diffusion_session_trees_put_branch_mapping_table_params_s |
Structure supplied when issuing a diffusion_session_trees_put_branch_mapping_table call. More... | |
struct | diffusion_session_trees_get_session_tree_branches_params_s |
Structure supplied when issuing a diffusion_session_trees_get_session_tree_branches call. More... | |
struct | diffusion_session_trees_get_branch_mapping_table_params_s |
Structure supplied when issuing a diffusion_session_trees_get_branch_mapping_table call. More... |
Typedefs | |
typedef struct DIFFUSION_BRANCH_MAPPING_TABLE_BUILDER_T | DIFFUSION_BRANCH_MAPPING_TABLE_BUILDER_T |
Opaque Branch Mapping Table Builder struct. | |
typedef struct DIFFUSION_BRANCH_MAPPING_TABLE_T | DIFFUSION_BRANCH_MAPPING_TABLE_T |
Opaque Branch Mapping Table struct. | |
typedef struct DIFFUSION_BRANCH_MAPPING_T | DIFFUSION_BRANCH_MAPPING_T |
Opaque Branch Mapping struct. | |
typedef int(* | branch_mapping_table_set_cb) (void *context) |
callback when branch mapping table has been set on the server | |
typedef int(* | get_session_tree_branches_cb) (const LIST_T *session_tree_branches, void *context) |
callback when branch mapping table has been set on the server | |
typedef int(* | get_branch_mapping_table_cb) (const DIFFUSION_BRANCH_MAPPING_TABLE_T *table, void *context) |
callback when branch mapping table has been retrieved from the server | |
typedef struct diffusion_session_trees_put_branch_mapping_table_params_s | DIFFUSION_SESSION_TREES_PUT_BRANCH_MAPPING_TABLE_PARAMS_T |
Structure supplied when issuing a diffusion_session_trees_put_branch_mapping_table call. | |
typedef struct diffusion_session_trees_get_session_tree_branches_params_s | DIFFUSION_SESSION_TREES_GET_SESSION_TREE_BRANCHES_PARAMS_T |
Structure supplied when issuing a diffusion_session_trees_get_session_tree_branches call. | |
typedef struct diffusion_session_trees_get_branch_mapping_table_params_s | DIFFUSION_SESSION_TREES_GET_BRANCH_MAPPING_TABLE_PARAMS_T |
Structure supplied when issuing a diffusion_session_trees_get_branch_mapping_table call. |
Allows a client session to configure session trees.
A session tree is a virtual view of the topic tree presented to a session by fetch and subscription operations. Custom session trees for different sessions can be configured using declarative rules maintained by the server to meet data security, data optimisation, or personalisation and localisation requirements. Each session can be presented with a unique session tree based on its session properties.
A session tree is produced by applying branch mappings to the topic tree. Branch mappings are organised into branch mapping tables. Each branch mapping table is assigned to a unique path – the session tree branch.
A session tree is composed of session paths. Each session path is mapped via the branch mapping tables to a unique topic path.
A branch mapping table is an ordered list of (session filter, topic tree branch) pairs. For example, the branch mapping table for the session tree branch market/prices
might be:
Session filter Topic tree branch ============== ================= USER_TIER is '1' or $Country is 'DE' backend/discounted_prices USER_TIER is '2' backend/standard_prices $Principal is '' backend/delayed_prices
With this configuration, if an unauthenticated session (one that matches the $Principal is ''
session filter) subscribes to the session path market/prices/X
, and there is a topic bound to the topic path backend/delayed_prices/X
, the subscription will complete. The session will receive a subscription notification under the session path market/prices/X
, together with the topic properties and the value of the topic. The session is unaware that the data originates from a topic bound to a different topic path. If no topic is bound to backend/delayed_prices/X
, the subscription will not resolve and the session will receive no data, even if there is a topic bound to market/prices/X
.
Session trees complement the data transformation capabilities of topic views
. In our example, the time delayed time feed at backend/delayed_prices
could be maintained by a topic view using the delay by clause.
Branch mappings are persisted by the server and shared across a cluster, in a similar manner to topic views, security stores, and metric collectors. Branch mappings are editable using this feature, and via the management console.
For a given session and session path, at most one branch mapping applies. The applicable branch mapping is chosen as follows:
To subscribe to or fetch from a session path, a session must be granted the appropriate path permission to the session path for the operation PATH_PERMISSION_SELECT_TOPIC
, or PATH_PERMISSION_READ_TOPIC
). The session doesn't require any permissions to the topic path of the topic providing the data.
To create or replace branch mappings, a session needs the PATH_PERMISSION_MODIFY_TOPIC
path permission for the session tree branch of the branch mapping table, PATH_PERMISSION_EXPOSE_BRANCH
path permission for the topic tree branch of each branch mapping, and (if an existing table with the same session tree branch is being replaced) PATH_PERMISSION_EXPOSE_BRANCH
permission for each branch mapping of existing table.
To retrieve a branch mapping table, a session needs the PATH_PERMISSION_READ_TOPIC
path permission for its session tree branch.
typedef int(* branch_mapping_table_set_cb) (void *context) |
callback when branch mapping table has been set on the server
context | User supplied context. |
typedef int(* get_branch_mapping_table_cb) (const DIFFUSION_BRANCH_MAPPING_TABLE_T *table, void *context) |
callback when branch mapping table has been retrieved from the server
table | The branch mapping table. |
context | User supplied context. |
typedef int(* get_session_tree_branches_cb) (const LIST_T *session_tree_branches, void *context) |
callback when branch mapping table has been set on the server
session_tree_branches | A list of session tree branches. |
context | User supplied context. |