package edu.washington.escience.myria; import java.util.concurrent.TimeUnit; /** * This class holds the constants for the Myria execution. * */ public final class MyriaConstants { /** * The system name. */ public static final String SYSTEM_NAME = "Myria"; /** * 1 kb. */ public static final int KB = 1024; /** * 1 mb. */ public static final int MB = 1024 * KB; /** * 1 gb. */ public static final int GB = 1024 * MB; /** * 1 tb. */ public static final int TB = 1024 * GB; /** * The default port for the REST server. */ public static final int DEFAULT_MYRIA_API_PORT = 8753; /** * Execution environment variable, the database name. */ public static final String EXEC_ENV_VAR_DATABASE_CONN_INFO = "execEnvVar.database.conn.info"; /** * Execution environment variable, the database system. */ public static final String EXEC_ENV_VAR_DATABASE_SYSTEM = "execEnvVar.database.system"; /** * Driving task. */ public static final String EXEC_ENV_VAR_DRIVING_TASK = "drivingTask"; /** * Execution mode, see {@link edu.washington.escience.myria.parallel.QueryExecutionMode}. */ public static final String EXEC_ENV_VAR_EXECUTION_MODE = "executionMode"; /** * Node ID. */ public static final String EXEC_ENV_VAR_NODE_ID = "nodeId"; /** * Task resource manager. */ public static final String EXEC_ENV_VAR_FRAGMENT_RESOURCE_MANAGER = "fragmentResourceManager"; /** * Test mode is true */ public static final String EXEC_ENV_VAR_TEST_MODE = "testMode"; /** * Query ID. */ public static final String EXEC_ENV_VAR_QUERY_ID = "queryId"; /** * Profiling mode. */ public static final String EXEC_ENV_VAR_PROFILING_MODE = "profiling_mode"; /** Time interval between two heartbeats. */ public static final int HEARTBEAT_INTERVAL = 1000; /** Time interval between two resource usage reports. */ public static final int RESOURCE_REPORT_INTERVAL = 1000; /** The identity of the master worker is current always zero. */ public static final int MASTER_ID = 0; /** * Timeout for master process startup. */ public static final int MASTER_START_UP_TIMEOUT_IN_SECOND = 20; /** timeout of returning a tuple batch even not filled. */ public static final long PUSHING_TB_TIMEOUT = 1000000000; /** * How long do we treat a scheduled new worker as failed to start, in milliseconds. */ public static final long SCHEDULED_WORKER_FAILED_TO_START = 5000; /** * How long do we treat a scheduled new worker as unable to start, in milliseconds. */ public static final long SCHEDULED_WORKER_UNABLE_TO_START = 15000; /** * Short wait interval 1 millisecond. */ public static final int SHORT_WAITING_INTERVAL_1_MS = 1; /** * Short wait interval 10 milliseconds. */ public static final int SHORT_WAITING_INTERVAL_10_MS = 10; /** * Short wait interval 100 milliseconds. */ public static final int SHORT_WAITING_INTERVAL_100_MS = 100; /** * Short wait interval default 100 milliseconds. */ public static final int SHORT_WAITING_INTERVAL_MS = SHORT_WAITING_INTERVAL_100_MS; /** the database name. */ public static final String STORAGE_DATABASE_NAME = "myria.db"; /** * JDBC username. */ public static final String STORAGE_JDBC_USERNAME = "uwdb"; /** * MonetDB storage. */ public static final String STORAGE_SYSTEM_MONETDB = "monetdb"; /** * MonetDB port. */ public static final int STORAGE_MONETDB_PORT = 50001; /** * Mysql storage. */ public static final String STORAGE_SYSTEM_MYSQL = "mysql"; /** * Mysql port. */ public static final int STORAGE_MYSQL_PORT = 3301; /** * SQLite storage. */ public static final String STORAGE_SYSTEM_SQLITE = "sqlite"; /** * PostgreSQL storage. */ public static final String STORAGE_SYSTEM_POSTGRESQL = "postgresql"; /** Worker config file name. */ public static final String WORKER_CONFIG_FILE = "worker.cfg"; /** Deployment config file name. */ public static final String DEPLOYMENT_CONF_FILE = "deployment.cfg"; /** * PostgreSQL port. */ public static final int STORAGE_POSTGRESQL_PORT = 5432; /** * If a thread in a thread pool is idle, how long it should wait before terminates itself. Currently, 5 minutes. */ public static final int THREAD_POOL_KEEP_ALIVE_TIME_IN_MS = 1000 * 60 * 5; /** * Short wait interval in milliseconds. */ public static final int WAITING_INTERVAL_1_SECOND_IN_MS = 1000; /** How long do we treat a worker as dead, in milliseconds. */ public static final long WORKER_IS_DEAD_INTERVAL = 5000; /** How long do we wait for next worker liveness check, in milliseconds. */ public static final long WORKER_LIVENESS_CHECKER_INTERVAL = 1000; /** * The time interval in milliseconds for check if the worker should be shutdown. */ public static final int WORKER_SHUTDOWN_CHECKER_INTERVAL = 1000; /** * The number of bytes that can back up in a {@link java.io.PipedInputStream} before we stop writing tuples and wait * for the client to read them. 16 MB. */ public static final int DEFAULT_PIPED_INPUT_STREAM_SIZE = 1024 * 1024 * 16; /** * The maximum number of currently active (running, queued, paused, ...) queries at the master. */ public static final int MAX_ACTIVE_QUERIES = 25; /** * The relation that stores profiling information about which operators executed when. */ public static final RelationKey EVENT_PROFILING_RELATION = new RelationKey("public", "logs", "Profiling"); /** * The schema of the {@link #EVENT_PROFILING_RELATION}. */ public static final Schema EVENT_PROFILING_SCHEMA = Schema.ofFields( "queryId", Type.LONG_TYPE, "subQueryId", Type.INT_TYPE, "fragmentId", Type.INT_TYPE, "opId", Type.INT_TYPE, "startTime", Type.LONG_TYPE, "endTime", Type.LONG_TYPE, "numTuples", Type.LONG_TYPE); /** * The relation that stores profiling information about sent tuples. */ public static final RelationKey SENT_PROFILING_RELATION = new RelationKey("public", "logs", "Sending"); /** * The schema of the {@link #SENT_PROFILING_RELATION}. */ public static final Schema SENT_PROFILING_SCHEMA = Schema.ofFields( "queryId", Type.LONG_TYPE, "subQueryId", Type.INT_TYPE, "fragmentId", Type.INT_TYPE, "nanoTime", Type.LONG_TYPE, "numTuples", Type.LONG_TYPE, "destWorkerId", Type.INT_TYPE); /** * The relation that stores resource profiling information. */ public static final RelationKey RESOURCE_PROFILING_RELATION = new RelationKey("public", "logs", "Resource"); /** * The schema of the {@link #RESOURCE_PROFILING_RELATION}. */ public static final Schema RESOURCE_PROFILING_SCHEMA = Schema.ofFields( "timestamp", Type.LONG_TYPE, "opId", Type.INT_TYPE, "measurement", Type.STRING_TYPE, "value", Type.LONG_TYPE, "queryId", Type.LONG_TYPE, "subqueryId", Type.LONG_TYPE); /** * For how long cached versions of the profiling data should be valid. */ public static final long PROFILING_CACHE_AGE = TimeUnit.HOURS.toMillis(1); /** * The maximum number of subqueries we will allow a query to execute before killing it. This is a safeguard against an * infinite loop. */ public static final int MAXIMUM_NUM_SUBQUERIES = 1000; /** * Default imports for janino. Modules imported here can be used in expressions. */ public static final String[] DEFAULT_JANINO_IMPORTS = { "com.google.common.hash.Hashing", "java.nio.charset.Charset" }; /** Private constructor to disallow building utility class. */ private MyriaConstants() {} /** available fault-tolerance mode for each query in Myria. */ public static enum FTMode { /** three FT modes are supported. */ NONE, ABANDON, REJOIN }; /** available profiling mode for each query in Myria. */ public static enum ProfilingMode { /** * RESOURCE: resource usage (CPU, IO, Memory) only. */ RESOURCE, /** * QUERY: query execution only. */ QUERY }; /** * python executable name. */ public static final String PYTHONEXEC = "python"; /** * Python worker module. */ public static final String PYTHONWORKER = "MyriaPythonWorker.worker"; /** * UDF language. */ public static enum FunctionLanguage { /** Postgres UDF. */ POSTGRES, /** Python UDF. */ PYTHON }; /** * Python UDF relation: relation for holding python functions on each worker. */ public static final RelationKey PYUDF_RELATION = new RelationKey("public", "function", "Python"); /** * Python SpecialLenghts: send/received to the python worker. */ public static enum PythonSpecialLengths { PYTHON_EXCEPTION(-3), /** python exception returned from python process.*/ NULL_LENGTH(-5), /** python function return is null.*/ EOS(-4); /** Send EOS to python worker.*/ private int val; PythonSpecialLengths(final int val) { this.val = val; } public int getVal() { return val; } } /** * Python type enum. */ public static enum PythonType { INT(1), LONG(2), FLOAT(3), DOUBLE(4), BLOB(5); private int val; PythonType(final int val) { this.val = val; } public int getVal() { return val; } } /** * Python UDF schema */ public static final Schema PYUDF_SCHEMA = Schema.ofFields( "function_name", Type.STRING_TYPE, "function_description", Type.STRING_TYPE, "function_output_type", Type.STRING_TYPE, "function_isMultiValued", Type.BOOLEAN_TYPE, "function_binary", Type.STRING_TYPE); /** Number of bytes per worker partition for parallel ingest - 100MB. */ public static final long PARALLEL_INGEST_WORKER_MINIMUM_PARTITION_SIZE = 100 * MB; /** Byte overlap range for parallel ingest. **/ public static final long PARALLEL_INGEST_BYTE_OVERLAP = 16 * KB; /** * Flatmapid column name */ public static final String FLATMAP_COLUMN_NAME = "flatmapid"; }