blob: 533d6e22a6ddf2e2d42361051f11fec04279effe [file] [log] [blame]
/*
*
* 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.
*
*/
package org.apache.qpid.server.model;
import java.security.Principal;
import java.util.Collection;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.concurrent.ScheduledFuture;
import java.util.concurrent.TimeUnit;
import org.apache.qpid.server.configuration.CommonProperties;
import org.apache.qpid.server.logging.EventLogger;
import org.apache.qpid.server.logging.EventLoggerProvider;
import org.apache.qpid.server.security.auth.SocketConnectionMetaData;
import org.apache.qpid.server.stats.StatisticsGatherer;
import org.apache.qpid.server.store.preferences.UserPreferencesCreator;
@ManagedObject( defaultType = Broker.BROKER_TYPE)
public interface Broker<X extends Broker<X>> extends ConfiguredObject<X>, EventLoggerProvider, StatisticsGatherer, Container<X>,
UserPreferencesCreator
{
String BROKER_TYPE = "Broker";
String BUILD_VERSION = "buildVersion";
String OPERATING_SYSTEM = "operatingSystem";
String PLATFORM = "platform";
String PROCESS_PID = "processPid";
String PRODUCT_VERSION = "productVersion";
String STATISTICS_REPORTING_PERIOD = "statisticsReportingPeriod";
String STATISTICS_REPORTING_RESET_ENABLED = "statisticsReportingResetEnabled";
String STORE_PATH = "storePath";
String MODEL_VERSION = "modelVersion";
String PREFERENCE_STORE_ATTRIBUTES = "preferenceStoreAttributes";
String CHANNEL_FLOW_CONTROL_ENFORCEMENT_TIMEOUT = "channel.flowControlEnforcementTimeout";
String CONNECTION_SESSION_COUNT_LIMIT = "connection.sessionCountLimit";
String CONNECTION_HEART_BEAT_DELAY = "connection.heartBeatDelay";
String CONNECTION_CLOSE_WHEN_NO_ROUTE = "connection.closeWhenNoRoute";
String BROKER_FLOW_TO_DISK_THRESHOLD = "broker.flowToDiskThreshold";
String BROKER_FAIL_STARTUP_WITH_ERRORED_CHILD = "broker.failStartupWithErroredChild";
String BROKER_MSG_AUTH = "qpid.broker_msg_auth";
String STORE_FILESYSTEM_MAX_USAGE_PERCENT = "store.filesystem.maxUsagePercent";
String QPID_AMQP_PORT = "qpid.amqp_port";
String QPID_HTTP_PORT = "qpid.http_port";
String QPID_DOCUMENTATION_URL = "qpid.helpURL";
String NETWORK_BUFFER_SIZE = "qpid.broker.networkBufferSize";
// network buffer should at least hold a SSL/TLS frame which in jdk1.8 is 33305 bytes
int MINIMUM_NETWORK_BUFFER_SIZE = 64 * 1024;
@ManagedContextDefault(name = NETWORK_BUFFER_SIZE)
int DEFAULT_NETWORK_BUFFER_SIZE = 256 * 1024;
@ManagedContextDefault(name = "broker.name")
String DEFAULT_BROKER_NAME = "Broker";
@ManagedContextDefault(name = QPID_AMQP_PORT)
String DEFAULT_AMQP_PORT_NUMBER = "5672";
@ManagedContextDefault(name = QPID_HTTP_PORT)
String DEFAULT_HTTP_PORT_NUMBER = "8080";
@ManagedContextDefault(name = BROKER_FLOW_TO_DISK_THRESHOLD)
long DEFAULT_FLOW_TO_DISK_THRESHOLD = (long)(0.75 * (double) BrokerImpl.getMaxDirectMemorySize());
String COMPACT_MEMORY_THRESHOLD = "qpid.compact_memory_threshold";
@SuppressWarnings("unused")
@ManagedContextDefault(name = COMPACT_MEMORY_THRESHOLD)
long DEFAULT_COMPACT_MEMORY_THRESHOLD = (long)(0.5 * (double) BrokerImpl.getMaxDirectMemorySize());
String COMPACT_MEMORY_INTERVAL = "qpid.compact_memory_interval";
@SuppressWarnings("unused")
@ManagedContextDefault(name = COMPACT_MEMORY_INTERVAL)
long DEFAULT_COMPACT_MEMORY_INTERVAL = 1000L;
String MEMORY_OCCUPANCY_THRESHOLD = "qpid.memory_occupancy_threshold";
@SuppressWarnings("unused")
@ManagedContextDefault(name = MEMORY_OCCUPANCY_THRESHOLD)
double DEFAULT_MEMORY_OCCUPANCY_THRESHOLD = 0.5;
String MEMORY_COMPACTION_INCREMENT = "qpid.memory_compaction_increment";
@SuppressWarnings("unused")
@ManagedContextDefault(name = MEMORY_COMPACTION_INCREMENT)
long DEFAULT_MEMORY_COMPACTION_INCREMENT = 100;
@ManagedContextDefault(name = CHANNEL_FLOW_CONTROL_ENFORCEMENT_TIMEOUT)
long DEFAULT_CHANNEL_FLOW_CONTROL_ENFORCEMENT_TIMEOUT = 5000l;
@ManagedContextDefault(name = STORE_FILESYSTEM_MAX_USAGE_PERCENT)
int DEFAULT_FILESYSTEM_MAX_USAGE_PERCENT = 90;
@ManagedContextDefault(name = BROKER_FAIL_STARTUP_WITH_ERRORED_CHILD)
boolean DEFAULT_BROKER_FAIL_STARTUP_WITH_ERRORED_CHILD = false;
@ManagedContextDefault(name = BROKER_MSG_AUTH)
boolean DEFAULT_BROKER_MSG_AUTH = false;
@ManagedContextDefault(name = CommonProperties.QPID_SECURITY_TLS_PROTOCOL_WHITE_LIST)
String DEFAULT_SECURITY_TLS_PROTOCOL_WHITE_LIST = "[\"TLSv1\\\\.[0-9]+\"]";
@ManagedContextDefault(name = CommonProperties.QPID_SECURITY_TLS_PROTOCOL_BLACK_LIST)
String DEFAULT_SECURITY_TLS_PROTOCOL_BLACK_LIST = "[\"TLSv1\\\\.0\"]";
@ManagedContextDefault(name = CommonProperties.QPID_SECURITY_TLS_CIPHER_SUITE_WHITE_LIST)
String DEFAULT_SECURITY_TLS_CIPHER_SUITE_WHITE_LIST = "[]";
@ManagedContextDefault(name = CommonProperties.QPID_SECURITY_TLS_CIPHER_SUITE_BLACK_LIST)
String DEFAULT_SECURITY_TLS_CIPHER_SUITE_BLACK_LIST = "[]";
@ManagedContextDefault(name = QPID_DOCUMENTATION_URL)
String DEFAULT_DOCUMENTATION_URL = "http://qpid.apache.org/releases/qpid-java-${qpid.version}/java-broker/book/";
String PROPERTY_DISABLED_FEATURES = "qpid.broker_disabled_features";
@DerivedAttribute
String getBuildVersion();
@DerivedAttribute
String getOperatingSystem();
@DerivedAttribute
String getPlatform();
@DerivedAttribute
String getProcessPid();
@DerivedAttribute
String getProductVersion();
@DerivedAttribute
int getNumberOfCores();
@ManagedAttribute( defaultValue = "256" )
int getConnection_sessionCountLimit();
@ManagedAttribute( defaultValue = "0", description = "The default frequency with which Broker and client will exchange heartbeat messages (in seconds). "
+ "Clients may negotiate a different heartbeat frequency or disable it altogether. "
+ "A value of 0 disables heart beating.")
int getConnection_heartBeatDelay();
@ManagedAttribute( defaultValue = "true" )
boolean getConnection_closeWhenNoRoute();
@ManagedAttribute( defaultValue = "0", description = "Period (in seconds) of the statistic report.")
int getStatisticsReportingPeriod();
@ManagedAttribute( defaultValue = "false", description = "If enabled, statistics are automatically reset to zero after each statistics report is made.")
boolean getStatisticsReportingResetEnabled();
@ManagedContextDefault( name = "broker.housekeepingThreadCount")
public static final int DEFAULT_HOUSEKEEPING_THREAD_COUNT = 2;
@ManagedAttribute( defaultValue = "${broker.housekeepingThreadCount}")
int getHousekeepingThreadCount();
String BROKER_MESSAGE_COMPRESSION_ENABLED = "broker.messageCompressionEnabled";
@ManagedContextDefault(name = BROKER_MESSAGE_COMPRESSION_ENABLED)
boolean DEFAULT_MESSAGE_COMPRESSION_ENABLED = true;
@ManagedAttribute( defaultValue = "${"+ BROKER_MESSAGE_COMPRESSION_ENABLED +"}")
boolean isMessageCompressionEnabled();
String MESSAGE_COMPRESSION_THRESHOLD_SIZE = "connection.messageCompressionThresholdSize";
@ManagedContextDefault(name = MESSAGE_COMPRESSION_THRESHOLD_SIZE)
int DEFAULT_MESSAGE_COMPRESSION_THRESHOLD_SIZE = 102400;
String SEND_QUEUE_DELETE_OK_REGARDLESS_CLIENT_VER_REGEXP = "connection.sendQueueDeleteOkRegardlessClientVerRegexp";
@ManagedContextDefault(name = SEND_QUEUE_DELETE_OK_REGARDLESS_CLIENT_VER_REGEXP)
String DEFAULT_SEND_QUEUE_DELETE_OK_REGARDLESS_CLIENT_VER_REGEXP = "^0\\..*$";
String BROKER_DIRECT_BYTE_BUFFER_POOL_SIZE = "broker.directByteBufferPoolSize";
@ManagedContextDefault(name = BROKER_DIRECT_BYTE_BUFFER_POOL_SIZE)
int DEFAULT_BROKER_DIRECT_BYTE_BUFFER_POOL_SIZE = 1024;
@ManagedAttribute(validValues = {"org.apache.qpid.server.model.BrokerImpl#getAvailableConfigurationEncrypters()"})
String getConfidentialConfigurationEncryptionProvider();
@DerivedAttribute( persist = true )
String getModelVersion();
@ManagedStatistic(statisticType = StatisticType.CUMULATIVE, units = StatisticUnit.BYTES, label = "Inbound")
long getBytesIn();
@ManagedStatistic(statisticType = StatisticType.CUMULATIVE, units = StatisticUnit.BYTES, label = "Outbound")
long getBytesOut();
@ManagedStatistic(statisticType = StatisticType.CUMULATIVE, units = StatisticUnit.MESSAGES, label = "Inbound")
long getMessagesIn();
@ManagedStatistic(statisticType = StatisticType.CUMULATIVE, units = StatisticUnit.MESSAGES, label = "Outbound")
long getMessagesOut();
@ManagedOperation(nonModifying = true,
description = "Initiates an orderly shutdown of the Broker.",
changesConfiguredObjectState = false)
void initiateShutdown();
@ManagedOperation(nonModifying = true,
description = "Extract configuration",
paramRequiringSecure = "includeSecureAttributes",
changesConfiguredObjectState = false)
Map<String,Object> extractConfig(@Param(name="includeSecureAttributes",
description = "include attributes that may contain passwords or other"
+ " confidential information",
defaultValue = "false") boolean includeSecureAttributes);
@DerivedAttribute(description = "Maximum heap memory size")
long getMaximumHeapMemorySize();
@DerivedAttribute(description = "Maximum direct memory size which can be consumed by broker")
long getMaximumDirectMemorySize();
@DerivedAttribute(description = "JVM arguments specified on startup")
List<String> getJvmArguments();
@DerivedAttribute(description = "URL to broker documentation")
String getDocumentationUrl();
@ManagedStatistic(statisticType = StatisticType.POINT_IN_TIME,
units = StatisticUnit.COUNT,
label = "Live threads",
description = "Number of live threads")
int getNumberOfLiveThreads();
@ManagedStatistic(statisticType = StatisticType.POINT_IN_TIME,
units = StatisticUnit.BYTES,
label = "Used Heap Memory Size",
description = "Size of used heap memory")
long getUsedHeapMemorySize();
@ManagedStatistic(statisticType = StatisticType.POINT_IN_TIME,
units = StatisticUnit.BYTES,
label = "Used Direct Memory Size",
description = "Size of used direct memory")
long getUsedDirectMemorySize();
@ManagedStatistic(statisticType = StatisticType.POINT_IN_TIME,
units = StatisticUnit.BYTES,
label = "Direct Memory Total Capacity",
description = "Total capacity of direct memory allocated for the Broker process")
long getDirectMemoryTotalCapacity();
@ManagedStatistic(statisticType = StatisticType.POINT_IN_TIME,
units = StatisticUnit.COUNT,
label = "Number Of Object Pending Finalization",
description = "Number of objects pending finalization")
int getNumberOfObjectsPendingFinalization();
@ManagedStatistic(statisticType = StatisticType.POINT_IN_TIME,
units = StatisticUnit.COUNT,
label = "Number of Active Pooled Buffers",
description = "Number of pooled buffers in use.")
long getNumberOfActivePooledBuffers();
@ManagedStatistic(statisticType = StatisticType.POINT_IN_TIME,
units = StatisticUnit.COUNT,
label = "Number of Pooled Buffers",
description = "Number of pooled buffers.")
long getNumberOfPooledBuffers();
@ManagedOperation(nonModifying = true,
description = "Restart the broker within the same JVM",
changesConfiguredObjectState = false,
log = true)
void restart();
@ManagedOperation(nonModifying = true,
description = "Initiates garbage collection",
changesConfiguredObjectState = false)
void performGC();
@ManagedOperation(nonModifying = true,
description = "Collects thread stack traces and dead locks. Dumps stack traces into logs if requested",
changesConfiguredObjectState = false)
Content getThreadStackTraces(@Param(name="appendToLog",
defaultValue = "false",
description = "If true, appends stack traces into logs")
boolean appendToLog);
@ManagedOperation(nonModifying = true,
description = "Collects thread stack traces for the threads with names containing matching characters for given regular expression",
changesConfiguredObjectState = false)
Content findThreadStackTraces(@Param(name="threadNameFindExpression",
description = "Regular expression to find threads with names containing matching characters")
String threadNameFindExpression);
@ManagedOperation(nonModifying = true,
description = "Returns the principal of the currently authenticated user",
changesConfiguredObjectState = false)
Principal getUser();
@ManagedOperation(nonModifying = true,
description = "Returns metadata concerning the current connection",
changesConfiguredObjectState = false)
SocketConnectionMetaData getConnectionMetaData();
@ManagedOperation(nonModifying = true,
description = "Returns the groups to which the currently authenticated user belongs",
changesConfiguredObjectState = false)
Set<Principal> getGroups();
@ManagedOperation(description = "Removes a user and all associated preferences from the broker's configuration",
changesConfiguredObjectState = true)
void purgeUser(@Param(name="origin", description="The AuthenticationProvider the username is associated with")AuthenticationProvider<?> origin,
@Param(name="username", description="The unqualified username that should be purged from the broker", mandatory = true)String username);
@ManagedOperation(description = "Resets statistics on this object and all child objects", changesConfiguredObjectState = false, nonModifying = true)
void resetStatistics();
//children
Collection<VirtualHostNode<?>> getVirtualHostNodes();
Collection<Port<?>> getPorts();
Collection<AuthenticationProvider<?>> getAuthenticationProviders();
Collection<AccessControlProvider<?>> getAccessControlProviders();
NamedAddressSpace getSystemAddressSpace(String name);
Collection<GroupProvider<?>> getGroupProviders();
VirtualHost<?> findVirtualHostByName(String name);
VirtualHostNode findDefautVirtualHostNode();
Collection<KeyStore<?>> getKeyStores();
Collection<TrustStore<?>> getTrustStores();
boolean isManagementMode();
EventLogger getEventLogger();
void setEventLogger(EventLogger eventLogger);
boolean isVirtualHostPropertiesNodeEnabled();
AuthenticationProvider<?> getManagementModeAuthenticationProvider();
void assignTargetSizes();
int getNetworkBufferSize();
ScheduledFuture<?> scheduleHouseKeepingTask(long period, final TimeUnit unit, Runnable task);
ScheduledFuture<?> scheduleTask(long delay, final TimeUnit unit, Runnable task);
@DerivedAttribute(description = "Threshold direct memory size (in bytes) at which the Broker will start flowing incoming messages to disk.")
long getFlowToDiskThreshold();
@DerivedAttribute(description = "Threshold direct memory size (in bytes) at which the Broker will start considering to compact sparse buffers. Set to -1 to disable. See also " + MEMORY_OCCUPANCY_THRESHOLD)
long getCompactMemoryThreshold();
@DerivedAttribute(description = "Time interval (in milliseconds) between runs of the memory compactor check. See also " + COMPACT_MEMORY_THRESHOLD)
long getCompactMemoryInterval();
@DerivedAttribute(description = "Occupancy threshold (fraction) at which point buffers will be compacted. See also " + COMPACT_MEMORY_THRESHOLD)
double getMemoryOccupancyThreshold();
@DerivedAttribute(description = "Approximate number of buffers that will be compacted on each compaction run. See also " + COMPACT_MEMORY_THRESHOLD)
long getMemoryCompactionIncrement();
@ManagedOperation(changesConfiguredObjectState = false, nonModifying = true,
description = "Force direct memory buffer compaction.")
void compactMemory();
}