[
https://issues.apache.org/jira/browse/OOZIE-2572?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15330710#comment-15330710
]
Satish Subhashrao Saley edited comment on OOZIE-2572 at 6/14/16 9:59 PM:
-------------------------------------------------------------------------
We are unable to see DURATION_MISS for IN_PROCESS job because the times which
we are comparing have different time units.
I had look at a coord job while it was running:
{code}
{
slaSummaryList: [
{
nominalTime: 1465930800000,
jobStatus: "RUNNING",
expectedEnd: 1465948800000,
appName: "meow",
actualEnd: null,
actualDuration: 55, <==It is in minutes
expectedDuration: 3600000, <== It is in milliseconds
}
{code}
The java script code is doing comparison based on these values
{code}
oozie-sla-table.js
if (slaSummary.actualDuration != -1 && slaSummary.expectedDuration !=
-1) {
slaSummary.durDiff = slaSummary.actualDuration -
slaSummary.expectedDuration;
if (slaSummary.actualDuration > slaSummary.expectedDuration) {
slaMisses += "DURATION_MISS, ";
}
}
{code}
The comparison happens correctly if job has ended, because we update the time
in milliseconds and prepare the json string correctly.
{code}
org.apache.oozie.command.sla.SLAJobEventXCommand.processForEnd()
slaCalc.setActualDuration(slaCalc.getActualEnd().getTime() -
slaCalc.getActualStart().getTime());
{code}
For the job which is running, we just do comparison in correct time units but
does not update actualDuration.
We need to change the logic for preparation of json string
{code}
org.apache.oozie.command.sla.SLAJobEventXCommand.processForRunning()
else if (slaCalc.getActualStart() != null && slaCalc.getExpectedDuration() !=
-1) {
if (System.currentTimeMillis() -
slaCalc.getActualStart().getTime() > slaCalc.getExpectedDuration()) {
slaCalc.setEventStatus(EventStatus.DURATION_MISS);
if (shouldAlert(slaCalc)) {
queueEvent(new SLACalcStatus(slaCalc));
}
eventProc += 2;
}
}
{code}
{code}
JSONObject org.apache.oozie.sla.SLASummaryBean.toJSONObject(String timeZoneId)
json.put(JsonTags.SLA_SUMMARY_EXPECTED_DURATION, expectedDuration);
if (actualDuration == -1 && expectedDuration != -1 && actualStartTS != null) {
long currentDur = (new Date().getTime() - actualStartTS.getTime()) / (1000
* 60);
json.put(JsonTags.SLA_SUMMARY_ACTUAL_DURATION, currentDur);
}
else {
json.put(JsonTags.SLA_SUMMARY_ACTUAL_DURATION, actualDuration);
}
{code}
was (Author: satishsaley):
1. Have you received email notification?
2. We are unable to see DURATION_MISS for IN_PROCESS job because the times
which we are comparing have different time units.
I had look at 1464144-160602055743812-oozie_PR-C@100 while it was running:
{code}
{
slaSummaryList: [
{
nominalTime: 1465930800000,
jobStatus: "RUNNING",
expectedEnd: 1465948800000,
appName: "cdw_cow_complete_1h",
actualEnd: null,
actualDuration: 55, <==It is in minutes
expectedDuration: 3600000, <== It is in milliseconds
}
{code}
The java script code is doing comparison based on these values
{code}
oozie-sla-table.js
if (slaSummary.actualDuration != -1 && slaSummary.expectedDuration !=
-1) {
slaSummary.durDiff = slaSummary.actualDuration -
slaSummary.expectedDuration;
if (slaSummary.actualDuration > slaSummary.expectedDuration) {
slaMisses += "DURATION_MISS, ";
}
}
{code}
The comparison happens correctly if job has ended, because we update the time
in milliseconds and prepare the json string correctly.
{code}
org.apache.oozie.command.sla.SLAJobEventXCommand.processForEnd()
slaCalc.setActualDuration(slaCalc.getActualEnd().getTime() -
slaCalc.getActualStart().getTime());
{code}
For the job which is running, we just do comparison in correct time units but
does not update actualDuration.
We need to change the logic for preparation of json string
{code}
org.apache.oozie.command.sla.SLAJobEventXCommand.processForRunning()
else if (slaCalc.getActualStart() != null && slaCalc.getExpectedDuration() !=
-1) {
if (System.currentTimeMillis() -
slaCalc.getActualStart().getTime() > slaCalc.getExpectedDuration()) {
slaCalc.setEventStatus(EventStatus.DURATION_MISS);
if (shouldAlert(slaCalc)) {
queueEvent(new SLACalcStatus(slaCalc));
}
eventProc += 2;
}
}
{code}
{code}
JSONObject org.apache.oozie.sla.SLASummaryBean.toJSONObject(String timeZoneId)
json.put(JsonTags.SLA_SUMMARY_EXPECTED_DURATION, expectedDuration);
if (actualDuration == -1 && expectedDuration != -1 && actualStartTS != null) {
long currentDur = (new Date().getTime() - actualStartTS.getTime()) / (1000
* 60);
json.put(JsonTags.SLA_SUMMARY_ACTUAL_DURATION, currentDur);
}
else {
json.put(JsonTags.SLA_SUMMARY_ACTUAL_DURATION, actualDuration);
}
{code}
> SLA DURATION miss not shown when job is running for longer than expected time
> -----------------------------------------------------------------------------
>
> Key: OOZIE-2572
> URL: https://issues.apache.org/jira/browse/OOZIE-2572
> Project: Oozie
> Issue Type: Bug
> Reporter: Satish Subhashrao Saley
> Assignee: Satish Subhashrao Saley
>
> If job is running for beyond expected duration, Oozie UI is not slowing SLA
> for duration miss.
--
This message was sent by Atlassian JIRA
(v6.3.4#6332)