Skip to content

Commit

Permalink
Merge branch 'master' into fix-entity-too-large
Browse files Browse the repository at this point in the history
  • Loading branch information
munishchouhan committed Sep 26, 2024
2 parents e7e415c + 42c3f26 commit c126bc7
Show file tree
Hide file tree
Showing 6 changed files with 67 additions and 18 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -140,7 +140,7 @@ class RegistryProxyController {
if( future ) {
// wait for the build completion, then apply the usual 'handleGet0' logic
future
.thenApply( (build) -> build.exitStatus==0 ? handleGet0(route, httpRequest) : badRequest(build.logs) )
.thenApply( (build) -> build.succeeded() ? handleGet0(route, httpRequest) : badRequest(build.logs) )
}
else
return null
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -39,15 +39,15 @@ import groovy.transform.ToString
class BuildResult {

final String id
final int exitStatus
final Integer exitStatus
final String logs
final Instant startTime
final Duration duration
final String digest

BuildResult(String id, int exitStatus, String content, Instant startTime, Duration duration, String digest) {
BuildResult(String id, Integer exitStatus, String logs, Instant startTime, Duration duration, String digest) {
this.id = id
this.logs = content?.replaceAll("\u001B\\[[;\\d]*m", "") // strip ansi escape codes
this.logs = logs?.replaceAll("\u001B\\[[;\\d]*m", "") // strip ansi escape codes
this.exitStatus = exitStatus
this.startTime = startTime
this.duration = duration
Expand All @@ -61,7 +61,7 @@ class BuildResult {

Duration getDuration() { duration }

int getExitStatus() { exitStatus }
Integer getExitStatus() { exitStatus }

Instant getStartTime() { startTime }

Expand All @@ -75,10 +75,10 @@ class BuildResult {

@Override
String toString() {
return "BuildRequest[id=$id; exitStatus=$exitStatus; duration=$duration]"
return "BuildResult[id=$id; exitStatus=$exitStatus; duration=$duration]"
}

static BuildResult completed(String buildId, int exitStatus, String content, Instant startTime, String digest) {
static BuildResult completed(String buildId, Integer exitStatus, String content, Instant startTime, String digest) {
new BuildResult(buildId, exitStatus, content, startTime, Duration.between(startTime, Instant.now()), digest)
}

Expand All @@ -87,11 +87,11 @@ class BuildResult {
}

static BuildResult create(BuildRequest req) {
new BuildResult(req.buildId, 0, null, req.startTime, null, null)
new BuildResult(req.buildId, null, null, req.startTime, null, null)
}

static BuildResult create(String buildId) {
new BuildResult(buildId, 0, null, Instant.now(), null, null)
new BuildResult(buildId, null, null, Instant.now(), null, null)
}

@Memoized
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -72,7 +72,9 @@ class LocalMessageStream implements MessageStream<String> {
}
finally {
if( !result ) {
offer(streamId, message)
// add again message not consumed to mimic the behavior or redis stream
sleep(1_000)
offer(streamId,message)
}
return result
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -88,7 +88,7 @@ class MailServiceImpl implements MailService {
final status = result.succeeded() ? 'DONE': 'FAILED'
binding.build_id = result.id
binding.build_user = "${req.identity?.user ? req.identity.user.userName : '-'} (${req.ip})"
binding.build_success = result.exitStatus==0
binding.build_success = result.succeeded()
binding.build_exit_status = result.exitStatus
binding.build_time = formatTimestamp(result.startTime, req.offsetId) ?: '-'
binding.build_duration = formatDuration(result.duration) ?: '-'
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -24,17 +24,21 @@ import java.time.Instant
import groovy.transform.CompileStatic
import groovy.transform.EqualsAndHashCode
import groovy.transform.ToString
import io.seqera.wave.api.BuildStatusResponse
import io.seqera.wave.service.builder.BuildEntry
import io.seqera.wave.service.builder.BuildEvent
import io.seqera.wave.service.builder.BuildFormat
import io.seqera.wave.api.BuildStatusResponse

import io.seqera.wave.service.builder.BuildRequest
import io.seqera.wave.service.builder.BuildResult
/**
* A collection of request and response properties to be stored
*
* @author : jorge <[email protected]>
*
*/
@ToString
@ToString(includePackage = false, includeNames = true)
@CompileStatic
@EqualsAndHashCode
class WaveBuildRecord {
Expand All @@ -56,7 +60,9 @@ class WaveBuildRecord {
BuildFormat format
String digest

boolean succeeded() { exitStatus==0 }
Boolean succeeded() {
return duration != null ? (exitStatus==0) : null
}

static WaveBuildRecord fromEvent(BuildEvent event) {
if( event.result && event.request.buildId != event.result.id )
Expand All @@ -82,18 +88,16 @@ class WaveBuildRecord {
}

BuildStatusResponse toStatusResponse() {
final status = exitStatus != null
final status = duration!=null
? BuildStatusResponse.Status.COMPLETED
: BuildStatusResponse.Status.PENDING
final succeeded = exitStatus!=null
? exitStatus==0
: null

return new BuildStatusResponse(
buildId,
status,
startTime,
duration,
succeeded )
succeeded() )
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@
package io.seqera.wave.service.persistence

import spock.lang.Specification
import spock.lang.Unroll

import java.nio.file.Path
import java.time.Duration
Expand Down Expand Up @@ -124,4 +125,46 @@ class WaveBuildRecordTest extends Specification {

}

@Unroll
def 'should validate status and succeeded' () {
given:
final request = new BuildRequest(
'container1234',
'FROM foo:latest',
'conda::recipe',
Path.of("/some/path"),
'docker.io/my/repo:container1234',
PlatformId.NULL,
ContainerPlatform.of('amd64'),
'docker.io/my/cache',
'1.2.3.4',
'{"config":"json"}',
null,
null,
'scan12345',
null,
BuildFormat.DOCKER,
Duration.ofMinutes(1)
).withBuildId('123')

final result = new BuildResult(request.buildId, EXIT, "ok", Instant.now(), DURATION, null)
final event = new BuildEvent(request, result)

when:
final build = WaveBuildRecord.fromEvent(event)
then:
build.succeeded() == EXPECET_SUCCEED

when:
def resp = build.toStatusResponse()
then:
resp.succeeded == EXPECET_SUCCEED
resp.status == EXPECT_STATUS
where:
EXIT | DURATION | EXPECET_SUCCEED | EXPECT_STATUS
null | null | null | BuildStatusResponse.Status.PENDING
0 | null | null | BuildStatusResponse.Status.PENDING
1 | Duration.ofSeconds(1) | false | BuildStatusResponse.Status.COMPLETED
0 | Duration.ofSeconds(1) | true | BuildStatusResponse.Status.COMPLETED
}
}

0 comments on commit c126bc7

Please sign in to comment.