You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@avro.apache.org by to...@apache.org on 2015/07/10 17:20:43 UTC

svn commit: r1690276 - in /avro/trunk: CHANGES.txt lang/ruby/Gemfile lang/ruby/lib/avro/data_file.rb lang/ruby/test/test_datafile.rb

Author: tomwhite
Date: Fri Jul 10 15:20:43 2015
New Revision: 1690276

URL: http://svn.apache.org/r1690276
Log:
AVRO-1697. Ruby: Add support for the Snappy codec to the Ruby library. Contributed by Daniel Schierbeck.

Modified:
    avro/trunk/CHANGES.txt
    avro/trunk/lang/ruby/Gemfile
    avro/trunk/lang/ruby/lib/avro/data_file.rb
    avro/trunk/lang/ruby/test/test_datafile.rb

Modified: avro/trunk/CHANGES.txt
URL: http://svn.apache.org/viewvc/avro/trunk/CHANGES.txt?rev=1690276&r1=1690275&r2=1690276&view=diff
==============================================================================
--- avro/trunk/CHANGES.txt (original)
+++ avro/trunk/CHANGES.txt Fri Jul 10 15:20:43 2015
@@ -95,6 +95,9 @@ Trunk (not yet released)
     AVRO-1693. Ruby: Allow writing arbitrary metadata to data files.
     (Daniel Schierbeck via tomwhite)
 
+    AVRO-1697. Ruby: Add support for the Snappy codec to the Ruby library.
+    (Daniel Schierbeck via tomwhite)
+
   BUG FIXES
 
     AVRO-1553. Java: MapReduce never uses MapOutputValueSchema (tomwhite)

Modified: avro/trunk/lang/ruby/Gemfile
URL: http://svn.apache.org/viewvc/avro/trunk/lang/ruby/Gemfile?rev=1690276&r1=1690275&r2=1690276&view=diff
==============================================================================
--- avro/trunk/lang/ruby/Gemfile (original)
+++ avro/trunk/lang/ruby/Gemfile Fri Jul 10 15:20:43 2015
@@ -17,3 +17,4 @@ source 'https://rubygems.org'
 gem 'rake'
 gem 'echoe'
 gem 'multi_json'
+gem 'snappy'

Modified: avro/trunk/lang/ruby/lib/avro/data_file.rb
URL: http://svn.apache.org/viewvc/avro/trunk/lang/ruby/lib/avro/data_file.rb?rev=1690276&r1=1690275&r2=1690276&view=diff
==============================================================================
--- avro/trunk/lang/ruby/lib/avro/data_file.rb (original)
+++ avro/trunk/lang/ruby/lib/avro/data_file.rb Fri Jul 10 15:20:43 2015
@@ -333,8 +333,31 @@ module Avro
       end
     end
 
+    class SnappyCodec
+      def codec_name; 'snappy'; end
+
+      def decompress(data)
+        load_snappy!
+        Snappy.inflate(data)
+      end
+
+      def compress(data)
+        load_snappy!
+        Snappy.deflate(data)
+      end
+
+      private
+
+      def load_snappy!
+        require 'snappy' unless defined?(Snappy)
+      rescue LoadError
+        raise LoadError, "Snappy compression is not available, please install the `snappy` gem."
+      end
+    end
+
     DataFile.register_codec NullCodec
     DataFile.register_codec DeflateCodec
+    DataFile.register_codec SnappyCodec
 
     # TODO this constant won't be updated if you register another codec.
     # Deprecated in favor of Avro::DataFile::codecs

Modified: avro/trunk/lang/ruby/test/test_datafile.rb
URL: http://svn.apache.org/viewvc/avro/trunk/lang/ruby/test/test_datafile.rb?rev=1690276&r1=1690275&r2=1690276&view=diff
==============================================================================
--- avro/trunk/lang/ruby/test/test_datafile.rb (original)
+++ avro/trunk/lang/ruby/test/test_datafile.rb Fri Jul 10 15:20:43 2015
@@ -167,6 +167,19 @@ JSON
     assert_equal records, ['a' * 10_000]
   end
 
+  def test_snappy
+    Avro::DataFile.open('data.avr', 'w', '"string"', :snappy) do |writer|
+      writer << 'a' * 10_000
+    end
+    assert(File.size('data.avr') < 600)
+
+    records = []
+    Avro::DataFile.open('data.avr') do |reader|
+      reader.each {|record| records << record }
+    end
+    assert_equal records, ['a' * 10_000]
+  end
+
   def test_append_to_deflated_file
     schema = Avro::Schema.parse('"string"')
     writer = Avro::IO::DatumWriter.new(schema)