private void updateEntitiesWithSameUri(final String metadataType, final TableDto dto, final String userName) { if (dto.isDataExternal()) { final List<String> ids = es.getTableIdsByUri(metadataType, dto.getDataUri()) .stream().filter(s -> !s.equals(dto.getName().toString())).collect(Collectors.toList()); if (!ids.isEmpty()) { log.info("ElasticSearch table updates({}) with same uri {} (Table:{})", ids.size(), dto.getDataUri(), dto.getName()); final ObjectNode node = metacatJsonLocator.emptyObjectNode(); node.set(ElasticSearchDoc.Field.DATA_METADATA, dto.getDataMetadata()); node.put(ElasticSearchDoc.Field.USER, userName); node.put(ElasticSearchDoc.Field.TIMESTAMP, java.time.Instant.now().toEpochMilli()); es.updates(ElasticSearchDoc.Type.table.name(), ids, node); } } }
/** * Subscriber. * * @param event event */ @EventListener public void metacatUpdateTablePostEventHandler(final MetacatUpdateTablePostEvent event) { log.debug("Received UpdateTableEvent {}", event); this.tableUpdateEventsDelayTimer .record(System.currentTimeMillis() - event.getRequestContext().getTimestamp(), TimeUnit.MILLISECONDS); this.tableUpdateTimer.record(() -> { final TableDto dto = event.getCurrentTable(); final ElasticSearchDoc doc = new ElasticSearchDoc(dto.getName().toString(), dto, event.getRequestContext().getUserName(), false); final ElasticSearchDoc oldDoc = es.get(ElasticSearchDoc.Type.table.name(), doc.getId()); es.save(ElasticSearchDoc.Type.table.name(), doc.getId(), doc); if (config.isElasticSearchUpdateTablesWithSameUriEnabled() && (oldDoc == null || oldDoc.getDto() == null || !Objects.equals(((TableDto) oldDoc.getDto()).getDataMetadata(), dto.getDataMetadata()))) { updateEntitiesWithSameUri(ElasticSearchDoc.Type.table.name(), dto, event.getRequestContext().getUserName()); } }); }
connectorTableServiceProxy.create(name, converterUtil.fromTableDto(tableDto)); if (tableDto.getDataMetadata() != null || tableDto.getDefinitionMetadata() != null) { log.info("Saving user metadata for table {}", name); final long start = registry.clock().wallTime();
if (tableDto.getDataMetadata() != null || tableDto.getDefinitionMetadata() != null) { log.info("Saving user metadata for table {}", name); final long start = registry.clock().wallTime();