Skip to content

Instantly share code, notes, and snippets.

@robzienert
Created October 19, 2018 17:41
Show Gist options
  • Select an option

  • Save robzienert/620a8c35c8d74b59add9fcaeb018ab1c to your computer and use it in GitHub Desktop.

Select an option

Save robzienert/620a8c35c8d74b59add9fcaeb018ab1c to your computer and use it in GitHub Desktop.

Revisions

  1. robzienert created this gist Oct 19, 2018.
    27 changes: 27 additions & 0 deletions EventSourced-AbortStageHandler.kt
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,27 @@
    @Component
    class AbortStageHandler(
    override val queue: Queue,
    override val eventRepository: ExecutionEventRepository,
    @Qualifier("queueEventPublisher") private val publisher: ApplicationEventPublisher,
    private val clock: Clock
    ) : OrcaMessageHandler<AbortStage> {

    override fun handle(message: AbortStage) {
    message.withStage { stage ->
    if (stage.status in setOf(RUNNING, NOT_STARTED)) {
    stage.status = TERMINAL
    stage.endTime = clock.millis()
    eventReposotory.record(StageAborted(stage, message))
    queue.push(CancelStage(message))
    if (stage.parentStageId == null) {
    queue.push(CompleteExecution(message))
    } else {
    queue.push(CompleteStage(stage.parent()))
    }
    publisher.publishEvent(StageComplete(this, stage))
    }
    }
    }

    override val messageType = AbortStage::class.java
    }
    27 changes: 27 additions & 0 deletions Today-AbortStageHandler.kt
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,27 @@
    @Component
    class AbortStageHandler(
    override val queue: Queue,
    override val repository: ExecutionRepository,
    @Qualifier("queueEventPublisher") private val publisher: ApplicationEventPublisher,
    private val clock: Clock
    ) : OrcaMessageHandler<AbortStage> {

    override fun handle(message: AbortStage) {
    message.withStage { stage ->
    if (stage.status in setOf(RUNNING, NOT_STARTED)) {
    stage.status = TERMINAL
    stage.endTime = clock.millis()
    repository.storeStage(stage)
    queue.push(CancelStage(message))
    if (stage.parentStageId == null) {
    queue.push(CompleteExecution(message))
    } else {
    queue.push(CompleteStage(stage.parent()))
    }
    publisher.publishEvent(StageComplete(this, stage))
    }
    }
    }

    override val messageType = AbortStage::class.java
    }