2011-06-01 11 views
1

任何人都知道爲什麼在成功更新drush數據庫後出現站點後,可以對menu_rebuild進行多次調用?在我跳下兔子洞之前?在drush更新之後並口調用menu_rebuild updatedb

UPDATE:

爲了澄清我使用Pressflow。

特別是當我們運行更新時,會調用多個menu_router重建,導致重複鍵錯誤和最大連接超時。即使更新較小,也會出現前一個問題。

更新:爲了緩解這種情況,是否有一種非黑客方式來增加menu_rebuild使用的鎖定超時?它調用該函數時沒有默認爲30秒的參數,我們希望增加該參數。

回答

0

Drupal 6,對吧?

從我讀到的菜單重建代碼中有一些併發問題,可能會導致它多次執行,如果多個用戶在完成沖洗緩存後立即訪問網站。我在我們的Drupal實例中看到了這個...

例如,如果我點擊「flush all caches」並且需要幾秒鐘,然後打開第二個瀏覽器並瀏覽我們的網站,打開第三個,等等...取決於這需要多長時間和順序,它可以觸發多個菜單重建。

在第一次出現錯誤後,flush all似乎很好。

這裏有一對夫婦長期職位的我還沒有完全通過閱讀說明一些併發問題:

http://drupal.org/node/246653

http://drupal.org/node/251792

+0

非常感謝。不,壓力流。 Menu_rebuild使用信號量表使用lock_acquire,但9個menu_rebuild仍然並行發生,導致最大連接超時。這似乎最常發生在長時間運行的更新期間,這表明在鎖過期後鎖被破壞,但顯然這也發生在成功的短期更新結束後。 – buddhamagnet 2011-06-03 07:51:56

0

我們也有類似的問題,由於造成一個奇怪的條件通過讓admin_menu 1.6,通過drush清除緩存,然後加載一個頁面。

如果您碰巧使用了admin_menu 1.6(也可能是舊版),我建議禁用它以查看它是否解決了問題。 admin_menu版本1.6嘗試重建hook_footer中的菜單,但是它沒有使用D6的鎖定功能。所以如果你有一個大菜單並且重建需要一段時間,那麼管理員用戶的每次點擊都會觸發一個新菜單重新生成與前一個重疊,導致很多錯誤。

需要注意的是,當您通過Drupal UI清除緩存時,此問題不會出現。只有當您通過drush清除緩存時,我相信在您執行數據庫更新時會發生這種情況。

如果禁用它可以解決問題,則應考慮升級到admin_menu的3.x版本。

至於試圖改變超時,這將不會有任何影響。超時只會影響等待重建完成的人,但在30秒之後它不會開始新的重建,只會讓該人繼續執行,但目前大部分菜單都正在重建。

+0

感謝洛根,我是grepped代碼庫,並指出admin_menu作爲潛在的罪犯,但模塊被禁用。回到繪圖板並放下兔子洞! – buddhamagnet 2011-06-07 14:12:53

+0

噢,值得一試!它必須是類似的東西,它觸發了它自己的菜單重建,圍繞着標準的鎖定功能。 – loganfsmyth 2011-06-10 01:45:43

相關問題