blob: d3b958ead3a8d7d70a2e3de49656ab65cb649e68 [file] [log] [blame]
package org.apache.helix;
/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*/
/**
* Describes various properties that operations involving {@link Message} delivery will follow.
*/
public class Criteria {
public enum DataSource {
IDEALSTATES,
EXTERNALVIEW,
LIVEINSTANCES,
INSTANCES
}
/**
* This can be CONTROLLER, PARTICIPANT, ROUTER Cannot be null
*/
InstanceType recipientInstanceType;
/**
* If true this will only be process by the instance that was running when the
* message was sent. If the instance process dies and comes back up it will be
* ignored.
*/
boolean sessionSpecific;
/**
* applicable only in case PARTICIPANT use % to broadcast to all instances
*/
String instanceName = "";
/**
* Name of the resource. Use % to send message to all resources
* owned by an instance.
*/
String resourceName = "";
/**
* Resource partition. Use % to send message to all partitions of a given
* resource
*/
String partitionName = "";
/**
* State of the resource
*/
String partitionState = "";
/**
* Exclude sending message to your self. True by default
*/
boolean selfExcluded = true;
/**
* Determine if use external view or ideal state as source of truth
*/
DataSource _dataSource = DataSource.EXTERNALVIEW;
/**
* The name of target cluster. If null, means sending to the local cluster
*/
String _clusterName = null;
/**
* Get the current source of truth
* @return either the ideal state or the external view
*/
public DataSource getDataSource() {
return _dataSource;
}
/**
* Set the current source of truth
* @param source ideal state or external view
*/
public void setDataSource(DataSource source) {
_dataSource = source;
}
/**
* Determine if the message is excluded from being sent to the sender
* @return true if the self-sent message is excluded, false otherwise
*/
public boolean isSelfExcluded() {
return selfExcluded;
}
/**
* Indicate whether or not the sender will be excluded as a message recipient
* @param selfExcluded true if the sender should be excluded, false otherwise
*/
public void setSelfExcluded(boolean selfExcluded) {
this.selfExcluded = selfExcluded;
}
/**
* Determine the type of the recipient
* @return InstanceType (e.g. PARTICIPANT, CONTROLLER, SPECTATOR)
*/
public InstanceType getRecipientInstanceType() {
return recipientInstanceType;
}
/**
* Set the type of the recipient
* @param recipientInstanceType InstanceType (e.g. PARTICIPANT, CONTROLLER, SPECTATOR)
*/
public void setRecipientInstanceType(InstanceType recipientInstanceType) {
this.recipientInstanceType = recipientInstanceType;
}
/**
* Determine if this message should be processed only if an instance was up at send time
* @return true if the message will be processed by current live nodes, false otherwise
*/
public boolean isSessionSpecific() {
return sessionSpecific;
}
/**
* Indicate whether or not a message should be restricted to a session
* @param sessionSpecific true if the message can only be processed by live nodes at send time,
* false otherwise
*/
public void setSessionSpecific(boolean sessionSpecific) {
this.sessionSpecific = sessionSpecific;
}
/**
* Get the name of the destination instance, available only for PARTICIPANT
* @return the instance name
*/
public String getInstanceName() {
return instanceName;
}
/**
* Set the name of the destination instance (PARTICIPANT only)
* @param instanceName the instance name or % for all instances
*/
public void setInstanceName(String instanceName) {
this.instanceName = instanceName;
}
/**
* Get the destination resource name
* @return destination resource name
*/
public String getResource() {
return resourceName;
}
/**
* Set the destination resource name
* @param resourceName the resource name or % for all resources
*/
public void setResource(String resourceName) {
this.resourceName = resourceName;
}
/**
* Get the destination partition name
* @return destination partition name
*/
public String getPartition() {
return partitionName;
}
/**
* Set the destination partition name
* @param partitionName the partition name, or % for all partitions of a resource
*/
public void setPartition(String partitionName) {
this.partitionName = partitionName;
}
/**
* Get the state of a resource partition
* @return the state of the resource partition
*/
public String getPartitionState() {
return partitionState;
}
/**
* Set the state of the resource partition
* @param partitionState the state of the resource partition
*/
public void setPartitionState(String partitionState) {
this.partitionState = partitionState;
}
/**
* Get the target cluster name
* @return the target cluster name if set or null if not set
*/
public String getClusterName() {
return _clusterName;
}
/**
* Set the target cluster name
* @param clusterName target cluster name to send message
*/
public void setClusterName(String clusterName) {
_clusterName = clusterName;
}
@Override
public String toString() {
StringBuilder sb = new StringBuilder();
sb.append("instanceName").append("=").append(instanceName);
sb.append("resourceName").append("=").append(resourceName);
sb.append("partitionName").append("=").append(partitionName);
sb.append("partitionState").append("=").append(partitionState);
if (_clusterName != null) {
sb.append("clusterName").append("=").append(_clusterName);
}
return sb.toString();
}
}