public boolean updateMaterial(Material material) { Date inProgressSince = inProgress.putIfAbsent(material, new Date()); if (inProgressSince == null || !material.isAutoUpdate()) { LOGGER.debug("[Material Update] Starting update of material {}", material); try { long trackingId = mduPerformanceLogger.materialSentToUpdateQueue(material); queueFor(material).post(new MaterialUpdateMessage(material, trackingId)); return true; } catch (RuntimeException e) { inProgress.remove(material); throw e; } } else { LOGGER.warn("[Material Update] Skipping update of material {} which has been in-progress since {}", material, inProgressSince); long idleTime = getProcessManager().getIdleTimeFor(material.getFingerprint()); if (idleTime > getMaterialUpdateInActiveTimeoutInMillis()) { HealthStateScope scope = HealthStateScope.forMaterialUpdate(material); serverHealthService.removeByScope(scope); serverHealthService.update(warning("Material update for " + material.getUriForDisplay() + " hung:", "Material update is currently running but has not shown any activity in the last " + idleTime / 60000 + " minute(s). This may be hung. Details - " + material.getLongDescription(), general(scope))); } return false; } }
@Theory public void shouldBeSameObject_WhenConversionIsDoneFromMaterialConfigToMaterialAndBack(MaterialConfig materialConfig) throws Exception { Material materialFromConfig = materialConfigConverter.toMaterial(materialConfig); MaterialConfig materialConfigConvertedBackFromMaterial = materialFromConfig.config(); assertThat(materialConfigConvertedBackFromMaterial, is(materialConfig)); assertTrue(message("Material <-> MaterialConfig conversion failed.", materialConfigConvertedBackFromMaterial, materialConfig), reflectionEquals(materialConfigConvertedBackFromMaterial, materialConfig)); assertThat(materialFromConfig.getFingerprint(), is(materialConfig.getFingerprint())); assertThat(materialFromConfig.isAutoUpdate(), is(materialConfig.isAutoUpdate())); assertThat(materialConfigConvertedBackFromMaterial.getFingerprint(), is(materialConfig.getFingerprint())); assertPasswordIsCorrect(materialConfig); assertPasswordIsCorrect(materialFromConfig); assertPasswordIsCorrect(materialConfigConvertedBackFromMaterial); }