All Downloads are FREE. Search and download functionalities are using the official Maven repository.

net.openhft.chronicle.map.StatelessMapConfig Maven / Gradle / Ivy

/*
 * Copyright 2014 Higher Frequency Trading
 *
 * http://www.higherfrequencytrading.com
 *
 * 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 net.openhft.chronicle.map;

import net.openhft.chronicle.hash.StatelessClientConfig;
import net.openhft.lang.MemoryUnit;

import java.io.IOException;
import java.net.InetSocketAddress;
import java.util.concurrent.TimeUnit;
import java.util.concurrent.atomic.AtomicBoolean;

/**
 * @author Rob Austin.
 */
class StatelessMapConfig implements StatelessClientConfig> {

    private final ChronicleMapBuilder mapBuilder;
    private final InetSocketAddress remoteAddress;
    private final long timeoutMs;
    private final String name;

    private int tcpBufferSize = (int) MemoryUnit.KILOBYTES.toBytes(64);

    private final AtomicBoolean used;

    StatelessMapConfig(ChronicleMapBuilder mapBuilder,
                       InetSocketAddress remoteAddress, long timeoutMs,
                       String name, AtomicBoolean used) {
        this.mapBuilder = mapBuilder;
        this.remoteAddress = remoteAddress;
        this.timeoutMs = timeoutMs;
        this.name = name;
        this.used = used;
    }

    public long timeoutMs() {
        return timeoutMs;
    }

    public InetSocketAddress remoteAddress() {
        return remoteAddress;
    }

    @Override
    public StatelessMapConfig timeout(long timeout, TimeUnit units) {
        return new StatelessMapConfig<>(mapBuilder, remoteAddress, units.toMillis(timeout),
                name, used);
    }

    @Override
    public StatelessClientConfig> name(String name) {
        return new StatelessMapConfig<>(mapBuilder, remoteAddress, timeoutMs, name, used);
    }

    String name() {
        return name;
    }

    @Override
    public ChronicleMap create() throws IOException {
        if (!used.getAndSet(true)) {
            return mapBuilder.createStatelessClient(this);
        } else {
            throw new IllegalStateException(
                    "A stateless client has already been created using this config chain. " +
                            "Create a new StatelessClientConfig (builder.statelessClient()) " +
                            "to create a new stateless client");
        }
    }

    public int tcpBufferSize() {
        return tcpBufferSize;
    }

    public StatelessMapConfig tcpBufferSize(int packetSize) {
        this.tcpBufferSize = packetSize;
        return this;
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy