Class TopicSpecificationProperty
Contains all valid ITopicSpecification property keys.
Namespace: PushTechnology.ClientInterface.Client.Topics.Details
Assembly: Diffusion.Client.dll
Syntax
public static class TopicSpecificationProperty : object
Fields
Compression
The topic property key that allows compression to be disabled on a per-topic basis.
Declaration
public static readonly string Compression
Field Value
Type | Description |
---|---|
String |
Remarks
Compression reduces the bandwidth required to broadcast topic updates to subscribed sessions.
Changes to a topic's value are published to each subscribed session as a sequence of topic messages. A topic message can carry the latest value or the difference between the latest value and the previous value (a delta). The compression property determines if and how the published messages are compressed. Topic messages are not exposed through the client API. The client library handles decompression and decodes deltas automatically, passing reconstructed values to the application.
Generally compression is beneficial, so the default value for this property is true
, meaning
compression is enabled. Setting this property to false
disables compression for the topic.
Whether compression is enabled or disabled by this property is only one factor that determines whether a topic message will be compressed. Other factors include:
- Compression must be enabled in the server configuration.
- The client library must support the server's compression scheme. In this release, the server supports zlib compression, and also allows compression to be disabled on a per-connector basis.
- The message must be sufficiently large. Messages smaller than a few tens of bytes are not compressed because the potential savings are negligible.
- Future releases may use further heuristics to trade off the cost of compression against the potential savings.
Conflation
Key of the topic property that describes the conflation policy of the topic.
Declaration
public static readonly string Conflation
Field Value
Type | Description |
---|---|
String |
Remarks
The policy specifies how the server manages queued topic updates. Conflation is applied individually to each session queue.
Conflation is the process of merging or discarding topic updates queued for a session to reduce the server memory footprint and network data. The server will conflate sessions that have a large number of queued messages to meet configured queue size targets. The sessions with the largest queues are typically slow consumers or have been disconnected – both will benefit from conflation. This property allows conflation behavior to be tuned on a topic-by-topic basis.
Supported policies are:
- off
- conflate
- unsubscribe
- always
The policy "off" disables conflation for the topic. This policy disables all conflation for the topic, so topic updates will never be merged or discarded.
The policy "conflate" automatically conflates topic updates when back pressure is detected by the server. This policy is ignored for stateless, single value and record topics, and for slave and routing topics that reference stateless, single value and record topics.
The policy "unsubscribe" automatically unsubscribes the topic when back pressure is detected by the server. The unsubscription is not persisted to the cluster. If a session fails over to a different server it will be resubscribed to the topic.
The policy "always" automatically conflates topic updates as they are queued for the session. This is an eager policy that ensures only the latest update is queued for the topic, minimizing the server memory and network bandwidth used by the session. This policy is ignored for stateless, single value and record topics, and for slave and routing topics that reference stateless, single value and record topics.
The "conflate" and "unsubscribe" policies are applied when the server detects back pressure for a session. The server configuration places limits on the data queued for each session. If these limits are breached, the server will conflate the session queue to attempt to reduce its size. If the session queue still exceeds the limits after conflation, the session will be terminated.
Conflation of stateless, single value and record topics is configured using server-side configuration. This configuration describes how topic updates should be merged. Like the "always" policy conflation specified this way is applied when queuing a topic update. The policy "off" prevents this conflation being applied. All other policies allow conflation specified this way to happen. The "unsubscribe" policy will still unsubscribe topics that use conflation specified this way.
Added in version 6.1
DontRetainValue
Key of the topic property that specifies a topic should not retain its last value.
Declaration
public static readonly string DontRetainValue
Field Value
Type | Description |
---|---|
String |
Remarks
By default, a topic (other than a SLAVE, or ROUTING topic) will retain its latest value. The latest value will be sent to new subscribers. Setting this property to "true" disables this behavior. New subscribers will not be sent an initial value. No value will be returned for fetch operations that select the topic. This is useful for data streams where the values are only transiently valid.
Setting this property to "true" disables delta streams, regardless of the PublishValuesOnly property value. If subsequent values are likely to be related, delta streams can provide a performance benefit. Consider not setting this property to benefit from delta streams, even if there is no other requirement to retain the last value.
Setting this property affects the default subscription range of a time
series topic. If set to true
, the default subscription range will not
provide an initial event to new subscribers. The default subscription
range can be overridden with the TimeSeriesSubscriptionRange
property. Regardless of whether this property is set, a time
series topic will continue to record events according to the
TimeSeriesRetainedRange property.
Implemented in Version 6.0.
Owner
Key of the topic property that allows the creator of a topic to extend READ_TOPIC, MODIFY_TOPIC, and UPDATE_TOPIC permissions to a specific principal, in addition to the permissions granted by the authorization rules in the security store.
Declaration
public static readonly string Owner
Field Value
Type | Description |
---|---|
String |
Remarks
A session that has authenticated using the principal can update and remove the topic, so the principal can be considered the topic owner. To fetch or subscribe to the topic, the principal must also be granted SELECT_TOPIC by the security store rules.
This may be used in the following cases: 1) A session creates a topic and makes its own principal the owner. 2) A session creates a topic and makes another principal the owner.
The format of the property value is:
$Principal is "name"
where name is the name of the principal. Single quotes may be used instead of double quotes and special characters can be escaped.
The purpose of this property is to allow a client to create topics on behalf of other users. This can be used in conjunction with the Removal property so that such topics are removed when there are no longer any sessions for the named principal.
For example:
specification.WithProperty(
TopicSpecificationProperty.OWNER, "$Principal is 'myPrincipal'" )
.WithProperty( TopicSpecificationProperty.REMOVAL, "when no session has '$Principal is \"myPrincipal\"' for 5s" );
Added in version 6.1
Persistent
Key of the topic property that can be used to prevent a topic from being persisted when the server is configured to enable persistence.
Declaration
public static readonly string Persistent
Field Value
Type | Description |
---|---|
String |
Remarks
By default, a topic will be persisted if persistence is enabled at the server and the topic type supports persistence.
Setting Persistent to "false"
will prevent the topic from being persisted.
Added in version 6.1
PublishValuesOnly
Key of the topic property that specifies whether a topic should publish only values.
Declaration
public static readonly string PublishValuesOnly
Field Value
Type | Description |
---|---|
String |
Remarks
By default, a topic that supports delta streams will publish the difference between two values (a delta) when doing so is more efficient than publishing the complete new value. Subscribing sessions can use a IValueStream<TValue> to automatically apply the delta to a local copy of the topic value to calculate the new value.
Setting PublishValuesOnly to "true" disables this behavior so that deltas are never published. Doing so is not recommended because it will result in more data being transmitted and less efficient use of network resources. Reasons to consider setting the value to "true" include compatibility with older client libraries that do not support delta streams; to simplify applications that use topic streams and do not wish to deal with the complexities of delta processing (it would be better for such an application to use a IValueStream<TValue>; and to disable delta streams to investigate their performance benefits.
Removal
Key of the topic property that specifies a removal policy for automatic removal of the topic (and/or other topics).
Declaration
public static readonly string Removal
Field Value
Type | Description |
---|---|
String |
Remarks
This property is specified as an expression which defines one or more conditions that are to be satisfied before automatic removal occurs.
The expression takes the form:
when conditions [remove "selector"]
.
At least one condition must be supplied. If more than one is supplied,
they must be separated by logical operators (and
or or
).
The natural evaluation order of the operators may be changed by
surrounding with parentheses (for example (condition and condition)
).
The remove
clause is optional. It provides a
topic selector expression representing the topics to be removed.
If a remove
clause is specified, the topic with the removal
policy will only be removed if its path matches the selector expression.
The selector must be surrounded by either double or single quotes.
The permissions that are applied at the time of removal are those defined by the roles of the principal that created the topic at the time of creation. The roles of that principal may therefore change before the removal with no effect, but if the permissions given to the roles change it may have an effect upon the final removal.
Only one occurrence of each of the following condition types may be included within the expression:
Condition | Format | Usage |
---|---|---|
time after | time after absoluteTime |
Removal should occur after a specified absolute time. Absolute time may be specified as a number of milliseconds since the epoch (00:00:00 on 1 January 1970) or as a quoted date and time formatted in RF-1123 (https://tools.ietf.org/html/rfc1123). Either single or double quotes may be used. |
subscriptions less than | subscriptions > n for forPeriod [after afterPeriod] |
Removal should occur when the topic has had less than the specified number (n) of subscriptions for a given period (forPeriod) of time. Optionally, an initial period (afterPeriod) may be specified by which to delay the initial checking of this condition. See below for period formats. |
no updates for | no updates for forPeriod [after afterPeriod] |
Removal should occur when the topic has had no updates for a given period (forPeriod) of time. Optionally, an initial period (afterPeriod) may be specified by which to delay the initial checking of this condition. See below for period formats. |
no session has | no session has "criteria" [for forPeriod] [after afterPeriod] |
Removal should occur when there are no sessions satisfying certain /// criteria. Optionally the criteria can be required to be satisfied /// for a period of time (forPeriod). Optionally, an initial period /// (afterPeriod) can be specified to delay the initial check of the /// criteria. Session selection criteria are specified as defined in /// session filters and must be surrounded by single or /// double quotes. See below for period formats. |
this session closes |
This is a shorthand form of 'no session has' that may be used to indicate that the topic is to be removed when the session that created it closes. |
Time periods are specified as a number followed (with no intermediate space) by a single letter representing the time unit. The time unit may be 's' (seconds), 'm' (minutes), 'h' (hours) or 'd' (days). For example, 10 minutes would be specified as 10m.
If quotes or backslashes (\
) are required within quoted values such as
selectors or session criteria then they may be escaped by preceding with \
.
The expression is validated only by the server and therefore if an
invalid expression is specified it will be reported as an
InvalidTopicSpecificationException.
Examples
when time after 1518780068112
The topic will be removed when the date and time indicated by the specified number of milliseconds since the epoch has passed.
when time after "Tue, 3 Jun 2018 11:05:30 GMT"
The topic will be removed when the specified date and time has passed.
when time after "Tue, 3 Jun 2018 11:05:30 GMT" remove "*alpha/beta//"
The topic alpha/beta and all topics subordinate to it will be removed when the specified date and time has passed.
when subscriptions < 1 for 20m
The topic will be removed when it has had no subscriptions for a continuous period of 20 minutes.
when subscriptions < 2 for 20m after 1h
The topic will be removed when it has had less than 2 subscriptions for a continuous period of 20 minutes after one hour has passed since its creation.
when no updates for 3h
The topic will be removed when it has had no updates for a continuous period of 3 hours.
when no updates for 15m after 1d
The topic will be removed when it has had no updates for a continuous period of 15 minutes after one day has passed since its creation.
when this session closes
The topic will be removed when the session creating it closes.
when no session has '$Principal is "Alice"'
The topic will be removed when there are no sessions with the principal 'Alice'.
when no session has '$Principal is "Alice"' for 10m
The topic will be removed when there are no sessions with the principal 'Alice' for a continuous period of 10 minutes.
when no session has 'Department is "Accounts"' for 30m after 2h
The topic will be removed when there have been no sessions from the Accounts department for a continuous period of 30 minutes after 2 hours have passed since its creation.
when time after "Tue, 3 Jun 2018 11:05:30 GMT" and subscriptions < 1 for 30m
The topic will be removed when the specified date and time has passed and the topic has had no subscriptions for a continuous period of 30 minutes after that time.
when time after "Tue, 3 Jun 2018 11:05:30 GMT" and subscriptions < 2 for 10m after 1h
The topic will be removed when the specified date and time has passed and the topic has had less than 2 subscriptions for a continuous period of 10 minutes after that time plus one hour.
when time after "Tue, 3 Jun 2018 11:05:30 GMT" or subscriptions < 2 for 10m after 1h
The topic will be removed when the specified date and time has passed or the topic has had less than 2 subscriptions for a continuous period of 10 minutes after one hour from its creation.
when time after "Tue, 3 Jun 2018 11:05:30 GMT" and (subscriptions < 2 for 10m after 1h or no updates for 20m)
The topic will be removed when the specified date and time has passed and either the topic has had less than 2 subscriptions for a continuous period of 10 minutes after that time plus one hour or it has had no updates for a continuous period of 20 minutes. Note that the parentheses are significant here as without them the topic would be removed if it had had no updates for 20 minutes regardless of the time and subscriptions clause.
Notes and restrictions on use
The after
time periods refer to the period since the topic was
created or restored from persistence store after a server is restarted.
They are designed as a 'grace' period after the topic comes into
existence before the related condition starts to be evaluated. When not
specified the conditions start to be evaluated as soon as the topic is
created or restored.
The server will evaluate conditions on a periodic basis (every few seconds) so the exact removal time will not be precise for low periodic granularity.
The meaning of the for
period on no session has
conditions is subtly different from on other conditions. It does not
guarantee that there has been no session satisfying the condition at some
point between evaluations, only that when evaluated the given period of
time has passed since it was last evaluated and found to have no matching
sessions.
subscriptions
is the number of subscriptions to a topic, including those
that occur through routing or slave topics. When monitoring across a
cluster, the subscriptions less than
condition is first checked
on the server that owns the topic and if satisfied there then each
cluster member is queried to check if the condition has also been
satisfied there. The topic will only be removed if the total number of
subscriptions across the cluster is less than that specified in the condition.
Automatic topic removal is supported for replicated topics. A
subscriptions less than
condition for a replicated topic will be
evaluated against the total number of subscriptions to the topic across
the cluster. A no session has
condition will consider all sessions
hosted across the cluster.
The subscriptions less than
condition does not count indirect
subscriptions to a topic from sessions hosted on a secondary server
connected using fan-out. Similarly the no session has
condition does
not count sessions on secondary servers connected using fan-out.
Added in version 6.1
Schema
Key of the topic property that specifies a schema which constrains topic values.
Declaration
public static readonly string Schema
Field Value
Type | Description |
---|---|
String |
Remarks
This property is only used by RECORD_V2 topics. The value is converted to a Diffusion record schema using ParseSchema(String).
Implemented in Version 6.0.
SlaveMasterTopic
Key of the topic property that specifies the master topic path for a SLAVE topic.
Declaration
public static readonly string SlaveMasterTopic
Field Value
Type | Description |
---|---|
String |
Remarks
When creating a slave topic using a topic specification then this must be specified. For all other topic types it is ignored.
Implemented in Version 6.0.
TidyOnUnsubscribe
Key of the topic property that specifies the "tidy on unsubscribe" option for a topic.
Declaration
public static readonly string TidyOnUnsubscribe
Field Value
Type | Description |
---|---|
String |
Remarks
By default, if a session unsubscribes from a topic, it will receive any updates for that topic that were previously queued but not sent.
If this property is set to "true", when a session unsubscribes from the topic, any updates for the topic that are still queued for the session are removed. There is a performance overhead to using this option as the client queue must be scanned to find topic updates to remove. However, it may prove useful for preventing unwanted data being sent to sessions.
Implemented in Version 6.0.
TimeSeriesEventValueType
The key of the topic property that specifies the event data type for a time series topic.
Declaration
public static readonly string TimeSeriesEventValueType
Field Value
Type | Description |
---|---|
String |
Remarks
The value is the TypeName of a data type.
Added in version 6.1.
TimeSeriesRetainedRange
The key of the topic property that specifies the range of events retained by a time series topic.
Declaration
public static readonly string TimeSeriesRetainedRange
Field Value
Type | Description |
---|---|
String |
Remarks
When a new event is added to the time series, older events that fall outside of the range are discarded.
If the property is not specified, a time series topic will retain the ten most recent events.
Time series range expressions
The property value is a time series range expression string composed of one or more constraint clauses. Constraints are combined to provide a range of events from the end of the time series.
Limit constraint: A limit constraint specifies the maximum number of events from the end of the time series.
Last clause: A last constraint specifies the maximum duration of events from the end of the time series. The duration is expressed as an integer followed by one of the following time units.
MS
- milliseconds;
S
- seconds;
H
- hours;
If a range expression contains multiple constraints, the constraint that selects the smallest range is used.
Property value | Meaning |
---|---|
limit 5 |
The five most recent events. |
last 10s |
All events that are no more than ten seconds older than the latest event. |
last 10s limit 5 |
The five most recent events that are no more than ten seconds older than the latest event. |
Range expressions are not case sensitive: limit 5 last 10s
is
equivalent to LIMIT 5 LAST 10S
.
Added in version 6.1.
TimeSeriesSubscriptionRange
The key of the topic property that specifies the range of time series topic events to send to new subscribers.
Declaration
public static readonly string TimeSeriesSubscriptionRange
Field Value
Type | Description |
---|---|
String |
Remarks
The property value is a time series range expression, following the format used for TimeSeriesRetainedRange.
If the property is not specified, new subscribers will be sent the latest event if delta streams are enabled and no events if delta streams are disabled. See the description of Subscription range in the ITimeSeries documentation.
Added in version 6.1.
ValidateValues
Key of the topic property indicating whether a topic should validate inbound values.
Declaration
public static readonly string ValidateValues
Field Value
Type | Description |
---|---|
String |
Remarks
By default, the server does not validate received values before sending them on to client sessions. Invalid or corrupt values will be stored in the topic and passed on to sessions. If this property is set to "true", the server will perform additional validation on values to check that they are valid instances of the data type, and if it is not then it will return an error to the updater and not update the topic.
If this value is not set (or set to something other than "true"), no server validation of inbound values is performed. This is the recommended setting as there is a performance overhead to validation and a session using ITopicUpdate cannot send invalid values anyway.