Thread: [Winstone-devel] Temp Folder Cleanup
Status: Beta
Brought to you by:
rickknowles
From: Bruno F. <bf...@br...> - 2008-11-24 15:23:06
|
Hi Rick, thanks for writing the Winstone Servlet engine! When I use the war file feature with a war, containing newer releases of WEB-INF/lib jars, the temp folder keeps the old releases. So the web app might not see the new lib (masked by the old one) until the user manually deletes the temp folder before starting the engine. In your code, you overwrite only older files, that exist in the war archive. What would you say to cleanup all files, older than the war, in a separate step. something like inserting this: ArrayList<File> files = new ArrayList<File>(Arrays.asList(unzippedDir.listFiles())); for (int i = 0; i < files.size(); i++) { File f = files.get(i); if (f.isDirectory()) files.addAll(Arrays.asList(f.listFiles())); else if (f.lastModified() < warfileRef.lastModified()) f.delete(); } into http://winstone.cvs.sourceforge.net/viewvc/winstone/winstone/src/java/winstone/HostConfiguration.java?revision=1.8&view=markup at line 241 and remove line 253, 254. (not tested, just an idea) Thanks, Bruno |
From: Rick K. <ri...@kn...> - 2008-11-24 22:00:12
|
Hi Bruno, This is an interesting way of tackling the problem, but I think we need to give it some additional thought iterations. The original reasoning behind the age check was to allow for people to use things like mckoi db, which is perfect for packaging an SQL database inside your warfile. In this case, each time the war is restarted it's important that the war contents don't overwrite the modified db files (usually a work folder inside the WEB-INF/db folder, using a pre-created schema inside the warfile that the application modifies after launch). The solution you mentioned would delete those, but I can recognize the frustration of not properly redeploying. Maybe a special case for WEB-INF/lib and WEB-INF/classes folders ? Also, I'm a little confused how you managed to get newer releases of the jar files inside the warfile without creating a warfile that also had a newer date. Creating a warfile with the newer jars should have created a new war which would trigger the redeploy to overwrite correctly ... how did this happen ? Thanks, Rick Bruno Feurer wrote: > Hi Rick, > > thanks for writing the Winstone Servlet engine! > > When I use the war file feature with a war, containing newer releases > of WEB-INF/lib jars, the temp folder keeps the old releases. So the > web app might not see the new lib (masked by the old one) until the > user manually deletes the temp folder before starting the engine. > In your code, you overwrite only older files, that exist in the war > archive. What would you say to cleanup all files, older than the war, > in a separate step. something like inserting this: > > ArrayList<File> files = new > ArrayList<File>(Arrays.asList(unzippedDir.listFiles())); > for (int i = 0; i < files.size(); i++) { > File f = files.get(i); > if (f.isDirectory()) > files.addAll(Arrays.asList(f.listFiles())); > else if (f.lastModified() < warfileRef.lastModified()) > f.delete(); > } > > into http://winstone.cvs.sourceforge.net/viewvc/winstone/winstone/src/java/winstone/HostConfiguration.java?revision=1.8&view=markup > at line 241 and remove line 253, 254. > (not tested, just an idea) > > Thanks, > Bruno > > ------------------------------------------------------------------------- > This SF.Net email is sponsored by the Moblin Your Move Developer's challenge > Build the coolest Linux based applications with Moblin SDK & win great prizes > Grand prize is a trip for two to an Open Source event anywhere in the world > http://moblin-contest.org/redirect.php?banner_id=100&url=/ > _______________________________________________ > Winstone-devel mailing list > Win...@li... > https://lists.sourceforge.net/lists/listinfo/winstone-devel > |
From: Bruno F. <bf...@br...> - 2008-11-25 10:50:00
|
Hi Rick, the war file is newer, but only file contained in this war file will be overwriten (if newer). But some libs hold the release number in their file name, thus the older lib with a file name not existent in the war file anymore is not deleted. In the WEB-INF/lib folder this older lib file is still in the classpath of the web app and could mask the packages of the newer lib. Yes, your solution, limiting the deletion to the /ib and /classes folder, would solve my deployment problem. However, leftover files could trigger a problem in any application reading and interpreting a folder content, like the classloader does. Old files cannot be removed, just existing overwritten. What do you say to an additional config option? something like "clearTempFolder: yes/no", or maybe "keepTempFolders: WEB-INF/db;..." ;) Thanks, Bruno PS: I would feel uncomfortable, holding my db data in a temp folder... somebody might clean it eventually ;) On Mon, Nov 24, 2008 at 10:59 PM, Rick Knowles <ri...@kn...> wrote: > Hi Bruno, > > This is an interesting way of tackling the problem, but I think we need to > give it some additional thought iterations. The original reasoning behind > the age check was to allow for people to use things like mckoi db, which is > perfect for packaging an SQL database inside your warfile. In this case, > each time the war is restarted it's important that the war contents don't > overwrite the modified db files (usually a work folder inside the WEB-INF/db > folder, using a pre-created schema inside the warfile that the application > modifies after launch). > > The solution you mentioned would delete those, but I can recognize the > frustration of not properly redeploying. Maybe a special case for > WEB-INF/lib and WEB-INF/classes folders ? > > Also, I'm a little confused how you managed to get newer releases of the jar > files inside the warfile without creating a warfile that also had a newer > date. Creating a warfile with the newer jars should have created a new war > which would trigger the redeploy to overwrite correctly ... how did this > happen ? > > Thanks, > > Rick > > Bruno Feurer wrote: >> >> Hi Rick, >> >> thanks for writing the Winstone Servlet engine! >> >> When I use the war file feature with a war, containing newer releases >> of WEB-INF/lib jars, the temp folder keeps the old releases. So the >> web app might not see the new lib (masked by the old one) until the >> user manually deletes the temp folder before starting the engine. >> In your code, you overwrite only older files, that exist in the war >> archive. What would you say to cleanup all files, older than the war, >> in a separate step. something like inserting this: >> >> ArrayList<File> files = new >> ArrayList<File>(Arrays.asList(unzippedDir.listFiles())); >> for (int i = 0; i < files.size(); i++) { >> File f = files.get(i); >> if (f.isDirectory()) >> files.addAll(Arrays.asList(f.listFiles())); >> else if (f.lastModified() < warfileRef.lastModified()) >> f.delete(); >> } >> >> into >> http://winstone.cvs.sourceforge.net/viewvc/winstone/winstone/src/java/winstone/HostConfiguration.java?revision=1.8&view=markup >> at line 241 and remove line 253, 254. >> (not tested, just an idea) >> >> Thanks, >> Bruno >> >> ------------------------------------------------------------------------- >> This SF.Net email is sponsored by the Moblin Your Move Developer's >> challenge >> Build the coolest Linux based applications with Moblin SDK & win great >> prizes >> Grand prize is a trip for two to an Open Source event anywhere in the >> world >> http://moblin-contest.org/redirect.php?banner_id=100&url=/ >> _______________________________________________ >> Winstone-devel mailing list >> Win...@li... >> https://lists.sourceforge.net/lists/listinfo/winstone-devel >> > |
From: Rick K. <ri...@kn...> - 2008-11-26 00:17:36
|
I was thinking something along that line when I read your suggestion. Seems better, although for backwards compatibility sake I think we'll leave the default as the current behaviour. Thanks - I'm overseas at the moment, so I'll put this in the queue for when I get home. Rick Bruno Feurer wrote: > Hi Rick, > > the war file is newer, but only file contained in this war file will > be overwriten (if newer). But some libs hold the release number in > their file name, thus the older lib with a file name not existent in > the war file anymore is not deleted. In the WEB-INF/lib folder this > older lib file is still in the classpath of the web app and could mask > the packages of the newer lib. > > Yes, your solution, limiting the deletion to the /ib and /classes > folder, would solve my deployment problem. However, leftover files > could trigger a problem in any application reading and interpreting a > folder content, like the classloader does. Old files cannot be > removed, just existing overwritten. > > What do you say to an additional config option? something like > "clearTempFolder: yes/no", or maybe "keepTempFolders: WEB-INF/db;..." > ;) > > Thanks, > Bruno > > PS: I would feel uncomfortable, holding my db data in a temp folder... > somebody might clean it eventually ;) > > > On Mon, Nov 24, 2008 at 10:59 PM, Rick Knowles <ri...@kn...> wrote: > >> Hi Bruno, >> >> This is an interesting way of tackling the problem, but I think we need to >> give it some additional thought iterations. The original reasoning behind >> the age check was to allow for people to use things like mckoi db, which is >> perfect for packaging an SQL database inside your warfile. In this case, >> each time the war is restarted it's important that the war contents don't >> overwrite the modified db files (usually a work folder inside the WEB-INF/db >> folder, using a pre-created schema inside the warfile that the application >> modifies after launch). >> >> The solution you mentioned would delete those, but I can recognize the >> frustration of not properly redeploying. Maybe a special case for >> WEB-INF/lib and WEB-INF/classes folders ? >> >> Also, I'm a little confused how you managed to get newer releases of the jar >> files inside the warfile without creating a warfile that also had a newer >> date. Creating a warfile with the newer jars should have created a new war >> which would trigger the redeploy to overwrite correctly ... how did this >> happen ? >> >> Thanks, >> >> Rick >> >> Bruno Feurer wrote: >> >>> Hi Rick, >>> >>> thanks for writing the Winstone Servlet engine! >>> >>> When I use the war file feature with a war, containing newer releases >>> of WEB-INF/lib jars, the temp folder keeps the old releases. So the >>> web app might not see the new lib (masked by the old one) until the >>> user manually deletes the temp folder before starting the engine. >>> In your code, you overwrite only older files, that exist in the war >>> archive. What would you say to cleanup all files, older than the war, >>> in a separate step. something like inserting this: >>> >>> ArrayList<File> files = new >>> ArrayList<File>(Arrays.asList(unzippedDir.listFiles())); >>> for (int i = 0; i < files.size(); i++) { >>> File f = files.get(i); >>> if (f.isDirectory()) >>> files.addAll(Arrays.asList(f.listFiles())); >>> else if (f.lastModified() < warfileRef.lastModified()) >>> f.delete(); >>> } >>> >>> into >>> http://winstone.cvs.sourceforge.net/viewvc/winstone/winstone/src/java/winstone/HostConfiguration.java?revision=1.8&view=markup >>> at line 241 and remove line 253, 254. >>> (not tested, just an idea) >>> >>> Thanks, >>> Bruno >>> >>> ------------------------------------------------------------------------- >>> This SF.Net email is sponsored by the Moblin Your Move Developer's >>> challenge >>> Build the coolest Linux based applications with Moblin SDK & win great >>> prizes >>> Grand prize is a trip for two to an Open Source event anywhere in the >>> world >>> http://moblin-contest.org/redirect.php?banner_id=100&url=/ >>> _______________________________________________ >>> Winstone-devel mailing list >>> Win...@li... >>> https://lists.sourceforge.net/lists/listinfo/winstone-devel >>> >>> |