Index: openacs-4/packages/acs-tcl/tcl/site-nodes-procs.tcl =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/acs-tcl/tcl/site-nodes-procs.tcl,v diff -u -r1.59 -r1.60 --- openacs-4/packages/acs-tcl/tcl/site-nodes-procs.tcl 21 May 2004 17:03:03 -0000 1.59 +++ openacs-4/packages/acs-tcl/tcl/site-nodes-procs.tcl 15 Jun 2004 16:22:54 -0000 1.60 @@ -267,10 +267,6 @@ set url_by_node_id($node_id) $url if { ![empty_string_p $object_id] } { lappend url_by_object_id($object_id) $url - set url_by_object_id($object_id) [lsort \ - -decreasing \ - -command util::string_length_compare \ - $url_by_object_id($object_id)] } if { ![empty_string_p $package_key] } { lappend url_by_package_key($package_key) $url @@ -291,6 +287,18 @@ instance_name $instance_name package_type $package_type] } + # AG: This lsort used to live in the db_foreach loop above. I moved it here + # to avoid redundant re-sorting on systems where multiple URLs are mapped to + # the same object_id. This was causing a 40 minute startup delay on a .LRN site + # with 4000+ URLs mapped to one instance of the attachments package. + # The sort facilitates deleting child nodes before parent nodes. + foreach object_id [array names url_by_object_id] { + set url_by_object_id($object_id) [lsort \ + -decreasing \ + -command util::string_length_compare \ + $url_by_object_id($object_id)] + } + # update arrays nsv_array reset site_nodes [array get nodes] nsv_array reset site_node_url_by_node_id [array get url_by_node_id]