@Override public long getStudyId(long jobId) throws CatalogDBException { Query query = new Query(QueryParams.UID.key(), jobId); QueryOptions queryOptions = new QueryOptions(MongoDBCollection.INCLUDE, PRIVATE_STUDY_ID); QueryResult<Document> queryResult = nativeGet(query, queryOptions); if (queryResult.getNumResults() != 0) { Object id = queryResult.getResult().get(0).get(PRIVATE_STUDY_ID); return id instanceof Number ? ((Number) id).longValue() : Long.parseLong(id.toString()); } else { throw CatalogDBException.uidNotFound("Job", jobId); } }
void cleanPrivateJobInformation(Job job) { // Remove the session id from the job attributes job.getAttributes().remove(Job.OPENCGA_TMP_DIR); job.getAttributes().remove(Job.OPENCGA_OUTPUT_DIR); job.getAttributes().remove(Job.OPENCGA_STUDY); ObjectMap params = new ObjectMap(JobDBAdaptor.QueryParams.ATTRIBUTES.key(), job.getAttributes()); try { dbAdaptorFactory.getCatalogJobDBAdaptor().update(job.getUid(), params, QueryOptions.empty()); } catch (CatalogException e) { logger.error("Could not remove session id from attributes of job {}. ", job.getUid(), e); } }
void closeSessionId(Job job) { // Remove the session id from the job attributes job.getAttributes().remove("sessionId"); ObjectMap params = new ObjectMap(JobDBAdaptor.QueryParams.ATTRIBUTES.key(), job.getAttributes()); try { jobDBAdaptor.update(job.getUid(), params, QueryOptions.empty()); } catch (CatalogException e) { logger.error("Could not remove session id from attributes of job {}. ", job.getUid(), e); } } }
default boolean exists(long jobId) throws CatalogDBException { return count(new Query(QueryParams.UID.key(), jobId)).first() > 0; }
@Override public QueryResult groupBy(Query query, String field, QueryOptions options, String user) throws CatalogDBException, CatalogAuthorizationException { Document studyDocument = getStudyDocument(query); Document queryForAuthorisedEntries = getQueryForAuthorisedEntries(studyDocument, user, StudyAclEntry.StudyPermissions.VIEW_JOBS.name(), JobAclEntry.JobPermissions.VIEW.name(), Entity.JOB.name()); filterOutDeleted(query); Bson bsonQuery = parseQuery(query, false, queryForAuthorisedEntries); return groupBy(jobCollection, bsonQuery, field, QueryParams.NAME.key(), options); }
@Override public void delete(long id) throws CatalogDBException { Query query = new Query(QueryParams.UID.key(), id); delete(query); }
@Override public QueryResult<Job> getAllInStudy(long studyId, QueryOptions options) throws CatalogDBException { // Check the studyId first and throw an Exception is not found dbAdaptorFactory.getCatalogStudyDBAdaptor().checkId(studyId); // Retrieve and return Jobs Query query = new Query(QueryParams.STUDY_UID.key(), studyId); return get(query, options); }
default QueryResult<Job> get(long jobId, QueryOptions options) throws CatalogDBException { Query query = new Query(QueryParams.UID.key(), jobId); QueryResult<Job> jobQueryResult = get(query, options); if (jobQueryResult == null || jobQueryResult.getResult().size() == 0) { throw CatalogDBException.uidNotFound("Job", jobId); } return jobQueryResult; }
@Deprecated @Override public QueryResult<Job> run(Job job) throws Exception { // TODO: Lock job before submit. Avoid double submission // SgeManager.queueJob(job.getToolName(), job.getResourceManagerAttributes().get(Job.JOB_SCHEDULER_NAME).toString(), // -1, job.getTmpOutDirUri().getPath(), job.getCommandLine(), null, "job." + job.getId()); return catalogManager.getJobManager().update(job.getUid(), new ObjectMap(JobDBAdaptor.QueryParams.STATUS_NAME.key(), Job.JobStatus.QUEUED), null, sessionId); //TODO: Add query options }
@Override public QueryResult<Job> count(String studyStr, Query query, String sessionId) throws CatalogException { query = ParamUtils.defaultObject(query, Query::new); String userId = userManager.getUserId(sessionId); Study study = catalogManager.getStudyManager().resolveId(studyStr, userId); fixQueryObject(study, query, sessionId); query.append(JobDBAdaptor.QueryParams.STUDY_UID.key(), study.getUid()); QueryResult<Long> queryResultAux = jobDBAdaptor.count(query, userId, StudyAclEntry.StudyPermissions.VIEW_JOBS); return new QueryResult<>("count", queryResultAux.getDbTime(), 0, queryResultAux.first(), queryResultAux.getWarningMsg(), queryResultAux.getErrorMsg(), Collections.emptyList()); }
public QueryResult<Job> visit(String studyStr, String jobId, String sessionId) throws CatalogException { MyResource resource = getUid(jobId, studyStr, sessionId); authorizationManager.checkJobPermission(resource.getStudy().getUid(), resource.getResource().getUid(), resource.getUser(), JobAclEntry.JobPermissions.VIEW); ObjectMap params = new ObjectMap(JobDBAdaptor.QueryParams.VISITED.key(), true); return jobDBAdaptor.update(resource.getResource().getUid(), params, QueryOptions.empty()); }
void setNewStatus(long jobId, String status, String message) throws CatalogDBException { ObjectMap parameters = new ObjectMap(); parameters.putIfNotNull(JobDBAdaptor.QueryParams.STATUS_NAME.key(), status); parameters.putIfNotNull(JobDBAdaptor.QueryParams.STATUS_MSG.key(), message); dbAdaptorFactory.getCatalogJobDBAdaptor().update(jobId, parameters, QueryOptions.empty()); }
private Document getStudyDocument(Query query) throws CatalogDBException { // Get the study document Query studyQuery = new Query(StudyDBAdaptor.QueryParams.UID.key(), query.getLong(QueryParams.STUDY_UID.key())); QueryResult<Document> queryResult = dbAdaptorFactory.getCatalogStudyDBAdaptor().nativeGet(studyQuery, QueryOptions.empty()); if (queryResult.getNumResults() == 0) { throw new CatalogDBException("Study " + query.getLong(QueryParams.STUDY_UID.key()) + " not found"); } return queryResult.first(); }
@Override public QueryResult<Long> restore(Query query, QueryOptions queryOptions) throws CatalogDBException { long startTime = startQuery(); query.put(QueryParams.STATUS_NAME.key(), Status.DELETED); return endQuery("Restore jobs", startTime, setStatus(query, Status.READY)); }
private long getRunningOrQueuedJobs() throws CatalogException { Query runningJobsQuery = new Query() .append(JobDBAdaptor.QueryParams.STATUS_NAME.key(), Arrays.asList(Job.JobStatus.RUNNING, Job.JobStatus.QUEUED)) .append(JobDBAdaptor.QueryParams.TYPE.key(), Job.Type.INDEX); return jobDBAdaptor.get(runningJobsQuery, QueryOptions.empty()).getNumTotalResults(); }
@Override public DBIterator<Job> iterator(String studyStr, Query query, QueryOptions options, String sessionId) throws CatalogException { query = ParamUtils.defaultObject(query, Query::new); options = ParamUtils.defaultObject(options, QueryOptions::new); String userId = userManager.getUserId(sessionId); Study study = catalogManager.getStudyManager().resolveId(studyStr, userId); query.put(JobDBAdaptor.QueryParams.STUDY_UID.key(), study.getUid()); fixQueryObject(study, query, sessionId); return jobDBAdaptor.iterator(query, options, userId); }
/** * At the moment it does not clean external references to itself. */ @Override public QueryResult<Job> get(long jobId, QueryOptions options) throws CatalogDBException { checkId(jobId); Query query = new Query(QueryParams.UID.key(), jobId).append(QueryParams.STATUS_NAME.key(), "!=" + Status.DELETED) .append(QueryParams.STUDY_UID.key(), getStudyId(jobId)); return get(query, options); }
@Test public void SetVisitedJob() throws CatalogException { long studyId = user3.getProjects().get(0).getStudies().get(0).getUid(); Job jobBefore = catalogJobDBAdaptor.insert(new Job("name", user3.getId(), "", "", "", new File().setUid(4), Collections.emptyList(), 1), studyId, null).first(); long jobId = jobBefore.getUid(); assertTrue(!jobBefore.isVisited()); ObjectMap params = new ObjectMap(JobDBAdaptor.QueryParams.VISITED.key(), true); catalogJobDBAdaptor.update(jobBefore.getUid(), params, QueryOptions.empty()); Job jobAfter = catalogJobDBAdaptor.get(jobId, null).first(); assertTrue(jobAfter.isVisited()); }
@Override public QueryResult groupBy(Query query, List<String> fields, QueryOptions options, String user) throws CatalogDBException, CatalogAuthorizationException { Document studyDocument = getStudyDocument(query); Document queryForAuthorisedEntries = getQueryForAuthorisedEntries(studyDocument, user, StudyAclEntry.StudyPermissions.VIEW_JOBS.name(), JobAclEntry.JobPermissions.VIEW.name(), Entity.JOB.name()); filterOutDeleted(query); Bson bsonQuery = parseQuery(query, false, queryForAuthorisedEntries); return groupBy(jobCollection, bsonQuery, fields, QueryParams.NAME.key(), options); }