Repository: ambari Updated Branches: refs/heads/trunk 25fd9a627 -> 1065bc515
AMBARI-13019: Empty package folders on ambari-server causes corresponding component restart to fail (Nahappan Somasundaram via jluniya) Project: http://git-wip-us.apache.org/repos/asf/ambari/repo Commit: http://git-wip-us.apache.org/repos/asf/ambari/commit/1065bc51 Tree: http://git-wip-us.apache.org/repos/asf/ambari/tree/1065bc51 Diff: http://git-wip-us.apache.org/repos/asf/ambari/diff/1065bc51 Branch: refs/heads/trunk Commit: 1065bc5155629ce5951c370c5cc74ad849ae222d Parents: 25fd9a6 Author: Jayush Luniya <jlun...@hortonworks.com> Authored: Fri Sep 18 17:25:38 2015 -0700 Committer: Jayush Luniya <jlun...@hortonworks.com> Committed: Fri Sep 18 17:25:38 2015 -0700 ---------------------------------------------------------------------- .../server/stack/StackServiceDirectory.java | 16 ++++++++++---- .../python/ambari_server/resourceFilesKeeper.py | 8 +++++-- .../src/test/python/TestResourceFilesKeeper.py | 23 +++++++++++++++++++- 3 files changed, 40 insertions(+), 7 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/ambari/blob/1065bc51/ambari-server/src/main/java/org/apache/ambari/server/stack/StackServiceDirectory.java ---------------------------------------------------------------------- diff --git a/ambari-server/src/main/java/org/apache/ambari/server/stack/StackServiceDirectory.java b/ambari-server/src/main/java/org/apache/ambari/server/stack/StackServiceDirectory.java index 92455fe..d27e52a 100644 --- a/ambari-server/src/main/java/org/apache/ambari/server/stack/StackServiceDirectory.java +++ b/ambari-server/src/main/java/org/apache/ambari/server/stack/StackServiceDirectory.java @@ -63,12 +63,20 @@ public class StackServiceDirectory extends ServiceDirectory { File absPackageDir = new File(getAbsolutePath() + File.separator + PACKAGE_FOLDER_NAME); if (absPackageDir.isDirectory()) { - packageDir = absPackageDir.getPath().substring(stackDir.getParentFile().getParentFile().getPath().length() + 1); - LOG.debug(String.format("Service package folder for service %s for stack %s has been resolved to %s", - serviceDir.getName(), stackId, packageDir)); + String[] files = absPackageDir.list(); + int fileCount = files.length; + if (fileCount > 0) { + packageDir = absPackageDir.getPath().substring(stackDir.getParentFile().getParentFile().getPath().length() + 1); + LOG.debug(String.format("Service package folder for service %s for stack %s has been resolved to %s", + serviceDir.getName(), stackId, packageDir)); + } + else { + LOG.debug(String.format("Service package folder %s for service %s for stack %s is empty.", + absPackageDir, serviceDir.getName(), stackId)); + } } else { LOG.debug(String.format("Service package folder %s for service %s for stack %s does not exist.", - absPackageDir, serviceDir.getName(), stackId)); + absPackageDir, serviceDir.getName(), stackId)); } parseMetaInfoFile(); } http://git-wip-us.apache.org/repos/asf/ambari/blob/1065bc51/ambari-server/src/main/python/ambari_server/resourceFilesKeeper.py ---------------------------------------------------------------------- diff --git a/ambari-server/src/main/python/ambari_server/resourceFilesKeeper.py b/ambari-server/src/main/python/ambari_server/resourceFilesKeeper.py index c9bca73..fb429d0 100644 --- a/ambari-server/src/main/python/ambari_server/resourceFilesKeeper.py +++ b/ambari-server/src/main/python/ambari_server/resourceFilesKeeper.py @@ -152,8 +152,12 @@ class ResourceFilesKeeper(): if cur_hash != saved_hash: if not self.nozip: self.zip_directory(directory, skip_empty_directory) - self.write_hash_sum(directory, cur_hash) - + # Skip generation of .hash file is directory is empty + if (skip_empty_directory and not os.listdir(directory)): + self.dbg_out("Empty directory. Skipping generation of hash file for {0}".format(directory)) + else: + self.write_hash_sum(directory, cur_hash) + pass def count_hash_sum(self, directory): """ http://git-wip-us.apache.org/repos/asf/ambari/blob/1065bc51/ambari-server/src/test/python/TestResourceFilesKeeper.py ---------------------------------------------------------------------- diff --git a/ambari-server/src/test/python/TestResourceFilesKeeper.py b/ambari-server/src/test/python/TestResourceFilesKeeper.py index 1fefa7a..8a06e07 100644 --- a/ambari-server/src/test/python/TestResourceFilesKeeper.py +++ b/ambari-server/src/test/python/TestResourceFilesKeeper.py @@ -165,13 +165,16 @@ class TestResourceFilesKeeper(TestCase): except Exception, e: self.fail('Unexpected exception thrown:' + str(e)) + @patch("os.listdir") @patch.object(ResourceFilesKeeper, "count_hash_sum") @patch.object(ResourceFilesKeeper, "read_hash_sum") @patch.object(ResourceFilesKeeper, "zip_directory") @patch.object(ResourceFilesKeeper, "write_hash_sum") def test_update_directory_archive(self, write_hash_sum_mock, zip_directory_mock, read_hash_sum_mock, - count_hash_sum_mock): + count_hash_sum_mock, + os_listdir_mock): + os_listdir_mock.return_value = ['file1', 'dir1'] # Test situation when there is no saved directory hash read_hash_sum_mock.return_value = None count_hash_sum_mock.return_value = self.YA_HASH @@ -245,6 +248,24 @@ class TestResourceFilesKeeper(TestCase): self.assertTrue(count_hash_sum_mock.called) self.assertFalse(zip_directory_mock.called) self.assertTrue(write_hash_sum_mock.called) + + # Test empty directory + read_hash_sum_mock.reset_mock() + count_hash_sum_mock.reset_mock() + zip_directory_mock.reset_mock() + write_hash_sum_mock.reset_mock() + + # If the input directory is empty, then write_hash_sum() should not be called + os_listdir_mock.return_value = [] # Empty dir + zip_directory_mock.side_effect = None + read_hash_sum_mock.return_value = None # hash read from .hash file + resource_files_keeper = ResourceFilesKeeper(self.TEST_RESOURCES_DIR, self.SOME_PATH) + resource_files_keeper.update_directory_archive(self.SOME_PATH) + + self.assertTrue(read_hash_sum_mock.called) + self.assertTrue(count_hash_sum_mock.called) + self.assertTrue(zip_directory_mock.called) + self.assertFalse(write_hash_sum_mock.called) pass