Skip to content
Commits on Sep 20, 2012
  1. @alexreisner

    Fix out-of-date URL.

    alexreisner committed
Commits on Sep 14, 2012
  1. @jonleighton

    Revert "create a transaction object and point AR objects at that obje…

    jonleighton committed
    …ct during a"
    This reverts commit c24c885.
    Here's the explanation I just sent to @tenderlove:
    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 }
    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:
    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
    In my testing, this finalizers make GC quite expensive:
    Ruby 2.0 will have a native WeakRef implementation (via
    ObjectSpace::WeakMap), hence won't be reliant on finalizers:
    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:
    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!
Commits on Sep 7, 2012
  1. @tenderlove
Commits on Aug 30, 2012
  1. @fxn

    documents after_(commit|rollback)

    fxn committed
Commits on Aug 23, 2012
  1. @tenderlove
Commits on Aug 20, 2012
  1. @tenderlove
  2. @tenderlove

    fix whitespace errors

    tenderlove committed
Commits on Aug 12, 2012
  1. @daveyeu
Commits on May 21, 2012
  1. @chancancode

    Restore the frozen state on rollback. Fixes #6417.

    chancancode committed
    Currently, when saving a frozen record, an exception would be thrown
    which causes a rollback. However, there is a bug in active record that
    "defrost" the record as a side effect:
        >> t =
        => #<Topic id: nil, ...>
        >> t.freeze
        => #<Topic id: nil, ...>
        RuntimeError: can't modify a frozen Hash
        >> t.frozen?
        => false
        => true
    This patch fixes the bug by explictly restoring the frozen state on the
    attributes Hash after every rollback.
Commits on May 16, 2012
  1. @tenderlove

    Merge pull request #5535 from markmcspadden/issue_5527_rollbacks

    tenderlove committed
    Allow manual rollbacks in after_save to reset object correctly
Commits on May 9, 2012
  1. @gnufied
Commits on Mar 21, 2012
  1. @markmcspadden
Commits on Mar 13, 2012
  1. @carlosantoniodasilva
Commits on Jan 6, 2012
  1. @rafaelfranca
Commits on Dec 8, 2011
  1. @vijaydev

    fix nodocs

    vijaydev committed
Commits on Oct 5, 2011
  1. @jonleighton

    Revert "Raise error on unknown primary key."

    jonleighton committed
    This reverts commit ee2be43.
  2. @jonleighton

    Raise error on unknown primary key.

    jonleighton committed
    If we don't have a primary key when we ask for it, it's better to fail
    fast. Fixes GH #2307.
Commits on Jun 1, 2011
  1. @dafaqisdat
  2. @dafaqisdat
Commits on Apr 4, 2011
  1. @miloops @josevalim

    Use IM when trying to load records using ID.

    miloops committed with josevalim
    Signed-off-by: José Valim <>
Commits on Feb 15, 2011
  1. @miloops

    Merge remote branch 'rails/master' into identity_map

    miloops committed
Commits on Jan 31, 2011
  1. @jfirebaugh @spastorino

    Use run_callbacks; the generated _run_<name>_callbacks method is not …

    jfirebaugh committed with spastorino
    …a public interface.
    Signed-off-by: Santiago Pastorino <>
Commits on Jan 18, 2011
  1. @tenderlove

    remove useless conditional

    tenderlove committed
Commits on Dec 28, 2010
  1. @spastorino
Commits on Dec 20, 2010
  1. @miloops

    Merge remote branch 'rails/master' into identity_map

    miloops committed
Commits on Dec 10, 2010
  1. @fxn

    reviews commit 53bbbcc

    fxn committed
Commits on Dec 8, 2010
  1. @evtuhovich

    Fix doc about nested transaction rollback

    evtuhovich committed
    Because AR::Rollback do not reraise and inner transaction is not "real"
    nothing rollback at all
Commits on Nov 28, 2010
  1. @josevalim

    Partialy revert f1c13b0

    josevalim committed
Commits on Nov 19, 2010
  1. @miloops
Commits on Nov 9, 2010
  1. @spastorino
  2. @dchelimsky @spastorino

    use persisted? instead of new_record? wherever possible

    dchelimsky committed with spastorino
    - persisted? is the API defined in ActiveModel
    - makes it easier for extension libraries to conform to ActiveModel APIs
      without concern for whether the extended object is specifically
    [#5927 state:committed]
    Signed-off-by: Santiago Pastorino <>
Commits on Oct 15, 2010
  1. @carllerche
Commits on Jun 20, 2010
  1. @fxn

    Merge remote branch 'rails/master'

    fxn committed
Commits on Jun 18, 2010
  1. @bdurand @jeremy

    Fix bug with rolling back frozen attributes.

    bdurand committed with jeremy
    Signed-off-by: Jeremy Kemper <>
Commits on Jun 16, 2010
  1. @rizwanreza
Something went wrong with that request. Please try again.