aboutsummaryrefslogtreecommitdiffstats
Commit message (Collapse)AuthorAgeFilesLines
* Don't do the rollback in #commitJon Leighton2012-09-152-18/+7
| | | | | The caller needs to have knowledge of the rollback either way, so do it all in the caller (#transaction)
* Store the transaction number in the transaction objectJon Leighton2012-09-155-13/+30
| | | | This avoids us having to manually increment and decrement it.
* Start to tease out transaction handling into a state machineJon Leighton2012-09-156-87/+158
|
* Revert "create a transaction object and point AR objects at that object ↵Jon Leighton2012-09-154-55/+12
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | during a" This reverts commit c24c885209ac2334dc6f798c394a821ee270bec6. Here's the explanation I just sent to @tenderlove: Hey, I've been thinking about about the transaction memory leak thing that we were discussing. Example code: post = nil Post.transaction do N.times { post = Post.create } end Post.transaction is going to create a real transaction and there will also be a (savepoint) transaction inside each Post.create. In an idea world, we'd like all but the last Post instance to be GC'd, and for the last Post instance to receive its after_commit callback when Post.transaction returns. I can't see how this can work using your solution where the Post itself holds a reference to the transaction it is in; when Post.transaction returns, control does not switch to any of Post's instance methods, so it can't trigger the callbacks itself. What we really want is for the transaction itself to hold weak references to the objects within the transaction. So those objects can be GC'd, but if they are not GC'd then the transaction can iterate them and execute their callbacks. I've looked into WeakRef implementations that are available. On 1.9.3, the stdlib weakref library is broken and we shouldn't use it. There is a better implementation here: https://github.com/bdurand/ref/blob/master/lib/ref/weak_reference/pure_ruby.rb We could use that, either by pulling in the gem or just copying the code in, but it still suffers from the limitation that it uses ObjectSpace finalizers. In my testing, this finalizers make GC quite expensive: https://gist.github.com/3722432 Ruby 2.0 will have a native WeakRef implementation (via ObjectSpace::WeakMap), hence won't be reliant on finalizers: http://bugs.ruby-lang.org/issues/4168 So the ultimate solution will be for everyone to use Ruby 2.0, and for us to just use ObjectSpace::WeakMap. In the meantime, we have basically 3 options: The first is to leave it as it is. The second is to use a finalizer-based weakref implementation and take the GC perf hit. The final option is to store object ids rather than the actual objects. Then use ObjectSpace._id2ref to deference the objects at the end of the transaction, if they exist. This won't stop memory use growing within the transaction, but it'll grow more slowly. I benchmarked the performance of _id2ref this if the object does or does not exist: https://gist.github.com/3722550 If it does exist it seems decent, but it's hugely more expensive if it doesn't, probably because we have to do the rescue nil. Probably most of the time the objects will exist. However the point of doing this optimisation is to allow people to create a large number of objects inside a transaction and have them be GC'd. So for that use case, we'd be replacing one problem with another. I'm not sure which of the two problems is worse. My feeling is that we should just leave this for now and come back to it when Ruby 2.0 is out. I'm going to revert your commit because I can't see how it solves this. Hope you don't mind... if I've misunderstood then let me know! Jon
* Move queue classes to ActiveSupportSantiago Pastorino2012-09-1417-182/+180
|
* Merge pull request #7642 from lest/patch-1José Valim2012-09-141-0/+16
|\ | | | | update CHANGELOG
| * update CHANGELOGSergey Nartimov2012-09-141-0/+16
|/ | | | | Add entry about 245941101b1ea00a9b1af613c20b0ee994a43946 and 95be790ece75710f2588558a6d5f40fd09543b97.
* Merge pull request #7635 from arunagw/warning_removed_shadowing_variableJosé Valim2012-09-141-2/+2
|\ | | | | warning removed: shadowing outer local variable - message
| * warning removed: shadowing outer local variable - messageArun Agrawal2012-09-141-2/+2
| |
* | Merge pull request #7634 from arunagw/build_fix_actionmailerJosé Valim2012-09-141-0/+1
|\ \ | | | | | | Build fix for ActionMailer
| * | Build fix for ActionMailerArun Agrawal2012-09-141-0/+1
| |/ | | | | | | | | | | See http://travis-ci.org/#!/rails/rails/jobs/2444632
* | Merge pull request #7637 from NARKOZ/patch-3Jeremy Kemper2012-09-131-1/+1
|\ \ | |/ |/| use presence method instead of checking for blank
| * use presence method instead of checking for blankNihad Abbasov2012-09-141-1/+1
|/
* Merge pull request #7616 from lest/null-session-forgery-protectionMichael Koziarski2012-09-134-33/+159
|\ | | | | Implement :null_session CSRF protection method
| * Implement :null_session CSRF protection methodSergey Nartimov2012-09-134-33/+159
| | | | | | | | | | | | | | | | It's further work on CSRF after 245941101b1ea00a9b1af613c20b0ee994a43946. The :null_session CSRF protection method provide an empty session during request processing but doesn't reset it completely (as :reset_session does).
* | Merge pull request #7628 from Pranas/deep_merge_with_blockRafael Mendonça França2012-09-133-4/+23
|\ \ | | | | | | Allow passing block to deep_merge and deep_merge!
| * | Allow passing block to deep_merge and deep_merge!Pranas Kiziela2012-09-133-4/+23
|/ / | | | | | | | | Hash#merge accepts block that you can use to customize how hash values are merged. This change makes merge and deep_merge compatible.
* | Copy-edit deprecation relared documentation [ci skip]Rafael Mendonça França2012-09-135-74/+51
| |
* | Merge pull request #7524 from al2o3cr/store_booleanRafael Mendonça França2012-09-134-9/+67
|\ \ | | | | | | Add boolean type conversion for AR::Store
| * | refactor store_accessorMatt Jones2012-09-134-9/+67
|/ /
* | Merge pull request #6348 from LTe/no_global_depreactationsCarlos Antonio da Silva2012-09-139-98/+412
|\ \ | | | | | | Allow ActiveSupport::Deprecation features to be used by rails applications and library authors
| * | Change ActiveSupport::Deprecation to class.Piotr Niełacny2012-09-139-221/+405
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | ActiveSupport::Deprecation is now a class rather than a module. You can get instance of ActiveSupport::Deprecation calling #instance method. ActiveSupport::Deprecation.instance But when you need to get new object od ActiveSupport::Deprecation you need to just call #new. @instance = ActiveSupport::Deprecation.new Since you can create a new object, you can change the version and the name of the library where the deprecator concerned. ActiveSupport::Deprecation.new('2.0', 'MyGem') If you need use another deprecator instance you can select it in the options of deprecate method. deprecate :method, :deprecator => deprecator_instance Documentation has been updated.
| * | extend ActiveSupport::Deprecation with self, allow other objects to ↵Robert Pankowecki2012-09-136-102/+232
|/ / | | | | | | | | | | | | | | | | | | extend/include it also. test local deprecation deprecator object Test ActiveSupport::Deprecation when included
* | Merge pull request #7623 from tchandy/masterRafael Mendonça França2012-09-121-1/+1
|\ \ | | | | | | update ConnectionAdapter::Column#type_cast_code to be compatible with rails 3.2 branch
| * | update ConnectionAdaptar::Column#type_cast_code to be compatible with 3.2 branchThiago Pradi2012-09-131-1/+1
|/ /
* | Merge pull request #7614 from frodsan/scm_agnosticRafael Mendonça França2012-09-126-65/+90
|\ \ | | | | | | add --skip-ignore and --skip-keeps options to generators.
| * | change app/plugin generators to be more SCM agnosticDerek Prior2012-09-126-65/+90
|/ / | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Users of other SCM's can now generate rails apps that will add the "empty" directories to source control, but will not have a useless .gitignore or mis-named .gitkeep files. * Change `rails new` and `rails plugin new` generators to name the `.gitkeep` as `.keep` in a more SCM-agnostic way. * Change `--skip-git` option to only skip the `.gitignore` file and still generate the `.keep` files. * Add `--skip-keeps` option to skip the `.keep` files. It closes #2800.
* | Pass in the model class rather than engineJon Leighton2012-09-133-8/+8
| | | | | | | | | | | | | | | | | | In some circumstances engine was Arel::Table.engine which for separate reasons was an ActiveRecord::Model::DeprecationProxy, which caused a deprecation warning. In any case, we want the actual model class here, since we want to use it to infer information about associations.
* | Refactor to remove some duplicationJon Leighton2012-09-122-37/+24
| |
* | Fix nested association referencesJon Leighton2012-09-123-41/+36
| | | | | | | | | | Previously the reflection would be looked up on the wrong class. However the test passed because the examples referred back to themselves.
* | Merge pull request #7273 from beerlington/foreign_key_model_queriesJon Leighton2012-09-127-5/+158
|\ \ | | | | | | Convert model name to foreign key in queries
| * | Accept belongs_to assoc. keys in ActiveRecord queriesbeerlington2012-09-117-5/+158
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Allows you to specify the model association key in a belongs_to relationship instead of the foreign key. The following queries are now equivalent: Post.where(:author_id => Author.first) Post.where(:author => Author.first) PriceEstimate.where(:estimate_of_type => 'Treasure', :estimate_of_id => treasure) PriceEstimate.where(:estimate_of => treasure)
* | | Merge pull request #7622 from marcandre/docCarlos Antonio da Silva2012-09-121-8/+2
|\ \ \ | | | | | | | | Update documentation for CollectionProxy [ci skip]
| * | | Update documentation for CollectionProxyMarc-Andre Lafortune2012-09-121-8/+2
| | | |
* | | | Remove the queue configuration from the environments templates since theRafael Mendonça França2012-09-122-4/+1
| | | | | | | | | | | | | | | | default is the SynchronousQueue.
* | | | Updating the documentation to ActionMailer::Base.queueRafael Mendonça França2012-09-123-4/+16
| | | |
* | | | Define a SynchronousQueue for test in Action Pack.Rafael Mendonça França2012-09-122-6/+10
| | | | | | | | | | | | | | | | We don't need to rely on rails/queueing in Action Pack tests
* | | | Allow users to configure the queue for the mailersRafael Mendonça França2012-09-124-13/+22
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | This allow the users to do: config.action_mailer.queue = MyQueue.new and class UsersMailer < ActionMailer::Base self.queue = MyQueue.new end
* | | | Use the SynchronousQueue as default in production and development.Rafael Mendonça França2012-09-123-9/+10
|/ / / | | | | | | | | | | | | We should not let the users use the ThreadedConsumer without know about the risks
* | | Merge pull request #7605 from revans/masterCarlos Antonio da Silva2012-09-121-1/+11
|\ \ \ | | | | | | | | | | | | Add docs to inheritance_column method, explaining how to override it to be able to use the "type" column without STI [ci skip]
| * | | Added additional comments on how to use the "type" column withoutRobert Evans2012-09-121-1/+11
| | | | | | | | | | | | | | | | | | | | single-table inheritance by overriding it in your ActiveRecord Model.
* | | | Merge pull request #7521 from graceliu/fix_database_url_supportRafael Mendonça França2012-09-127-32/+275
|\ \ \ \ | | | | | | | | | | Fixed support for DATABASE_URL for rake db tasks
| * | | | fixed support for DATABASE_URL for rake db tasksGrace Liu2012-09-117-32/+275
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | - added tests to confirm establish_connection uses DATABASE_URL and Rails.env correctly even when no arguments are passed in. - updated rake db tasks to support DATABASE_URL, and added tests to confirm correct behavior for these rake tasks. (Removed establish_connection call from some tasks since in those cases the :environment task already made sure the function would be called) - updated Resolver so that when it resolves the database url, it removes hash values with empty strings from the config spec (e.g. to support connection to postgresql when no username is specified).
* | | | | Merge pull request #7612 from arunagw/build_fix_queueCarlos Antonio da Silva2012-09-121-0/+6
|\ \ \ \ \ | | | | | | | | | | | | Fix build Rails.queue
| * | | | | Fix build Rails.queueArun Agrawal2012-09-121-0/+6
| |/ / / / | | | | | | | | | | | | | | | see 34b23e7110a3a13cf157608cefc9b5701017bf39
* | | | | Merge pull request #7615 from NARKOZ/patch-2Carlos Antonio da Silva2012-09-121-1/+1
|\ \ \ \ \ | | | | | | | | | | | | Remove '.rb' from require call
| * | | | | remove '.rb' from require callNihad Abbasov2012-09-121-1/+1
| |/ / / /
* | | | | Merge pull request #7610 from arunagw/warning_removed_action_packJosé Valim2012-09-122-2/+0
|\ \ \ \ \ | |/ / / / |/| | | | warning removed.
| * | | | warning removed.Arun Agrawal2012-09-122-2/+0
|/ / / / | | | | | | | | | | | | | | | | 1. Unused variable 2. possibly useless use of a variable in void context
* | | | Action Mailer async flag is true by default using a Synchronous implSantiago Pastorino2012-09-1110-79/+61
| | | |