Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

TASK-5425 - PortPatch 1.10.1 -> 2.0.0 #680

Merged
merged 14 commits into from
Dec 22, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -167,7 +167,7 @@ private boolean updateRocksDB(Variant variant) throws RocksDBException, IOExcept

if (normalisedVariantStringList != null) {
for (String normalisedVariantString : normalisedVariantStringList) {
VariantAnnotation variantAnnotation = getVariantAnnotation(variant.toString().getBytes());
VariantAnnotation variantAnnotation = getVariantAnnotation(normalisedVariantString.getBytes());

// Add haplotype property to all EvidenceEntry objects in variant if there are more than 1 variants in
// normalisedVariantStringList, i.e. if this variant is part of an MNV (haplotype)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,17 +16,19 @@

package org.opencb.cellbase.lib.impl.core;

import com.mongodb.ReadPreference;
import com.mongodb.WriteConcern;
import com.mongodb.client.model.Filters;
import com.mongodb.client.model.Updates;
import org.bson.BsonDocument;
import org.bson.Document;
import org.bson.conversions.Bson;
import org.codehaus.jackson.map.ObjectMapper;
import org.opencb.cellbase.core.api.key.ApiKeyStats;
import org.opencb.cellbase.core.api.query.AbstractQuery;
import org.opencb.cellbase.core.api.query.ProjectionQueryOptions;
import org.opencb.cellbase.core.exception.CellBaseException;
import org.opencb.cellbase.core.result.CellBaseDataResult;
import org.opencb.cellbase.core.api.key.ApiKeyStats;
import org.opencb.cellbase.lib.iterator.CellBaseIterator;
import org.opencb.commons.datastore.core.FacetField;
import org.opencb.commons.datastore.core.QueryOptions;
Expand Down Expand Up @@ -55,7 +57,7 @@ public MetaMongoDBAdaptor(MongoDataStore mongoDataStore) {
private void init() {
logger.debug("MetaMongoDBAdaptor: in 'constructor'");
mongoDBCollection = mongoDataStore.getCollection("metadata");
apiKeyStatsMongoDBCollection = mongoDataStore.getCollection("apikey_stats");
apiKeyStatsMongoDBCollection = mongoDataStore.getCollection("apikey_stats", WriteConcern.ACKNOWLEDGED, ReadPreference.primary());
}

public CellBaseDataResult getAll() {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -431,6 +431,7 @@ private List<GeneMirnaTarget> getTargets(Gene mirna) throws QueryException, Ille
}
}
GeneQuery geneQuery = new GeneQuery();
geneQuery.setDataRelease(dataRelease);
geneQuery.setAnnotationTargets(new LogicalList<>(mirnas, false));
List<GeneMirnaTarget> geneMirnaTargets = new ArrayList<>();
List<Gene> genes = (geneManager.search(geneQuery)).getResults();
Expand Down Expand Up @@ -679,9 +680,9 @@ public List<Gene> getBatchGeneList(List<Variant> variantList)

List<Gene> geneList = new ArrayList<>();
GeneQuery geneQuery = new GeneQuery();
geneQuery.setDataRelease(dataRelease);
geneQuery.setIncludes(includeGeneFields);
geneQuery.setRegions(regionList);
geneQuery.setDataRelease(dataRelease);

if (StringUtils.isNotEmpty(consequenceTypeSource)) {
// sources can be "ensembl" and/or "refseq". query is validated before execution, will fail if invalid value
Expand Down Expand Up @@ -1354,6 +1355,7 @@ private boolean[] getRegulatoryRegionOverlaps(String chromosome, Integer start,
boolean[] overlapsRegulatoryRegion = {false, false};

RegulationQuery query = new RegulationQuery();
query.setDataRelease(dataRelease);
query.setExcludes(Collections.singletonList("_id"));
query.setIncludes(Collections.singletonList("chromosome"));
query.setLimit(1);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -116,16 +116,18 @@ public GenericRestWSServer(@PathParam("version") String version, @PathParam("spe
this.species = species;

try {
init();
if (!INITIALIZED.get()) {
init();
}
initQuery();
} catch (Exception e) {
throw new CellBaseServerException(e.getMessage());
}
}

private void init() throws IOException, CellBaseException {
private synchronized void init() throws IOException, CellBaseException {
// we need to make sure we only init one single time
if (INITIALIZED.compareAndSet(false, true)) {
if (!INITIALIZED.get()) {
SERVICE_START_DATE = new SimpleDateFormat("yyyyMMdd_HHmmss").format(Calendar.getInstance().getTime());
WATCH = new StopWatch();
WATCH.start();
Expand Down Expand Up @@ -159,19 +161,21 @@ private void init() throws IOException, CellBaseException {
cellBaseManagerFactory = new CellBaseManagerFactory(cellBaseConfiguration);
logger.info("***************************************************");

// Get default API key (for anonymous queries)
if (apiKeyManager == null) {
apiKeyManager = new ApiKeyManager(cellBaseConfiguration.getSecretKey());
defaultApiKey = apiKeyManager.getDefaultApiKey();
logger.info("default API key {}", defaultApiKey);
}

// Initialize Monitor
monitor = new Monitor(cellBaseManagerFactory.getMetaManager());

INITIALIZED.set(true);
}
}

private void initQuery() throws CellBaseException {
// Get default API key (for anonymous queries)
if (apiKeyManager == null) {
apiKeyManager = new ApiKeyManager(cellBaseConfiguration.getSecretKey());
defaultApiKey = apiKeyManager.getDefaultApiKey();
logger.info("default API key {}", defaultApiKey);
}

startTime = System.currentTimeMillis();
query = new Query();
uriParams = convertMultiToMap(uriInfo.getQueryParameters());
Expand All @@ -184,12 +188,10 @@ private void initQuery() throws CellBaseException {

// Set default API key, if necessary
String apiKey = uriParams.getOrDefault(API_KEY_PARAM, null);
logger.info("Before checking, API key {}", apiKey);
if (StringUtils.isEmpty(apiKey)) {
apiKey = defaultApiKey;
uriParams.put(API_KEY_PARAM, apiKey);
}
logger.info("After checking, API key {}", uriParams.get(API_KEY_PARAM));

checkLimit();

Expand Down Expand Up @@ -228,11 +230,6 @@ protected int getDataRelease() throws CellBaseException {
throw new CellBaseException("Invalid data release number '" + uriParams.get(DATA_RELEASE_PARAM) + "'");
}
}
// If no data release is present in the query, then use the default data release
if (!DONT_CHECK_SPECIES.equals(species)) {
logger.info("No data release present in query: using the default data release '" + defaultDataRelease + "' for CellBase version"
+ " '" + version + "'");
}
return defaultDataRelease;
}

Expand Down Expand Up @@ -273,7 +270,8 @@ private void checkVersion() throws CellBaseException {
}

private void checkApiKey() throws CellBaseException {
if (!uriInfo.getPath().contains("health")) {
// Update the API key content only for non-meta endpoints
if (!uriInfo.getPath().contains("/meta/")) {
String apiKey = getApiKey();
ApiKeyJwtPayload payload = apiKeyManager.decode(apiKey);

Expand Down Expand Up @@ -414,7 +412,7 @@ protected Response createOkResponse(Object obj) {

// Update API key stats, if necessary
try {
if (!uriInfo.getPath().contains("health")) {
if (!uriInfo.getPath().contains("/meta/")) {
String apiKey = getApiKey();
MetaManager metaManager = cellBaseManagerFactory.getMetaManager();
long bytes = (jsonResponse.getEntity() != null) ? jsonResponse.getEntity().toString().length() : 0;
Expand Down
Loading