On Jan 20, 2006, at 9:51 PM, Michael Bayer wrote:
update and try it again. the fix i made for you yesterday was slightly incorrect. youll notice that the dependency graph produced for the second commit is much smaller after you update this change.

hi mike,

thanks for the update -
things seem to be working.

one thing that is a concern
for me, however, is that the
dependency graph seems to
keep on growing even though
only a single C1/C2 pair is
being updated. (i've included
that task dump output below).

the code that i'm using is
the same as before, and in
this simple loop:

---
for a1 in m1.select():
    a2 = C2()
    a2.id = idgen.next()
    a2.t1 = a1
    rdb.objectstore.commit()
---

it's "clear" that each iteration
doesn't really depend on any other -
yet based on the task dump it
appears that all previously
created C2's are appended as
(listonly) TaskElements.

when you have the TEST_SELFREF turned on, even though theres no actual parent/child relationships between C1 objects, the UOW still treats it as though there may be some, so it breaks up C1's UOWTask into a graph of per-object UOWTasks. Then, it was taking the list of "save C2's" and sticking it as a dependency on each UOWTask, instead of just attaching it as a dependency on the overall group of C1's, causing it to save the list of C2's over and over again (except it bails on the first element of the list on the second run, so you dont see that unless you look at the dumped graph).

i don't think i entirely follow
you here, but perhaps this is
related to why the dependency
processor computes what is does?
does the C2 class append all
instances as subtasks on commit?

when i write the loop above i
expect O(N) behavior, so if there
are hidden O(N^2)s in there i may
have to redesign some things ...

still working on making those graphs easier to read and considering some simplifications i might make to the circular dependency thing.

looking forward to it!

thanks as always,
d

---
CREATE TABLE t1(
        id INTEGER NOT NULL PRIMARY KEY,
        selfref_id INTEGER REFERENCES t1(id)
)


{}

CREATE TABLE t2(
        id INTEGER NOT NULL PRIMARY KEY,
        t1id INTEGER REFERENCES t1(id)
)


{}
Task dump:
 UOWTask(-1222828852) 'C1/t1'->circular->UOWTask(-1222828116) 'C1/t1'
  |- Save: UOWTaskElement(-1222787508): C1(-1222829556) (save)
  |- UOWTask(-1222789588) 'C1/t1'
  |   |- Save: UOWTaskElement(-1222787444): C1(-1222829620) (save)
  |   |- Save: UOWTaskElement(-1222787412): C1(-1222829684) (save)
  |   |- Save: UOWTaskElement(-1222787380): C1(-1222829812) (save)
  |   |- Save: UOWTaskElement(-1222787348): C1(-1222829972) (save)
  |   |- Save: UOWTaskElement(-1222787316): C1(-1222829748) (save)
  |   |- Save: UOWTaskElement(-1222787284): C1(-1222829876) (save)
  |   |- Save: UOWTaskElement(-1222787252): C1(-1222829364) (save)
  |   |- Save: UOWTaskElement(-1222787220): C1(-1222829428) (save)
  |   |- Save: UOWTaskElement(-1222787188): C1(-1222829492) (save)
  |   |- UOWTask(-1222789876) 'C1/t1'
  |   |   |----
  |   |
  |   |- UOWTask(-1222790164) 'C1/t1'
  |   |   |----
  |   |
  |   |- UOWTask(-1222790740) 'C1/t1'
  |   |   |----
  |   |
  |   |- UOWTask(-1222828052) 'C1/t1'
  |   |   |----
  |   |
  |   |- UOWTask(-1222790452) 'C1/t1'
  |   |   |----
  |   |
  |   |- UOWTask(-1222791028) 'C1/t1'
  |   |   |----
  |   |
  |   |- UOWTask(-1222788724) 'C1/t1'
  |   |   |----
  |   |
  |   |- UOWTask(-1222789012) 'C1/t1'
  |   |   |----
  |   |
  |   |- UOWTask(-1222789300) 'C1/t1'
  |   |   |----
  |   |
  |   |----
  |
  |- UOWTask(-1222787892) 'C2/t2'
  |   |----
  |
  |----


INSERT INTO t1 (id, selfref_id) VALUES (?, ?)
[6, None]
INSERT INTO t1 (id, selfref_id) VALUES (?, ?)
[5, None]
INSERT INTO t1 (id, selfref_id) VALUES (?, ?)
[4, None]
INSERT INTO t1 (id, selfref_id) VALUES (?, ?)
[2, None]
INSERT INTO t1 (id, selfref_id) VALUES (?, ?)
[0, None]
INSERT INTO t1 (id, selfref_id) VALUES (?, ?)
[3, None]
INSERT INTO t1 (id, selfref_id) VALUES (?, ?)
[1, None]
INSERT INTO t1 (id, selfref_id) VALUES (?, ?)
[9, None]
INSERT INTO t1 (id, selfref_id) VALUES (?, ?)
[8, None]
INSERT INTO t1 (id, selfref_id) VALUES (?, ?)
[7, None]
SELECT t1.selfref_id AS t1_selfref_id, t1.id AS t1_id
FROM t1
[]
Task dump:
 UOWTask(-1222762996) 'C1/t1'->circular->UOWTask(-1222746068) 'C1/t1'
  |
|- UOWDependencyProcessor(-1222762612) 't1' on saved UOWTask(-1222763060) 'C2/t2'
  |       |-UOWTaskElement(-1222763028): C2(-1222763508) (save)
  |
  |- UOWTask(-1222746004) 'C1/t1'
  |   |----
  |
  |- UOWTask(-1222763060) 'C2/t2'
  |   |- Save: UOWTaskElement(-1222763028): C2(-1222763508) (save)
  |   |----
  |
  |----


INSERT INTO t2 (id, t1id) VALUES (?, ?)
[10, 0]
Task dump:
 UOWTask(-1222745076) 'C1/t1'->circular->UOWTask(-1222744596) 'C1/t1'
  |
|- UOWDependencyProcessor(-1222744724) 't1' on saved UOWTask(-1222745140) 'C2/t2'
  |       |-UOWTaskElement(-1222745108): C2(-1222763092) (save)
  |       |-UOWTaskElement(-1222744884): C2(-1222763508) (listonly)
  |
  |- UOWTask(-1222744532) 'C1/t1'
  |   |- UOWTask(-1222744404) 'C1/t1'
  |   |   |----
  |   |
  |   |----
  |
  |- UOWTask(-1222745140) 'C2/t2'
  |   |- Save: UOWTaskElement(-1222745108): C2(-1222763092) (save)
  |   |----
  |
  |----


INSERT INTO t2 (id, t1id) VALUES (?, ?)
[11, 1]
Task dump:
 UOWTask(-1222743348) 'C1/t1'->circular->UOWTask(-1222742836) 'C1/t1'
  |
|- UOWDependencyProcessor(-1222742964) 't1' on saved UOWTask(-1222743412) 'C2/t2'
  |       |-UOWTaskElement(-1222743380): C2(-1222745204) (save)
  |       |-UOWTaskElement(-1222743220): C2(-1222763092) (listonly)
  |       |-UOWTaskElement(-1222743156): C2(-1222763508) (listonly)
  |
  |- UOWTask(-1222742484) 'C1/t1'
  |   |- UOWTask(-1222742740) 'C1/t1'
  |   |   |----
  |   |
  |   |- UOWTask(-1222742612) 'C1/t1'
  |   |   |----
  |   |
  |   |----
  |
  |- UOWTask(-1222743412) 'C2/t2'
  |   |- Save: UOWTaskElement(-1222743380): C2(-1222745204) (save)
  |   |----
  |
  |----


INSERT INTO t2 (id, t1id) VALUES (?, ?)
[12, 2]
Task dump:
 UOWTask(-1222764212) 'C1/t1'->circular->UOWTask(-1222765300) 'C1/t1'
  |
|- UOWDependencyProcessor(-1222765460) 't1' on saved UOWTask(-1222763988) 'C2/t2'
  |       |-UOWTaskElement(-1222763892): C2(-1222763060) (save)
  |       |-UOWTaskElement(-1222764244): C2(-1222763092) (listonly)
  |       |-UOWTaskElement(-1222764628): C2(-1222763508) (listonly)
  |       |-UOWTaskElement(-1222764596): C2(-1222745204) (listonly)
  |
  |- UOWTask(-1222765524) 'C1/t1'
  |   |- UOWTask(-1222765556) 'C1/t1'
  |   |   |----
  |   |
  |   |- UOWTask(-1222765492) 'C1/t1'
  |   |   |----
  |   |
  |   |- UOWTask(-1222765940) 'C1/t1'
  |   |   |----
  |   |
  |   |----
  |
  |- UOWTask(-1222763988) 'C2/t2'
  |   |- Save: UOWTaskElement(-1222763892): C2(-1222763060) (save)
  |   |----
  |
  |----


INSERT INTO t2 (id, t1id) VALUES (?, ?)
[13, 3]
Task dump:
 UOWTask(-1222787956) 'C1/t1'->circular->UOWTask(-1222744532) 'C1/t1'
  |
|- UOWDependencyProcessor(-1222743924) 't1' on saved UOWTask(-1222788084) 'C2/t2'
  |       |-UOWTaskElement(-1222787700): C2(-1222763476) (save)
  |       |-UOWTaskElement(-1222743124): C2(-1222763092) (listonly)
  |       |-UOWTaskElement(-1222743092): C2(-1222763508) (listonly)
  |       |-UOWTaskElement(-1222742900): C2(-1222745204) (listonly)
  |       |-UOWTaskElement(-1222743860): C2(-1222763060) (listonly)
  |
  |- UOWTask(-1222744724) 'C1/t1'
  |   |- UOWTask(-1222744020) 'C1/t1'
  |   |   |----
  |   |
  |   |- UOWTask(-1222745140) 'C1/t1'
  |   |   |----
  |   |
  |   |- UOWTask(-1222744596) 'C1/t1'
  |   |   |----
  |   |
  |   |- UOWTask(-1222744820) 'C1/t1'
  |   |   |----
  |   |
  |   |----
  |
  |- UOWTask(-1222788084) 'C2/t2'
  |   |- Save: UOWTaskElement(-1222787700): C2(-1222763476) (save)
  |   |----
  |
  |----


INSERT INTO t2 (id, t1id) VALUES (?, ?)
[14, 4]
Task dump:
 UOWTask(-1222742260) 'C1/t1'->circular->UOWTask(-1222716820) 'C1/t1'
  |
|- UOWDependencyProcessor(-1222716852) 't1' on saved UOWTask(-1222746068) 'C2/t2'
  |       |-UOWTaskElement(-1222745684): C2(-1222787540) (save)
  |       |-UOWTaskElement(-1222717268): C2(-1222745204) (listonly)
  |       |-UOWTaskElement(-1222717204): C2(-1222763092) (listonly)
  |       |-UOWTaskElement(-1222717140): C2(-1222763476) (listonly)
  |       |-UOWTaskElement(-1222717076): C2(-1222763060) (listonly)
  |       |-UOWTaskElement(-1222717012): C2(-1222763508) (listonly)
  |
  |- UOWTask(-1222716692) 'C1/t1'
  |   |- UOWTask(-1222716372) 'C1/t1'
  |   |   |----
  |   |
  |   |- UOWTask(-1222716500) 'C1/t1'
  |   |   |----
  |   |
  |   |- UOWTask(-1222716116) 'C1/t1'
  |   |   |----
  |   |
  |   |- UOWTask(-1222716244) 'C1/t1'
  |   |   |----
  |   |
  |   |- UOWTask(-1222716628) 'C1/t1'
  |   |   |----
  |   |
  |   |----
  |
  |- UOWTask(-1222746068) 'C2/t2'
  |   |- Save: UOWTaskElement(-1222745684): C2(-1222787540) (save)
  |   |----
  |
  |----


INSERT INTO t2 (id, t1id) VALUES (?, ?)
[15, 5]
Task dump:
 UOWTask(-1222715060) 'C1/t1'->circular->UOWTask(-1222714420) 'C1/t1'
  |
|- UOWDependencyProcessor(-1222714452) 't1' on saved UOWTask(-1222715124) 'C2/t2'
  |       |-UOWTaskElement(-1222715092): C2(-1222745460) (save)
  |       |-UOWTaskElement(-1222714964): C2(-1222787540) (listonly)
  |       |-UOWTaskElement(-1222714900): C2(-1222745204) (listonly)
  |       |-UOWTaskElement(-1222714836): C2(-1222763092) (listonly)
  |       |-UOWTaskElement(-1222714740): C2(-1222763476) (listonly)
  |       |-UOWTaskElement(-1222714676): C2(-1222763060) (listonly)
  |       |-UOWTaskElement(-1222714612): C2(-1222763508) (listonly)
  |
  |- UOWTask(-1222713908) 'C1/t1'
  |   |- UOWTask(-1222714292) 'C1/t1'
  |   |   |----
  |   |
  |   |- UOWTask(-1222713780) 'C1/t1'
  |   |   |----
  |   |
  |   |- UOWTask(-1222714036) 'C1/t1'
  |   |   |----
  |   |
  |   |- UOWTask(-1222713524) 'C1/t1'
  |   |   |----
  |   |
  |   |- UOWTask(-1222713652) 'C1/t1'
  |   |   |----
  |   |
  |   |- UOWTask(-1222714164) 'C1/t1'
  |   |   |----
  |   |
  |   |----
  |
  |- UOWTask(-1222715124) 'C2/t2'
  |   |- Save: UOWTaskElement(-1222715092): C2(-1222745460) (save)
  |   |----
  |
  |----


INSERT INTO t2 (id, t1id) VALUES (?, ?)
[16, 6]
Task dump:
 UOWTask(-1222708276) 'C1/t1'->circular->UOWTask(-1222714580) 'C1/t1'
  |
|- UOWDependencyProcessor(-1222707604) 't1' on saved UOWTask(-1222708340) 'C2/t2'
  |       |-UOWTaskElement(-1222708308): C2(-1222715220) (save)
  |       |-UOWTaskElement(-1222708180): C2(-1222787540) (listonly)
  |       |-UOWTaskElement(-1222708116): C2(-1222745204) (listonly)
  |       |-UOWTaskElement(-1222708052): C2(-1222763092) (listonly)
  |       |-UOWTaskElement(-1222707988): C2(-1222745460) (listonly)
  |       |-UOWTaskElement(-1222707924): C2(-1222763476) (listonly)
  |       |-UOWTaskElement(-1222707828): C2(-1222763060) (listonly)
  |       |-UOWTaskElement(-1222707764): C2(-1222763508) (listonly)
  |
  |- UOWTask(-1222707092) 'C1/t1'
  |   |- UOWTask(-1222707444) 'C1/t1'
  |   |   |----
  |   |
  |   |- UOWTask(-1222706964) 'C1/t1'
  |   |   |----
  |   |
  |   |- UOWTask(-1222706708) 'C1/t1'
  |   |   |----
  |   |
  |   |- UOWTask(-1222707220) 'C1/t1'
  |   |   |----
  |   |
  |   |- UOWTask(-1222714196) 'C1/t1'
  |   |   |----
  |   |
  |   |- UOWTask(-1222706836) 'C1/t1'
  |   |   |----
  |   |
  |   |- UOWTask(-1222707348) 'C1/t1'
  |   |   |----
  |   |
  |   |----
  |
  |- UOWTask(-1222708340) 'C2/t2'
  |   |- Save: UOWTaskElement(-1222708308): C2(-1222715220) (save)
  |   |----
  |
  |----


INSERT INTO t2 (id, t1id) VALUES (?, ?)
[17, 7]
Task dump:
 UOWTask(-1222715060) 'C1/t1'->circular->UOWTask(-1222714900) 'C1/t1'
  |
|- UOWDependencyProcessor(-1222714964) 't1' on saved UOWTask(-1222713876) 'C2/t2'
  |       |-UOWTaskElement(-1222713812): C2(-1222714228) (save)
  |       |-UOWTaskElement(-1222713396): C2(-1222787540) (listonly)
  |       |-UOWTaskElement(-1222713364): C2(-1222745204) (listonly)
  |       |-UOWTaskElement(-1222715828): C2(-1222763092) (listonly)
  |       |-UOWTaskElement(-1222714516): C2(-1222745460) (listonly)
  |       |-UOWTaskElement(-1222714868): C2(-1222763476) (listonly)
  |       |-UOWTaskElement(-1222714804): C2(-1222715220) (listonly)
  |       |-UOWTaskElement(-1222714708): C2(-1222763060) (listonly)
  |       |-UOWTaskElement(-1222714996): C2(-1222763508) (listonly)
  |
  |- UOWTask(-1222715732) 'C1/t1'
  |   |- UOWTask(-1222715444) 'C1/t1'
  |   |   |----
  |   |
  |   |- UOWTask(-1222715668) 'C1/t1'
  |   |   |----
  |   |
  |   |- UOWTask(-1222715892) 'C1/t1'
  |   |   |----
  |   |
  |   |- UOWTask(-1222715796) 'C1/t1'
  |   |   |----
  |   |
  |   |- UOWTask(-1222715508) 'C1/t1'
  |   |   |----
  |   |
  |   |- UOWTask(-1222716980) 'C1/t1'
  |   |   |----
  |   |
  |   |- UOWTask(-1222715188) 'C1/t1'
  |   |   |----
  |   |
  |   |- UOWTask(-1222715860) 'C1/t1'
  |   |   |----
  |   |
  |   |----
  |
  |- UOWTask(-1222713876) 'C2/t2'
  |   |- Save: UOWTaskElement(-1222713812): C2(-1222714228) (save)
  |   |----
  |
  |----


INSERT INTO t2 (id, t1id) VALUES (?, ?)
[18, 8]
Task dump:
 UOWTask(-1222717076) 'C1/t1'->circular->UOWTask(-1222744756) 'C1/t1'
  |
|- UOWDependencyProcessor(-1222745428) 't1' on saved UOWTask(-1222717172) 'C2/t2'
  |       |-UOWTaskElement(-1222717396): C2(-1222713748) (save)
  |       |-UOWTaskElement(-1222717012): C2(-1222787540) (listonly)
  |       |-UOWTaskElement(-1222787956): C2(-1222745204) (listonly)
  |       |-UOWTaskElement(-1222787828): C2(-1222763092) (listonly)
  |       |-UOWTaskElement(-1222787700): C2(-1222745460) (listonly)
  |       |-UOWTaskElement(-1222742260): C2(-1222763476) (listonly)
  |       |-UOWTaskElement(-1222742068): C2(-1222715220) (listonly)
  |       |-UOWTaskElement(-1222745492): C2(-1222763060) (listonly)
  |       |-UOWTaskElement(-1222745652): C2(-1222763508) (listonly)
  |       |-UOWTaskElement(-1222744788): C2(-1222714228) (listonly)
  |
  |- UOWTask(-1222745524) 'C1/t1'
  |   |- UOWTask(-1222745236) 'C1/t1'
  |   |   |----
  |   |
  |   |- UOWTask(-1222743924) 'C1/t1'
  |   |   |----
  |   |
  |   |- UOWTask(-1222745268) 'C1/t1'
  |   |   |----
  |   |
  |   |- UOWTask(-1222745140) 'C1/t1'
  |   |   |----
  |   |
  |   |- UOWTask(-1222744884) 'C1/t1'
  |   |   |----
  |   |
  |   |- UOWTask(-1222744596) 'C1/t1'
  |   |   |----
  |   |
  |   |- UOWTask(-1222744820) 'C1/t1'
  |   |   |----
  |   |
  |   |- UOWTask(-1222744212) 'C1/t1'
  |   |   |----
  |   |
  |   |- UOWTask(-1222744532) 'C1/t1'
  |   |   |----
  |   |
  |   |----
  |
  |- UOWTask(-1222717172) 'C2/t2'
  |   |- Save: UOWTaskElement(-1222717396): C2(-1222713748) (save)
  |   |----
  |
  |----


INSERT INTO t2 (id, t1id) VALUES (?, ?)
[19, 9]



-------------------------------------------------------
This SF.net email is sponsored by: Splunk Inc. Do you grep through log files
for problems?  Stop!  Download the new AJAX search engine that makes
searching your log files as easy as surfing the  web.  DOWNLOAD SPLUNK!
http://sel.as-us.falkag.net/sel?cmd=lnk&kid=103432&bid=230486&dat=121642
_______________________________________________
Sqlalchemy-users mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/sqlalchemy-users

Reply via email to