blob: ed18c4e0aca7dcd4ba21fdffdb78b8fae790149a [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.
*/
#pragma once
#ifndef GEODE_SYSTEMPROPERTIES_H_
#define GEODE_SYSTEMPROPERTIES_H_
#include "Properties.hpp"
#include "util/LogLevel.hpp"
/** @file
*/
namespace apache {
namespace geode {
namespace client {
/**
* The SystemProperties class
*
*
*/
/**
* A class for internal use that encapsulates the properties that can be
* set from DistributedSystem::connect.
*
*/
class APACHE_GEODE_EXPORT SystemProperties {
public:
/**
* Constructor. Will set the default values first, and then overwrite with
* the values found in the given Properties object (if any), and
* then from the values in the given file (if it exists).
*
* If useMemType is true, use the given member type; if false, always set
* member type to SERVER.
*/
explicit SystemProperties(const std::shared_ptr<Properties>& propertiesPtr,
const std::string& configFile = "");
SystemProperties(const SystemProperties& rhs) = delete;
void operator=(const SystemProperties& rhs) = delete;
/**
* Destructor.
*/
~SystemProperties();
/** print all settings to the process log. */
void logSettings();
uint32_t threadPoolSize() const { return m_threadPoolSize; }
/**
* Returns the sampling interval of the sampling thread.
* This would be how often the statistics thread writes to disk.
*/
const std::chrono::milliseconds statisticsSampleInterval() const {
return m_statisticsSampleInterval;
}
/**
* Tells whether statistics needs to be archived or not.
*/
bool statisticsEnabled() const { return m_statisticsEnabled; }
/**
* Whether SSL is enabled for socket connections.
*/
bool sslEnabled() const { return m_sslEnabled; }
/**
* Whether time stats are enabled for the statistics.
*/
bool getEnableTimeStatistics() const /*timestatisticsEnabled()*/
{
return m_timestatisticsEnabled;
} /*m_timestatisticsEnabled*/
/**
* Returns the path of the private key file for SSL use.
*/
const std::string& sslKeyStore() const { return m_sslKeyStore; }
/**
* Returns the client keystore password.
*/
const std::string& sslKeystorePassword() const {
return m_sslKeystorePassword;
}
/**
* Returns the path of the public key file for SSL use.
*/
const std::string& sslTrustStore() const { return m_sslTrustStore; }
/**
* Returns the name of the filename into which statistics would
* be archived.
*/
const std::string& statisticsArchiveFile() const {
return m_statisticsArchiveFile;
}
/**
* Returns the name of the filename into which logging would
* be done.
*/
const std::string& logFilename() const { return m_logFilename; }
/**
* Returns the log level at which logging would be done.
*/
LogLevel logLevel() const { return m_logLevel; }
/**
* Returns a boolean that specifies if heapLRULimit has been enabled for the
* process. If enabled, the HeapLRULimit specifies the maximum amount of
* memory
* that values in a cache can use to store data before overflowing to disk or
* destroying entries to ensure that the server process never runs out of
* memory
*
*/
bool heapLRULimitEnabled() const { return (m_heapLRULimit > 0); }
/**
* Returns the HeapLRULimit value (in bytes), the maximum memory that values
* in a cache can use to store data before overflowing to disk or destroying
* entries to ensure that the server process never runs out of memory due to
* cache memory usage
*
*/
size_t heapLRULimit() const { return m_heapLRULimit; }
/**
* Returns the HeapLRUDelta value (a percent value). This specifies the
* percentage of entries the system will evict each time it detects that
* it has exceeded the HeapLRULimit. Defaults to 10%
*/
int32_t heapLRUDelta() const { return m_heapLRUDelta; }
/**
* Returns the maximum socket buffer size to use
*/
int32_t maxSocketBufferSize() const { return m_maxSocketBufferSize; }
/**
* Returns the time between two consecutive pings to servers
*/
const std::chrono::seconds& pingInterval() const { return m_pingInterval; }
/**
* Returns the time between two consecutive checks for redundancy for HA
*/
const std::chrono::seconds& redundancyMonitorInterval() const {
return m_redundancyMonitorInterval;
}
/**
* Returns the periodic notify ack interval
*/
const std::chrono::milliseconds& notifyAckInterval() const {
return m_notifyAckInterval;
}
/**
* Returns the expiry time of an idle event id map entry for duplicate
* notification checking
*/
const std::chrono::milliseconds& notifyDupCheckLife() const {
return m_notifyDupCheckLife;
}
/**
* Returns the durable client ID
*/
const std::string& durableClientId() const { return m_durableClientId; }
/**
* Returns the durable timeout
*/
const std::chrono::seconds& durableTimeout() const {
return m_durableTimeout;
}
/**
* Returns the connect timeout used for server and locator handshakes
*/
const std::chrono::milliseconds& connectTimeout() const {
return m_connectTimeout;
}
/**
* Returns the connect wait timeout(in milliseconds) used for to connect to server
* This is only applicable for linux
*/
const std::chrono::milliseconds& connectWaitTimeout() const {
return m_connectWaitTimeout;
}
/**
* Returns the connect wait timeout(in milliseconds) used for to connect to server
* This is only applicable for linux
*/
const std::chrono::milliseconds& bucketWaitTimeout() const {
return m_bucketWaitTimeout;
}
/**
* Returns client Queueconflation option
*/
const std::string& conflateEvents() const { return m_conflateEvents; }
const std::string& name() const { return m_name; }
const std::string& cacheXMLFile() const { return m_cacheXMLFile; }
/**
* Returns the log-file-size-limit.
*/
uint32_t logFileSizeLimit() const { return m_logFileSizeLimit; }
/**
* Returns the log-disk-space-limit.
*/
uint32_t logDiskSpaceLimit() const { return m_logDiskSpaceLimit; }
/**
* Returns the stat-file-space-limit.
*/
uint32_t statsFileSizeLimit() const { return m_statsFileSizeLimit; }
/**
* Returns the stat-disk-size-limit.
*/
uint32_t statsDiskSpaceLimit() const { return m_statsDiskSpaceLimit; }
uint32_t connectionPoolSize() const { return m_connectionPoolSize; }
void setjavaConnectionPoolSize(uint32_t size) {
m_connectionPoolSize = size;
}
/**
* Returns true if chunk handler thread is enabled, false if not
*/
bool enableChunkHandlerThread() const { return m_enableChunkHandlerThread; }
/**
* Enables or disables the chunk handler thread
*/
void setEnableChunkHandlerThread(bool set) {
m_enableChunkHandlerThread = set;
}
/**
* Returns true if app wants to clear pdx type ids when client disconnect.
* deafult is false.
*/
bool onClientDisconnectClearPdxTypeIds() const {
return m_onClientDisconnectClearPdxTypeIds;
}
/**
* Set to true if app wants to clear pdx type ids when client disconnect.
* Default is false.
*/
void setOnClientDisconnectClearPdxTypeIds(bool set) {
m_onClientDisconnectClearPdxTypeIds = set;
}
/** Return the security Diffie-Hellman secret key algorithm */
const std::string& securityClientDhAlgo() const {
return m_securityClientDhAlgo;
}
/** Return the keystore (.pem file ) path */
const std::string& securityClientKsPath() const {
return m_securityClientKsPath;
}
/** Returns securityPropertiesPtr.
* @return std::shared_ptr<Properties> value.
*/
std::shared_ptr<Properties> getSecurityProperties() const {
return m_securityPropertiesPtr;
}
/** Checks whether list of endpoint is shuffled or not.
* @return bool value.
*/
inline bool isEndpointShufflingDisabled() const {
return m_disableShufflingEndpoint;
}
/**
* Check whether Diffie-Hellman based credentials encryption is on.
* @return bool flag to indicate whether DH for credentials is on.
*/
bool isDhOn() const { return !m_securityClientDhAlgo.empty(); }
/**
* Checks to see if this native client is being invoked as part of small
* grid jobs; use this setting to disable some creation of threads and
* reduce start/stop time. Note that this setting can cause improper
* behavior in some cases like:
* 1) client that is setup in listening mode and a server failure may not
* lead to failover by client
* 2) while shutting down the client will not send a proper CLOSE_CONNECTION
* message so server will report EOF exceptions and may detect client
* disconnect after quite some time
* Also note that there may be some performance loss in queries and
* Region::getAll due to unavailability of parallel processing threads.
*
* @return true if the "grid-client" property is set
*/
inline bool isGridClient() const { return m_gridClient; }
/**
* Whether a non durable client starts to receive and process
* subscription events automatically.
* If set to false then a non-durable client should call the
* Cache::readyForEvents() method after all regions are created
* and listeners attached for the client to start receiving events
* whether the client is initialized programmatically or declaratively.
* @return the value of the property.
*/
inline bool autoReadyForEvents() const { return m_autoReadyForEvents; }
/**
* Returns the timeout after which suspended transactions are rolled back.
*/
const std::chrono::seconds suspendedTxTimeout() const {
return m_suspendedTxTimeout;
}
/**
* Returns the tombstone timeout
*/
const std::chrono::milliseconds tombstoneTimeout() const {
return m_tombstoneTimeout;
}
private:
std::chrono::milliseconds m_statisticsSampleInterval;
bool m_statisticsEnabled;
std::string m_statisticsArchiveFile;
std::string m_logFilename;
LogLevel m_logLevel;
int m_sessions;
std::string m_name;
bool m_disableShufflingEndpoint;
std::string m_cacheXMLFile;
uint32_t m_logFileSizeLimit;
uint32_t m_logDiskSpaceLimit;
uint32_t m_statsFileSizeLimit;
uint32_t m_statsDiskSpaceLimit;
uint32_t m_connectionPoolSize;
int32_t m_heapLRULimit;
int32_t m_heapLRUDelta;
int32_t m_maxSocketBufferSize;
std::chrono::seconds m_pingInterval;
std::chrono::seconds m_redundancyMonitorInterval;
std::chrono::milliseconds m_notifyAckInterval;
std::chrono::milliseconds m_notifyDupCheckLife;
std::shared_ptr<Properties> m_securityPropertiesPtr;
std::string m_securityClientDhAlgo;
std::string m_securityClientKsPath;
std::string m_durableClientId;
std::chrono::seconds m_durableTimeout;
std::chrono::milliseconds m_connectTimeout;
std::chrono::milliseconds m_connectWaitTimeout;
std::chrono::milliseconds m_bucketWaitTimeout;
bool m_gridClient;
bool m_autoReadyForEvents;
bool m_sslEnabled;
bool m_timestatisticsEnabled;
std::string m_sslKeyStore;
std::string m_sslTrustStore;
std::string m_sslKeystorePassword;
std::string m_conflateEvents;
uint32_t m_threadPoolSize;
std::chrono::seconds m_suspendedTxTimeout;
std::chrono::milliseconds m_tombstoneTimeout;
bool m_enableChunkHandlerThread;
bool m_onClientDisconnectClearPdxTypeIds;
/**
* Processes the given property/value pair, saving
* the results internally:
*/
void processProperty(const std::string& property, const std::string& value);
static bool parseBooleanProperty(const std::string& property,
const std::string& value);
template <class _Rep, class _Period>
static void parseDurationProperty(
const std::string& property, const std::string& value,
std::chrono::duration<_Rep, _Period>& duration);
[[noreturn]] static void throwError(const std::string& msg);
public:
friend class DistributedSystemImpl;
};
} // namespace client
} // namespace geode
} // namespace apache
#endif // GEODE_SYSTEMPROPERTIES_H_