diff --git a/catalog-rest-service/src/main/java/org/openmetadata/catalog/events/ChangeEventHandler.java b/catalog-rest-service/src/main/java/org/openmetadata/catalog/events/ChangeEventHandler.java index 9076b776d18..cede9f8b1c1 100644 --- a/catalog-rest-service/src/main/java/org/openmetadata/catalog/events/ChangeEventHandler.java +++ b/catalog-rest-service/src/main/java/org/openmetadata/catalog/events/ChangeEventHandler.java @@ -84,28 +84,36 @@ public class ChangeEventHandler implements EventHandler { // Add a new thread to the entity for every change event // for the event to appear in activity feeds if (Entity.shouldDisplayEntityChangeOnFeed(changeEvent.getEntityType())) { - for (var thread : listOrEmpty(getThreads(responseContext, loggedInUserName))) { - // Don't create a thread if there is no message - if (!thread.getMessage().isEmpty()) { - EntityInterface entity; - // In case of ENTITY_FIELDS_CHANGED entity from responseContext will be a ChangeEvent - if (responseContext.getEntity() instanceof ChangeEvent) { - ChangeEvent change = (ChangeEvent) responseContext.getEntity(); - entity = (EntityInterface) change.getEntity(); - } else { - entity = (EntityInterface) responseContext.getEntity(); + // ignore usageSummary updates in the feed + boolean shouldIgnore = false; + if (Entity.TABLE.equals(changeEvent.getEntityType()) && changeEvent.getChangeDescription() != null) { + List fields = changeEvent.getChangeDescription().getFieldsUpdated(); + shouldIgnore = fields.stream().anyMatch(field -> field.getName().equals("usageSummary")); + } + if (!shouldIgnore) { + for (var thread : listOrEmpty(getThreads(responseContext, loggedInUserName))) { + // Don't create a thread if there is no message + if (!thread.getMessage().isEmpty()) { + EntityInterface entity; + // In case of ENTITY_FIELDS_CHANGED entity from responseContext will be a ChangeEvent + if (responseContext.getEntity() instanceof ChangeEvent) { + ChangeEvent change = (ChangeEvent) responseContext.getEntity(); + entity = (EntityInterface) change.getEntity(); + } else { + entity = (EntityInterface) responseContext.getEntity(); + } + EntityReference entityReference = entity.getEntityReference(); + EntityReference owner; + try { + owner = Entity.getOwner(entityReference); + } catch (Exception exception) { + owner = null; + } + EntityLink about = EntityLink.parse(thread.getAbout()); + feedDao.create(thread, entity.getId(), owner, about); + String jsonThread = mapper.writeValueAsString(thread); + WebSocketManager.getInstance().broadCastMessageToAll(WebSocketManager.feedBroadcastChannel, jsonThread); } - EntityReference entityReference = entity.getEntityReference(); - EntityReference owner; - try { - owner = Entity.getOwner(entityReference); - } catch (Exception exception) { - owner = null; - } - EntityLink about = EntityLink.parse(thread.getAbout()); - feedDao.create(thread, entity.getId(), owner, about); - String jsonThread = mapper.writeValueAsString(thread); - WebSocketManager.getInstance().broadCastMessageToAll(WebSocketManager.feedBroadcastChannel, jsonThread); } } }