/** * 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.drill.exec.store.sys; import java.lang.reflect.Constructor; import java.lang.reflect.InvocationTargetException; import com.google.common.base.Preconditions; import com.typesafe.config.ConfigException; import org.apache.drill.common.config.DrillConfig; import org.apache.drill.common.exceptions.ExecutionSetupException; import org.apache.drill.exec.ExecConstants; import org.apache.drill.exec.coord.ClusterCoordinator; import org.apache.drill.exec.store.sys.store.provider.CachingPersistentStoreProvider; public class PersistentStoreRegistry<C extends ClusterCoordinator> { static final org.slf4j.Logger logger = org.slf4j.LoggerFactory.getLogger(PersistentStoreRegistry.class); private final DrillConfig config; private final C coordinator; public PersistentStoreRegistry(C coordinator, DrillConfig config) { this.coordinator = Preconditions.checkNotNull(coordinator, "coordinator cannot be null"); this.config = Preconditions.checkNotNull(config, "config cannot be null"); } public C getCoordinator() { return this.coordinator; } public DrillConfig getConfig() { return this.config; } @SuppressWarnings("unchecked") public PersistentStoreProvider newPStoreProvider() throws ExecutionSetupException { try { String storeProviderClassName = config.getString(ExecConstants.SYS_STORE_PROVIDER_CLASS); logger.info("Using the configured PStoreProvider class: '{}'.", storeProviderClassName); Class<? extends PersistentStoreProvider> storeProviderClass = (Class<? extends PersistentStoreProvider>) Class.forName(storeProviderClassName); Constructor<? extends PersistentStoreProvider> c = storeProviderClass.getConstructor(PersistentStoreRegistry.class); return new CachingPersistentStoreProvider(c.newInstance(this)); } catch (ConfigException.Missing | ClassNotFoundException | NoSuchMethodException | SecurityException | InstantiationException | IllegalAccessException | IllegalArgumentException | InvocationTargetException e) { logger.error(e.getMessage(), e); throw new ExecutionSetupException("A System Table provider was either not specified or could not be found or instantiated", e); } } }