blob: 6dc4ac47594906da382f3ff09ae86994a51f31f7 [file] [log] [blame]
/*
* Copyright 2017 HugeGraph Authors
*
* 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 com.baidu.hugegraph.computer.core.config;
import static com.baidu.hugegraph.config.OptionChecker.allowValues;
import static com.baidu.hugegraph.config.OptionChecker.disallowEmpty;
import static com.baidu.hugegraph.config.OptionChecker.nonNegativeInt;
import static com.baidu.hugegraph.config.OptionChecker.positiveInt;
import java.util.Set;
import java.util.concurrent.TimeUnit;
import com.baidu.hugegraph.computer.core.combiner.OverwritePropertiesCombiner;
import com.baidu.hugegraph.computer.core.graph.partition.HashPartitioner;
import com.baidu.hugegraph.computer.core.input.filter.DefaultInputFilter;
import com.baidu.hugegraph.computer.core.master.DefaultMasterComputation;
import com.baidu.hugegraph.computer.core.network.TransportConf;
import com.baidu.hugegraph.computer.core.network.netty.NettyTransportProvider;
import com.baidu.hugegraph.computer.core.output.LogOutput;
import com.baidu.hugegraph.config.ConfigConvOption;
import com.baidu.hugegraph.config.ConfigListOption;
import com.baidu.hugegraph.config.ConfigOption;
import com.baidu.hugegraph.config.OptionHolder;
import com.baidu.hugegraph.structure.constant.Direction;
import com.baidu.hugegraph.util.Bytes;
import com.google.common.collect.ImmutableList;
import com.google.common.collect.ImmutableSet;
public class ComputerOptions extends OptionHolder {
private ComputerOptions() {
super();
}
private static volatile ComputerOptions INSTANCE;
public static synchronized ComputerOptions instance() {
if (INSTANCE == null) {
INSTANCE = new ComputerOptions();
// Should initialize all static members first, then register.
INSTANCE.registerOptions();
}
return INSTANCE;
}
public static final ConfigOption<Class<?>> ALGORITHM_PARAMS_CLASS =
new ConfigOption<>(
"algorithm.params_class",
"The class used to transfer algorithms's parameters " +
"before algorithm been run.",
disallowEmpty(),
Null.class
);
public static final ConfigOption<Class<?>> ALGORITHM_RESULT_CLASS =
new ConfigOption<>(
"algorithm.result_class",
"The class of vertex's value, the instance is used to " +
"store computation result for the vertex.",
disallowEmpty(),
Null.class
);
public static final ConfigOption<Class<?>> ALGORITHM_MESSAGE_CLASS =
new ConfigOption<>(
"algorithm.message_class",
"The class of message passed when compute vertex.",
disallowEmpty(),
Null.class
);
public static final ConfigOption<String> INPUT_SOURCE_TYPE =
new ConfigOption<>(
"input.source_type",
"The source type to load input data",
allowValues("hugegraph-server", "hugegraph-loader"),
"hugegraph-server"
);
public static final ConfigOption<Integer> INPUT_SPLIT_FETCH_TIMEOUT =
new ConfigOption<>(
"input.split_fetch_timeout",
"The timeout in seconds to fetch input splits",
positiveInt(),
300
);
public static final ConfigOption<Long> INPUT_SPLITS_SIZE =
new ConfigOption<>(
"input.split_size",
"The input split size in bytes",
positiveInt(),
1024 * 1024L
);
public static final ConfigOption<Integer> INPUT_MAX_SPLITS =
new ConfigOption<>(
"input.split_max_splits",
"The maximum number of input splits",
positiveInt(),
10_000_000
);
public static final ConfigOption<Integer> INPUT_SPLIT_PAGE_SIZE =
new ConfigOption<>(
"input.split_page_size",
"The page size for streamed load input split data",
positiveInt(),
500
);
public static final ConfigOption<Class<?>> INPUT_FILTER_CLASS =
new ConfigOption<>(
"input.filter_class",
"The class to create input-filter object, " +
"input-filter is used to Filter vertex edges " +
"according to user needs.",
disallowEmpty(),
DefaultInputFilter.class
);
public static final ConfigConvOption<String, Direction>
INPUT_EDGE_DIRECTION = new ConfigConvOption<>(
"input.edge_direction",
"The data of the edge in which direction is loaded, " +
"when the value is BOTH, the edges in both OUT and IN " +
"direction will be loaded.",
allowValues("OUT", "IN", "BOTH"),
Direction::valueOf,
"OUT"
);
public static final ConfigConvOption<String, EdgeFrequency>
INPUT_EDGE_FREQ = new ConfigConvOption<>(
"input.edge_freq",
"The frequency of edges can exist between a pair of " +
"vertices, allowed values: [SINGLE, SINGLE_PER_LABEL, " +
"MULTIPLE]. SINGLE means that only one edge can exist " +
"between a pair of vertices, use sourceId + targetId to " +
"identify it; SINGLE_PER_LABEL means that each edge " +
"label can exist one edge between a pair of vertices, " +
"use sourceId + edgelabel + targetId to identify it; " +
"MULTIPLE means that many edge can exist between a pair " +
"of vertices, use sourceId + edgelabel + sortValues + " +
"targetId to identify it.",
allowValues("SINGLE", "SINGLE_PER_LABEL", "MULTIPLE"),
EdgeFrequency::valueOf,
"MULTIPLE"
);
public static final ConfigOption<Integer> INPUT_MAX_EDGES_IN_ONE_VERTEX =
new ConfigOption<>(
"input.max_edges_in_one_vertex",
"The maximum number of adjacent edges allowed to be " +
"attached to a vertex, the adjacent edges will be " +
"stored and transferred together as a batch unit.",
positiveInt(),
200
);
public static final ConfigOption<String> INPUT_LOADER_STRUCT_PATH =
new ConfigOption<>(
"input.loader_struct_path",
"The struct path of loader input, only takes effect when " +
"the input.source_type=loader is enabled",
null,
""
);
public static final ConfigOption<String> INPUT_LOADER_SCHEMA_PATH =
new ConfigOption<>(
"input.loader_schema_path",
"The schema path of loader input, only takes effect when " +
"the input.source_type=loader is enabled",
null,
""
);
public static final ConfigOption<Integer> SORT_THREAD_NUMS =
new ConfigOption<>(
"sort.thread_nums",
"The number of threads performing internal sorting.",
positiveInt(),
4
);
public static final ConfigOption<Class<?>> OUTPUT_CLASS =
new ConfigOption<>(
"output.output_class",
"The class to output the computation result of each " +
"vertex. Be called after iteration computation.",
disallowEmpty(),
LogOutput.class
);
public static final ConfigOption<String> OUTPUT_RESULT_NAME =
new ConfigOption<>(
"output.result_name",
"The value is assigned dynamically by #name() of " +
"instance created by WORKER_COMPUTATION_CLASS.",
disallowEmpty(),
"value"
);
public static final ConfigOption<Boolean> OUTPUT_WITH_ADJACENT_EDGES =
new ConfigOption<>(
"output.with_adjacent_edges",
"Output the adjacent edges of the vertex or not",
allowValues(true, false),
false
);
public static final ConfigOption<Boolean> OUTPUT_WITH_VERTEX_PROPERTIES =
new ConfigOption<>(
"output.with_vertex_properties",
"Output the properties of the vertex or not",
allowValues(true, false),
false
);
public static final ConfigOption<Boolean> OUTPUT_WITH_EDGE_PROPERTIES =
new ConfigOption<>(
"output.with_edge_properties",
"Output the properties of the edge or not",
allowValues(true, false),
false
);
public static final ConfigOption<String> OUTPUT_RESULT_WRITE_TYPE =
new ConfigOption<>(
"output.result_write_type",
"The result write-type to output to hugegraph, " +
"allowed values are: " +
"[OLAP_COMMON, OLAP_SECONDARY, OLAP_RANGE].",
allowValues("OLAP_COMMON", "OLAP_SECONDARY", "OLAP_RANGE"),
"OLAP_COMMON"
);
public static final ConfigOption<Integer> OUTPUT_BATCH_SIZE =
new ConfigOption<>(
"output.batch_size",
"The batch size of output",
positiveInt(),
500
);
public static final ConfigOption<Integer> OUTPUT_BATCH_THREADS =
new ConfigOption<>(
"output.batch_threads",
"The threads number used to batch output",
positiveInt(),
1
);
public static final ConfigOption<Integer> OUTPUT_SINGLE_THREADS =
new ConfigOption<>(
"output.single_threads",
"The threads number used to single output",
positiveInt(),
1
);
public static final ConfigOption<Integer>
OUTPUT_THREAD_POOL_SHUTDOWN_TIMEOUT =
new ConfigOption<>(
"output.thread_pool_shutdown_timeout",
"The timeout seconds of output threads pool shutdown",
positiveInt(),
60
);
public static final ConfigOption<Integer> OUTPUT_RETRY_TIMES =
new ConfigOption<>(
"output.retry_times",
"The retry times when output failed",
positiveInt(),
3
);
public static final ConfigOption<Integer> OUTPUT_RETRY_INTERVAL =
new ConfigOption<>(
"output.retry_interval",
"The retry interval when output failed",
positiveInt(),
10
);
public static final ConfigOption<String> OUTPUT_HDFS_URL =
new ConfigOption<>(
"output.hdfs_url",
"The hdfs url of output.",
disallowEmpty(),
"hdfs://127.0.0.1:9000"
);
public static final ConfigOption<String> OUTPUT_HDFS_USER =
new ConfigOption<>(
"output.hdfs_user",
"The hdfs user of output.",
disallowEmpty(),
"hadoop"
);
public static final ConfigOption<String> OUTPUT_HDFS_CORE_SITE_PATH =
new ConfigOption<>(
"output.hdfs_core_site_path",
"The hdfs core site path.",
null,
""
);
public static final ConfigOption<String> OUTPUT_HDFS_SITE_PATH =
new ConfigOption<>(
"output.hdfs_site_path",
"The hdfs site path.",
null,
""
);
public static final ConfigOption<Short> OUTPUT_HDFS_REPLICATION =
new ConfigOption<>(
"output.hdfs_replication",
"The replication number of hdfs.",
positiveInt(),
(short) 3
);
public static final ConfigOption<String> OUTPUT_HDFS_DIR =
new ConfigOption<>(
"output.hdfs_path_prefix",
"The directory of hdfs output result.",
disallowEmpty(),
"/hugegraph-computer/results"
);
public static final ConfigOption<String> OUTPUT_HDFS_DELIMITER =
new ConfigOption<>(
"output.hdfs_delimiter",
"The delimiter of hdfs output.",
disallowEmpty(),
","
);
public static final ConfigOption<Boolean> OUTPUT_HDFS_MERGE =
new ConfigOption<>(
"output.hdfs_merge_partitions",
"Whether merge output files of multiple partitions.",
allowValues(true, false),
true
);
public static final ConfigOption<Boolean> OUTPUT_HDFS_KERBEROS_ENABLE =
new ConfigOption<>(
"output.hdfs_kerberos_enable",
"Is Kerberos authentication enabled for Hdfs.",
allowValues(true, false),
false
);
public static final ConfigOption<String> OUTPUT_HDFS_KRB5_CONF =
new ConfigOption<>(
"output.hdfs_krb5_conf",
"Kerberos configuration file.",
disallowEmpty(),
"/etc/krb5.conf"
);
public static final ConfigOption<String> OUTPUT_HDFS_KERBEROS_PRINCIPAL =
new ConfigOption<>(
"output.hdfs_kerberos_principal",
"The Hdfs's principal for kerberos authentication.",
null,
""
);
public static final ConfigOption<String> OUTPUT_HDFS_KERBEROS_KEYTAB =
new ConfigOption<>(
"output.hdfs_kerberos_keytab",
"The Hdfs's key tab file for kerberos authentication.",
null,
""
);
public static final ConfigOption<Integer>
ALLOCATOR_MAX_VERTICES_PER_THREAD = new ConfigOption<>(
"allocator.max_vertices_per_thread",
"Maximum number of vertices per thread processed " +
"in each memory allocator",
positiveInt(),
10000
);
public static final ConfigOption<String> JOB_ID =
new ConfigOption<>(
"job.id",
"The job id on Yarn cluster or K8s cluster.",
disallowEmpty(),
"local_0001"
);
public static final ConfigOption<Integer> JOB_WORKERS_COUNT =
new ConfigOption<>(
"job.workers_count",
"The workers count for computing one graph " +
"algorithm job.",
positiveInt(),
1
);
public static final ConfigOption<Integer> JOB_PARTITIONS_COUNT =
new ConfigOption<>(
"job.partitions_count",
"The partitions count for computing one graph " +
"algorithm job.",
positiveInt(),
1
);
public static final ConfigOption<Integer> PARTITIONS_COMPUTE_THREAD_NUMS =
new ConfigOption<>(
"job.partitions_thread_nums",
"The number of threads for partition parallel compute.",
positiveInt(),
4
);
public static final ConfigOption<Integer> BSP_MAX_SUPER_STEP =
new ConfigOption<>(
"bsp.max_super_step",
"The max super step of the algorithm.",
positiveInt(),
10
);
public static final ConfigOption<String> BSP_ETCD_ENDPOINTS =
new ConfigOption<>(
"bsp.etcd_endpoints",
"The end points to access etcd.",
disallowEmpty(),
"http://localhost:2379"
);
public static final ConfigOption<Long> BSP_REGISTER_TIMEOUT =
new ConfigOption<>(
"bsp.register_timeout",
"The max timeout to wait for master and works to register.",
positiveInt(),
TimeUnit.MINUTES.toMillis(5L)
);
public static final ConfigOption<Long> BSP_WAIT_WORKERS_TIMEOUT =
new ConfigOption<>(
"bsp.wait_workers_timeout",
"The max timeout to wait for workers bsp event.",
positiveInt(),
TimeUnit.HOURS.toMillis(24L)
);
public static final ConfigOption<Long> BSP_WAIT_MASTER_TIMEOUT =
new ConfigOption<>(
"bsp.wait_master_timeout",
"The max timeout(in ms) to wait for master bsp event.",
positiveInt(),
TimeUnit.HOURS.toMillis(24L)
);
public static final ConfigOption<Long> BSP_LOG_INTERVAL =
new ConfigOption<>(
"bsp.log_interval",
"The log interval(in ms) to print the log while " +
"waiting bsp event.",
positiveInt(),
TimeUnit.SECONDS.toMillis(30L)
);
public static final ConfigOption<Class<?>> WORKER_PARTITIONER =
new ConfigOption<>(
"worker.partitioner",
"The partitioner that decides which partition a vertex " +
"should be in, and which worker a partition should be in.",
disallowEmpty(),
HashPartitioner.class
);
public static final ConfigOption<Class<?>> WORKER_COMPUTATION_CLASS =
new ConfigOption<>(
"worker.computation_class",
"The class to create worker-computation object, " +
"worker-computation is used to compute each vertex " +
"in each superstep.",
disallowEmpty(),
Null.class
);
public static final ConfigOption<Class<?>> WORKER_COMBINER_CLASS =
new ConfigOption<>(
"worker.combiner_class",
"Combiner can combine messages into one value for a " +
"vertex, for example page-rank algorithm can combine " +
"messages of a vertex to a sum value.",
disallowEmpty(),
Null.class
);
public static final ConfigOption<Class<?>>
WORKER_VERTEX_PROPERTIES_COMBINER_CLASS =
new ConfigOption<>(
"worker.vertex_properties_combiner_class",
"The combiner can combine several properties of the same " +
"vertex into one properties at inputstep.",
disallowEmpty(),
OverwritePropertiesCombiner.class
);
public static final ConfigOption<Class<?>>
WORKER_EDGE_PROPERTIES_COMBINER_CLASS =
new ConfigOption<>(
"worker.edge_properties_combiner_class",
"The combiner can combine several properties of the same " +
"edge into one properties at inputstep.",
disallowEmpty(),
OverwritePropertiesCombiner.class
);
public static final ConfigOption<Long> WORKER_RECEIVED_BUFFERS_BYTES_LIMIT =
new ConfigOption<>(
"worker.received_buffers_bytes_limit",
"The limit bytes of buffers of received data, " +
"the total size of all buffers can't excess this limit. " +
"If received buffers reach this limit, they will be " +
"merged into a file.",
positiveInt(),
100 * Bytes.MB
);
public static final ConfigOption<Long> WORKER_WAIT_SORT_TIMEOUT =
new ConfigOption<>(
"worker.wait_sort_timeout",
"The max timeout(in ms) message-handler wait for " +
"sort-thread to sort one batch of buffers.",
positiveInt(),
TimeUnit.MINUTES.toMillis(10)
);
public static final ConfigOption<Long> WORKER_WAIT_FINISH_MESSAGES_TIMEOUT =
new ConfigOption<>(
"worker.wait_finish_messages_timeout",
"The max timeout(in ms) message-handler wait for " +
"finish-message of all workers.",
positiveInt(),
TimeUnit.HOURS.toMillis(24)
);
public static final ConfigListOption<String> WORKER_DATA_DIRS =
new ConfigListOption<>(
"worker.data_dirs",
true,
"The directories separated by ',' that received " +
"vertices and messages can persist into.",
disallowEmpty(),
String.class,
ImmutableList.of("jobs")
);
public static final ConfigOption<Integer> WORKER_WRITE_BUFFER_THRESHOLD =
new ConfigOption<>(
"worker.write_buffer_threshold",
"The threshold of write buffer, exceeding it will " +
"trigger sorting, the write buffer is used to store " +
"vertex or message.",
positiveInt(),
(int) (50 * Bytes.MB)
);
public static final ConfigOption<Integer>
WORKER_WRITE_BUFFER_INIT_CAPACITY = new ConfigOption<>(
"worker.write_buffer_capacity",
"The initial size of write buffer that used to store " +
"vertex or message.",
positiveInt(),
(int) (50 * Bytes.MB)
);
public static final ConfigOption<Class<?>> MASTER_COMPUTATION_CLASS =
new ConfigOption<>(
"master.computation_class",
"Master-computation is computation that can determine " +
"whether to continue next superstep. It runs at the end " +
"of each superstep on master.",
disallowEmpty(),
DefaultMasterComputation.class
);
public static final ConfigOption<String> HUGEGRAPH_URL =
new ConfigOption<>(
"hugegraph.url",
"The hugegraph url to load data and write results back.",
disallowEmpty(),
"http://127.0.0.1:8080"
);
public static final ConfigOption<String> HUGEGRAPH_GRAPH_NAME =
new ConfigOption<>(
"hugegraph.name",
"The graph name to load data and write results back.",
disallowEmpty(),
"hugegraph"
);
public static final ConfigOption<String> TRANSPORT_SERVER_HOST =
new ConfigOption<>(
"transport.server_host",
"The server hostname or ip to listen on to transfer data.",
disallowEmpty(),
"127.0.0.1"
);
public static final ConfigOption<Integer> TRANSPORT_SERVER_PORT =
new ConfigOption<>(
"transport.server_port",
"The server port to listen on to transfer data. " +
"The system will assign a random port if it's set to 0.",
nonNegativeInt(),
0
);
public static final ConfigOption<Integer> TRANSPORT_SERVER_THREADS =
new ConfigOption<>(
"transport.server_threads",
"The number of transport threads for server.",
positiveInt(),
TransportConf.DEFAULT_THREADS
);
public static final ConfigOption<Integer> TRANSPORT_CLIENT_THREADS =
new ConfigOption<>(
"transport.client_threads",
"The number of transport threads for client.",
positiveInt(),
TransportConf.DEFAULT_THREADS
);
public static final ConfigOption<Class<?>> TRANSPORT_PROVIDER_CLASS =
new ConfigOption<>(
"transport.provider_class",
"The transport provider, currently only supports Netty.",
disallowEmpty(),
NettyTransportProvider.class
);
public static final ConfigOption<String> TRANSPORT_IO_MODE =
new ConfigOption<>(
"transport.io_mode",
"The network IO Mode, either 'NIO', 'EPOLL', 'AUTO', the " +
"'AUTO' means selecting the property mode automatically.",
allowValues("NIO", "EPOLL", "AUTO"),
"AUTO"
);
public static final ConfigOption<Boolean> TRANSPORT_EPOLL_LT =
new ConfigOption<>(
"transport.transport_epoll_lt",
"Whether enable EPOLL level-trigger.",
allowValues(true, false),
false
);
public static final ConfigOption<Boolean> TRANSPORT_RECV_FILE_MODE =
new ConfigOption<>(
"transport.recv_file_mode",
"Whether enable receive buffer-file mode, it will " +
"receive buffer write file from socket by " +
"zero-copy if enable.",
allowValues(true, false),
true
);
public static final ConfigOption<Boolean> TRANSPORT_TCP_KEEP_ALIVE =
new ConfigOption<>(
"transport.tcp_keep_alive",
"Whether enable TCP keep-alive.",
allowValues(true, false),
true
);
public static final ConfigOption<Integer> TRANSPORT_MAX_SYN_BACKLOG =
new ConfigOption<>(
"transport.max_syn_backlog",
"The capacity of SYN queue on server side, 0 means using " +
"system default value.",
nonNegativeInt(),
511
);
public static final ConfigOption<Integer> TRANSPORT_RECEIVE_BUFFER_SIZE =
new ConfigOption<>(
"transport.receive_buffer_size",
"The size of socket receive-buffer in bytes, 0 means " +
"using system default value.",
nonNegativeInt(),
0
);
public static final ConfigOption<Integer> TRANSPORT_SEND_BUFFER_SIZE =
new ConfigOption<>(
"transport.send_buffer_size",
"The size of socket send-buffer in bytes, 0 means using " +
"system default value.",
nonNegativeInt(),
// TODO: Test to get an best value
0
);
public static final ConfigOption<Long> TRANSPORT_CLIENT_CONNECT_TIMEOUT =
new ConfigOption<>(
"transport.client_connect_timeout",
"The timeout(in ms) of client connect to server.",
positiveInt(),
3000L
);
public static final ConfigOption<Long> TRANSPORT_CLOSE_TIMEOUT =
new ConfigOption<>(
"transport.close_timeout",
"The timeout(in ms) of close server or close client.",
positiveInt(),
10_000L
);
public static final ConfigOption<Long> TRANSPORT_SYNC_REQUEST_TIMEOUT =
new ConfigOption<>(
"transport.sync_request_timeout",
"The timeout(in ms) to wait response after " +
"sending sync-request.",
positiveInt(),
10_000L
);
public static final ConfigOption<Long> TRANSPORT_FINISH_SESSION_TIMEOUT =
new ConfigOption<>(
"transport.finish_session_timeout",
"The timeout(in ms) to finish session, " +
"0 means using (transport.sync_request_timeout * " +
"transport.max_pending_requests).",
nonNegativeInt(),
0L
);
public static final ConfigOption<Long> TRANSPORT_WRITE_SOCKET_TIMEOUT =
new ConfigOption<>(
"transport.write_socket_timeout",
"The timeout(in ms) to write data to socket buffer.",
positiveInt(),
3000L
);
public static final ConfigOption<Integer> TRANSPORT_NETWORK_RETRIES =
new ConfigOption<>(
"transport.network_retries",
"The number of retry attempts for network communication," +
"if network unstable.",
nonNegativeInt(),
3
);
public static final ConfigOption<Integer> TRANSPORT_WRITE_BUFFER_HIGH_MARK =
new ConfigOption<>(
"transport.write_buffer_high_mark",
"The high water mark for write buffer in bytes, " +
"it will trigger the sending unavailable if the number " +
"of queued bytes > write_buffer_high_mark.",
nonNegativeInt(),
64 * (int) Bytes.MB
);
public static final ConfigOption<Integer> TRANSPORT_WRITE_BUFFER_LOW_MARK =
new ConfigOption<>(
"transport.write_buffer_low_mark",
"The low water mark for write buffer in bytes, it will " +
"trigger the sending available if the number of queued " +
"bytes < write_buffer_low_mark." +
nonNegativeInt(),
32 * (int) Bytes.MB
);
public static final ConfigOption<Integer> TRANSPORT_MAX_PENDING_REQUESTS =
new ConfigOption<>(
"transport.max_pending_requests",
"The max number of client unreceived ack, " +
"it will trigger the sending unavailable if the number " +
"of unreceived ack >= max_pending_requests.",
positiveInt(),
8
);
public static final ConfigOption<Integer> TRANSPORT_MIN_PENDING_REQUESTS =
new ConfigOption<>(
"transport.min_pending_requests",
"The minimum number of client unreceived ack, " +
"it will trigger the sending available if the number of " +
"unreceived ack < min_pending_requests.",
positiveInt(),
6
);
public static final ConfigOption<Long> TRANSPORT_MIN_ACK_INTERVAL =
new ConfigOption<>(
"transport.min_ack_interval",
"The minimum interval(in ms) of server reply ack.",
positiveInt(),
200L
);
public static final ConfigOption<Long> TRANSPORT_SERVER_IDLE_TIMEOUT =
new ConfigOption<>(
"transport.server_idle_timeout",
"The max timeout(in ms) of server idle.",
positiveInt(),
360_000L
);
public static final ConfigOption<Long> TRANSPORT_HEARTBEAT_INTERVAL =
new ConfigOption<>(
"transport.heartbeat_interval",
"The minimum interval(in ms) between heartbeats on " +
"client side.",
positiveInt(),
20_000L
);
public static final ConfigOption<Integer>
TRANSPORT_MAX_TIMEOUT_HEARTBEAT_COUNT =
new ConfigOption<>(
"transport.max_timeout_heartbeat_count",
"The maximum times of timeout heartbeat on client side, " +
"if the number of timeouts waiting for heartbeat " +
"response continuously > max_heartbeat_timeouts the " +
"channel will be closed from client side.",
positiveInt(),
120
);
public static final ConfigOption<Long> HGKV_MAX_FILE_SIZE =
new ConfigOption<>(
"hgkv.max_file_size",
"The max number of bytes in each hgkv-file.",
positiveInt(),
Bytes.GB * 2
);
public static final ConfigOption<Long> HGKV_DATABLOCK_SIZE =
new ConfigOption<>(
"hgkv.max_data_block_size",
"The max byte size of hgkv-file data block.",
positiveInt(),
Bytes.KB * 64
);
public static final ConfigOption<Integer> HGKV_MERGE_FILES_NUM =
new ConfigOption<>(
"hgkv.max_merge_files",
"The max number of files to merge at one time.",
positiveInt(),
// TODO: test if the default value is appropriate.
10
);
public static final ConfigOption<String> HGKV_TEMP_DIR =
new ConfigOption<>(
"hgkv.temp_file_dir",
"This folder is used to store temporary files, temporary " +
"files will be generated during the file merging process.",
disallowEmpty(),
"/tmp/hgkv"
);
public static final ConfigOption<Long> VALUE_FILE_MAX_SEGMENT_SIZE =
new ConfigOption<>(
"valuefile.max_segment_size",
"The max number of bytes in each segment of value-file.",
positiveInt(),
Bytes.GB
);
public static Set<String> REQUIRED_OPTIONS = ImmutableSet.of(
);
}