On Thu, Feb 25, 2021 at 4:58 PM <ma...@apache.org> wrote: > This is an automated email from the ASF dual-hosted git repository. > > markt pushed a commit to branch master > in repository https://gitbox.apache.org/repos/asf/tomcat.git > > > The following commit(s) were added to refs/heads/master by this push: > new 35a2e04 Fix SpotBugs warnings > 35a2e04 is described below > > commit 35a2e044d5988466b21b664610ce57b502833cd2 > Author: Mark Thomas <ma...@apache.org> > AuthorDate: Thu Feb 25 15:57:30 2021 +0000 > > Fix SpotBugs warnings > --- > java/org/apache/catalina/startup/HostConfig.java | 8 +++++--- > res/findbugs/filter-false-positives.xml | 6 ++++++ > .../catalina/nonblocking/TestNonBlockingAPI.java | 18 > +++++++++--------- > 3 files changed, 20 insertions(+), 12 deletions(-) > > diff --git a/java/org/apache/catalina/startup/HostConfig.java > b/java/org/apache/catalina/startup/HostConfig.java > index 6f332b2..b34ea58 100644 > --- a/java/org/apache/catalina/startup/HostConfig.java > +++ b/java/org/apache/catalina/startup/HostConfig.java > @@ -1237,6 +1237,7 @@ public class HostConfig implements LifecycleListener > { > ExecutorService es = host.getStartStopExecutor(); > List<Future<?>> results = new ArrayList<>(); > > + // Should not be null as we test above if this is a directory > String[] migrationCandidates = legacyAppBase.list(); > for (String migrationCandidate : migrationCandidates) { > File source = new File(legacyAppBase, migrationCandidate); > @@ -1282,7 +1283,8 @@ public class HostConfig implements LifecycleListener > { > tempNew = File.createTempFile("new", null, > host.getLegacyAppBaseFile()); > tempOld = File.createTempFile("old", null, > host.getLegacyAppBaseFile()); > // createTempFile is not directly compatible with > directories, so cleanup > - tempNew.delete(); > + Files.delete(tempNew.toPath()); > + Files.delete(tempOld.toPath()); > > // The use of defaults is deliberate here to avoid having to > // recreate every configuration option on the host. Better to > change > @@ -1295,8 +1297,8 @@ public class HostConfig implements LifecycleListener > { > migration.execute(); > > // Use rename > - destination.renameTo(tempOld); > - tempNew.renameTo(destination); > + Files.move(destination.toPath(), tempOld.toPath()); >
Ok, I'm super sorry I didn't retest after this seemingly cosmetic change until the release vote ... This breaks the migration feature as it now needs a if (destination.exists()) { } wrapping Files.move, otherwise it will throw an IOE if the webapp was not previously migrated. So 10.0.3 is broken. This won't affect 9 and 8.5. Rémy > + Files.move(tempNew.toPath(), destination.toPath()); > ExpandWar.delete(tempOld); > > } catch (Throwable t) { > diff --git a/res/findbugs/filter-false-positives.xml > b/res/findbugs/filter-false-positives.xml > index e47e128..69cfd78 100644 > --- a/res/findbugs/filter-false-positives.xml > +++ b/res/findbugs/filter-false-positives.xml > @@ -532,6 +532,12 @@ > <Bug code="NP" /> > </Match> > <Match> > + <!-- legacyAppBase is tested a few lines earlier --> > + <Class name="org.apache.catalina.startup.HostConfig" /> > + <Method name="migrateLegacyApps" /> > + <Bug pattern="NP_NULL_ON_SOME_PATH_FROM_RETURN_VALUE" /> > + </Match> > + <Match> > <!-- Domain resolution not an issue here --> > <Class name="org.apache.catalina.startup.WebappServiceLoader" /> > <Method name="load" /> > diff --git a/test/org/apache/catalina/nonblocking/TestNonBlockingAPI.java > b/test/org/apache/catalina/nonblocking/TestNonBlockingAPI.java > index 0ca028b..97c6a22 100644 > --- a/test/org/apache/catalina/nonblocking/TestNonBlockingAPI.java > +++ b/test/org/apache/catalina/nonblocking/TestNonBlockingAPI.java > @@ -1376,9 +1376,9 @@ public class TestNonBlockingAPI extends > TomcatBaseTest { > > private static final long serialVersionUID = 1L; > > - private final CountDownLatch responseCommitLatch; > - private final CountDownLatch clientCloseLatch; > - private final CountDownLatch asyncCompleteLatch; > + private final transient CountDownLatch responseCommitLatch; > + private final transient CountDownLatch clientCloseLatch; > + private final transient CountDownLatch asyncCompleteLatch; > private final boolean swallowIoException; > > public NBWriteServlet02(CountDownLatch responseCommitLatch, > CountDownLatch clientCloseLatch, > @@ -1441,7 +1441,7 @@ public class TestNonBlockingAPI extends > TomcatBaseTest { > private final CountDownLatch responseCommitLatch; > private final CountDownLatch clientCloseLatch; > private final boolean swallowIoException; > - private volatile int stage = 0; > + private volatile AtomicInteger stage = new AtomicInteger(0); > > public TestWriteListener02(AsyncContext ac, CountDownLatch > responseCommitLatch, > CountDownLatch clientCloseLatch, boolean > swallowIoException) { > @@ -1456,12 +1456,12 @@ public class TestNonBlockingAPI extends > TomcatBaseTest { > try { > ServletOutputStream sos = > ac.getResponse().getOutputStream(); > do { > - if (stage == 0) { > + if (stage.get() == 0) { > // Commit the response > ac.getResponse().flushBuffer(); > responseCommitLatch.countDown(); > - stage++; > - } else if (stage == 1) { > + stage.incrementAndGet(); > + } else if (stage.get() == 1) { > // Wait for the client to drop the connection > try { > clientCloseLatch.await(); > @@ -1469,8 +1469,8 @@ public class TestNonBlockingAPI extends > TomcatBaseTest { > // Ignore > } > sos.print("TEST"); > - stage++; > - } else if (stage == 2) { > + stage.incrementAndGet(); > + } else if (stage.get() == 2) { > sos.flush(); > } > } while (sos.isReady()); > > > --------------------------------------------------------------------- > To unsubscribe, e-mail: dev-unsubscr...@tomcat.apache.org > For additional commands, e-mail: dev-h...@tomcat.apache.org > >