Index: src/com/mysql/management/MysqldResource.java =================================================================== --- src/com/mysql/management/MysqldResource.java (revision 121) +++ src/com/mysql/management/MysqldResource.java (revision 122) @@ -562,8 +562,11 @@ } void ensureEssentialFilesExist() { - utils.streams().expandResourceJar(dataDir, - getVersionDir() + Streams.RESOURCE_SEPARATOR + "data_dir.jar"); + if (utils.files().isEmpty(dataDir)) { + String data_jar = getVersionDir() + Streams.RESOURCE_SEPARATOR + + "data_dir.jar"; + utils.streams().expandResourceJar(dataDir, data_jar); + } utils.streams().expandResourceJar(baseDir, getVersionDir() + Streams.RESOURCE_SEPARATOR + shareJar()); } Index: src/com/mysql/management/MysqldResourceTest.java =================================================================== --- src/com/mysql/management/MysqldResourceTest.java (revision 121) +++ src/com/mysql/management/MysqldResourceTest.java (revision 122) @@ -232,7 +232,19 @@ assertTrue(host_frm.exists()); } + + public void testBug35804() { + testCreateDbFiles(); + + File dbDataDir = new File(dataDir, "mysql"); + File host_frm = new File(dbDataDir, "host.frm"); + assertTrue(host_frm.delete()); + assertFalse(host_frm.exists()); + mysqldResource.ensureEssentialFilesExist(); + assertFalse(host_frm.exists()); + } + private void assertRunningThenShutdown() { assertRunning(); mysqldResource.shutdown(); Index: src/com/mysql/management/util/Files.java =================================================================== --- src/com/mysql/management/util/Files.java (revision 121) +++ src/com/mysql/management/util/Files.java (revision 122) @@ -192,4 +192,15 @@ } return cononical; } + + public boolean isEmpty(File dir) { + if (!dir.exists()) { + return true; + } + if (!dir.isDirectory()) { + return false; + } + return dir.listFiles().length == 0; + } + } Index: src/com/mysql/management/util/FilesTest.java =================================================================== --- src/com/mysql/management/util/FilesTest.java (revision 121) +++ src/com/mysql/management/util/FilesTest.java (revision 122) @@ -61,6 +61,14 @@ assertEquals(javaTmp.getCanonicalFile(), testParent.getCanonicalFile()); } + private void writeToFile(File file, String text) + throws FileNotFoundException { + FileOutputStream fos = new FileOutputStream(file); + PrintWriter out = new PrintWriter(fos); + out.print(text); + out.close(); + } + public void testDeleteTree() throws FileNotFoundException { foo = new File(fileUtil.testDir(), "foo"); File bar = new File(foo, "bar"); @@ -68,10 +76,7 @@ assertEquals(true, bar.exists()); File baz = new File(foo, "baz"); - FileOutputStream fos = new FileOutputStream(baz); - PrintWriter out = new PrintWriter(fos); - out.print("baz"); - out.close(); + writeToFile(baz, "baz"); assertEquals(true, baz.exists()); assertEquals(3, baz.length()); @@ -132,10 +137,7 @@ File bar = new File(fileUtil.testDir(), "junkFile.txt"); bar.deleteOnExit(); - FileOutputStream fos = new FileOutputStream(bar); - PrintStream ps = new PrintStream(fos); - ps.println("junk"); - ps.close(); + writeToFile(bar, "junk"); Exception expected = null; try { @@ -155,5 +157,24 @@ assertNotNull(expected); testUtil.assertContainsIgnoreCase(expected.getMessage(), "null"); } + + public void testIsEmpty() throws Exception { + foo = fileUtil.tmp("foo"); + assertEquals(false, foo.exists()); + assertEquals(true, fileUtil.isEmpty(foo)); + foo.mkdirs(); + assertEquals(true, foo.exists()); + assertEquals(true, foo.isDirectory()); + assertEquals(true, fileUtil.isEmpty(foo)); + File bar = new File(foo, "bar"); + assertEquals(false, bar.exists()); + assertEquals(true, fileUtil.isEmpty(bar)); + writeToFile(bar, "stuff"); + assertEquals(true, bar.exists()); + assertEquals(false, fileUtil.isEmpty(bar)); + assertEquals(false, fileUtil.isEmpty(foo)); + assertEquals(true, bar.delete()); + assertEquals(true, fileUtil.isEmpty(foo)); + } } Index: CHANGES =================================================================== --- CHANGES (revision 121) +++ CHANGES (revision 122) @@ -1,6 +1,8 @@ # Changelog # $Id: CHANGES,v 1.14 2005/10/25 19:11:16 eherman Exp $ +2008-04-03 - added fix for http://bugs.mysql.com/bug.php?id=35804 + 5-0-9 2008-02-19 - added robustness in tests for differences in C/J