blob: 429d97bb4001edc9323962a050a55c3fbfac8fd5 [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.iotdb.commons.conf;
import org.apache.iotdb.commons.cluster.NodeStatus;
import org.apache.iotdb.commons.enums.HandleSystemErrorStrategy;
import org.apache.iotdb.tsfile.fileSystem.FSType;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.io.File;
import java.util.concurrent.TimeUnit;
public class CommonConfig {
private static final Logger logger = LoggerFactory.getLogger(CommonConfig.class);
// Open ID Secret
private String openIdProviderUrl = "";
// the authorizer provider class which extends BasicAuthorizer
private String authorizerProvider =
"org.apache.iotdb.commons.auth.authorizer.LocalFileAuthorizer";
/** Encryption provider class */
private String encryptDecryptProvider =
"org.apache.iotdb.commons.security.encrypt.MessageDigestEncrypt";
/** Encryption provided class parameter */
private String encryptDecryptProviderParameter;
private String adminName = "root";
private String adminPassword = "root";
private String userFolder =
IoTDBConstant.DEFAULT_BASE_DIR
+ File.separator
+ IoTDBConstant.SYSTEM_FOLDER_NAME
+ File.separator
+ "users";
private String roleFolder =
IoTDBConstant.DEFAULT_BASE_DIR
+ File.separator
+ IoTDBConstant.SYSTEM_FOLDER_NAME
+ File.separator
+ "roles";
private String procedureWalFolder =
IoTDBConstant.DEFAULT_BASE_DIR
+ File.separator
+ IoTDBConstant.SYSTEM_FOLDER_NAME
+ File.separator
+ "procedure";
/** Sync directory, including the log and hardlink tsfiles */
private String syncFolder =
IoTDBConstant.DEFAULT_BASE_DIR + File.separator + IoTDBConstant.SYNC_FOLDER_NAME;
/** WAL directories */
private String[] walDirs = {
IoTDBConstant.DEFAULT_BASE_DIR + File.separator + IoTDBConstant.WAL_FOLDER_NAME
};
/** Default system file storage is in local file system (unsupported) */
private FSType systemFileStorageFs = FSType.LOCAL;
/**
* default TTL for storage groups that are not set TTL by statements, in ms.
*
* <p>Notice: if this property is changed, previous created storage group which are not set TTL
* will also be affected. Unit: millisecond
*/
private long defaultTTL = Long.MAX_VALUE;
/** Thrift socket and connection timeout between data node and config node. */
private int connectionTimeoutInMS = (int) TimeUnit.SECONDS.toMillis(20);
/**
* ClientManager will have so many selector threads (TAsyncClientManager) to distribute to its
* clients.
*/
private int selectorNumOfClientManager =
Runtime.getRuntime().availableProcessors() / 4 > 0
? Runtime.getRuntime().availableProcessors() / 4
: 1;
/** whether to use thrift compression. */
private boolean isRpcThriftCompressionEnabled = false;
/** What will the system do when unrecoverable error occurs. */
private HandleSystemErrorStrategy handleSystemErrorStrategy =
HandleSystemErrorStrategy.CHANGE_TO_READ_ONLY;
/** Status of current system. */
private volatile NodeStatus status = NodeStatus.Running;
private volatile String statusReason = null;
/** Disk Monitor */
private double diskSpaceWarningThreshold = 5.0;
CommonConfig() {}
public void updatePath(String homeDir) {
userFolder = addHomeDir(userFolder, homeDir);
roleFolder = addHomeDir(roleFolder, homeDir);
procedureWalFolder = addHomeDir(procedureWalFolder, homeDir);
syncFolder = addHomeDir(syncFolder, homeDir);
for (int i = 0; i < walDirs.length; i++) {
walDirs[i] = addHomeDir(walDirs[i], homeDir);
}
}
private String addHomeDir(String dir, String homeDir) {
if (!new File(dir).isAbsolute() && homeDir != null && homeDir.length() > 0) {
if (!homeDir.endsWith(File.separator)) {
dir = homeDir + File.separatorChar + dir;
} else {
dir = homeDir + dir;
}
}
return dir;
}
public String getEncryptDecryptProvider() {
return encryptDecryptProvider;
}
public void setEncryptDecryptProvider(String encryptDecryptProvider) {
this.encryptDecryptProvider = encryptDecryptProvider;
}
public String getEncryptDecryptProviderParameter() {
return encryptDecryptProviderParameter;
}
public void setEncryptDecryptProviderParameter(String encryptDecryptProviderParameter) {
this.encryptDecryptProviderParameter = encryptDecryptProviderParameter;
}
public String getOpenIdProviderUrl() {
return openIdProviderUrl;
}
public void setOpenIdProviderUrl(String openIdProviderUrl) {
this.openIdProviderUrl = openIdProviderUrl;
}
public String getAuthorizerProvider() {
return authorizerProvider;
}
public void setAuthorizerProvider(String authorizerProvider) {
this.authorizerProvider = authorizerProvider;
}
public String getAdminName() {
return adminName;
}
public void setAdminName(String adminName) {
this.adminName = adminName;
}
public String getAdminPassword() {
return adminPassword;
}
public void setAdminPassword(String adminPassword) {
this.adminPassword = adminPassword;
}
public String getUserFolder() {
return userFolder;
}
public void setUserFolder(String userFolder) {
this.userFolder = userFolder;
}
public String getRoleFolder() {
return roleFolder;
}
public void setRoleFolder(String roleFolder) {
this.roleFolder = roleFolder;
}
public String getProcedureWalFolder() {
return procedureWalFolder;
}
public void setProcedureWalFolder(String procedureWalFolder) {
this.procedureWalFolder = procedureWalFolder;
}
public String getSyncFolder() {
return syncFolder;
}
public void setSyncFolder(String syncFolder) {
this.syncFolder = syncFolder;
}
public String[] getWalDirs() {
return walDirs;
}
public void setWalDirs(String[] walDirs) {
this.walDirs = walDirs;
}
public FSType getSystemFileStorageFs() {
return systemFileStorageFs;
}
public void setSystemFileStorageFs(FSType systemFileStorageFs) {
this.systemFileStorageFs = systemFileStorageFs;
}
public long getDefaultTTL() {
return defaultTTL;
}
public void setDefaultTTL(long defaultTTL) {
this.defaultTTL = defaultTTL;
}
public int getConnectionTimeoutInMS() {
return connectionTimeoutInMS;
}
public void setConnectionTimeoutInMS(int connectionTimeoutInMS) {
this.connectionTimeoutInMS = connectionTimeoutInMS;
}
public int getSelectorNumOfClientManager() {
return selectorNumOfClientManager;
}
public void setSelectorNumOfClientManager(int selectorNumOfClientManager) {
this.selectorNumOfClientManager = selectorNumOfClientManager;
}
public boolean isRpcThriftCompressionEnabled() {
return isRpcThriftCompressionEnabled;
}
public void setRpcThriftCompressionEnabled(boolean rpcThriftCompressionEnabled) {
isRpcThriftCompressionEnabled = rpcThriftCompressionEnabled;
}
HandleSystemErrorStrategy getHandleSystemErrorStrategy() {
return handleSystemErrorStrategy;
}
void setHandleSystemErrorStrategy(HandleSystemErrorStrategy handleSystemErrorStrategy) {
this.handleSystemErrorStrategy = handleSystemErrorStrategy;
}
public void handleUnrecoverableError() {
handleSystemErrorStrategy.handle();
}
public double getDiskSpaceWarningThreshold() {
return diskSpaceWarningThreshold;
}
public void setDiskSpaceWarningThreshold(double diskSpaceWarningThreshold) {
this.diskSpaceWarningThreshold = diskSpaceWarningThreshold;
}
public boolean isReadOnly() {
return status == NodeStatus.ReadOnly;
}
public NodeStatus getNodeStatus() {
return status;
}
public void setNodeStatusToShutdown() {
logger.info("System will reject write operations when shutting down.");
this.status = NodeStatus.ReadOnly;
}
public void setNodeStatus(NodeStatus newStatus) {
logger.info("Set system mode from {} to {}.", status, newStatus);
this.status = newStatus;
switch (newStatus) {
case ReadOnly:
logger.error(
"Change system status to ReadOnly! Only query statements are permitted!",
new RuntimeException("System mode is set to READ_ONLY"));
break;
case Removing:
logger.info(
"Change system status to Removing! The current Node is being removed from cluster!");
break;
}
}
public String getStatusReason() {
return statusReason;
}
public void setStatusReason(String statusReason) {
this.statusReason = statusReason;
}
}