/*
* Copyright 2015-2016 OpenCB
*
* 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 org.opencb.opencga.storage.mongodb.variant;
import org.apache.log4j.ConsoleAppender;
import org.apache.log4j.Level;
import org.apache.log4j.LogManager;
import org.opencb.biodata.models.variant.VariantSource;
import org.opencb.biodata.models.variant.avro.VariantType;
import org.opencb.commons.datastore.mongodb.MongoDataStoreManager;
import org.opencb.opencga.storage.core.config.StorageConfiguration;
import org.opencb.opencga.storage.core.variant.VariantStorageTest;
import org.opencb.opencga.storage.mongodb.auth.MongoCredentials;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.concurrent.atomic.AtomicReference;
/**
* Created by hpccoll1 on 01/06/15.
*/
public interface MongoDBVariantStorageTest extends VariantStorageTest {
Logger logger = LoggerFactory.getLogger(MongoDBVariantStorageTest.class);
AtomicReference<MongoDBVariantStorageEngine> manager = new AtomicReference<>(null);
List<MongoDBVariantStorageEngine> managers = Collections.synchronizedList(new ArrayList<>());
default MongoDBVariantStorageEngine getVariantStorageEngine() throws Exception {
synchronized (manager) {
MongoDBVariantStorageEngine storageManager = manager.get();
if (storageManager == null) {
storageManager = new MongoDBVariantStorageEngine();
manager.set(storageManager);
}
InputStream is = MongoDBVariantStorageTest.class.getClassLoader().getResourceAsStream("storage-configuration.yml");
StorageConfiguration storageConfiguration = StorageConfiguration.load(is);
storageManager.setConfiguration(storageConfiguration, MongoDBVariantStorageEngine.STORAGE_ENGINE_ID);
return storageManager;
}
}
default MongoDBVariantStorageEngine newVariantStorageManager() throws Exception {
synchronized (managers) {
MongoDBVariantStorageEngine storageManager = new MongoDBVariantStorageEngine();
InputStream is = MongoDBVariantStorageTest.class.getClassLoader().getResourceAsStream("storage-configuration.yml");
StorageConfiguration storageConfiguration = StorageConfiguration.load(is);
storageManager.setConfiguration(storageConfiguration, MongoDBVariantStorageEngine.STORAGE_ENGINE_ID);
managers.add(storageManager);
return storageManager;
}
}
default void closeConnections() {
System.out.println("Closing MongoDBVariantStorageEngine");
for (MongoDBVariantStorageEngine manager : managers) {
System.out.println("closing manager = " + manager);
manager.close();
}
managers.clear();
if (manager.get() != null) {
manager.get().close();
}
}
default void clearDB(String dbName) throws Exception {
MongoCredentials credentials = getVariantStorageEngine().getMongoCredentials(dbName);
logger.info("Cleaning MongoDB {}", credentials.getMongoDbName());
try (MongoDataStoreManager mongoManager = new MongoDataStoreManager(credentials.getDataStoreServerAddresses())) {
mongoManager.get(credentials.getMongoDbName(), credentials.getMongoDBConfiguration());
mongoManager.drop(credentials.getMongoDbName());
}
}
default int getExpectedNumLoadedVariants(VariantSource source) {
int numRecords = source.getStats().getNumRecords();
return numRecords
- source.getStats().getVariantTypeCount(VariantType.SYMBOLIC)
- source.getStats().getVariantTypeCount(VariantType.NO_VARIATION);
}
default MongoDataStoreManager getMongoDataStoreManager(String dbName) throws Exception {
MongoCredentials credentials = getVariantStorageEngine().getMongoCredentials(dbName);
return new MongoDataStoreManager(credentials.getDataStoreServerAddresses());
}
default void logLevel(String level) {
ConsoleAppender stderr = (ConsoleAppender) LogManager.getRootLogger().getAppender("stderr");
stderr.setThreshold(Level.toLevel(level));
org.apache.log4j.Logger.getLogger("org.mongodb.driver.cluster").setLevel(Level.WARN);
org.apache.log4j.Logger.getLogger("org.mongodb.driver.connection").setLevel(Level.WARN);
org.apache.log4j.Logger.getLogger("org.mongodb.driver.protocol.update").setLevel(Level.WARN);
org.apache.log4j.Logger.getLogger("org.mongodb.driver.protocol.command").setLevel(Level.WARN);
org.apache.log4j.Logger.getLogger("org.mongodb.driver.protocol.query").setLevel(Level.WARN);
org.apache.log4j.Logger.getLogger("org.mongodb.driver.protocol.getmore").setLevel(Level.WARN);
}
}