Geronimo
  1. Geronimo
  2. GERONIMO-2167

deployer.jar not cleaning up properly during redeploy and undeploy

    Details

    • Type: Bug Bug
    • Status: Open
    • Priority: Major Major
    • Resolution: Unresolved
    • Affects Version/s: 1.1, 1.1.1, 1.1.x, 1.2
    • Fix Version/s: 1.1.x
    • Component/s: deployment
    • Security Level: public (Regular issues)
    • Labels:
      None
    • Environment:

      Win32/XP SP1
      Sun JDK 1.5_06

      Description

      deployment using deploy.jar doesn't appear to clean up correctly.

      first deploy always works. subsequent re-deploy and un-deploy are problematic.

      following illustrates the full sequence of events as i had encountered:

      ------------------------------------------

      D:\work\SERVER\geronimo-1.1\bin>c:\JDK\jdk1.5.0_06\bin\java.exe -jar deployer.ja
      r --user system --password manager deploy D:/work/SERVER/dwr-demo.war
      Deployed littleoldme/dwrdemo/1.1/war @ http://vaio:8080/dwr-demo

      D:\work\SERVER\geronimo-1.1\bin>c:\JDK\jdk1.5.0_06\bin\java.exe -jar deployer.ja
      r --user system --password manager redeploy D:/work/SERVER/dwr-demo.war
      No ModuleID or TargetModuleID provided. Attempting to guess based
      on the content of the archive.
      Attempting to use ModuleID 'littleoldme/dwrdemo/1.1/war'
      Stopped littleoldme/dwrdemo/1.1/war
      Unloaded littleoldme/dwrdemo/1.1/war
      Uninstalled littleoldme/dwrdemo/1.1/war
      Deployed littleoldme/dwrdemo/1.1/war
      Started littleoldme/dwrdemo/1.1/war
      Redeployed littleoldme/dwrdemo/1.1/war

      D:\work\SERVER\geronimo-1.1\bin>c:\JDK\jdk1.5.0_06\bin\java.exe -jar deployer.ja
      r --user system --password manager redeploy D:/work/SERVER/dwr-demo.war
      No ModuleID or TargetModuleID provided. Attempting to guess based
      on the content of the archive.
      Attempting to use ModuleID 'littleoldme/dwrdemo/1.1/war'
      Stopped littleoldme/dwrdemo/1.1/war
      Unloaded littleoldme/dwrdemo/1.1/war
      Uninstalled littleoldme/dwrdemo/1.1/war
      Error: Operation failed:
      org.apache.geronimo.kernel.config.ConfigurationAlreadyExistsException:
      Configuration already exists: littleoldme/dwrdemo/1.1/war

      Configuration already exists: littleoldme/dwrdemo/1.1/war

      D:\work\SERVER\geronimo-1.1\bin>c:\JDK\jdk1.5.0_06\bin\java.exe -jar deployer.ja
      r --user system --password manager undeploy littleoldme/dwrdemo/1.1/war
      Error: littleoldme/dwrdemo/1.1/war does not appear to be a the name
      of a module available on the selected server. Perhaps it has already
      been stopped or undeployed? If you're trying to specify a
      TargetModuleID, use the syntax TargetName|ModuleName instead. If
      you're not sure what's running, try the list-modules command.

      ------------------------------------------

      While in this broken state, i'm able to recover by manually removing the $

      {geronimo}/repository/littleoldme directory and removing the one line in ${geronimo}

      /var/config/config.xml that says

      <module load="false" name="littleoldme/dwrdemo/1.1/war"/>

      However, this only gets me to a fresh beginning, and then the whole sequence starts again as I repeat (re/un)deploying.

      1. dwr-demo.war
        756 kB
        Leonard Wu
      2. jw-0620-dwr.zip
        765 kB
        Leonard Wu

        Activity

        Hide
        Kevan Miller added a comment -

        I haven't gotten enough time to fix this problem and I'm hesitant to mess with the ClassLoader this close to a release. So, unless things go extremely well the next two days, I'll fix in 1.1.x.

        This problem can be avoided by having an application clean up the resources that it opens (which is pretty good practice).

        Show
        Kevan Miller added a comment - I haven't gotten enough time to fix this problem and I'm hesitant to mess with the ClassLoader this close to a release. So, unless things go extremely well the next two days, I'll fix in 1.1.x. This problem can be avoided by having an application clean up the resources that it opens (which is pretty good practice).
        Hide
        Leonard Wu added a comment -

        Thanks for the diagnosis.

        You were quite right. Closing the resources released the lock and solved the problem. Just the InputStreamReader and BufferedReader were enough, didn't have to close any HSQL connection.

        And I agree, G should handle such rogue coding (thankfully not my own) more gracefully.

        Show
        Leonard Wu added a comment - Thanks for the diagnosis. You were quite right. Closing the resources released the lock and solved the problem. Just the InputStreamReader and BufferedReader were enough, didn't have to close any HSQL connection. And I agree, G should handle such rogue coding (thankfully not my own) more gracefully.
        Hide
        Kevan Miller added a comment -

        Leonard, thanks for the source.

        I'm certain that the following line of code from ContextListener.contextInitialized() is at the root of your problem:

        InputStreamReader in = new InputStreamReader(getClass().getClassLoader().getResourceAsStream("db.sql"));

        db.sql is the "file" that's being locked by Windows. Right now, your contextDestroyed() method is not doing anything. I'd prefer to see it closing your HSQL connection and insuring that the above InputStreamReader has been closed. I'm pretty confident that if you close the above InputStream, undeploy will work properly...

        I'm leaving the jira open a bit longer, it's possible that we could/should avoid this situation. Geronimo should be able to deploy/undeploy an app, even if it's not "well-behaved". I'm going to think about this...

        Show
        Kevan Miller added a comment - Leonard, thanks for the source. I'm certain that the following line of code from ContextListener.contextInitialized() is at the root of your problem: InputStreamReader in = new InputStreamReader(getClass().getClassLoader().getResourceAsStream("db.sql")); db.sql is the "file" that's being locked by Windows. Right now, your contextDestroyed() method is not doing anything. I'd prefer to see it closing your HSQL connection and insuring that the above InputStreamReader has been closed. I'm pretty confident that if you close the above InputStream, undeploy will work properly... I'm leaving the jira open a bit longer, it's possible that we could/should avoid this situation. Geronimo should be able to deploy/undeploy an app, even if it's not "well-behaved". I'm going to think about this...
        Hide
        Leonard Wu added a comment -

        You know. I had a thought. That webapp actually uses a inbuilt Java database, HSQL. I suspect that the lock isn't released quick enough by the running HSQL while the app was being shutdown.

        Now that I've tried other webapps, I can confirm that all the other ones deployed and undeployed perfectly. So it would appear that the deploy problem is specific to my unlucky choice of test app. And, I personally have no real reason to choose HSQL over the G internal Derby, either so this is no longer a problem for me.

        Assuming that you are still determined to iron out all kinks in G, please see the newly attached sources for the orginal test app. I've included IntelliJ v5 project files in case you happen to be using that.

        Show
        Leonard Wu added a comment - You know. I had a thought. That webapp actually uses a inbuilt Java database, HSQL. I suspect that the lock isn't released quick enough by the running HSQL while the app was being shutdown. Now that I've tried other webapps, I can confirm that all the other ones deployed and undeployed perfectly. So it would appear that the deploy problem is specific to my unlucky choice of test app. And, I personally have no real reason to choose HSQL over the G internal Derby, either so this is no longer a problem for me. Assuming that you are still determined to iron out all kinks in G, please see the newly attached sources for the orginal test app. I've included IntelliJ v5 project files in case you happen to be using that.
        Hide
        Kevan Miller added a comment -

        OK. It does look like a Windows file locking problem. Furthermore, it's only happening on Tomcat, not Jetty (at least in this usage scenario).

        The file that's not being cleaned up is repository/littleoldme/dwrdemo/1.1/dwrdemo-1.1.war/WEB-INF/classes/db.sql

        Show
        Kevan Miller added a comment - OK. It does look like a Windows file locking problem. Furthermore, it's only happening on Tomcat, not Jetty (at least in this usage scenario). The file that's not being cleaned up is repository/littleoldme/dwrdemo/1.1/dwrdemo-1.1.war/WEB-INF/classes/db.sql
        Hide
        Kevan Miller added a comment -

        Leonard, thanks much for the test case.

        I haven't been able to reproduce on MAC OSX. I'm afraid that this is going to be a Windows-based file locking gremlin. I suspect that the undeploy cleanup is not finished before we're starting the deploy phase of a redeploy.

        If you have a moment or two, would be interesting to know if the following works/fails:

        1) deploy
        2) undeploy (not redeploy)
        3) wait 1 minute
        4) deploy

        Meanwhile, I'll dust off my windoze box and see what I can find...

        Show
        Kevan Miller added a comment - Leonard, thanks much for the test case. I haven't been able to reproduce on MAC OSX. I'm afraid that this is going to be a Windows-based file locking gremlin. I suspect that the undeploy cleanup is not finished before we're starting the deploy phase of a redeploy. If you have a moment or two, would be interesting to know if the following works/fails: 1) deploy 2) undeploy (not redeploy) 3) wait 1 minute 4) deploy Meanwhile, I'll dust off my windoze box and see what I can find...
        Hide
        Leonard Wu added a comment -

        deployment plan, geronimo-web.xml is included in the WAR

        Show
        Leonard Wu added a comment - deployment plan, geronimo-web.xml is included in the WAR
        Hide
        Leonard Wu added a comment -

        the exact test WAR file attached

        Show
        Leonard Wu added a comment - the exact test WAR file attached

          People

          • Assignee:
            Kevan Miller
            Reporter:
            Leonard Wu
          • Votes:
            1 Vote for this issue
            Watchers:
            1 Start watching this issue

            Dates

            • Created:
              Updated:

              Development