You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@stratos.apache.org by is...@apache.org on 2015/12/09 18:06:27 UTC

[02/21] stratos git commit: initial changes for restoring initial artifacts after signup removal

initial changes for restoring initial artifacts after signup removal


Project: http://git-wip-us.apache.org/repos/asf/stratos/repo
Commit: http://git-wip-us.apache.org/repos/asf/stratos/commit/dbd2f07f
Tree: http://git-wip-us.apache.org/repos/asf/stratos/tree/dbd2f07f
Diff: http://git-wip-us.apache.org/repos/asf/stratos/diff/dbd2f07f

Branch: refs/heads/stratos-4.1.x
Commit: dbd2f07f1a2395a5256e2439595242ff8d521abe
Parents: 2951b41
Author: Isuru Haththotuwa <is...@apache.org>
Authored: Tue Dec 1 11:07:56 2015 +0530
Committer: Isuru Haththotuwa <is...@apache.org>
Committed: Tue Dec 1 11:07:56 2015 +0530

----------------------------------------------------------------------
 .../cartridge.agent/constants.py                |  2 +
 .../modules/artifactmgt/git/agentgithandler.py  | 22 ++++----
 .../modules/util/cartridgeagentutils.py         | 55 ++++++++++++++++++++
 .../plugins/DefaultArtifactCheckout.py          | 34 +++++++-----
 4 files changed, 86 insertions(+), 27 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/stratos/blob/dbd2f07f/components/org.apache.stratos.python.cartridge.agent/src/main/python/cartridge.agent/cartridge.agent/constants.py
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.python.cartridge.agent/src/main/python/cartridge.agent/cartridge.agent/constants.py b/components/org.apache.stratos.python.cartridge.agent/src/main/python/cartridge.agent/cartridge.agent/constants.py
index cd2ce36..4672579 100644
--- a/components/org.apache.stratos.python.cartridge.agent/src/main/python/cartridge.agent/cartridge.agent/constants.py
+++ b/components/org.apache.stratos.python.cartridge.agent/src/main/python/cartridge.agent/cartridge.agent/constants.py
@@ -140,3 +140,5 @@ MONITORING_RECEIVER_PORT = "monitoring.server.port"
 MONITORING_RECEIVER_SECURE_PORT = "monitoring.server.secure.port"
 MONITORING_SERVER_ADMIN_USERNAME = "monitoring.server.admin.username"
 MONITORING_SERVER_ADMIN_PASSWORD = "monitoring.server.admin.password"
+
+BACKUP_DIR_SUFFIX = "_backup"

http://git-wip-us.apache.org/repos/asf/stratos/blob/dbd2f07f/components/org.apache.stratos.python.cartridge.agent/src/main/python/cartridge.agent/cartridge.agent/modules/artifactmgt/git/agentgithandler.py
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.python.cartridge.agent/src/main/python/cartridge.agent/cartridge.agent/modules/artifactmgt/git/agentgithandler.py b/components/org.apache.stratos.python.cartridge.agent/src/main/python/cartridge.agent/cartridge.agent/modules/artifactmgt/git/agentgithandler.py
index 2cb4c38..7546619 100644
--- a/components/org.apache.stratos.python.cartridge.agent/src/main/python/cartridge.agent/cartridge.agent/modules/artifactmgt/git/agentgithandler.py
+++ b/components/org.apache.stratos.python.cartridge.agent/src/main/python/cartridge.agent/cartridge.agent/modules/artifactmgt/git/agentgithandler.py
@@ -28,10 +28,10 @@ import time
 from config import Config
 from exception import GitRepositorySynchronizationException
 from git import *
-import errno
 
 from ...util.asyncscheduledtask import AbstractAsyncScheduledTask, ScheduledExecutor
 from ...util.log import LogFactory
+from ...util.cartridgeagentutils import Utils
 
 
 class AgentGitHandler:
@@ -315,7 +315,9 @@ class AgentGitHandler:
                 "Could not remove repository folder for tenant:%s  %s" % (git_repo.tenant_id, e))
 
         # restore default artifacts
-        AgentGitHandler.restore_default_artifacts("/tmp/default_artifacts", git_repo.local_repo_path)
+        if Utils.directory_exists(Utils.strip_trailing_slash(git_repo.local_repo_path) +
+                                          constants.BACKUP_DIR_SUFFIX):
+            AgentGitHandler.restore_default_artifacts(git_repo.local_repo_path)
 
         AgentGitHandler.clear_repo(tenant_id)
         AgentGitHandler.log.info("Git repository deleted for tenant %s" % git_repo.tenant_id)
@@ -323,19 +325,13 @@ class AgentGitHandler:
         return True
 
     @staticmethod
-    def restore_default_artifacts (default_artifact_backup_location, local_repo_path):
+    def restore_default_artifacts(default_dir):
         try:
-            if os.path.isdir(default_artifact_backup_location):
-                # first remove all the artifacts in the local_repo_path
-                if os.listdir(local_repo_path):
-                    # non-empty
-                    filelist = [f for f in os.listdir(local_repo_path)]
-                    for f in filelist:
-                        GitUtils.delete_folder_tree(local_repo_path + '/' + f)
-            AgentGitHandler.log.info('Restoring default artifacts from ' + default_artifact_backup_location + ' to ' + local_repo_path)
-            shutil.copytree(default_artifact_backup_location, local_repo_path)
+            Utils.move_directory(Utils.strip_trailing_slash(default_dir) + constants.BACKUP_DIR_SUFFIX, default_dir)
+            AgentGitHandler.log.info('Restored contents from backup location ' +Utils.strip_trailing_slash(default_dir)
+                                     + constants.BACKUP_DIR_SUFFIX)
         except OSError as e:
-            AgentGitHandler.log.error('Contents of ' + default_artifact_backup_location + ' not restored. Error: %s' % e)
+            AgentGitHandler.log.error('Contents of ' + default_dir + ' not restored. Error: %s' % e)
 
     @staticmethod
     def execute_git_command(command, repo_path):

http://git-wip-us.apache.org/repos/asf/stratos/blob/dbd2f07f/components/org.apache.stratos.python.cartridge.agent/src/main/python/cartridge.agent/cartridge.agent/modules/util/cartridgeagentutils.py
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.python.cartridge.agent/src/main/python/cartridge.agent/cartridge.agent/modules/util/cartridgeagentutils.py b/components/org.apache.stratos.python.cartridge.agent/src/main/python/cartridge.agent/cartridge.agent/modules/util/cartridgeagentutils.py
index ebd6889..74c7e75 100644
--- a/components/org.apache.stratos.python.cartridge.agent/src/main/python/cartridge.agent/cartridge.agent/modules/util/cartridgeagentutils.py
+++ b/components/org.apache.stratos.python.cartridge.agent/src/main/python/cartridge.agent/cartridge.agent/modules/util/cartridgeagentutils.py
@@ -21,6 +21,8 @@ import time
 import socket
 import string
 import hashlib
+import shutil
+import os
 
 from log import LogFactory
 
@@ -120,6 +122,59 @@ def check_ports_active(ip_address, ports):
 
     return True
 
+class Utils (object):
+
+    @staticmethod
+    def directory_exists(dir):
+        """
+        Checks if the given directory exists
+        :param dir: directory to check
+        :return: True if the directory dir exists, else False
+        :rtype: bool
+        """
+        try:
+            return os.path.isdir(dir)
+        except OSError as e:
+            log.error("Unable to check directory existance [%s]" % e)
+            return False
+
+    @staticmethod
+    def copy_directory(src, destination):
+        """
+        Copies if the directory 'src' to 'destination'
+        :param src: location of directory to copy
+        :param destination: new directory location
+        """
+        try:
+            shutil.copytree(src, destination)
+            log.debug("Directory [%s] copied to [%s]" % (src, destination))
+        except OSError as e:
+            log.error('Directory not copied. Error: %s' % e)
+
+    @staticmethod
+    def strip_trailing_slash(string):
+        """
+        If the string has a trailing '/', removes it
+        :param string: string to check
+        :return: string without a trailing '/'
+        :rtype: string
+        """
+        if string.endswith('/'):
+            return string[:-1]
+        return string
+
+    @staticmethod
+    def move_directory(src, destination):
+        """
+        Moves if the directory 'src' to 'destination'
+        :param src: location of directory to move
+        :param destination: new directory location
+        """
+        try:
+            shutil.move(src, destination)
+            log.debug("Directory [%s] moved to [%s]" % (src, destination))
+        except OSError as e:
+            log.error('Directory not moved. Error: %s' % e)
 
 class IncrementalCeilingListIterator(object):
     """

http://git-wip-us.apache.org/repos/asf/stratos/blob/dbd2f07f/components/org.apache.stratos.python.cartridge.agent/src/main/python/cartridge.agent/cartridge.agent/plugins/DefaultArtifactCheckout.py
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.python.cartridge.agent/src/main/python/cartridge.agent/cartridge.agent/plugins/DefaultArtifactCheckout.py b/components/org.apache.stratos.python.cartridge.agent/src/main/python/cartridge.agent/cartridge.agent/plugins/DefaultArtifactCheckout.py
index 1bef17b..52648a1 100644
--- a/components/org.apache.stratos.python.cartridge.agent/src/main/python/cartridge.agent/cartridge.agent/plugins/DefaultArtifactCheckout.py
+++ b/components/org.apache.stratos.python.cartridge.agent/src/main/python/cartridge.agent/cartridge.agent/plugins/DefaultArtifactCheckout.py
@@ -17,12 +17,12 @@
 
 from plugins.contracts import IArtifactCheckoutPlugin
 from modules.util.log import LogFactory
+from modules.util.cartridgeagentutils import Utils
 from modules.artifactmgt.git.agentgithandler import AgentGitHandler
 from config import Config
 import constants
 from exception import *
 import shutil
-import errno
 import os
 
 
@@ -94,8 +94,13 @@ class DefaultArtifactCheckout(IArtifactCheckoutPlugin):
             self.log.info("Executing git clone: [tenant-id] %s [repo-url] %s, [repo path] %s",
                           git_repo.tenant_id, git_repo.repo_url, git_repo.local_repo_path)
 
-            # copy default artifacts (if any) to a /tmp/default_artifacts
-            self.backupDefaultArtifacts(git_repo.local_repo_path, "/tmp/default_artifacts")
+            # copy default artifacts (if any) to a a temp location
+            # if directory name is dir, the backup directory name would be dir_backup
+            if self.initial_artifacts_exists(git_repo.local_repo_path):
+                self.log.info("Default artifacts exist at " + git_repo.local_repo_path)
+                self.backup_initial_artifacts(git_repo.local_repo_path)
+            else:
+                self.log.info("No default artifacts exist at " + git_repo.local_repo_path)
 
             try:
                 git_repo = AgentGitHandler.clone(git_repo)
@@ -109,17 +114,18 @@ class DefaultArtifactCheckout(IArtifactCheckoutPlugin):
                 AgentGitHandler.retry_clone(git_repo)
                 AgentGitHandler.add_repo(git_repo)
 
-    def backupDefaultArtifacts(src, dest):
+    def initial_artifacts_exists(self, dir):
         try:
-            if not os.path.isdir(src):
-                self.log.info ('Direcotry ' + src + ' does not exist')
-                return
-            if os.path.isdir(dest):
-                self.log.info('Directory ' + dest + ' already exists, will delete')
-                shutil.rmtree(dest)
-            self.log.info('Copying default artifacts from ' + src + ' to ' + dest)
-            shutil.copytree(src, dest)
+            return os.path.exists(dir) and os.listdir(dir)
         except OSError as e:
-            self.log.error('Directory not copied. Error: %s' % e)
-
+            self.log.error('Unable to check if directory exists | non-empty, error: %s' % e)
+            return False
 
+    def backup_initial_artifacts(self, src):
+        self.log.info('Initial artifacts exists, taking backup to ' + Utils.strip_trailing_slash(src)
+                      + constants.BACKUP_DIR_SUFFIX +
+                      ' directory')
+        try:
+            shutil.copytree(src, Utils.strip_trailing_slash(src) + constants.BACKUP_DIR_SUFFIX)
+        except OSError as e:
+            self.log.error('Directory not copied. Error: %s' % e)
\ No newline at end of file