/* * Copyright 1999-2019 Seata.io Group. * * Licensed 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 io.seata.server.store; import io.seata.common.util.StringUtils; import io.seata.config.Configuration; import io.seata.config.ConfigurationFactory; import io.seata.core.constants.ConfigurationKeys; import io.seata.server.env.ContainerHelper; import io.seata.server.storage.file.FlushDiskMode; import static io.seata.common.DefaultValues.SERVER_DEFAULT_STORE_MODE; import static io.seata.core.constants.ConfigurationKeys.STORE_FILE_PREFIX; /** * @author lizhao */ public class StoreConfig { private static final Configuration CONFIGURATION = ConfigurationFactory.getInstance(); private static StoreMode storeMode; private static SessionMode sessionMode; private static LockMode lockMode; /** * set storeMode sessionMode lockMode from StartupParameter * * @param storeMode storeMode * @param sessionMode sessionMode * @param lockMode lockMode */ public static void setStartupParameter(String storeMode, String sessionMode, String lockMode) { if (StringUtils.isNotBlank(storeMode)) { StoreConfig.storeMode = StoreMode.get(storeMode); } if (StringUtils.isNotBlank(sessionMode)) { StoreConfig.sessionMode = SessionMode.get(sessionMode); } if (StringUtils.isNotBlank(lockMode)) { StoreConfig.lockMode = LockMode.get(lockMode); } } /** * Default 16kb. */ private static final int DEFAULT_MAX_BRANCH_SESSION_SIZE = 1024 * 16; /** * Default 512b. */ private static final int DEFAULT_MAX_GLOBAL_SESSION_SIZE = 512; /** * Default 16kb. */ private static final int DEFAULT_WRITE_BUFFER_SIZE = 1024 * 16; public static int getMaxBranchSessionSize() { return CONFIGURATION.getInt(STORE_FILE_PREFIX + "maxBranchSessionSize", DEFAULT_MAX_BRANCH_SESSION_SIZE); } public static int getMaxGlobalSessionSize() { return CONFIGURATION.getInt(STORE_FILE_PREFIX + "maxGlobalSessionSize", DEFAULT_MAX_GLOBAL_SESSION_SIZE); } public static int getFileWriteBufferCacheSize() { return CONFIGURATION.getInt(STORE_FILE_PREFIX + "fileWriteBufferCacheSize", DEFAULT_WRITE_BUFFER_SIZE); } public static FlushDiskMode getFlushDiskMode() { return FlushDiskMode.findDiskMode(CONFIGURATION.getConfig(STORE_FILE_PREFIX + "flushDiskMode")); } /** * only for inner call * * @return */ private static StoreMode getStoreMode() { //startup if (null != storeMode) { return storeMode; } //env String storeModeEnv = ContainerHelper.getStoreMode(); if (StringUtils.isNotBlank(storeModeEnv)) { return StoreMode.get(storeModeEnv); } //config String storeModeConfig = CONFIGURATION.getConfig(ConfigurationKeys.STORE_MODE, SERVER_DEFAULT_STORE_MODE); return StoreMode.get(storeModeConfig); } public static SessionMode getSessionMode() { //startup if (null != sessionMode) { return sessionMode; } //env String sessionModeEnv = ContainerHelper.getSessionStoreMode(); if (StringUtils.isNotBlank(sessionModeEnv)) { return SessionMode.get(sessionModeEnv); } //config String sessionModeConfig = CONFIGURATION.getConfig(ConfigurationKeys.STORE_SESSION_MODE); if (StringUtils.isNotBlank(sessionModeConfig)) { return SessionMode.get(sessionModeConfig); } // complication old config return SessionMode.get(getStoreMode().name()); } public static LockMode getLockMode() { //startup if (null != lockMode) { return lockMode; } //env String lockModeEnv = ContainerHelper.getLockStoreMode(); if (StringUtils.isNotBlank(lockModeEnv)) { return LockMode.get(lockModeEnv); } //config String lockModeConfig = CONFIGURATION.getConfig(ConfigurationKeys.STORE_LOCK_MODE); if (StringUtils.isNotBlank(lockModeConfig)) { return LockMode.get(lockModeConfig); } // complication old config return LockMode.get(getStoreMode().name()); } public enum StoreMode { /** * The File store mode. */ FILE("file"), /** * The Db store mode. */ DB("db"), /** * The Redis store mode. */ REDIS("redis"); private String name; StoreMode(String name) { this.name = name; } public String getName() { return name; } public static StoreMode get(String name) { for (StoreMode mode : StoreMode.values()) { if (mode.getName().equalsIgnoreCase(name)) { return mode; } } throw new IllegalArgumentException("unknown store mode:" + name); } } public enum SessionMode { /** * The File store mode. */ FILE("file"), /** * The Db store mode. */ DB("db"), /** * The Redis store mode. */ REDIS("redis"); private String name; SessionMode(String name) { this.name = name; } public String getName() { return name; } public static SessionMode get(String name) { for (SessionMode mode : SessionMode.values()) { if (mode.getName().equalsIgnoreCase(name)) { return mode; } } throw new IllegalArgumentException("unknown session mode:" + name); } } public enum LockMode { /** * The File store mode. */ FILE("file"), /** * The Db store mode. */ DB("db"), /** * The Redis store mode. */ REDIS("redis"); private String name; LockMode(String name) { this.name = name; } public String getName() { return name; } public static LockMode get(String name) { for (LockMode mode : LockMode.values()) { if (mode.getName().equalsIgnoreCase(name)) { return mode; } } throw new IllegalArgumentException("unknown lock mode:" + name); } } }