This is an automated email from the ASF dual-hosted git repository.
kou pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/arrow.git
The following commit(s) were added to refs/heads/main by this push:
new de3130ede1 GH-39488: [Ruby] Add support for ChunkedArray in Ractor
(#39490)
de3130ede1 is described below
commit de3130ede1a2db7bbe9e129f21856ee80de0f8cb
Author: Sutou Kouhei <[email protected]>
AuthorDate: Mon Jan 8 07:21:00 2024 +0900
GH-39488: [Ruby] Add support for ChunkedArray in Ractor (#39490)
### Rationale for this change
We can't use `@ cache ||= build_cache` idiom in Ractor because Ractor
requires that shared objects are immutable.
### What changes are included in this PR?
Compute caches before making ChunkedArray immutable.
### Are these changes tested?
Yes.
### Are there any user-facing changes?
Yes.
* Closes: #39488
Authored-by: Sutou Kouhei <[email protected]>
Signed-off-by: Sutou Kouhei <[email protected]>
---
ruby/red-arrow/lib/arrow/chunked-array.rb | 8 +++++++
ruby/red-arrow/test/helper/omittable.rb | 5 ++++
.../test/{helper/omittable.rb => test-ractor.rb} | 28 ++++++++++------------
3 files changed, 26 insertions(+), 15 deletions(-)
diff --git a/ruby/red-arrow/lib/arrow/chunked-array.rb
b/ruby/red-arrow/lib/arrow/chunked-array.rb
index 7d83becc6d..0cdd9b6a6d 100644
--- a/ruby/red-arrow/lib/arrow/chunked-array.rb
+++ b/ruby/red-arrow/lib/arrow/chunked-array.rb
@@ -24,6 +24,14 @@ module Arrow
include GenericTakeable
include InputReferable
+ def freeze
+ unless frozen?
+ # Ensure caching
+ chunks
+ end
+ super
+ end
+
def to_arrow
self
end
diff --git a/ruby/red-arrow/test/helper/omittable.rb
b/ruby/red-arrow/test/helper/omittable.rb
index a1c0334b63..8e1564be47 100644
--- a/ruby/red-arrow/test/helper/omittable.rb
+++ b/ruby/red-arrow/test/helper/omittable.rb
@@ -17,6 +17,11 @@
module Helper
module Omittable
+ def require_ruby(major, minor, micro=0)
+ return if (RUBY_VERSION <=> "#{major}.#{minor}.#{micro}") >= 0
+ omit("Require Ruby #{major}.#{minor}.#{micro} or later: #{RUBY_VERSION}")
+ end
+
def require_gi_bindings(major, minor, micro)
return if GLib.check_binding_version?(major, minor, micro)
message =
diff --git a/ruby/red-arrow/test/helper/omittable.rb
b/ruby/red-arrow/test/test-ractor.rb
similarity index 57%
copy from ruby/red-arrow/test/helper/omittable.rb
copy to ruby/red-arrow/test/test-ractor.rb
index a1c0334b63..daf674d135 100644
--- a/ruby/red-arrow/test/helper/omittable.rb
+++ b/ruby/red-arrow/test/test-ractor.rb
@@ -15,22 +15,20 @@
# specific language governing permissions and limitations
# under the License.
-module Helper
- module Omittable
- def require_gi_bindings(major, minor, micro)
- return if GLib.check_binding_version?(major, minor, micro)
- message =
- "Require gobject-introspection #{major}.#{minor}.#{micro} or later: " +
- GLib::BINDING_VERSION.join(".")
- omit(message)
- end
+class RactorTest < Test::Unit::TestCase
+ include Helper::Omittable
- def require_gi(major, minor, micro)
- return if GObjectIntrospection::Version.or_later?(major, minor, micro)
- message =
- "Require GObject Introspection #{major}.#{minor}.#{micro} or later: " +
- GObjectIntrospection::Version::STRING
- omit(message)
+ ractor
+ test("ChunkedArray") do
+ require_ruby(3, 1, 0)
+ array = Arrow::Array.new([1, 2, 3])
+ chunked_array = Arrow::ChunkedArray.new([array])
+ Ractor.make_shareable(chunked_array)
+ ractor = Ractor.new do
+ recived_chunked_array = Ractor.receive
+ recived_chunked_array.chunks
end
+ ractor.send(chunked_array)
+ assert_equal([array], ractor.take)
end
end