I have attached another patch to AVRO-1499 that solves a big unicode encoding problem. Because we are using string.size instead of string.bytesize, we end up writing the number of characters instead of the number of bytes in Ruby 1.9+. I also took the liberty of removing the collect_hash mixin. If someone could review it, that would be great.
I had to set up a VM to test this against Ruby 1.8, because I can’t install Ruby 1.8 on my OSX work station anymore.** There is still a failing test on Ruby 2.0+, due to encoding of union[double, long] types. I have fixed that in my fork as well, but that one is a bit more involved. A CI server that runs against different the different language versions would be a great addition to this project, to make verifying changes less of a pain. Willem ** This s the main reason why I suggest dropping support for Ruby 1.8. Yes, it is possible to build the gem in a way to be compatible with Ruby 1.8 and up, but it is really deterring people from becoming contributors. On Jun 26, 2014, at 8:01 AM, Martin Kleppmann <mar...@kleppmann.com> wrote: > IMHO it's not a big problem to support many versions of Ruby in a single gem. > I would much rather have one gem that works in all widespread versions of > Ruby (1.8.7, 1.9.3, 2.0, 2.1) than the complexity of multiple branches or > forks. > > On the whole, Avro should work in modern versions of Ruby; if anything is > broken, we should be able to fix it without breaking compatibility with 1.8. > For example, this patch I posted a while ago fixes a major encoding issue > under Ruby 2.0:https://issues.apache.org/jira/browse/AVRO-1499 -- I'd love > someone to give it a review please, so that we can get it committed. > > Continuing to support Ruby 1.8 means we can't use Ruby 1.9 language features > (e.g. the compact syntax for hashes with symbol keys) which is a shame, but > not a major problem IMHO. All the unicode handling can be dynamically > enabled/disabled at runtime depending on whether the Ruby VM supports it. > > Willem, it would be great to get your changes merged upstream. I'm happy to > help you get them committed. Is there something in particular that is forcing > you to drop 1.8 support? > > As long as Avro works in modern versions of Ruby, and supporting Ruby 1.8.7 > isn't overly burdensome, I think it would be ok to drop Ruby 1.8.7 support in > Avro 1.8.0, but keep it until then. > > Martin > > On 26 Jun 2014, at 03:46, Sean Busbey <bus...@cloudera.com> wrote: >> Personally, I'd rather see #2. >> >> I think it's very hard to know what the current use of Ruby 1.8 is. Support >> from the MRI community only ended ~1 year ago[1]. JRuby still supports >> running in 1.8 mode. They'll be dropping it in their next major release, >> but there isn't a schedule for that yet and they expect the current major >> release line to continue for some time after that[2]. Additionally, Heroku >> won't be ending support until the end of this month[3]. Even after that, >> it's not clear to me that they won't allow users to keep using it. >> >> As mentioned previously I'm a JRuby-in-1.9-mode user and I usually just >> work with the Java libraries directly. So this won't directly impact me, >> but I agree that it sucks when upgrades break things. So I don't feel like >> #1 is an option. >> >> We could also investigate maintaining a single gem that just had two >> implementations with in it, with the active one determined by the Ruby >> version. >> >> [1]: https://www.ruby-lang.org/en/news/2013/06/30/we-retire-1-8-7/ >> [2]: https://groups.google.com/d/msg/jruby-users/qmLpZ7qDwZo/J_iYViplcq4J >> [3]: https://devcenter.heroku.com/articles/ruby-support#ruby-versions >> >> -Sean >> >> On Wed, Jun 25, 2014 at 6:41 PM, Doug Cutting <cutt...@apache.org> wrote: >> >>> On Wed, Jun 25, 2014 at 2:16 AM, Willem van Bergen <wil...@vanbergen.org> >>> wrote: >>>> It's possible to have 2 different gems, but this is not very common in >>> the Ruby world. >>>> Because Ruby 1.8 is not maintained anymore, not even for security >>> issues, most >>>> people have moved on to newer versions. >>> >>> I can see a couple of options: >>> 1. Assume that no one actually uses Ruby 1.8 anymore, and upgrade to >>> 1.9 in Avro 1.7.7. A change that doesn't break anyone isn't >>> incompatible. >>> 2. Assume some folks still use Ruby 1.8 and add a ruby1.9 fork in >>> Avro 1.7.7. Ruby users who upgrade to Avro 1.7.7 would need to opt-in >>> to the Ruby 1.9 version. >>> 3. Wait until we release 1.8.0 to upgrade Avro to support Ruby 1.9. >>> >>> (3) seems like a bad option unless we're confident we're going to >>> release a 1.8.0 soon, which I am not. Folks hate getting broken by >>> upgrades. Avro is a dependency of a lot of Java applications. Having >>> an incompatible release makes it hard for one component to upgrade >>> without forcing all to upgrade. Either you end up with a broken stack >>> or with one that can never upgrade. Which of (1) or (2) seems more >>> palatable to Ruby folks? Are there other options? >>> >>> Doug >>> >> >> >> >> -- >> Sean >