Skip to content

Commit 9044d35

Browse files
authored
Merge pull request rails#49166 from aleksclark/ensure-identical-dump-files
ensure identical md5 sums for gzip schema cache
2 parents ea6f3f0 + 8889a26 commit 9044d35

File tree

2 files changed

+22
-0
lines changed

2 files changed

+22
-0
lines changed

activerecord/lib/active_record/connection_adapters/schema_cache.rb

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -471,6 +471,7 @@ def open(filename)
471471
File.atomic_write(filename) do |file|
472472
if File.extname(filename) == ".gz"
473473
zipper = Zlib::GzipWriter.new file
474+
zipper.mtime = 0
474475
yield zipper
475476
zipper.flush
476477
zipper.close

activerecord/test/cases/connection_adapters/schema_cache_test.rb

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -334,6 +334,27 @@ def test_marshal_dump_and_load_with_gzip
334334
tempfile.unlink
335335
end
336336

337+
def test_gzip_dumps_identical
338+
# Create an empty cache.
339+
cache = new_bound_reflection
340+
341+
tempfile_a = Tempfile.new(["schema_cache-", ".dump.gz"])
342+
# Dump it. It should get populated before dumping.
343+
cache.dump_to(tempfile_a.path)
344+
digest_a = Digest::MD5.file(tempfile_a).hexdigest
345+
sleep(1) # ensure timestamp changes
346+
tempfile_b = Tempfile.new(["schema_cache-", ".dump.gz"])
347+
# Dump it. It should get populated before dumping.
348+
cache.dump_to(tempfile_b.path)
349+
digest_b = Digest::MD5.file(tempfile_b).hexdigest
350+
351+
352+
assert_equal digest_a, digest_b
353+
ensure
354+
tempfile_a.unlink
355+
tempfile_b.unlink
356+
end
357+
337358
def test_data_source_exist
338359
assert @cache.data_source_exists?("courses")
339360
assert_not @cache.data_source_exists?("foo")

0 commit comments

Comments
 (0)