blob: 1fa5bf15c094d48a6f0a77e724dcda3d61bff193 [file] [log] [blame]
/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You 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 org.apache.livy.rsc.driver;
import java.util.List;
import org.apache.livy.Job;
import org.apache.livy.JobHandle;
import org.apache.livy.rsc.BypassJobStatus;
import org.apache.livy.rsc.Utils;
public class BypassJobWrapper extends JobWrapper<byte[]> {
private volatile byte[] result;
private volatile Throwable error;
private volatile JobHandle.State state;
private volatile List<Integer> newSparkJobs;
public BypassJobWrapper(RSCDriver driver, String jobId, Job<byte[]> serializedJob) {
super(driver, jobId, serializedJob);
state = JobHandle.State.QUEUED;
}
@Override
public Void call() throws Exception {
state = JobHandle.State.STARTED;
return super.call();
}
@Override
protected synchronized void finished(byte[] result, Throwable error) {
if (error == null) {
this.result = result;
this.state = JobHandle.State.SUCCEEDED;
} else {
this.error = error;
this.state = JobHandle.State.FAILED;
}
}
@Override
boolean cancel() {
if (super.cancel()) {
this.state = JobHandle.State.CANCELLED;
return true;
}
return false;
}
@Override
protected void jobStarted() {
// Do nothing; just avoid sending data back to the driver.
}
synchronized BypassJobStatus getStatus() {
String stackTrace = error != null ? Utils.stackTraceAsString(error) : null;
return new BypassJobStatus(state, result, stackTrace);
}
}