You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@atlas.apache.org by su...@apache.org on 2015/11/09 13:23:46 UTC

incubator-atlas git commit: ATLAS-238 atlas_start.py- the Atlas server won’t restart after improper shutdown(ndjouri via sumasai)

Repository: incubator-atlas
Updated Branches:
  refs/heads/master e48dbc9d6 -> c93e0972a


ATLAS-238 atlas_start.py- the Atlas server won’t restart after improper shutdown(ndjouri via sumasai)


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

Branch: refs/heads/master
Commit: c93e0972a1201dcd0d5ce8a9286a4c96348c6b44
Parents: e48dbc9
Author: Suma Shivaprasad <su...@gmail.com>
Authored: Mon Nov 9 17:53:24 2015 +0530
Committer: Suma Shivaprasad <su...@gmail.com>
Committed: Mon Nov 9 17:53:24 2015 +0530

----------------------------------------------------------------------
 distro/src/bin/atlas_config.py                 | 40 +++++++++++++++++++--
 distro/src/bin/atlas_start.py                  | 32 +++++++++++++++--
 distro/src/test/python/scripts/TestMetadata.py | 20 ++++++++---
 release-log.txt                                |  1 +
 4 files changed, 84 insertions(+), 9 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-atlas/blob/c93e0972/distro/src/bin/atlas_config.py
----------------------------------------------------------------------
diff --git a/distro/src/bin/atlas_config.py b/distro/src/bin/atlas_config.py
index a3a23ef..f545a30 100755
--- a/distro/src/bin/atlas_config.py
+++ b/distro/src/bin/atlas_config.py
@@ -16,14 +16,15 @@
 # See the License for the specific language governing permissions and
 # limitations under the License.
 import getpass
-
 import os
 import platform
 import subprocess
 from threading import Thread
+from signal import SIGTERM
 import sys
 import time
 import errno
+from re import split
 
 LIB = "lib"
 CONF = "conf"
@@ -288,4 +289,39 @@ def writePid(metadata_pid_file, process):
     f.write(str(process.pid))
     f.close()
 
-
+def unix_exist_pid(pid):    
+    #check if process id exist in the current process table  
+    #See man 2 kill - Linux man page for info about the kill(pid,0) system function    
+    
+    try:
+        os.kill(pid, 0)
+    except OSError as e :
+        
+           return e.errno == errno.EPERM
+       
+    else:
+        return True
+
+
+def win_exist_pid(pid):
+    #The os.kill approach does not work on Windows with python 2.7
+    #the output from tasklist command is searched for the process id
+    
+    command='tasklist /fi  "pid eq '+ pid + '"'
+    sub_process=subprocess.Popen(command, stdout = subprocess.PIPE, shell=False)
+    sub_process.communicate()
+    output = subprocess.check_output(command)
+    output=split(" *",output)
+    for line in output:
+   
+        if pid in line:
+           return True
+
+    return False
+
+def server_already_running(pid):
+      print "Atlas server is already running under process %s" % pid
+      sys.exit()  
+    
+def server_pid_not_running(pid):
+      print "The Server is no longer running with pid %s" %pid

http://git-wip-us.apache.org/repos/asf/incubator-atlas/blob/c93e0972/distro/src/bin/atlas_start.py
----------------------------------------------------------------------
diff --git a/distro/src/bin/atlas_start.py b/distro/src/bin/atlas_start.py
index 0d37732..27a8365 100755
--- a/distro/src/bin/atlas_start.py
+++ b/distro/src/bin/atlas_start.py
@@ -56,11 +56,37 @@ def main():
                        + os.path.join(web_app_dir, "atlas", "WEB-INF", "lib", "*" )  + p \
                        + os.path.join(metadata_home, "libext", "*")
 
+    
     metadata_pid_file = mc.pidFile(metadata_home)
-
+    
+            
     if os.path.isfile(metadata_pid_file):
-        print "%s already exists, exiting" % metadata_pid_file
-        sys.exit()
+       #Check if process listed in atlas.pid file is still running
+       pf = file(metadata_pid_file, 'r')
+       pid = pf.read().strip()
+       pf.close() 
+       
+
+       if  mc.ON_POSIX:
+            
+            if mc.unix_exist_pid((int)(pid)):
+                mc.server_already_running(pid)
+            else:
+                 mc.server_pid_not_running(pid)
+              
+              
+       else:
+            if mc.IS_WINDOWS:
+                if mc.win_exist_pid(pid):
+                   mc.server_already_running(pid)
+                else:
+                     mc.server_pid_not_running(pid)
+                   
+            else:
+                #os other than nt or posix - not supported - need to delete the file to restart server if pid no longer exist
+                mc.server_already_running(pid)
+             
+
 
     args = ["-app", os.path.join(web_app_dir, "atlas")]
     args.extend(sys.argv[1:])

http://git-wip-us.apache.org/repos/asf/incubator-atlas/blob/c93e0972/distro/src/test/python/scripts/TestMetadata.py
----------------------------------------------------------------------
diff --git a/distro/src/test/python/scripts/TestMetadata.py b/distro/src/test/python/scripts/TestMetadata.py
index d47be69..762e0ff 100644
--- a/distro/src/test/python/scripts/TestMetadata.py
+++ b/distro/src/test/python/scripts/TestMetadata.py
@@ -18,7 +18,6 @@ See the License for the specific language governing permissions and
 limitations under the License.
 '''
 import sys
-
 from os import environ
 from mock import patch
 import unittest
@@ -28,36 +27,49 @@ import atlas_start as metadata
 import platform
 
 IS_WINDOWS = platform.system() == "Windows"
-
 logger = logging.getLogger()
 
 class TestMetadata(unittest.TestCase):
-
+  @patch.object(mc,"win_exist_pid") 
+  @patch.object(mc,"unix_exist_pid") 
   @patch.object(mc,"writePid")
   @patch.object(mc, "executeEnvSh")
   @patch.object(mc,"metadataDir")
   @patch.object(mc, "expandWebApp")
   @patch("os.path.exists")
   @patch.object(mc, "java")
-  def test_main(self, java_mock, exists_mock, expandWebApp_mock, metadataDir_mock, executeEnvSh_mock, writePid_mock):
+
+  def test_main(self, java_mock, exists_mock, expandWebApp_mock, metadataDir_mock, executeEnvSh_mock, writePid_mock, unix_exist_pid_mock, win_exist_pid_mock):
     sys.argv = []
     exists_mock.return_value = True
     expandWebApp_mock.return_value = "webapp"
     metadataDir_mock.return_value = "metadata_home"
+
+    win_exist_pid_mock("789")
+    win_exist_pid_mock.assert_called_with((str)(789))
+    unix_exist_pid_mock(789)
+    unix_exist_pid_mock.assert_called_with(789)
     metadata.main()
     self.assertTrue(java_mock.called)
     if IS_WINDOWS:
+      
       java_mock.assert_called_with(
         'org.apache.atlas.Atlas',
         ['-app', 'metadata_home\\server\\webapp\\atlas'],
         'metadata_home\\conf;metadata_home\\server\\webapp\\atlas\\WEB-INF\\classes;metadata_home\\server\\webapp\\atlas\\WEB-INF\\lib\\*;metadata_home\\libext\\*',
         ['-Datlas.log.dir=metadata_home\\logs', '-Datlas.log.file=application.log', '-Datlas.home=metadata_home', '-Datlas.conf=metadata_home\\conf', '-Xmx1024m', '-XX:MaxPermSize=512m', '-Dlog4j.configuration=atlas-log4j.xml'], 'metadata_home\\logs')
+      
+      
+      
+        
     else:
       java_mock.assert_called_with(
         'org.apache.atlas.Atlas',
         ['-app', 'metadata_home/server/webapp/atlas'],
         'metadata_home/conf:metadata_home/server/webapp/atlas/WEB-INF/classes:metadata_home/server/webapp/atlas/WEB-INF/lib/*:metadata_home/libext/*',
         ['-Datlas.log.dir=metadata_home/logs', '-Datlas.log.file=application.log', '-Datlas.home=metadata_home', '-Datlas.conf=metadata_home/conf', '-Xmx1024m', '-XX:MaxPermSize=512m', '-Dlog4j.configuration=atlas-log4j.xml'],  'metadata_home/logs')
+      
+      
     pass
 
   def test_jar_java_lookups_fail(self):

http://git-wip-us.apache.org/repos/asf/incubator-atlas/blob/c93e0972/release-log.txt
----------------------------------------------------------------------
diff --git a/release-log.txt b/release-log.txt
index 050e455..bfc1b43 100644
--- a/release-log.txt
+++ b/release-log.txt
@@ -9,6 +9,7 @@ ATLAS-54 Rename configs in hive hook (shwethags)
 ATLAS-3 Mixed Index creation fails with Date types (sumasai via shwethags)
 
 ALL CHANGES:
+ATALS-238 atlas_start.py- the Atlas server won’t restart after improper shutdown(ndjouri via sumasai)
 ATLAS-293 UI Requires Internet Access For UI Facelift (darshankumar89 via shwethags)
 ATLAS-292 The artifactId 'dashboard' should be 'atlas-dashboard' in the webapp/pom.xml (ltfxyz via shwethags)
 ATLAS-208 Remove "\n" characters in the REST API json response (patel_satya via shwethags)