/* * 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.ignite.igfs; import org.apache.ignite.configuration.IgniteConfiguration; import org.apache.ignite.internal.util.typedef.internal.S; import org.apache.ignite.internal.util.typedef.internal.U; import static org.apache.ignite.igfs.IgfsIpcEndpointType.SHMEM; import static org.apache.ignite.igfs.IgfsIpcEndpointType.TCP; /** * IGFS IPC endpoint configuration. */ public class IgfsIpcEndpointConfiguration { /** Default endpoint type is TCP. */ public static IgfsIpcEndpointType DFLT_TYPE = U.hasSharedMemory() ? SHMEM : TCP; /** Default host. */ public static String DFLT_HOST = "127.0.0.1"; /** Default port. */ public static int DFLT_PORT = 10500; /** Default shared memory space in bytes. */ public static final int DFLT_MEM_SIZE = 256 * 1024; /** * Default token directory. Note that this path is relative to {@code IGNITE_HOME/work} folder * if {@code IGNITE_HOME} system or environment variable specified, otherwise it is relative to * {@code work} folder under system {@code java.io.tmpdir} folder. * * @see IgniteConfiguration#getWorkDirectory() */ public static final String DFLT_TOKEN_DIR_PATH = "ipc/shmem"; /** Default threads count. */ public static final int DFLT_THREAD_CNT = IgniteConfiguration.AVAILABLE_PROC_CNT; /** Endpoint type. */ private IgfsIpcEndpointType type = DFLT_TYPE; /** Host. */ private String host = DFLT_HOST; /** Port. */ private int port = DFLT_PORT; /** Space size. */ private int memSize = DFLT_MEM_SIZE; /** Token directory path. */ private String tokenDirPath = DFLT_TOKEN_DIR_PATH; /** Thread count. */ private int threadCnt = DFLT_THREAD_CNT; /** * Default constructor. */ public IgfsIpcEndpointConfiguration() { // No-op. } /** * Copying constructor. * * @param cfg Configuration to copy. */ public IgfsIpcEndpointConfiguration(IgfsIpcEndpointConfiguration cfg) { type = cfg.getType(); host = cfg.getHost(); port = cfg.getPort(); memSize = cfg.getMemorySize(); tokenDirPath = cfg.getTokenDirectoryPath(); } /** * Gets endpoint type. There are two endpoints types: {@code SHMEM} working over shared memory, and {@code TCP} * working over sockets. * <p> * Shared memory is recommended approach for Linux-based systems. For Windows TCP is the only available option. * <p> * Defaults to {@link #DFLT_TYPE}. * * @return Endpoint type. */ public IgfsIpcEndpointType getType() { return type; } /** * Sets endpoint type. There are two endpoints types: {@link IgfsIpcEndpointType#SHMEM} working over shared memory, * and {@link IgfsIpcEndpointType#TCP} working over sockets. * <p> * Shared memory is recommended approach for Linux-based systems. For Windows TCP is the only available option. * <p> * Defaults to {@link #DFLT_TYPE}. * * @param type Endpoint type. * @return {@code this} for chaining. */ public IgfsIpcEndpointConfiguration setType(IgfsIpcEndpointType type) { this.type = type; return this; } /** * Gets the host endpoint is bound to. * <p> * For {@link IgfsIpcEndpointType#TCP} endpoint this is the network interface server socket is bound to. * <p> * For {@link IgfsIpcEndpointType#SHMEM} endpoint socket connection is needed only to perform an initial handshake. * All further communication is performed over shared memory. Therefore, for {@code SHMEM} this value is ignored * and socket will be always bound to {@link #DFLT_HOST}. * <p> * Defaults to {@link #DFLT_HOST}. * * @return Host. */ public String getHost() { return host; } /** * Sets the host endpoint is bound to. * <p> * For {@link IgfsIpcEndpointType#TCP} endpoint this is the network interface server socket is bound to. * <p> * For {@link IgfsIpcEndpointType#SHMEM} endpoint socket connection is needed only to perform an initial handshake. * All further communication is performed over shared memory. Therefore, for {@code SHMEM} this value is ignored * and socket will be always bound to {@link #DFLT_HOST}. * <p> * Defaults to {@link #DFLT_HOST}. * * @param host Host. * @return {@code this} for chaining. */ public IgfsIpcEndpointConfiguration setHost(String host) { this.host = host; return this; } /** * Gets the port endpoint is bound to. * <p> * For {@link IgfsIpcEndpointType#TCP} endpoint this is the port server socket is bound to. * <p> * For {@link IgfsIpcEndpointType#SHMEM} endpoint socket connection is needed only to perform an initial handshake. * All further communication is performed over shared memory. * <p> * Defaults to {@link #DFLT_PORT}. * * @return Port. */ public int getPort() { return port; } /** * Sets the port endpoint is bound to. * <p> * For {@link IgfsIpcEndpointType#TCP} endpoint this is the port server socket is bound to. * <p> * For {@link IgfsIpcEndpointType#SHMEM} endpoint socket connection is needed only to perform an initial handshake. * All further communication is performed over shared memory. * <p> * Defaults to {@link #DFLT_PORT}. * * @param port Port. * @return {@code this} for chaining. */ public IgfsIpcEndpointConfiguration setPort(int port) { this.port = port; return this; } /** * Gets shared memory size in bytes allocated for endpoint communication. * <p> * Ignored for {@link IgfsIpcEndpointType#TCP} endpoint. * <p> * Defaults to {@link #DFLT_MEM_SIZE}. * * @return Shared memory size. */ public int getMemorySize() { return memSize; } /** * Sets shared memory size in bytes allocated for endpoint communication. * <p> * Ignored for {@link IgfsIpcEndpointType#TCP} endpoint. * <p> * Defaults to {@link #DFLT_MEM_SIZE}. * * @param memSize Shared memory size. * @return {@code this} for chaining. */ public IgfsIpcEndpointConfiguration setMemorySize(int memSize) { this.memSize = memSize; return this; } /** * Gets directory where shared memory tokens are stored. * <p> * Note that this path is relative to {@code IGNITE_HOME/work} folder if {@code IGNITE_HOME} system or environment * variable specified, otherwise it is relative to {@code work} folder under system {@code java.io.tmpdir} folder. * <p> * Ignored for {@link IgfsIpcEndpointType#TCP} endpoint. * <p> * Defaults to {@link #DFLT_TOKEN_DIR_PATH}. * * @return Directory where shared memory tokens are stored. */ public String getTokenDirectoryPath() { return tokenDirPath; } /** * Sets directory where shared memory tokens are stored. * <p> * Note that this path is relative to {@code IGNITE_HOME/work} folder if {@code IGNITE_HOME} system or environment * variable specified, otherwise it is relative to {@code work} folder under system {@code java.io.tmpdir} folder. * <p> * Ignored for {@link IgfsIpcEndpointType#TCP} endpoint. * <p> * Defaults to {@link #DFLT_TOKEN_DIR_PATH}. * * @param tokenDirPath Directory where shared memory tokens are stored. * @return {@code this} for chaining. */ public IgfsIpcEndpointConfiguration setTokenDirectoryPath(String tokenDirPath) { this.tokenDirPath = tokenDirPath; return this; } /** * Get number of threads used by this endpoint to process incoming requests. * <p> * Defaults to {@link #DFLT_THREAD_CNT}. * * @return Number of threads used by this endpoint to process incoming requests. */ public int getThreadCount() { return threadCnt; } /** * Set number of threads used by this endpoint to process incoming requests. * <p> * See {@link #getThreadCount()} for more information. * * @param threadCnt Number of threads used by this endpoint to process incoming requests. * @return {@code this} for chaining. */ public IgfsIpcEndpointConfiguration setThreadCount(int threadCnt) { this.threadCnt = threadCnt; return this; } /** {@inheritDoc} */ @Override public String toString() { return S.toString(IgfsIpcEndpointConfiguration.class, this); } }