@Override public void execute(ComputationStep.Context context) { try (CloseableIterator<String> logsIterator = reportReader.readScannerLogs()) { if (logsIterator.hasNext()) { try (DbSession dbSession = dbClient.openSession(false)) { // in case the task was restarted, the context might have been already persisted // for total reliability, we rather delete the existing row as we don't want to assume the content // consistent with the report dbClient.ceScannerContextDao().deleteByUuids(dbSession, singleton(ceTask.getUuid())); dbSession.commit(); dbClient.ceScannerContextDao().insert(dbSession, ceTask.getUuid(), logsIterator); dbSession.commit(); } } } } }
@Test public void selectScannerContext_returns_empty_when_no_row_exist_for_taskUuid() { String data = "some data"; underTest.insert(dbSession, SOME_UUID, scannerContextInputStreamOf(data)); dbSession.commit(); assertThat(underTest.selectScannerContext(dbSession, "OTHER_uuid")).isEmpty(); assertThat(underTest.selectScannerContext(dbSession, SOME_UUID)).contains(data); }
public void deleteByUuids(DbSession dbSession, Collection<String> uuids) { DatabaseUtils.executeLargeUpdates(uuids, mapper(dbSession)::deleteByUuids); }
@Override public void start() { try (DbSession dbSession = dbClient.openSession(false)) { Date sixMonthsAgo = DateUtils.addDays(new Date(system2.now()), -180); LOGGER.info("Delete the Compute Engine tasks created before {}", sixMonthsAgo.getTime()); Set<String> ceActivityUuids = dbClient.ceActivityDao().selectOlderThan(dbSession, sixMonthsAgo.getTime()) .stream() .map(CeActivityDto::getUuid) .collect(toSet()); dbClient.ceActivityDao().deleteByUuids(dbSession, ceActivityUuids); dbClient.ceTaskCharacteristicsDao().deleteByTaskUuids(dbSession, ceActivityUuids); dbClient.ceTaskInputDao().deleteByUuids(dbSession, ceActivityUuids); Date fourWeeksAgo = DateUtils.addDays(new Date(system2.now()), -28); LOGGER.info("Delete the Scanner contexts tasks created before {}", fourWeeksAgo.getTime()); Set<String> scannerContextUuids = dbClient.ceScannerContextDao().selectOlderThan(dbSession, fourWeeksAgo.getTime()); dbClient.ceScannerContextDao().deleteByUuids( dbSession, concat(ceActivityUuids.stream(), scannerContextUuids.stream()).collect(toSet())); dbSession.commit(); } }
@Test public void deleteByUuids_deletes_specified_existing_uuids() { insertScannerContext(SOME_UUID); String data2 = insertScannerContext("UUID_2"); insertScannerContext("UUID_3"); underTest.deleteByUuids(dbSession, ImmutableSet.of(SOME_UUID, "UUID_3", "UUID_4")); assertThat(underTest.selectScannerContext(dbSession, SOME_UUID)).isEmpty(); assertThat(underTest.selectScannerContext(dbSession, "UUID_2")).contains(data2); assertThat(underTest.selectScannerContext(dbSession, "UUID_3")).isEmpty(); }
private String insertScannerContext(String uuid) { String data = "data of " + uuid; underTest.insert(dbSession, uuid, scannerContextInputStreamOf(data)); dbSession.commit(); return data; }
@CheckForNull private String extractScannerContext(DbSession dbSession, CeActivityDto activityDto, Set<AdditionalField> additionalFields) { if (additionalFields.contains(AdditionalField.SCANNER_CONTEXT)) { return dbClient.ceScannerContextDao().selectScannerContext(dbSession, activityDto.getUuid()) .orElse(null); } return null; }
@Test public void deleteByUuids_does_not_fail_on_empty_table() { underTest.deleteByUuids(dbSession, singleton("some uuid")); }
private void insertCeScannerContext(String uuid) { dbClient.ceScannerContextDao().insert(dbSession, uuid, CloseableIterator.from(Arrays.asList("a", "b", "c").iterator())); dbSession.commit(); }
@Test public void selectScannerContext_returns_empty_on_empty_table() { assertThat(underTest.selectScannerContext(dbSession, SOME_UUID)).isEmpty(); }
@Override public void start() { try (DbSession dbSession = dbClient.openSession(false)) { Calendar sixMonthsAgo = Calendar.getInstance(); sixMonthsAgo.setTimeInMillis(system2.now()); sixMonthsAgo.add(Calendar.DATE, -180); LOGGER.info("Delete the Compute Engine tasks created before {}", sixMonthsAgo.getTime()); Set<String> ceActivityUuids = dbClient.ceActivityDao().selectOlderThan(dbSession, sixMonthsAgo.getTimeInMillis()) .stream() .map(CeActivityDto::getUuid) .collect(MoreCollectors.toSet()); dbClient.ceActivityDao().deleteByUuids(dbSession, ceActivityUuids); dbClient.ceScannerContextDao().deleteByUuids(dbSession, ceActivityUuids); dbSession.commit(); } }
@Test public void insert_and_select_line_reader() { String scannerContext = "line 1" + lineSeparator() + "line 2" + lineSeparator() + "line 3"; underTest.insert(dbSession, SOME_UUID, scannerContextInputStreamOf(scannerContext)); dbSession.commit(); assertThat(underTest.selectScannerContext(dbSession, SOME_UUID)).contains(scannerContext); }
@Override public void execute() { try (CloseableIterator<String> logsIterator = reportReader.readScannerLogs()) { if (logsIterator.hasNext()) { try (DbSession dbSession = dbClient.openSession(false)) { // in case the task was restarted, the context might have been already persisted // for total reliability, we rather delete the existing row as we don't want to assume the content // consistent with the report dbClient.ceScannerContextDao().deleteByUuids(dbSession, singleton(ceTask.getUuid())); dbSession.commit(); dbClient.ceScannerContextDao().insert(dbSession, ceTask.getUuid(), logsIterator); dbSession.commit(); } } } } }
@Test public void insert_fails_if_row_already_exists_for_taskUuid() { underTest.insert(dbSession, SOME_UUID, scannerContextInputStreamOf("bla")); dbSession.commit(); assertThat(dbTester.countRowsOfTable(dbSession, TABLE_NAME)).isEqualTo(1); expectedException.expect(IllegalStateException.class); expectedException.expectMessage("Fail to insert scanner context for task " + SOME_UUID); underTest.insert(dbSession, SOME_UUID, scannerContextInputStreamOf("blo")); }
@Test public void executes_persist_lines_of_reportReader() { String taskUuid = "task uuid"; when(ceTask.getUuid()).thenReturn(taskUuid); reportReader.setScannerLogs(asList("log1", "log2")); underTest.execute(new TestComputationStepContext()); assertThat(dbClient.ceScannerContextDao().selectScannerContext(dbTester.getSession(), taskUuid)) .contains("log1" + '\n' + "log2"); }
public Set<String> selectOlderThan(DbSession dbSession, long beforeDate) { return mapper(dbSession).selectOlderThan(beforeDate); }
/** * SONAR-8306 */ @Test public void execute_does_not_fail_if_scanner_context_has_already_been_persisted() { dbClient.ceScannerContextDao().insert(dbTester.getSession(), ANALYSIS_UUID, CloseableIterator.from(Arrays.asList("a", "b", "c").iterator())); dbTester.commit(); reportReader.setScannerLogs(asList("1", "2", "3")); when(ceTask.getUuid()).thenReturn(ANALYSIS_UUID); underTest.execute(new TestComputationStepContext()); assertThat(dbClient.ceScannerContextDao().selectScannerContext(dbTester.getSession(), ANALYSIS_UUID)) .contains("1" + '\n' + "2" + '\n' + "3"); } }
private void insertScannerContext(String taskUuid) { db.getDbClient().ceScannerContextDao().insert(dbSession, taskUuid, CloseableIterator.from(singletonList("scanner context of " + taskUuid).iterator())); dbSession.commit(); }
@Test public void executes_persist_does_not_persist_any_scanner_context_if_iterator_is_empty() { reportReader.setScannerLogs(emptyList()); underTest.execute(new TestComputationStepContext()); assertThat(dbClient.ceScannerContextDao().selectScannerContext(dbTester.getSession(), ANALYSIS_UUID)) .isEmpty(); }
public void deleteByUuids(DbSession dbSession, Collection<String> uuids) { DatabaseUtils.executeLargeUpdates(uuids, mapper(dbSession)::deleteByUuids); }