OH, man sorry I misunderstood that issue.  I have been starring at this for
too long :)

Yes, that totally could be it.  I'll apply that patch and should be able to
confirm it or not.

On Mon, Feb 26, 2018 at 1:02 PM, Mike Bayer <mike...@zzzcomputing.com>
wrote:

> On Mon, Feb 26, 2018 at 3:58 PM, Cecil Rock <cecil.r...@gmail.com> wrote:
> > Yeah I saw those issues, but they did not seem like they would be
> related to
> > what we're seeing :(
> >
> > I had instrumented the identity_map earlier and could not catch an
> instance
> > where it was doing the wrong thing.  The GC being guilty or maybe an
> obscure
> > bug higher in the stack feels more likely.  It is helpful to know that a
> bug
> > doesn't come to mind with this.  I'll see if I can mess with the GC and
> run
> > that to ground or not.  If you have any other ideas they are much
> > appreciated :)
>
> issue #4068 looks *very* likely to be related to what you are seeing.
> I can't get your situation to reproduce with it however it is exactly
> something that, in response to a garbage collection event, will remove
> the *wrong* object from identity_map._dict and *keep* it in
> identity_map._modified exactly as you are seeing.      i might be able
> to reproduce this simulating a GC against the object at a very
> specific time during the load.
>
>
> >
> > On Mon, Feb 26, 2018 at 12:46 PM, Mike Bayer <mike...@zzzcomputing.com>
> > wrote:
> >>
> >> On Mon, Feb 26, 2018 at 3:33 PM, Cecil Rock <cecil.r...@gmail.com>
> wrote:
> >> > Fairly old, v1.0.14.  Its running in one of our older microservices.
> >> > Once I
> >> > understood what was going on, I went through the fix list and could
> not
> >> > find
> >> > anything obviously related to it.  We can't reproduce this at will and
> >> > nothing obvious has changed, so we're worried that upgrading without
> >> > understanding could just mask the issue if it exists.
> >>
> >> you are before the fix for
> >> https://bitbucket.org/zzzeek/sqlalchemy/issues/4030 as well as
> >> https://bitbucket.org/zzzeek/sqlalchemy/issues/4068 which both allow
> >> the identity_map.discard(), safe_discard() and _fast_discard() methods
> >> to be safer against race conditions.    you'd want to get up to
> >> version 1.1.14 to get away from each of these issues.
> >>
> >> there's a lot of ways I can break certain things to produce this error
> >> on 1.0.14 but that same breakage still causes different errors
> >> (because I'm purposely screwing up the internal state of things) in
> >> later versions so I don't think I've isolated an exact race that can
> >> cause this.
> >>
> >>
> >>
> >>
> >> >
> >> > On Monday, February 26, 2018 at 12:28:49 PM UTC-8, Mike Bayer wrote:
> >> >>
> >> >> um what version of SQLAlchemy is this?
> >> >>
> >> >> On Mon, Feb 26, 2018 at 3:22 PM, Cecil Rock <cecil...@gmail.com>
> wrote:
> >> >> > One of my thoughts was maybe the gc wiped out the identity_map and
> it
> >> >> > gets
> >> >> > recreated empty.
> >> >> >
> >> >> > Here is a stack trace of when I detect the situation prior to the
> >> >> > flush
> >> >> > occurring.
> >> >> >
> >> >> >> [4018/eval_0/INFO/state/554/_modified_event] fc3a3a adding
> >> >> >> <sqlalchemy.orm.state.InstanceState object at 0x7f6a5bb989e8> as
> >> >> >> modified
> >> >> >> inSession:False
> >> >> >> [4018/eval_0/ERROR/evaluate/213/runEval] Evaluate job 4c4bdfaa
> >> >> >> caught
> >> >> >> exception, Oh Snap (Traceback (most recent call last):
> >> >> >>   File "/home/cecil/monkey/server/app/evaluate/evaluate.py", line
> >> >> >> 207,
> >> >> >> in
> >> >> >> runEval
> >> >> >>     _evaluateMovie(params)
> >> >> >>   File "/home/cecil/monkey/server/app/evaluate/evaluate.py", line
> >> >> >> 196,
> >> >> >> in
> >> >> >> _evaluateMovie
> >> >> >>     statusDetails=evalDetails)
> >> >> >>   File "/home/cecil/monkey/server/app/metrics/metricsUtils.py",
> line
> >> >> >> 230,
> >> >> >> in updateRecordableEvent
> >> >> >>     event.statusDetails = statusDetails[0:MAX_STATUS_DETAILS]
> >> >> >>   File
> >> >> >>
> >> >> >>
> >> >> >> "/home/cecil/monkey/server/venv/lib/python3.4/site-
> packages/sqlalchemy/orm/attributes.py",
> >> >> >> line 224, in __set__
> >> >> >>     instance_dict(instance), value, None)
> >> >> >>   File
> >> >> >>
> >> >> >>
> >> >> >> "/home/cecil/monkey/server/venv/lib/python3.4/site-
> packages/sqlalchemy/orm/attributes.py",
> >> >> >> line 702, in set
> >> >> >>     state._modified_event(dict_, self, old)
> >> >> >>   File
> >> >> >>
> >> >> >>
> >> >> >> "/home/cecil/monkey/server/venv/lib/python3.4/site-
> packages/sqlalchemy/orm/state.py",
> >> >> >> line 556, in _modified_event
> >> >> >>     raise Exception('Oh Snap')
> >> >> >> Exception: Oh Snap
> >> >> >> )
> >> >> >>
> >> >> >> This is what I'm looking at in _modified_event, this occurs after
> >> >> >> the
> >> >> >> sleep in the earlier example.
> >> >> >
> >> >> >             instance_dict = self._instance_dict()
> >> >> >             if instance_dict:
> >> >> >                 # ===DEBUGGING===
> >> >> >                 if isEvent:  # just check objects of interest
> >> >> >                     inSession = instance_dict.contains_state(self)
> >> >> >                     logger.info('%s adding %s as modified
> >> >> > inSession:%s',
> >> >> > msgNum, self, inSession)
> >> >> >                     if not inSession:
> >> >> >                         raise Exception('Oh Snap')
> >> >> >
> >> >> >                 instance_dict._modified.add(self)
> >> >> >
> >> >> > Here is the stack trace if I don't catch this early
> >> >> >
> >> >> > [8370/eval_4/ERROR/evaluate/213/runEval] Evaluate job d498ba17
> caught
> >> >> > exception, Over 100 subsequent flushes have occurred within
> >> >> > session.commit()
> >> >> > - is an after_flush() hook creating new objects? (Traceback (most
> >> >> > recent
> >> >> > call last):
> >> >> >   File "/home/cecil/monkey/server/app/evaluate/evaluate.py", line
> >> >> > 207,
> >> >> > in
> >> >> > runEval
> >> >> >     _evaluateMovie(params)
> >> >> >   File "/home/cecil/monkey/server/app/evaluate/evaluate.py", line
> >> >> > 196,
> >> >> > in
> >> >> > _evaluateMovie
> >> >> >     statusDetails=evalDetails)
> >> >> >   File "/home/cecil/monkey/server/app/metrics/metricsUtils.py",
> line
> >> >> > 288, in
> >> >> > updateRecordableEvent
> >> >> >     addNotifEvent(event,
> >> >> > workflowSequence=jobParams.get('workflowSequence'))
> >> >> >   File "/home/cecil/monkey/server/app/notification/notifUtils.py",
> >> >> > line
> >> >> > 93,
> >> >> > in addNotifEvent
> >> >> >     db.session.commit()
> >> >> >   File
> >> >> >
> >> >> >
> >> >> > "/home/cecil/monkey/server/venv/lib/python3.4/site-
> packages/sqlalchemy/orm/scoping.py",
> >> >> > line 157, in do
> >> >> >     return getattr(self.registry(), name)(*args, **kwargs)
> >> >> >   File
> >> >> >
> >> >> >
> >> >> > "/home/cecil/monkey/server/venv/lib/python3.4/site-
> packages/sqlalchemy/orm/session.py",
> >> >> > line 822, in commit
> >> >> >     self.transaction.commit()
> >> >> >   File
> >> >> >
> >> >> >
> >> >> > "/home/cecil/monkey/server/venv/lib/python3.4/site-
> packages/sqlalchemy/orm/session.py",
> >> >> > line 400, in commit
> >> >> >     self._prepare_impl()
> >> >> >   File
> >> >> >
> >> >> >
> >> >> > "/home/cecil/monkey/server/venv/lib/python3.4/site-
> packages/sqlalchemy/orm/session.py",
> >> >> > line 383, in _prepare_impl
> >> >> >     "Over 100 subsequent flushes have occurred within "
> >> >> > sqlalchemy.orm.exc.FlushError: Over 100 subsequent flushes have
> >> >> > occurred
> >> >> > within session.commit() - is an after_flush() hook creating new
> >> >> > objects?
> >> >> >
> >> >> >
> >> >> >
> >> >> >
> >> >> >
> >> >> > --
> >> >> > SQLAlchemy -
> >> >> > The Python SQL Toolkit and Object Relational Mapper
> >> >> >
> >> >> > http://www.sqlalchemy.org/
> >> >> >
> >> >> > To post example code, please provide an MCVE: Minimal, Complete,
> and
> >> >> > Verifiable Example. See http://stackoverflow.com/help/mcve for a
> full
> >> >> > description.
> >> >> > ---
> >> >> > You received this message because you are subscribed to the Google
> >> >> > Groups
> >> >> > "sqlalchemy" group.
> >> >> > To unsubscribe from this group and stop receiving emails from it,
> >> >> > send
> >> >> > an
> >> >> > email to sqlalchemy+...@googlegroups.com.
> >> >> > To post to this group, send email to sqlal...@googlegroups.com.
> >> >> > Visit this group at https://groups.google.com/group/sqlalchemy.
> >> >> > For more options, visit https://groups.google.com/d/optout.
> >> >
> >> > --
> >> > SQLAlchemy -
> >> > The Python SQL Toolkit and Object Relational Mapper
> >> >
> >> > http://www.sqlalchemy.org/
> >> >
> >> > To post example code, please provide an MCVE: Minimal, Complete, and
> >> > Verifiable Example. See http://stackoverflow.com/help/mcve for a full
> >> > description.
> >> > ---
> >> > You received this message because you are subscribed to the Google
> >> > Groups
> >> > "sqlalchemy" group.
> >> > To unsubscribe from this group and stop receiving emails from it, send
> >> > an
> >> > email to sqlalchemy+unsubscr...@googlegroups.com.
> >> > To post to this group, send email to sqlalchemy@googlegroups.com.
> >> > Visit this group at https://groups.google.com/group/sqlalchemy.
> >> > For more options, visit https://groups.google.com/d/optout.
> >>
> >> --
> >> SQLAlchemy -
> >> The Python SQL Toolkit and Object Relational Mapper
> >>
> >> http://www.sqlalchemy.org/
> >>
> >> To post example code, please provide an MCVE: Minimal, Complete, and
> >> Verifiable Example.  See  http://stackoverflow.com/help/mcve for a full
> >> description.
> >> ---
> >> You received this message because you are subscribed to a topic in the
> >> Google Groups "sqlalchemy" group.
> >> To unsubscribe from this topic, visit
> >> https://groups.google.com/d/topic/sqlalchemy/IcgPmdW6lz8/unsubscribe.
> >> To unsubscribe from this group and all its topics, send an email to
> >> sqlalchemy+unsubscr...@googlegroups.com.
> >> To post to this group, send email to sqlalchemy@googlegroups.com.
> >> Visit this group at https://groups.google.com/group/sqlalchemy.
> >> For more options, visit https://groups.google.com/d/optout.
> >
> >
> >
> >
> > --
> > - Cecil
> >
> > --
> > SQLAlchemy -
> > The Python SQL Toolkit and Object Relational Mapper
> >
> > http://www.sqlalchemy.org/
> >
> > To post example code, please provide an MCVE: Minimal, Complete, and
> > Verifiable Example. See http://stackoverflow.com/help/mcve for a full
> > description.
> > ---
> > You received this message because you are subscribed to the Google Groups
> > "sqlalchemy" group.
> > To unsubscribe from this group and stop receiving emails from it, send an
> > email to sqlalchemy+unsubscr...@googlegroups.com.
> > To post to this group, send email to sqlalchemy@googlegroups.com.
> > Visit this group at https://groups.google.com/group/sqlalchemy.
> > For more options, visit https://groups.google.com/d/optout.
>
> --
> SQLAlchemy -
> The Python SQL Toolkit and Object Relational Mapper
>
> http://www.sqlalchemy.org/
>
> To post example code, please provide an MCVE: Minimal, Complete, and
> Verifiable Example.  See  http://stackoverflow.com/help/mcve for a full
> description.
> ---
> You received this message because you are subscribed to a topic in the
> Google Groups "sqlalchemy" group.
> To unsubscribe from this topic, visit https://groups.google.com/d/
> topic/sqlalchemy/IcgPmdW6lz8/unsubscribe.
> To unsubscribe from this group and all its topics, send an email to
> sqlalchemy+unsubscr...@googlegroups.com.
> To post to this group, send email to sqlalchemy@googlegroups.com.
> Visit this group at https://groups.google.com/group/sqlalchemy.
> For more options, visit https://groups.google.com/d/optout.
>



-- 
- Cecil

-- 
SQLAlchemy - 
The Python SQL Toolkit and Object Relational Mapper

http://www.sqlalchemy.org/

To post example code, please provide an MCVE: Minimal, Complete, and Verifiable 
Example.  See  http://stackoverflow.com/help/mcve for a full description.
--- 
You received this message because you are subscribed to the Google Groups 
"sqlalchemy" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to sqlalchemy+unsubscr...@googlegroups.com.
To post to this group, send email to sqlalchemy@googlegroups.com.
Visit this group at https://groups.google.com/group/sqlalchemy.
For more options, visit https://groups.google.com/d/optout.

Reply via email to