/* * Copyright 2012 LinkedIn Corp. * * Licensed under the Apache License, Version 2.0 (the "License"); you may not * use this file except in compliance with the License. You may obtain a copy of * the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the * License for the specific language governing permissions and limitations under * the License. */ package azkaban.execapp.event; import azkaban.executor.Status; public class BlockingStatus { private static final long WAIT_TIME = 5 * 60 * 1000; private final int execId; private final String jobId; private Status status; public BlockingStatus(int execId, String jobId, Status initialStatus) { this.execId = execId; this.jobId = jobId; this.status = initialStatus; } public Status blockOnFinishedStatus() { if (status == null) { return null; } while (!Status.isStatusFinished(status)) { synchronized (this) { try { this.wait(WAIT_TIME); } catch (InterruptedException e) { } } } return status; } public Status viewStatus() { return this.status; } public void unblock() { synchronized (this) { this.notifyAll(); } } public void changeStatus(Status status) { synchronized (this) { this.status = status; if (Status.isStatusFinished(status)) { unblock(); } } } public int getExecId() { return execId; } public String getJobId() { return jobId; } }