Exactly. Eelco
On 1/8/07, Igor Vaynberg <[EMAIL PROTECTED]> wrote:
i dont even see the point of having an IPageVersionManager. it is tied to Change which has an undo() method, so what other kind of manager can you write except the undo one? -igor On 1/8/07, Eelco Hillenius <[EMAIL PROTECTED]> wrote: > > Hi, > > Currently, pages and versions of pages are stored separately. Pages > are stored in IPageMaps, and each page has a IPageVersionManager. By > default (and I wonder how many users actually ever did override this) > the IPageVersionManager is UndoPageVersionManager, which keeps a list > of changes in the instance. As the instance is kept as a reference of > the page, the size of a page in a session is the sum of the size of > the actual page at that time + the size of the list of all the > changes. This is regardless of how the PageMap/ session store works > unfortunately, and by default, you can have Integer.MAX versions. That > potentially fills up memory pretty badly if you do a lot of component > replacement. And Integer.MAX isn't the best guarantee to keep memory > down either. Furthermore, it works pretty lousy with the new session > store. That store saves every page/ version combination to disk, but > including the whole version manager (all versions), which is > inefficient. With this way of saving, you really don't need more than > one. Anyway, to make a long story short here is what I think we should > do: > > - Align pagemaps and version management so that pages and versions are > stored in, and retrieved from the same entity. > - Change the SecondLevelCacheSessionStore so that it either saves > pages without the version manager but rather exactly as they are at > that moment or save the first version as a full page, and subsequent > versions as changes. This would be my choice as it is more efficient > in especially storing it, and storing is the part having a greater > impact than retrieving. > - Page should only use a temporary instance of IPageVersionManager and > the newVersionManager method could be private imo as I don't see much > use now users being able to provide their own (in fact, we could get > rid of the IPageVersionManager interface). When endVersion is called, > the changes would be flushed and saved to the pagemap and the version > manager instance should be nulled. > > WDYT? > > Eelco >