Skip to content

Commit 00a97fe

Browse files
authored
GH-48776: [CI][Ruby][Windows] Ensure removing temporary files (#48777)
### Rationale for this change We can't remove a file if someone is still opening the file on Windows. We use `Tempfile` for tests. It removes associated file when it's GC-ed. If we still open the associated file, the GC process reports the following warning: ```text warning: Exception in finalizer #<Tempfile::FinalizerManager:0x000001fb3c15ac00 @ open_files={}, @ path="D:/a/_temp/batch20260107-2120-ddy0e0.arrow", @ pid=2120, @ unlinked=false> ``` ### What changes are included in this PR? Ensure removing temporary files. ### Are these changes tested? Yes. ### Are there any user-facing changes? Yes. Only for `gparquet_arrow_file_reader_close()`. * GitHub Issue: #48776 Authored-by: Sutou Kouhei <[email protected]> Signed-off-by: Sutou Kouhei <[email protected]>
1 parent 0760523 commit 00a97fe

File tree

9 files changed

+52
-9
lines changed

9 files changed

+52
-9
lines changed

c_glib/parquet-glib/arrow-file-reader.cpp

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -181,6 +181,24 @@ gparquet_arrow_file_reader_new_path(const gchar *path, GError **error)
181181
}
182182
}
183183

184+
/**
185+
* gparquet_arrow_file_reader_close:
186+
* @reader: A #GParquetArrowFileReader.
187+
*
188+
* Close the reader.
189+
*
190+
* Since: 23.0.0
191+
*/
192+
void
193+
gparquet_arrow_file_reader_close(GParquetArrowFileReader *reader)
194+
{
195+
auto parquet_arrow_file_reader = gparquet_arrow_file_reader_get_raw(reader);
196+
auto parquet_reader = parquet_arrow_file_reader->parquet_reader();
197+
if (parquet_reader) {
198+
parquet_reader->Close();
199+
}
200+
}
201+
184202
/**
185203
* gparquet_arrow_file_reader_read_table:
186204
* @reader: A #GParquetArrowFileReader.

c_glib/parquet-glib/arrow-file-reader.h

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,10 @@ GPARQUET_AVAILABLE_IN_0_11
4343
GParquetArrowFileReader *
4444
gparquet_arrow_file_reader_new_path(const gchar *path, GError **error);
4545

46+
GPARQUET_AVAILABLE_IN_23_0
47+
void
48+
gparquet_arrow_file_reader_close(GParquetArrowFileReader *reader);
49+
4650
GPARQUET_AVAILABLE_IN_0_11
4751
GArrowTable *
4852
gparquet_arrow_file_reader_read_table(GParquetArrowFileReader *reader, GError **error);

ruby/red-arrow/test/test-feather.rb

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@ def setup
2929
begin
3030
yield(@output)
3131
ensure
32+
GC.start # Ensure freeing Arrow::Table that refers @output.path.
3233
@output.close!
3334
end
3435
end

ruby/red-arrow/test/test-record-batch-stream-reader.rb

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,10 @@
1616
# under the License.
1717

1818
class RecordBatchStreamReaderTest < Test::Unit::TestCase
19+
def teardown
20+
GC.start # Ensure freeing Arrow::RecordBatch that refers tempfile.path.
21+
end
22+
1923
test("write/read") do
2024
fields = [
2125
Arrow::Field.new("uint8", :uint8),

ruby/red-arrow/test/test-table.rb

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -747,6 +747,10 @@ def create_output(extension)
747747
@file.path
748748
end
749749

750+
def teardown
751+
GC.start # Ensure freeing Arrow::Table that refers @file.path.
752+
end
753+
750754
sub_test_case("save: auto detect") do
751755
test("arrow") do
752756
output = create_output(".arrow")

ruby/red-parquet/lib/parquet/arrow-file-reader.rb

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,8 @@
1717

1818
module Parquet
1919
class ArrowFileReader
20+
include Arrow::BlockClosable
21+
2022
def each_row_group
2123
return to_enum(__method__) {n_row_groups} unless block_given?
2224

ruby/red-parquet/lib/parquet/arrow-file-writer.rb

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,8 @@
1717

1818
module Parquet
1919
class ArrowFileWriter
20+
include Arrow::BlockClosable
21+
2022
# Write data to Apache Parquet.
2123
#
2224
# @return [void]

ruby/red-parquet/test/test-arrow-table.rb

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,7 @@ def setup
5050
begin
5151
yield(@output)
5252
ensure
53+
GC.start # Ensure freeing Arrow::Table that refers @output.path.
5354
@output.close!
5455
end
5556
end

ruby/red-parquet/test/test-boolean-statistics.rb

Lines changed: 16 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -17,15 +17,22 @@
1717

1818
class TestBooleanStatistics < Test::Unit::TestCase
1919
def setup
20-
file = Tempfile.open(["data", ".parquet"])
21-
array = Arrow::BooleanArray.new([nil, false, true])
22-
table = Arrow::Table.new("boolean" => array)
23-
writer = Parquet::ArrowFileWriter.new(table.schema, file.path)
24-
chunk_size = 1024
25-
writer.write_table(table, chunk_size)
26-
writer.close
27-
reader = Parquet::ArrowFileReader.new(file.path)
28-
@statistics = reader.metadata.get_row_group(0).get_column_chunk(0).statistics
20+
Tempfile.create(["data", ".parquet"]) do |file|
21+
array = Arrow::BooleanArray.new([nil, false, true])
22+
table = Arrow::Table.new("boolean" => array)
23+
Parquet::ArrowFileWriter.open(table.schema, file.path) do |writer|
24+
chunk_size = 1024
25+
writer.write_table(table, chunk_size)
26+
writer.close
27+
end
28+
Parquet::ArrowFileReader.open(file.path) do |reader|
29+
@statistics =
30+
reader.metadata.get_row_group(0).get_column_chunk(0).statistics
31+
yield
32+
@statistics = nil
33+
end
34+
GC.start # Ensure freeing @statistics that refers file.path.
35+
end
2936
end
3037

3138
def test_min

0 commit comments

Comments
 (0)