/** * Copyright (C) 2014-2016 LinkedIn Corp. (pinot-core@linkedin.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 com.linkedin.pinot.queries; import java.io.File; import java.io.IOException; import java.util.Iterator; import org.apache.commons.configuration.PropertiesConfiguration; import org.apache.commons.io.FileUtils; import org.apache.commons.lang.StringUtils; import com.linkedin.pinot.common.utils.StringUtil; /** * Oct 14, 2014 */ public class TestingServerPropertiesBuilder { private static final String PINOT_SERVER_PREFIX = "pinot.server"; private static final String INSTANCE_PREFIC = "instance"; private static final String EXECUTOR_PREFIX = "query.executor"; private final String[] tableNames; public TestingServerPropertiesBuilder(String... tableNames) { this.tableNames = tableNames; } public PropertiesConfiguration build() throws IOException { final File file = new File("/tmp/" + TestingServerPropertiesBuilder.class.toString()); if (file.exists()) { FileUtils.deleteDirectory(file); } file.mkdir(); final File bootsDir = new File(file, "bootstrap"); final File dataDir = new File(file, "data"); bootsDir.mkdir(); dataDir.mkdir(); final PropertiesConfiguration config = new PropertiesConfiguration(); config.addProperty(StringUtil.join(".", PINOT_SERVER_PREFIX, INSTANCE_PREFIC, "id"), "0"); config.addProperty(StringUtil.join(".", PINOT_SERVER_PREFIX, INSTANCE_PREFIC, "bootstrap.segment.dir"), bootsDir.getAbsolutePath()); config.addProperty(StringUtil.join(".", PINOT_SERVER_PREFIX, INSTANCE_PREFIC, "dataDir"), dataDir.getAbsolutePath()); config.addProperty(StringUtil.join(".", PINOT_SERVER_PREFIX, INSTANCE_PREFIC, "bootstrap.segment.dir"), "0"); config.addProperty(StringUtil.join(".", PINOT_SERVER_PREFIX, INSTANCE_PREFIC, "data.manager.class"), "com.linkedin.pinot.core.data.manager.InstanceDataManager"); config.addProperty(StringUtil.join(".", PINOT_SERVER_PREFIX, INSTANCE_PREFIC, "segment.metadata.loader.class"), "com.linkedin.pinot.core.indexsegment.columnar.ColumnarSegmentMetadataLoader"); config.addProperty(StringUtil.join(".", PINOT_SERVER_PREFIX, INSTANCE_PREFIC, "tableName"), StringUtils.join(tableNames, ",")); for (final String table : tableNames) { config.addProperty(StringUtil.join(".", PINOT_SERVER_PREFIX, INSTANCE_PREFIC, table, "dataManagerType"), "offline"); config.addProperty(StringUtil.join(".", PINOT_SERVER_PREFIX, INSTANCE_PREFIC, table, "readMode"), "heap"); config.addProperty(StringUtil.join(".", PINOT_SERVER_PREFIX, INSTANCE_PREFIC, table, "numQueryExecutorThreads"), "50"); } config.addProperty(StringUtil.join(".", PINOT_SERVER_PREFIX, EXECUTOR_PREFIX, "class"), "com.linkedin.pinot.core.query.executor.ServerQueryExecutor"); config.addProperty(StringUtil.join(".", PINOT_SERVER_PREFIX, EXECUTOR_PREFIX, "timeout"), "150000"); config.addProperty(StringUtil.join(".", PINOT_SERVER_PREFIX, "requestHandlerFactory.class"), "com.linkedin.pinot.server.request.SimpleRequestHandlerFactory"); config.addProperty(StringUtil.join(".", PINOT_SERVER_PREFIX, "netty.port"), "8882"); config.setDelimiterParsingDisabled(true); final Iterator<String> keys = config.getKeys(); while (keys.hasNext()) { final String key = keys.next(); System.out.println(key + " : " + config.getProperty(key)); } return config; } public static void main(String[] args) throws IOException { final TestingServerPropertiesBuilder bld = new TestingServerPropertiesBuilder("testTable"); bld.build(); } }