io.cdap.cdap.internal.app.store.StoreProgramRunRecordFetcher Maven / Gradle / Ivy
/*
* Copyright © 2020 Cask Data, Inc.
*
* 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 io.cdap.cdap.internal.app.store;
import com.google.inject.Inject;
import io.cdap.cdap.common.NotFoundException;
import io.cdap.cdap.logging.gateway.handlers.ProgramRunRecordFetcher;
import io.cdap.cdap.proto.id.ProgramReference;
import io.cdap.cdap.proto.id.ProgramRunId;
import io.cdap.cdap.spi.data.transaction.TransactionRunner;
import io.cdap.cdap.spi.data.transaction.TransactionRunners;
import java.io.IOException;
import java.util.Optional;
/**
* A {@link ProgramRunRecordFetcher} that uses {@link AppMetadataStore} for fetching run records
* directly.
*/
public class StoreProgramRunRecordFetcher implements ProgramRunRecordFetcher {
private final TransactionRunner txRunner;
@Inject
StoreProgramRunRecordFetcher(TransactionRunner txRunner) {
this.txRunner = txRunner;
}
@Override
public RunRecordDetail getRunRecordMeta(ProgramRunId runId)
throws IOException, NotFoundException {
return Optional.ofNullable(TransactionRunners.run(txRunner, context -> {
return AppMetadataStore.create(context).getRun(runId);
}, IOException.class)).orElseThrow(() -> new NotFoundException(runId));
}
@Override
public RunRecordDetail getRunRecordMeta(ProgramReference programRef, String runId)
throws IOException, NotFoundException {
return Optional.ofNullable(TransactionRunners.run(txRunner, context -> {
return AppMetadataStore.create(context).getRun(programRef, runId);
}, IOException.class))
.orElseThrow(
() -> new NotFoundException(
String.format("No run record found for program %s and runID: %s", programRef,
runId)));
}
}