This page defines and explains the properties specific to the distributed architecture, and those you can set to modify the default behaviors of both the data and query nodes, and of their associated messengers.Documentation Index
Fetch the complete documentation index at: https://docs.activeviam.com/llms.txt
Use this file to discover all available pages before exploring further.
To familiarize yourself with the distributed architecture, we recommend you read the rest of the distributed architecture documentation before continuing.
Query Cube Properties
The query cube properties can be found in theIDistributedActivePivotInstanceDescription interface, and can
be set using the fluent builder API IQueryCubeDescriptionBuilder.
Data Replication Property
- setters:
IQueryCubeDescriptionBuilder#withDataReplication(String value)IQueryCubeDescriptionBuilder#withProperty( IDistributedActivePivotInstanceDescription.DATA_REPLICATION, String value)
- default value:
REPLICATE_ON_SLICER
- Data Cube 1 has one hierarchy.
- Data Cube 2 has two hierarchies (distinct from Data Cube 1), Time, that is
slicing. The Query Cube represents the merger of the two topologies, and therefore contains three hierarchies.
AllMember|*|AllMember.
Asking for AllMembers on theIn the data cube 1, the new local location isyearlevel aggregates the measures over all years, whereas asking for*aggregates the measures for each year, and returns a list of results.
AllMember. When translating back to the query cube,
there are three possibilities:
-
REPLICATE: The measures are replicated on all unknown hierarchies and levels. Here, the results are replicated for locations:AllMember|2019|AllMemberAllMember|2018|AllMemberAllMember|2017|AllMember
-
NO_REPLICATION: The measures are not replicated on any unknown location. The result are:AllMember|2019|AllMemberin this case, because the hierarchy Time isslicingand 2019, as first member of the hierarchy, it is the default value (unless otherwise specified).AllMember|AllMember|AllMemberif the Time hierarchy was notslicing, as the results would be aggregated on the defaultAllMember.
-
REPLICATE_ON_SLICER: The measures are replicated on the first level of unknown hierarchies, and therefore toAllMemberfor regular hierarchies, or to the first-level member for aslicinghierarchy. This mode does not allow replication of data if the cube filter contains restrictions on unknown hierarchies. -
REPLICATE_ON_SLICER_IGNORING_FILTER: The measures are replicated on the first level of unknown hierarchies, and therefore toAllMemberfor regular hierarchies, or to the first-level member for aslicinghierarchy. This mode allows replication of data even if the cube filter contains restrictions on unknown hierarchies.
Application Measure Groups
- setters:
IQueryCubeDescriptionBuilder#withApplicationMeasureGroups(boolean value)IQueryCubeDescriptionBuilder#withProperty( IDistributedActivePivotInstanceDescription.APPLICATION_MEASURE_GROUPS, String value)
- default value:
"true"
applicationId of the data pivot
they come from as measureGroup.
Application Measure Names
- setters:
IQueryCubeDescriptionBuilder#withApplicationMeasureNames(boolean value)IQueryCubeDescriptionBuilder#withProperty( IDistributedActivePivotInstanceDescription.APPLICATION_MEASURE_NAMES, String value)
- default value:
"false"
applicationId is added as a suffix.
Application Measure Groups Suffix
- setters:
IQueryCubeDescriptionBuilder#withApplicationMeasureGroupsSuffix(boolean value)IQueryCubeDescriptionBuilder#withProperty( IDistributedActivePivotInstanceDescription.APPLICATION_MEASURE_GROUPS_SUFFIX, String value)
- default value:
"false"
applicationId to
locally defined measure groups.
Removal Delay
- setter:
IQueryCubeDescriptionBuilder#withProperty( IDistributedActivePivotInstanceDescription.REMOVAL_DELAY, String value)
- default value:
"60" - unit: second
For more details on this property, see Communication flow and Recommendations.
Pause on Merge Failure
- setter:
IQueryCubeDescriptionBuilder#withProperty( IDistributedActivePivotInstanceDescription.PAUSE_ON_MERGE_FAILURE, String value)
- default value:
"false"
- The uniqueness constraint on the members of the distributed fields within the same application.
- The uniqueness constraint on the measures across different applications. Pausing the data cube stops its messenger, meaning the cube cannot communicate with the rest of the cluster.
Wait for All Applications
- setter:
IQueryCubeDescriptionBuilder#withProperty( IDistributedActivePivotInstanceDescription.WAIT_FOR_ALL_APPLICATIONS, String value)
- default value:
"true"
InitialDiscoveryMessages. Since a data cube from a new
application entering the cluster can trigger a complete rebuild of the query cube’s topology, it can prove more
efficient to wait for all JGroups cluster members to have sent their messages before building the
query cube’s topology.
Transaction Notification
- setters:
ICanBuildDataClusterDescriptionBuilder#withProperty( IDataClusterDefinition.AWAIT_NOTIFICATIONS_TIME, value)after setting the concealed measures, wherevalueis a string representation of alongvalue (in seconds) after setting theapplicationIdIMultiVersionActivePivot.setTransactionProperties(Property property)wherepropertyincludes the(key,value)entry(AWAIT_NOTIFICATIONS_TIME, value)
- default value:
0
0, the data cube will wait for notifications from other remote instances upon a transaction.
Each Query cube will synchronously send a NotificationMessage to the data cube notifying that the transaction has correctly been applied.
The data cube will resume after receiving notifications from every remote instance, or after the duration specified by the property has been exceeded.
Pending Initial Discoveries
- setter:
- set
activeviam.distribution.maxPendingDiscoveriesas an ActiveViamProperty
- set
- default value:
4
maxPendingDiscoveries * DiscoveryMessageSize in the worst scenario.
Messenger Properties
The following properties can be found in theIMessengerDefinition interface, and can be set using
the fluent builder API ICanBuildDataClusterDescriptionBuilder.
Messenger timeout
- setter:
ICanBuildDataClusterDescriptionBuilder#withProperty( IMessengerDefinition.MESSENGER_TIMEOUT, String value)
- default value:
DEFAULT_MESSAGE_TIMEOUT = 30 000 - unit: millisecond
Message Size Logging Threshold
- setter:
- set
activeviam.distribution.log.size.threshold=<String>as an ActiveViamProperty
- set
- default value:
DEFAULT_MESSAGE_TIMEOUT = 4M - unit: To specify within the argument string. Default unit is
empty, meaning a value of10is 10 bytes.
IBroadcastMessage sent or
received is logged at level INFO.
Auto Start
- setter:
ICanBuildDataClusterDescriptionBuilder#withProperty( IMessengerDefinition.AUTO_START, String value)
- default value:
"true"
Hello Message timeout
- setter:
ICanBuildDataClusterDescriptionBuilder#withProperty( IMessengerDefinition.HELLO_MESSAGE_TIMEOUT, String value)
- default value:
2000 - unit: millisecond
HelloMessage before throwing
a timeout exception.
This property only works for data nodes.
Hello Message Number of Trials
- setter:
ICanBuildDataClusterDescriptionBuilder#withProperty( IMessengerDefinition.HELLO_MESSAGE_NUMBER_TRIALS, String value)
- default value:
10
helloMessageNumberTrials * helloMessageTimeout.
This property only works for data nodes.
Goodbye Message timeout
- setter:
ICanBuildDataClusterDescriptionBuilder#withProperty( IMessengerDefinition.GOODBYE_MESSAGE_TIMEOUT, String value)
- default value:
2000 - unit: millisecond
GoodbyeMessage before throwing a timeout exception.
This property only works for data nodes.
Goodbye Message Number of Trials
- setter:
ICanBuildDataClusterDescriptionBuilder#withProperty( IMessengerDefinition.GOODBYE_MESSAGE_NUMBER_TRIALS, String value)
- default value:
3
goodbyeMessageNumberTrials * goodbyeMessageTimeout.
This property only works for data nodes.
Retry Unavailable Instances Period
- setter:
ICanBuildDataClusterDescriptionBuilder#withProperty( IMessengerDefinition.RETRY_UNAVAILABLE_INSTANCES_PERIOD, String value)
- default value:
10 - unit: millisecond
IHelloMessage to all members of the cluster. If no answer is
received from any of these cluster members within IMessengerDefinition.HELLO_MESSAGE_TIMEOUT, the
address of that node is added to the list of ADistributedMessenger#unavailableInstances.
The sender will retry broadcasting the IHelloMessage
IMessengerDefinition.HELLO_MESSAGE_NUMBER_TRIALS times, each attempt separated from the previous
one by IMessengerDefinition.RETRY_UNAVAILABLE_INSTANCES_PERIOD milliseconds.
Discovery timeout
- setter:
ICanBuildDataClusterDescriptionBuilder#withProperty( IMessengerDefinition.DISCOVERY_TIMEOUT, String value)
- default value: twice the value of
DEFAULT_MESSAGE_TIMEOUT = 30 000 - unit: millisecond
This property only works for Data Nodes.
Discovery Serialization timeout
- setter:
ICanBuildDataClusterDescriptionBuilder#withProperty( IMessengerDefinition.SERIALIZATION_DISCOVERY_TIMEOUT, String value)
- default value:
-1 - unit: millisecond
This property only works for Data Nodes.
Transaction timeout
- setter:
ICanBuildDataClusterDescriptionBuilder#withProperty( IMessengerDefinition.TRANSACTION_TIMEOUT, String value)
- default value:
DEFAULT_MESSAGE_TIMEOUT = 30 000 - unit: millisecond
This property only works for data nodes.
Query Serialization timeout
- setter:
ICanBuildDataClusterDescriptionBuilder#withProperty( IMessengerDefinition.SERIALIZATION_QUERY_TIMEOUT, String value)
- default value:
-1 - unit: millisecond
This property only works for data nodes.
Unload members from node timeout
- setter:
PluginDescriptionBuilderWithKey<IBuildableMessengerDescriptionBuilder<>>#withProperty( IMessengerDefinition.UNLOAD_MEMBERS_MESSAGE_TIMEOUT, String value)
- default value:
30 minutes - unit: millisecond
This property only works for query nodes.
Masking operation timeout
- setter(s):
PluginDescriptionBuilderWithKey<IBuildableMessengerDescriptionBuilder<>>#withProperty( IMessengerDefinition.MASKING_OPERATION_MESSAGE_TIMEOUT, String value)
- default value:
5 minutes - unit: millisecond
This property only works for data nodes.
Interruption Check Interval
- setter:
ICanBuildDataClusterDescriptionBuilder#withProperty( IMessengerDefinition.INTERRUPTION_CHECK_INTERVAL, String value)
- default value:
1000
This property only works for data nodes.
Logical Address
- setters:
- set
activeviam.logicalAddress=<String>as an ActiveViamProperty ICanBuildDataClusterDescriptionBuilder#withProperty( IMessengerDefinition.LOGICAL_ADDRESS, String value)
- set
- default value: Automatically generated
Port Range
- setters:
- set
activeviam.distribution.netty.portRange=<String>as an ActiveViamProperty ICanBuildDataClusterDescriptionBuilder#withProperty( IMessengerDefinition.PORT_RANGE, String value)
- set
- default value:
null
1000:1010,2000:2010, to allow ports 1000 to 1010 and
2000 to 2010.
This is the range of valid ports to which the transporter will bind. It takes the first one
available within the range.
The program property takes precedence over the messenger settings.
A value of null or 0 lets the system pick an ephemeral port in a bind operation.
This property is only relevant to the Netty messenger.
Keep alive
- setter:
- set
activeviam.distribution.netty.keepAlive=<Boolean>as an ActiveViamProperty
- set
- default value:
false
This property is only relevant to the Netty messenger.
Security Messenger Plugin Key
- setter:
ICanBuildDataClusterDescriptionBuilder#withProperty( MessengerUtil.SECURITY_MESSENGER_KEY, String value)
- default value:
DISTRIBUTED_SECURITY_MANAGER
This property only works for data nodes.
Message Sizes (Netty Messenger Only)
Message types are listed inNettyMessageType.
- setters:
-Dactiveviam.distribution.nettyMessageMaxSize=<key>=<size>m,<key>=<size>m...or,- Using
setMaxSizeForMessage(String key, String valueInByte)in theDistributedMessengerMBean operations
- default value:
- 64MB for
INITIAL_DISCOVERY_MESSAGE - 4MB for
TRANSACTION_COMMITTED_MESSAGE - 4MB for
SCOPEDAGGREGATES_RETRIEVAL_TRANSPORTER - 32MB for
DRILLTHROUGH_QUERY_RESULT - 2MB for any other message types
- 64MB for
| Type | Key |
|---|---|
| GLOBAL_MESSAGE (affects all messages) | nettyMessageMaxSize |
| INITIAL_DISCOVERY_MESSAGE | initialDiscovery |
| TRANSACTION_COMMITTED_MESSAGE | transactionCommitted |
| SCOPEDAGGREGATES_RETRIEVAL_TRANSPORTER | singleGaqResult |
| DRILLTHROUGH_QUERY_RESULT | drillthroughQueryResult |
| DRILLTHROUGH_HEADER | drillthroughHeader |
| RETRIEVE_AGGREGATES_MESSAGE | retrieveAggregatesMessage |
Note that the maximum message size should always be higher than the size of the allocated buffer when writing the stream. By default, this buffer’s size is set to be slightly bigger than 1MB. An exception is thrown if a message size is lower than this buffer’s size, and the messages will never be sent.When exceeding a given message type limit, an
IOException is thrown, with an error message
specifying the message type limit, for example, “Cannot send a message larger than 1MiB (1048576)”.
The table below shows that depending on the type of the message exceeding the maximum limit, this error could be critical or less.
| Type | Consequence |
|---|---|
| INITIAL_DISCOVERY_MESSAGE | The discovery is never applied and the query cube will never be able to see the data cube hierarchies. The thrown exception can be seen in the logs. |
| TRANSACTION_COMMITTED_MESSAGE | The updates of the corresponding data cube committed transaction will not be visible by the query cube. The thrown exception can be seen in the logs. |
| SCOPEDAGGREGATES_RETRIEVAL_TRANSPORTER | The query will be interrupted and the exception message logged and displayed in Atoti UI |
| DRILLTHROUGH_QUERY_RESULT | The query will be interrupted and the exception message logged and displayed in Atoti UI |
| DRILLTHROUGH_HEADER | The query will be interrupted and the exception message logged and displayed in Atoti UI |
| RETRIEVE_AGGREGATES_MESSAGE | The query will be interrupted and the exception message logged and displayed in Atoti UI |