Skip to content

Commit 5c65890

Browse files
ATLAS-5056: Entity audit should not be created for instances of internal entity-types
1 parent 30244d7 commit 5c65890

File tree

2 files changed

+325
-9
lines changed

2 files changed

+325
-9
lines changed

repository/src/main/java/org/apache/atlas/repository/store/graph/v2/AtlasEntityChangeNotifier.java

Lines changed: 14 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,6 @@
3333
import org.apache.atlas.model.instance.EntityMutationResponse;
3434
import org.apache.atlas.model.instance.EntityMutations.EntityOperation;
3535
import org.apache.atlas.model.notification.EntityNotification;
36-
import org.apache.atlas.repository.audit.AtlasAuditService;
3736
import org.apache.atlas.repository.converters.AtlasInstanceConverter;
3837
import org.apache.atlas.repository.graph.FullTextMapperV2;
3938
import org.apache.atlas.repository.graph.GraphHelper;
@@ -59,7 +58,7 @@
5958
import java.util.ListIterator;
6059
import java.util.Map;
6160
import java.util.Set;
62-
import java.util.function.Predicate;
61+
import java.util.stream.Collectors;
6362

6463
import static org.apache.atlas.model.audit.EntityAuditEventV2.EntityAuditActionV2.PROPAGATED_CLASSIFICATION_ADD;
6564
import static org.apache.atlas.model.audit.EntityAuditEventV2.EntityAuditActionV2.PROPAGATED_CLASSIFICATION_DELETE;
@@ -69,8 +68,6 @@
6968
public class AtlasEntityChangeNotifier implements IAtlasEntityChangeNotifier {
7069
private static final Logger LOG = LoggerFactory.getLogger(AtlasEntityChangeNotifier.class);
7170

72-
private static final Predicate<AtlasEntityHeader> PRED_IS_NOT_TYPE_AUDIT_ENTITY = obj -> !obj.getTypeName().equals(AtlasAuditService.ENTITY_TYPE_AUDIT_ENTRY);
73-
7471
private final Set<EntityChangeListener> entityChangeListeners;
7572
private final Set<EntityChangeListenerV2> entityChangeListenersV2;
7673
private final AtlasInstanceConverter instanceConverter;
@@ -400,24 +397,32 @@ private String getListenerName(EntityChangeListener listener) {
400397
return listener.getClass().getSimpleName();
401398
}
402399

403-
private boolean skipAuditEntries(List<AtlasEntityHeader> entityHeaders) {
404-
return CollectionUtils.isEmpty(entityHeaders) || entityHeaders.stream().noneMatch(PRED_IS_NOT_TYPE_AUDIT_ENTITY);
400+
private List<AtlasEntityHeader> filterNonInternalEntities(List<AtlasEntityHeader> entityHeaders) {
401+
if (CollectionUtils.isEmpty(entityHeaders)) {
402+
return Collections.emptyList();
403+
}
404+
405+
return entityHeaders.stream().filter(atlasEntityHeader -> !GraphHelper.isInternalType(atlasEntityHeader.getTypeName())).collect(Collectors.toList());
405406
}
406407

407408
private void notifyListeners(List<AtlasEntityHeader> entityHeaders, EntityOperation operation, boolean isImport) throws AtlasBaseException {
408409
if (CollectionUtils.isEmpty(entityHeaders)) {
409410
return;
410411
}
411-
if (skipAuditEntries(entityHeaders)) {
412+
413+
List<AtlasEntityHeader> nonInternalEntities = filterNonInternalEntities(entityHeaders);
414+
415+
if (CollectionUtils.isEmpty(nonInternalEntities)) {
416+
LOG.info("Skipping notifications: All entities are internal types");
412417
return;
413418
}
414419

415420
MetricRecorder metric = RequestContext.get().startMetricRecord("notifyListeners");
416421

417422
if (isV2EntityNotificationEnabled) {
418-
notifyV2Listeners(entityHeaders, operation, isImport);
423+
notifyV2Listeners(nonInternalEntities, operation, isImport);
419424
} else {
420-
notifyV1Listeners(entityHeaders, operation, isImport);
425+
notifyV1Listeners(nonInternalEntities, operation, isImport);
421426
}
422427

423428
RequestContext.get().endMetricRecord(metric);

0 commit comments

Comments
 (0)