Skip to content

Commit f7ec9f6

Browse files
serialize from workers, then collate at end into .jsons
1 parent eb603b4 commit f7ec9f6

File tree

3 files changed

+32
-9
lines changed

3 files changed

+32
-9
lines changed

test/buildkitetestjson.jl

+26-5
Original file line numberDiff line numberDiff line change
@@ -7,8 +7,9 @@ module BuildkiteTestJSON
77

88
using Test
99
using Dates
10+
using Serialization
1011

11-
export write_testset_json_files
12+
export serialize_testset_result_file, write_testset_json_files
1213

1314
# Bootleg JSON writer
1415

@@ -205,17 +206,37 @@ function collect_results!(results::Vector{Dict{String,Any}}, testset::Test.Defau
205206
return results
206207
end
207208

208-
function write_testset_json_files(dir::String, testset::Test.DefaultTestSet)
209+
function serialize_testset_result_file(dir::String, testset::Test.DefaultTestSet)
209210
data = Dict{String,Any}[]
210211
collect_results!(data, testset)
212+
name = replace(testset.description, r"[^a-zA-Z0-9]" => "_")
213+
res_file = joinpath(dir, "results_$(name).dat")
214+
Serialization.serialize(res_file, data)
215+
@debug "Saved $(basename(res_file)) ($(Base.format_bytes(filesize(res_file))))"
216+
return res_file
217+
end
218+
219+
# deserilalizes the results files and writes them to collated JSON files of 5000 max results
220+
function write_testset_json_files(dir::String)
221+
data = Dict{String,Any}[]
222+
read_files = String[]
223+
for res_dat in filter!(x -> occursin(r"^results.*\.dat$", x), readdir(dir))
224+
res_file = joinpath(dir, res_dat)
225+
append!(data, Serialization.deserialize(res_file))
226+
@debug "Loaded $(basename(res_file)) ($(Base.format_bytes(filesize(res_file))))"
227+
push!(read_files, res_file)
228+
end
211229
files = String[]
212230
# Buildkite is limited to 5000 results per file https://buildkite.com/docs/test-analytics/importing-json
213231
for (i, chunk) in enumerate(Iterators.partition(data, 5000))
214-
name = replace(testset.description, r"[^a-zA-Z0-9]" => "_")
215-
res_file = joinpath(dir, "results_$(name)_$(i).json")
232+
res_file = joinpath(dir, "results_$(i).json")
216233
open(io -> json_repr(io, chunk), res_file, "w")
217234
push!(files, res_file)
218-
@debug "Saved $(basename(res_file)) ($(Base.format_bytes(filesize(res_file))))"
235+
@info "Saved $(basename(res_file)) ($(length(chunk)) results, $(Base.format_bytes(filesize(res_file))))"
236+
end
237+
for res_file in read_files
238+
rm(res_file)
239+
@debug "Deleted $(basename(res_file))"
219240
end
220241
return files
221242
end

test/runtests.jl

+4
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,8 @@ using Base: Experimental
1111

1212
include("choosetests.jl")
1313
include("testenv.jl")
14+
include("buildkitetestjson.jl")
15+
using .BuildkiteTestJSON
1416

1517
(; tests, net_on, exit_on_error, use_revise, seed) = choosetests(ARGS)
1618
tests = unique(tests)
@@ -341,6 +343,8 @@ cd(@__DIR__) do
341343
end
342344
end
343345

346+
write_testset_json_files(@__DIR__)
347+
344348
#=
345349
` Construct a testset on the master node which will hold results from all the
346350
test files run on workers and on node1. The loop goes through the results,

test/testdefs.jl

+2-4
Original file line numberDiff line numberDiff line change
@@ -91,11 +91,9 @@ function runtests(name, path, isolate=true; seed=nothing)
9191
if Base.get_bool_env("CI", false)
9292
# @info "Writing test result data to $(@__DIR__)"
9393
# Profile.clear()
94-
t = @elapsed result_files = write_testset_json_files(@__DIR__, ts)
94+
t = @elapsed result_file = serialize_testset_result_file(@__DIR__, ts)
9595
if t > 5
96-
sizes = map(f -> Base.format_bytes(filesize(f)), result_files)
97-
result_files_info = Dict(zip(result_files, sizes))
98-
@warn "Writing test result data was slow: $t seconds" result_files_info
96+
@warn "Writing test result data was slow: $t seconds" file=result_file size=Base.format_bytes(filesize(result_file))
9997
end
10098
# Profile.print(IOContext(stdout, :displaysize=>(1000,200)), noisefloor=1.0)
10199
end

0 commit comments

Comments
 (0)