I can consistently reproduce a hang in the following place.
--> #0 /usr/lib/ruby/gems/1.8/gems/ruby-debug-base-0.9.3/lib/ruby-
debug-base.rb:74 in ''interrupt_last''
#1 /usr/lib/ruby/gems/1.8/gems/ruby- debug-0.9.3/bin/rdebug:100
#2 /usr/lib/ruby/gems/1.8/gems/activerecord-1.15.3/lib/
active_record/vendor/mysql.rb:1094 in ''read''
#3 /usr/lib/ruby/gems/1.8/gems/activerecord-1.15.3/lib/
active_record/vendor/mysql.rb:514 in ''read''
#4 /usr/lib/ruby/gems/1.8/gems/activerecord-1.15.3/lib/
active_record/vendor/mysql.rb:396 in ''read_query_result''
#5 /usr/lib/ruby/gems/1.8/gems/activerecord-1.15.3/lib/
active_record/vendor/mysql.rb:194 in ''real_query''
#6 /usr/lib/ruby/gems/1.8/gems/activerecord-1.15.3/lib/
active_record/vendor/mysql.rb:322 in ''query''
#7 /usr/lib/ruby/gems/1.8/gems/activerecord-1.15.3/lib/
active_record/connection_adapters/mysql_adapter.rb:243 in
''execute''
#8 /usr/lib/ruby/1.8/benchmark.rb:307 in ''realtime''
#9 /usr/lib/ruby/gems/1.8/gems/activerecord-1.15.3/lib/
active_record/connection_adapters/abstract_adapter.rb:110 in
''log''
#10 /usr/lib/ruby/gems/1.8/gems/activerecord- 1.15.3/lib/
active_record/connection_adapters/mysql_adapter.rb:243 in
''execute''
#11 /usr/lib/ruby/gems/1.8/gems/activerecord-1.15.3/lib/
active_record/connection_adapters/mysql_adapter.rb:275 in
''rollback_db_transaction''
#12 /usr/lib/ruby/gems/1.8/gems/activerecord-1.15.3/lib/
active_record/connection_adapters/abstract/database_statements.rb:64
in ''transaction''
#13 /usr/lib/ruby/gems/1.8/gems/activerecord-1.15.3/lib/
active_record/transactions.rb:95 in ''[]''
#14 /usr/lib/ruby/gems/1.8/gems/activerecord-1.15.3/lib/
active_record/transactions.rb:121 in ''transaction''
#15 /usr/lib/ruby/gems/1.8/gems/activerecord-1.15.3/lib/
active_record/transactions.rb:133 in ''save!''
#16 (eval):6
#17 /usr/lib/ruby/gems/1.8/gems/rails-1.2.3/lib/commands/runner.rb:
45 in ''read''
#18 /usr/local/lib/site_ruby/1.8/rubygems/custom_require.rb:27 in
''require''
#19 /tmp/test/script/runner:3
Here is a way to test it.
cd /tmp
rails test
cd test
script/generate model example data:binary
sed -i ''s/:binary/:binary, :limit=>128.megabyte/''
db/migrate/
001_create_examples.rb
echo "create database test_development;" | mysql -u root
rake db:migrate
echo -e ''data = ""\n25.megabyte.times { data << "
" }\nexample Example.new\nexample.data = data\nputs
"save"\nexample.save!'' > break
rdebug /tmp/test/script/runner break
Type "c" at the rdb prompt to start the script. If you don''t
have
rdebug, run "gem install ruby-debug".
Give the script about 10-15 seconds more after it prints "save".
Hit Ctrl+C.
Type "w" at the rdb prompt to see a stack trace. It should be similar
to the above trace.
To clean up:
echo "drop database test_development;" | mysql -u root
cd ..
rm -rf test
I don''t understand why it hangs. I also don''t understand why
it is
trying to rollback the transaction. As evidenced by the migration, we
set the limit to 128 megabytes. We are trying to add 25 megabytes of
data here. Why should it hang?
Here is some more information.
$ uname -a
Linux gicodex2 2.6.20-16-generic #2 SMP Thu Jun 7 20:19:32 UTC 2007
i686 GNU/Linux
$ cat /etc/issue.net
Ubuntu 7.04
$ rails --version
Rails 1.2.3
$ mysql --version
mysql Ver 14.12 Distrib 5.0.38, for pc-linux-gnu (i486) using
readline 5.2
I would appreciate any information on how to prevent hangs on large
blocks of data like this.
Thank you,
Rusty Burchfield
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups
"Ruby on Rails: Talk" group.
To post to this group, send email to
rubyonrails-talk-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org
To unsubscribe from this group, send email to
rubyonrails-talk-unsubscribe-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org
For more options, visit this group at
http://groups.google.com/group/rubyonrails-talk?hl=en
-~----------~----~----~----~------~----~------~--~---
On Jul 23, 6:41 pm, Rusty Burchfield <n...-KboFZ2jX1NmsTnJN9+BGXg@public.gmane.org> wrote:> Here is a way to test it. > > cd /tmp > rails test > cd test > script/generate model example data:binary > sed -i ''s/:binary/:binary, :limit=>128.megabyte/'' db/migrate/ > 001_create_examples.rb > echo "create database test_development;" | mysql -u root > rake db:migrate > echo -e ''data = ""\n25.megabyte.times { data << " " }\nexample > Example.new\nexample.data = data\nputs "save"\nexample.save!'' > break > rdebug /tmp/test/script/runner break > > Type "c" at the rdb prompt to start the script. If you don''t have > rdebug, run "gem install ruby-debug". > Give the script about 10-15 seconds more after it prints "save". > Hit Ctrl+C. > Type "w" at the rdb prompt to see a stack trace. It should be similar > to the above trace.Has anyone else been able to reproduce this? ~Rusty --~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "Ruby on Rails: Talk" group. To post to this group, send email to rubyonrails-talk-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org To unsubscribe from this group, send email to rubyonrails-talk-unsubscribe-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en -~----------~----~----~----~------~----~------~--~---
On Jul 24, 1:22 pm, Rusty Burchfield <n...-KboFZ2jX1NmsTnJN9+BGXg@public.gmane.org> wrote:> Has anyone else been able to reproduce this?It hangs on the same line when using edge rails (revision 7235). :( It does not hang with PostgreSQL as a backend. I have filed a bug here: http://dev.rubyonrails.org/ticket/9087 ~Rusty --~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "Ruby on Rails: Talk" group. To post to this group, send email to rubyonrails-talk-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org To unsubscribe from this group, send email to rubyonrails-talk-unsubscribe-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en -~----------~----~----~----~------~----~------~--~---
This might be different issue, however I have experienced problems with MS SQL in the past trying to add to much data at once (50 megs plus). It seemed to only handle a certain amount of data at once. The 25 megs you are sending could be to much for Mysql. Look into the Mysql docs for that information. It would also explain why postgres works and mysql doesn''t On Jul 25, 1:18 pm, Rusty Burchfield <n...-KboFZ2jX1NmsTnJN9+BGXg@public.gmane.org> wrote:> On Jul 24, 1:22 pm, Rusty Burchfield <n...-KboFZ2jX1NmsTnJN9+BGXg@public.gmane.org> wrote: > > > Has anyone else been able to reproduce this? > > It hangs on the same line when using edge rails (revision 7235). :( > > It does not hang with PostgreSQL as a backend. > > I have filed a bug here:http://dev.rubyonrails.org/ticket/9087 > > ~Rusty--~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "Ruby on Rails: Talk" group. To post to this group, send email to rubyonrails-talk-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org To unsubscribe from this group, send email to rubyonrails-talk-unsubscribe-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en -~----------~----~----~----~------~----~------~--~---
On Jul 24, 11:38 pm, Camo <csi...-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org> wrote:> This might be different issue, however I have experienced problems > with MS SQL in the past trying to add to much data at once (50 megs > plus). It seemed to only handle a certain amount of data at once. The > 25 megs you are sending could be to much for Mysql. Look into the > Mysql docs for that information. It would also explain why postgres > works and mysql doesn''tAfter some further testing, it breaks at around 8MB of data. Playing with sizes around 8388500 bytes (7.999MB), it sometimes generates a ActiveRecord::StatementInvalid exception that even crashes rdebug on occasion. The real exception is hidden behind 8MB of SQL data: /tmp/test/vendor/rails/activerecord/lib/active_record/ connection_adapters/abstract_adapter.rb:135:in `log'': Mysql::Error: #08S01Got a packet bigger than ''max_allowed_packet'' bytes My max_allowed_packet size is set to 16MB. Looking at the SQL data though, the spaces are sent as ''2020202020''... thus doubling the effective size. Why doesn''t ActiveRecord split the data into multiple packets? I highly doubt setting the max_allowed_packet too large is a good idea. Even if ActiveRecord is designed to be so limited, it shouldn''t hang. ~Rusty --~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "Ruby on Rails: Talk" group. To post to this group, send email to rubyonrails-talk-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org To unsubscribe from this group, send email to rubyonrails-talk-unsubscribe-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en -~----------~----~----~----~------~----~------~--~---
On Jul 25, 2:11 am, Rusty Burchfield <n...-KboFZ2jX1NmsTnJN9+BGXg@public.gmane.org> wrote:> My max_allowed_packet size is set to 16MB. Looking at the SQL data > though, the spaces are sent as ''2020202020''... thus doubling the > effective size. Why doesn''t ActiveRecord split the data into multiple > packets? I highly doubt setting the max_allowed_packet too large is a > good idea. > > Even if ActiveRecord is designed to be so limited, it shouldn''t hang.I guess it is MySQL that has the single-packet per query limitation. http://dev.mysql.com/doc/refman/5.0/en/packet-too-large.html It says the upper limit on packet size is 1GB. So the maximum BLOB size is about 512MB. I guess the 4GB size of the LONGBLOB is simply for show... ActiveRecord still shouldn''t hang when a packet is too large. In addition, increasing the server limit seems to have no effect. Does anyone know where the client settings for the mysql driver can be set? ~Rusty --~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "Ruby on Rails: Talk" group. To post to this group, send email to rubyonrails-talk-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org To unsubscribe from this group, send email to rubyonrails-talk-unsubscribe-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en -~----------~----~----~----~------~----~------~--~---
On Jul 25, 9:17 pm, Rusty Burchfield <n...-KboFZ2jX1NmsTnJN9+BGXg@public.gmane.org> wrote:> ActiveRecord still shouldn''t hang when a packet is too large. > > In addition, increasing the server limit seems to have no effect. > Does anyone know where the client settings for the mysql driver can be > set?The fix is all too simple. Install the native MySQL driver. This fixes the hang and the restriction on packet size. Here is a link to an old bug. http://dev.rubyonrails.org/ticket/1189 I don''t know the name of the native gem so I just installed the package for my OS. apt-get install libmysql-ruby ~Rusty --~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "Ruby on Rails: Talk" group. To post to this group, send email to rubyonrails-talk-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org To unsubscribe from this group, send email to rubyonrails-talk-unsubscribe-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en -~----------~----~----~----~------~----~------~--~---