FALCON-2341 Entity SLA Alert publishing wrong results into DB
Author: Amit Khanna <amit.khanna@inmobi.com>
Reviewers: @pallavi-rao
Closes #415 from amitkhanna1806/apache-falcon and squashes the following commits:
f61fd66cf [Amit Khanna] SLA High should be true if TAG_CRITICAL
10a989c57 [Amit Khanna] FALCON-2341 Entity SLA Alert publishing wrong results into DB
diff --git a/common/src/main/java/org/apache/falcon/persistence/EntitySLAAlertBean.java b/common/src/main/java/org/apache/falcon/persistence/EntitySLAAlertBean.java
index 6482e8c..b0ce279 100644
--- a/common/src/main/java/org/apache/falcon/persistence/EntitySLAAlertBean.java
+++ b/common/src/main/java/org/apache/falcon/persistence/EntitySLAAlertBean.java
@@ -101,11 +101,11 @@
private Boolean slaHighAlertSent;
public Date getNominalTime() {
- return new Date(nominalTime.getTime());
+ return nominalTime;
}
public void setNominalTime(Date nominalTime) {
- this.nominalTime = new Date(nominalTime.getTime());
+ this.nominalTime = nominalTime;
}
public String getId() {
diff --git a/prism/src/main/java/org/apache/falcon/jdbc/MonitoringJdbcStateStore.java b/prism/src/main/java/org/apache/falcon/jdbc/MonitoringJdbcStateStore.java
index 51eac94..8d50862 100644
--- a/prism/src/main/java/org/apache/falcon/jdbc/MonitoringJdbcStateStore.java
+++ b/prism/src/main/java/org/apache/falcon/jdbc/MonitoringJdbcStateStore.java
@@ -263,6 +263,9 @@
public void putSLAAlertInstance(String entityName, String cluster, String entityType, Date nominalTime,
Boolean isSLALowMissed, Boolean isSLAHighMissed) throws FalconException{
+ if(isSLAAlertInstancePresent(entityName, cluster, entityType, nominalTime)){
+ return;
+ }
EntityManager entityManager = getEntityManager();
EntitySLAAlertBean entitySLAAlertBean = new EntitySLAAlertBean();
entitySLAAlertBean.setEntityName(entityName);
@@ -313,4 +316,13 @@
entityManager.getTransaction().begin();
}
+ public boolean isSLAAlertInstancePresent(String entityName, String cluster, String entityType, Date nominalTime){
+ try{
+ getEntityAlertInstance(entityName, cluster, nominalTime, entityType);
+ return true;
+ } catch (Exception NoResultException){
+ return false;
+ }
+ }
+
}
diff --git a/prism/src/main/java/org/apache/falcon/service/EntitySLAAlertService.java b/prism/src/main/java/org/apache/falcon/service/EntitySLAAlertService.java
index 2f19e6b..edf626b 100644
--- a/prism/src/main/java/org/apache/falcon/service/EntitySLAAlertService.java
+++ b/prism/src/main/java/org/apache/falcon/service/EntitySLAAlertService.java
@@ -144,9 +144,10 @@
} else if (schedulableEntityInstance.getTags().contains(EntitySLAMonitoringService.get().TAG_CRITICAL)){
if (entityType.equalsIgnoreCase(EntityType.PROCESS.name())){
store.putSLAAlertInstance(entityName, clusterName, entityType,
- nominalTime, true, false);
+ nominalTime, true, true);
+ } else {
+ store.updateSLAAlertInstance(entityName, clusterName, nominalTime, entityType);
}
- store.updateSLAAlertInstance(entityName, clusterName, nominalTime, entityType);
LOG.info("Entity :{} EntityType : {} Cluster: {} Nominal Time: {} missed SLAHigh", entityName,
entityType, clusterName , nominalTime);
highSLAMissed(entityName, clusterName, EntityType.getEnum(entityType), nominalTime);
diff --git a/prism/src/main/java/org/apache/falcon/service/EntitySLAMonitoringService.java b/prism/src/main/java/org/apache/falcon/service/EntitySLAMonitoringService.java
index 8b3dbe4..279cab8 100644
--- a/prism/src/main/java/org/apache/falcon/service/EntitySLAMonitoringService.java
+++ b/prism/src/main/java/org/apache/falcon/service/EntitySLAMonitoringService.java
@@ -452,7 +452,7 @@
Entity entity = EntityUtil.getEntity(entityType, entityName);
authenticateUser(entity);
try {
- if (entityType.equalsIgnoreCase(EntityType.PROCESS.toString())){
+ if (entity.getEntityType() == EntityType.PROCESS){
LOG.trace("Checking instance availability status for entity:{}, cluster:{}, "
+ "instanceTime:{}", entity.getName(), clusterName, nominalTime, entityType);
AbstractWorkflowEngine wfEngine = WorkflowEngineFactory.getWorkflowEngine();
@@ -470,7 +470,7 @@
}
return false;
}
- if (entityType.equalsIgnoreCase(EntityType.FEED.toString())){
+ if (entity.getEntityType() == EntityType.FEED){
LOG.trace("Checking instance availability status for feed:{}, cluster:{}, instanceTime:{}",
entity.getName(), clusterName, nominalTime);
@@ -567,7 +567,7 @@
}
Entity entity = EntityUtil.getEntity(entityType, entityName);
- if (entityType.equals(EntityType.FEED.toString())) {
+ if (entity.getEntityType() == EntityType.FEED) {
Sla sla = FeedHelper.getSLA(clusterName, (Feed) entity);
if (sla != null) {
@@ -640,7 +640,7 @@
@VisibleForTesting
Date getInitialStartTime(Entity entity, String clusterName, String entityType) throws FalconException {
- if (entityType.equals(EntityType.FEED.toString())){
+ if (entity.getEntityType() == EntityType.FEED){
Sla sla = FeedHelper.getSLA(clusterName, (Feed) entity);
if (sla == null) {
throw new IllegalStateException("InitialStartTime can not be determined as the feed: "