Search in sources :

Example 1 with DatastoreException

use of org.jboss.pnc.spi.datastore.DatastoreException in project pnc by project-ncl.

the class StatusUpdatesTest method buildSetStatusShouldUpdateWhenAllBuildStatusChangeToCompletedState.

@Test
@InSequence(10)
public void buildSetStatusShouldUpdateWhenAllBuildStatusChangeToCompletedState() throws DatastoreException, InterruptedException, CoreException {
    ObjectWrapper<BuildSetStatusChangedEvent> receivedBuildSetStatusChangedEvent = new ObjectWrapper<>();
    Consumer<BuildSetStatusChangedEvent> statusUpdateListener = receivedBuildSetStatusChangedEvent::set;
    testCDIBuildSetStatusChangedReceiver.addBuildSetStatusChangedEventListener(statusUpdateListener);
    User user = User.Builder.newBuilder().id(1).username("test-user-1").build();
    Set<BuildTask> buildTasks = initializeBuildTaskSet(configurationBuilder, user, (buildConfigSetRecord) -> {
    }).getBuildTasks();
    buildTasks.forEach((bt) -> {
        buildCoordinator.updateBuildTaskStatus(bt, BuildCoordinationStatus.DONE);
        buildCoordinator.completeBuild(bt, createBuildResult());
    });
    this.waitForConditionWithTimeout(() -> buildTasks.stream().allMatch(task -> task.getStatus().isCompleted()), 4);
    Assert.assertNotNull("Did not receive build set status update.", receivedBuildSetStatusChangedEvent.get());
    Assert.assertEquals(BuildSetStatus.DONE, receivedBuildSetStatusChangedEvent.get().getNewStatus());
}
Also used : BuildOptions(org.jboss.pnc.spi.BuildOptions) BuildStatusNotifications(org.jboss.pnc.coordinator.notifications.buildTask.BuildStatusNotifications) Arquillian(org.jboss.arquillian.junit.Arquillian) BuildCoordinationStatus(org.jboss.pnc.enums.BuildCoordinationStatus) LoggerFactory(org.slf4j.LoggerFactory) AtomicInteger(java.util.concurrent.atomic.AtomicInteger) User(org.jboss.pnc.model.User) DatastoreAdapter(org.jboss.pnc.coordinator.builder.datastore.DatastoreAdapter) BuildCoordinator(org.jboss.pnc.spi.coordinator.BuildCoordinator) BuildResult(org.jboss.pnc.spi.BuildResult) DatastoreException(org.jboss.pnc.spi.datastore.DatastoreException) Set(java.util.Set) BuildStatus(org.jboss.pnc.enums.BuildStatus) Collectors(java.util.stream.Collectors) TestProjectConfigurationBuilder(org.jboss.pnc.mock.model.builders.TestProjectConfigurationBuilder) BuildDriverResult(org.jboss.pnc.spi.builddriver.BuildDriverResult) CoreException(org.jboss.pnc.spi.exception.CoreException) JavaArchive(org.jboss.shrinkwrap.api.spec.JavaArchive) BuildStatusChangedEvent(org.jboss.pnc.spi.events.BuildStatusChangedEvent) BuildSetStatusChangedEvent(org.jboss.pnc.spi.events.BuildSetStatusChangedEvent) Optional(java.util.Optional) RandomStringUtils(org.apache.commons.lang3.RandomStringUtils) IndyRepositoryManagerResult(org.jboss.pnc.indyrepositorymanager.IndyRepositoryManagerResult) BuildConfigSetRecord(org.jboss.pnc.model.BuildConfigSetRecord) BuildSetStatus(org.jboss.pnc.spi.BuildSetStatus) RunWith(org.junit.runner.RunWith) BuildConfigurationSet(org.jboss.pnc.model.BuildConfigurationSet) BuildSetStatusNotifications(org.jboss.pnc.coordinator.notifications.buildSetTask.BuildSetStatusNotifications) BuildCallBack(org.jboss.pnc.coordinator.notifications.buildTask.BuildCallBack) RebuildMode(org.jboss.pnc.enums.RebuildMode) BuildTask(org.jboss.pnc.spi.coordinator.BuildTask) Supplier(java.util.function.Supplier) Inject(javax.inject.Inject) HashSet(java.util.HashSet) BuildCoordinatorDeployments(org.jboss.pnc.coordinator.test.BuildCoordinatorDeployments) CompletionStatus(org.jboss.pnc.spi.coordinator.CompletionStatus) BuildTasksInitializer(org.jboss.pnc.coordinator.builder.BuildTasksInitializer) BuildSetTask(org.jboss.pnc.spi.coordinator.BuildSetTask) BuildQueue(org.jboss.pnc.coordinator.builder.BuildQueue) Event(javax.enterprise.event.Event) Logger(org.slf4j.Logger) Test(org.junit.Test) InSequence(org.jboss.arquillian.junit.InSequence) Consumer(java.util.function.Consumer) ObjectWrapper(org.jboss.pnc.common.util.ObjectWrapper) Deployment(org.jboss.arquillian.container.test.api.Deployment) Assert(org.junit.Assert) Sequence(org.jboss.pnc.common.concurrent.Sequence) Collections(java.util.Collections) User(org.jboss.pnc.model.User) BuildTask(org.jboss.pnc.spi.coordinator.BuildTask) BuildSetStatusChangedEvent(org.jboss.pnc.spi.events.BuildSetStatusChangedEvent) ObjectWrapper(org.jboss.pnc.common.util.ObjectWrapper) Test(org.junit.Test) InSequence(org.jboss.arquillian.junit.InSequence)

Example 2 with DatastoreException

use of org.jboss.pnc.spi.datastore.DatastoreException in project pnc by project-ncl.

the class BuildTasksInitializer method initBuildSetTask.

private BuildSetTask initBuildSetTask(BuildConfigurationSet buildConfigurationSet, User user, BuildOptions buildOptions) throws CoreException {
    BuildConfigSetRecord buildConfigSetRecord = BuildConfigSetRecord.Builder.newBuilder().buildConfigurationSet(buildConfigurationSet).user(user).startTime(new Date()).status(org.jboss.pnc.enums.BuildStatus.BUILDING).temporaryBuild(buildOptions.isTemporaryBuild()).alignmentPreference(buildOptions.getAlignmentPreference()).build();
    final BuildConfigSetRecord configSetRecord;
    try {
        configSetRecord = saveBuildConfigSetRecord(buildConfigSetRecord);
    } catch (DatastoreException e) {
        log.error("Failed to store build config set record: " + e);
        throw new CoreException(e);
    }
    return BuildSetTask.Builder.newBuilder().buildConfigSetRecord(configSetRecord).buildOptions(buildOptions).build();
}
Also used : CoreException(org.jboss.pnc.spi.exception.CoreException) DatastoreException(org.jboss.pnc.spi.datastore.DatastoreException) Date(java.util.Date) ExpiresDate(org.jboss.pnc.common.Date.ExpiresDate) BuildConfigSetRecord(org.jboss.pnc.model.BuildConfigSetRecord)

Example 3 with DatastoreException

use of org.jboss.pnc.spi.datastore.DatastoreException in project pnc by project-ncl.

the class DefaultBuildCoordinator method updateBuildSetTaskStatus.

private void updateBuildSetTaskStatus(BuildSetTask buildSetTask, BuildSetStatus status, String description) {
    log.info("Setting new status {} on buildSetTask.id {}. Description: {}.", status, buildSetTask.getId(), description);
    BuildSetStatus oldStatus = buildSetTask.getStatus();
    Optional<BuildConfigSetRecord> buildConfigSetRecord = buildSetTask.getBuildConfigSetRecord();
    // Completed BuildSets are updated using BuildSetTask#taskStatusUpdatedToFinalState()
    if (buildConfigSetRecord.isPresent() && REJECTED_STATES.containsKey(status)) {
        buildConfigSetRecord.get().setStatus(REJECTED_STATES.get(status));
        try {
            datastoreAdapter.saveBuildConfigSetRecord(buildConfigSetRecord.get());
        } catch (DatastoreException de) {
            log.warn("Failed to update build config set record to REJECTED status: " + de);
        }
    }
    buildConfigSetRecord.ifPresent(record -> sendSetStatusChangeEvent(buildSetTask, status, oldStatus, record, description));
    buildSetTask.setStatus(status);
    buildSetTask.setStatusDescription(description);
}
Also used : BuildSetStatus(org.jboss.pnc.spi.BuildSetStatus) DatastoreException(org.jboss.pnc.spi.datastore.DatastoreException) BuildConfigSetRecord(org.jboss.pnc.model.BuildConfigSetRecord)

Example 4 with DatastoreException

use of org.jboss.pnc.spi.datastore.DatastoreException in project pnc by project-ncl.

the class DefaultBuildCoordinator method processBuildTask.

private void processBuildTask(BuildTask task) {
    try {
        // process only tasks with status ENQUEUED
        synchronized (task) {
            if (task.getStatus() != BuildCoordinationStatus.ENQUEUED) {
                log.debug("Skipping the execution of build task {} as it has been processed already. Status: {}.", task.getId(), task.getStatus());
                return;
            }
            if (!task.getBuildOptions().isForceRebuild() && !datastoreAdapter.requiresRebuild(task, new HashSet<>())) {
                completeNoBuild(task, CompletionStatus.NO_REBUILD_REQUIRED);
                return;
            }
            task.setStartTime(new Date());
            updateBuildTaskStatus(task, BuildCoordinationStatus.BUILDING);
        }
        buildScheduler.startBuilding(task);
    } catch (CoreException | ExecutorException e) {
        log.debug(" Build coordination task failed. Setting it as SYSTEM_ERROR.", e);
        updateBuildTaskStatus(task, BuildCoordinationStatus.SYSTEM_ERROR, e.getMessage());
        try {
            datastoreAdapter.storeResult(task, Optional.empty(), e);
        } catch (DatastoreException e1) {
            log.error("Unable to store error [" + e.getMessage() + "] of build coordination task [" + task.getId() + "].", e1);
        }
    } catch (Error error) {
        log.error("Build coordination task failed with error! Setting it as SYSTEM_ERROR.", error);
        log.error("The system probably is in an invalid state!");
        updateBuildTaskStatus(task, BuildCoordinationStatus.SYSTEM_ERROR, error.getMessage());
        try {
            datastoreAdapter.storeResult(task, Optional.empty(), error);
        } catch (DatastoreException e1) {
            log.error("Unable to store error [" + error.getMessage() + "] of build coordination task [" + task.getId() + "].", e1);
        }
        throw error;
    } finally {
        ProcessStageUtils.logProcessStageEnd(BuildCoordinationStatus.ENQUEUED.toString());
    }
}
Also used : ExecutorException(org.jboss.pnc.spi.executor.exceptions.ExecutorException) CoreException(org.jboss.pnc.spi.exception.CoreException) DatastoreException(org.jboss.pnc.spi.datastore.DatastoreException) Date(java.util.Date) ExpiresDate(org.jboss.pnc.common.Date.ExpiresDate)

Example 5 with DatastoreException

use of org.jboss.pnc.spi.datastore.DatastoreException in project pnc by project-ncl.

the class StatusUpdatesTest method BuildTaskCallbacksShouldBeCalled.

@Test
@InSequence(30)
public void BuildTaskCallbacksShouldBeCalled() throws DatastoreException, CoreException {
    User user = User.Builder.newBuilder().id(3).username("test-user-3").build();
    Set<BuildTask> buildTasks = initializeBuildTaskSet(configurationBuilder, user, (buildConfigSetRecord) -> {
    }).getBuildTasks();
    Set<String> tasksIds = buildTasks.stream().map((BuildTask::getId)).collect(Collectors.toSet());
    Set<String> receivedUpdatesForId = new HashSet<>();
    Consumer<BuildStatusChangedEvent> statusChangeEventConsumer = (statusChangedEvent) -> {
        receivedUpdatesForId.add(statusChangedEvent.getBuild().getId());
    };
    tasksIds.forEach((id) -> buildStatusNotifications.subscribe(new BuildCallBack(id, statusChangeEventConsumer)));
    buildTasks.forEach((bt) -> buildCoordinator.updateBuildTaskStatus(bt, BuildCoordinationStatus.DONE));
    System.out.println("Received updates: " + receivedUpdatesForId);
    tasksIds.forEach((id) -> Assert.assertTrue("Did not receive update for task " + id, receivedUpdatesForId.contains(id)));
}
Also used : BuildOptions(org.jboss.pnc.spi.BuildOptions) BuildStatusNotifications(org.jboss.pnc.coordinator.notifications.buildTask.BuildStatusNotifications) Arquillian(org.jboss.arquillian.junit.Arquillian) BuildCoordinationStatus(org.jboss.pnc.enums.BuildCoordinationStatus) LoggerFactory(org.slf4j.LoggerFactory) AtomicInteger(java.util.concurrent.atomic.AtomicInteger) User(org.jboss.pnc.model.User) DatastoreAdapter(org.jboss.pnc.coordinator.builder.datastore.DatastoreAdapter) BuildCoordinator(org.jboss.pnc.spi.coordinator.BuildCoordinator) BuildResult(org.jboss.pnc.spi.BuildResult) DatastoreException(org.jboss.pnc.spi.datastore.DatastoreException) Set(java.util.Set) BuildStatus(org.jboss.pnc.enums.BuildStatus) Collectors(java.util.stream.Collectors) TestProjectConfigurationBuilder(org.jboss.pnc.mock.model.builders.TestProjectConfigurationBuilder) BuildDriverResult(org.jboss.pnc.spi.builddriver.BuildDriverResult) CoreException(org.jboss.pnc.spi.exception.CoreException) JavaArchive(org.jboss.shrinkwrap.api.spec.JavaArchive) BuildStatusChangedEvent(org.jboss.pnc.spi.events.BuildStatusChangedEvent) BuildSetStatusChangedEvent(org.jboss.pnc.spi.events.BuildSetStatusChangedEvent) Optional(java.util.Optional) RandomStringUtils(org.apache.commons.lang3.RandomStringUtils) IndyRepositoryManagerResult(org.jboss.pnc.indyrepositorymanager.IndyRepositoryManagerResult) BuildConfigSetRecord(org.jboss.pnc.model.BuildConfigSetRecord) BuildSetStatus(org.jboss.pnc.spi.BuildSetStatus) RunWith(org.junit.runner.RunWith) BuildConfigurationSet(org.jboss.pnc.model.BuildConfigurationSet) BuildSetStatusNotifications(org.jboss.pnc.coordinator.notifications.buildSetTask.BuildSetStatusNotifications) BuildCallBack(org.jboss.pnc.coordinator.notifications.buildTask.BuildCallBack) RebuildMode(org.jboss.pnc.enums.RebuildMode) BuildTask(org.jboss.pnc.spi.coordinator.BuildTask) Supplier(java.util.function.Supplier) Inject(javax.inject.Inject) HashSet(java.util.HashSet) BuildCoordinatorDeployments(org.jboss.pnc.coordinator.test.BuildCoordinatorDeployments) CompletionStatus(org.jboss.pnc.spi.coordinator.CompletionStatus) BuildTasksInitializer(org.jboss.pnc.coordinator.builder.BuildTasksInitializer) BuildSetTask(org.jboss.pnc.spi.coordinator.BuildSetTask) BuildQueue(org.jboss.pnc.coordinator.builder.BuildQueue) Event(javax.enterprise.event.Event) Logger(org.slf4j.Logger) Test(org.junit.Test) InSequence(org.jboss.arquillian.junit.InSequence) Consumer(java.util.function.Consumer) ObjectWrapper(org.jboss.pnc.common.util.ObjectWrapper) Deployment(org.jboss.arquillian.container.test.api.Deployment) Assert(org.junit.Assert) Sequence(org.jboss.pnc.common.concurrent.Sequence) Collections(java.util.Collections) User(org.jboss.pnc.model.User) BuildTask(org.jboss.pnc.spi.coordinator.BuildTask) BuildStatusChangedEvent(org.jboss.pnc.spi.events.BuildStatusChangedEvent) BuildCallBack(org.jboss.pnc.coordinator.notifications.buildTask.BuildCallBack) HashSet(java.util.HashSet) Test(org.junit.Test) InSequence(org.jboss.arquillian.junit.InSequence)

Aggregations

DatastoreException (org.jboss.pnc.spi.datastore.DatastoreException)8 BuildConfigSetRecord (org.jboss.pnc.model.BuildConfigSetRecord)5 CoreException (org.jboss.pnc.spi.exception.CoreException)5 BuildStatus (org.jboss.pnc.enums.BuildStatus)4 BuildSetStatus (org.jboss.pnc.spi.BuildSetStatus)4 Date (java.util.Date)3 HashSet (java.util.HashSet)3 Optional (java.util.Optional)3 Set (java.util.Set)3 Event (javax.enterprise.event.Event)3 Inject (javax.inject.Inject)3 Sequence (org.jboss.pnc.common.concurrent.Sequence)3 BuildCoordinationException (org.jboss.pnc.coordinator.BuildCoordinationException)3 DatastoreAdapter (org.jboss.pnc.coordinator.builder.datastore.DatastoreAdapter)3 BuildCoordinationStatus (org.jboss.pnc.enums.BuildCoordinationStatus)3 BuildConfigurationSet (org.jboss.pnc.model.BuildConfigurationSet)3 BuildRecord (org.jboss.pnc.model.BuildRecord)3 User (org.jboss.pnc.model.User)3 BuildOptions (org.jboss.pnc.spi.BuildOptions)3 BuildResult (org.jboss.pnc.spi.BuildResult)3