blob: c53bf419a8fddaf4e6a29bf849373cea9156b52c [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.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);
}
}