Repository: ambari
Updated Branches:
  refs/heads/trunk 21a74e9f8 -> 5463432a1


AMBARI-11120: Add locking to choco packages (jluniya)


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

Branch: refs/heads/trunk
Commit: 5463432a1b6cd0d8878e345843eb8f7dbb959bd6
Parents: 21a74e9
Author: Jayush Luniya <[email protected]>
Authored: Fri May 15 09:27:28 2015 -0700
Committer: Jayush Luniya <[email protected]>
Committed: Fri May 15 09:27:28 2015 -0700

----------------------------------------------------------------------
 .../main/package/choco/chocolateyinstall.ps1    | 22 ++++++++++++++---
 .../choco/collector/chocolateyinstall.ps1       | 26 ++++++++++++++++----
 .../package/choco/monitor/chocolateyinstall.ps1 | 26 ++++++++++++++++----
 .../package/choco/sink/chocolateyinstall.ps1    | 24 +++++++++++++++---
 .../main/package/choco/chocolateyinstall.ps1    | 22 ++++++++++++++---
 5 files changed, 100 insertions(+), 20 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ambari/blob/5463432a/ambari-agent/src/main/package/choco/chocolateyinstall.ps1
----------------------------------------------------------------------
diff --git a/ambari-agent/src/main/package/choco/chocolateyinstall.ps1 
b/ambari-agent/src/main/package/choco/chocolateyinstall.ps1
index 7a9ddc2..c6934f9 100644
--- a/ambari-agent/src/main/package/choco/chocolateyinstall.ps1
+++ b/ambari-agent/src/main/package/choco/chocolateyinstall.ps1
@@ -28,6 +28,8 @@ $packageParameters = $env:chocolateyPackageParameters
 $arguments = @{}
 $ambariRoot = "C:\ambari"
 $retries = 5
+$lockTimeout = 60000
+
 # Parse the packageParameters
 #   /AmbariRoot:C:\ambari /Retries:5
 if ($packageParameters) {
@@ -53,6 +55,10 @@ if ($packageParameters) {
     Write-Debug "Retries Argument Found"
     $retries = $arguments["Retries"]
   }
+  if ($arguments.ContainsKey("LockTimeout")) {
+    Write-Debug "LockTimeout Argument Found"
+    $lockTimeout = $arguments["LockTimeout"]
+  }
 } else {
   Write-Debug "No Package Parameters Passed in"
 }
@@ -67,6 +73,16 @@ $target = "$ambariRoot\$packageName-$packageVersion"
 Import-Module "$modulesFolder\link.psm1"
 Import-Module "$modulesFolder\retry.psm1"
 
-Retry-Command -Command "Get-ChocolateyUnzip" -Arguments @{ FileFullPath = 
$zipFile; Destination = $target; SpecificFolder = $specificFolder; PackageName 
= $packageName} -Retries $retries
-Retry-Command -Command "Remove-Symlink-IfExists" -Arguments @{Link = $link} 
-Retries $retries
-Retry-Command -Command "New-Symlink" -Arguments @{ Link = $link; Target = 
$target } -Retries $retries
+$agentMutex = New-Object System.Threading.Mutex $false, "Global\$packageName"
+if($agentMutex.WaitOne($lockTimeout)) {
+  try {
+    Retry-Command -Command "Get-ChocolateyUnzip" -Arguments @{ FileFullPath = 
$zipFile; Destination = $target; SpecificFolder = $specificFolder; PackageName 
= $packageName} -Retries $retries
+    Retry-Command -Command "Remove-Symlink-IfExists" -Arguments @{Link = 
$link} -Retries $retries
+    Retry-Command -Command "New-Symlink" -Arguments @{ Link = $link; Target = 
$target } -Retries $retries
+  } finally {
+    $agentMutex.ReleaseMutex()
+  }
+} else {
+  Write-Host ("Failed to acquire lock [$packageName] within [$lockTimeout] ms. 
Installation failed!")
+  throw
+}

http://git-wip-us.apache.org/repos/asf/ambari/blob/5463432a/ambari-metrics/ambari-metrics-assembly/src/main/package/choco/collector/chocolateyinstall.ps1
----------------------------------------------------------------------
diff --git 
a/ambari-metrics/ambari-metrics-assembly/src/main/package/choco/collector/chocolateyinstall.ps1
 
b/ambari-metrics/ambari-metrics-assembly/src/main/package/choco/collector/chocolateyinstall.ps1
index 5e413bb..9436582 100644
--- 
a/ambari-metrics/ambari-metrics-assembly/src/main/package/choco/collector/chocolateyinstall.ps1
+++ 
b/ambari-metrics/ambari-metrics-assembly/src/main/package/choco/collector/chocolateyinstall.ps1
@@ -28,6 +28,8 @@ $packageParameters = $env:chocolateyPackageParameters
 $arguments = @{}
 $ambariRoot = "C:\ambari"
 $retries = 5
+$lockTimeout = 60000
+
 # Parse the packageParameters
 #   /AmbariRoot:C:\ambari /Retries:5
 if ($packageParameters) {
@@ -53,6 +55,10 @@ if ($packageParameters) {
     Write-Debug "Retries Argument Found"
     $retries = $arguments["Retries"]
   }
+  if ($arguments.ContainsKey("LockTimeout")) {
+    Write-Debug "LockTimeout Argument Found"
+    $lockTimeout = $arguments["LockTimeout"]
+  }
 } else {
   Write-Debug "No Package Parameters Passed in"
 }
@@ -69,10 +75,20 @@ $collectorConfDir = "$link\conf"
 Import-Module "$modulesFolder\link.psm1"
 Import-Module "$modulesFolder\retry.psm1"
 
-Retry-Command -Command "Get-ChocolateyUnzip" -Arguments @{ FileFullPath = 
$zipFile; Destination = $target; SpecificFolder = $specificFolder; PackageName 
= $packageName} -Retries $retries
-Retry-Command -Command "Remove-Symlink-IfExists" -Arguments @{Link = $link} 
-Retries $retries
-Retry-Command -Command "New-Symlink" -Arguments @{ Link = $link; Target = 
$target } -Retries $retries
+$collectorMutex = New-Object System.Threading.Mutex $false, 
"Global\$packageName"
+if($collectorMutex.WaitOne($lockTimeout)) {
+  try {
+    Retry-Command -Command "Get-ChocolateyUnzip" -Arguments @{ FileFullPath = 
$zipFile; Destination = $target; SpecificFolder = $specificFolder; PackageName 
= $packageName} -Retries $retries
+    Retry-Command -Command "Remove-Symlink-IfExists" -Arguments @{Link = 
$link} -Retries $retries
+    Retry-Command -Command "New-Symlink" -Arguments @{ Link = $link; Target = 
$target } -Retries $retries
 
-[Environment]::SetEnvironmentVariable("COLLECTOR_HOME", $collectorHome, 
"Machine")
-[Environment]::SetEnvironmentVariable("COLLECTOR_CONF_DIR", $collectorConfDir, 
"Machine")
+    [Environment]::SetEnvironmentVariable("COLLECTOR_HOME", $collectorHome, 
"Machine")
+    [Environment]::SetEnvironmentVariable("COLLECTOR_CONF_DIR", 
$collectorConfDir, "Machine")
+  } finally {
+    $collectorMutex.ReleaseMutex()
+  }
+} else {
+  Write-Host ("Failed to acquire lock [$packageName] within [$lockTimeout] ms. 
Installation failed!")
+  throw
+}
 

http://git-wip-us.apache.org/repos/asf/ambari/blob/5463432a/ambari-metrics/ambari-metrics-assembly/src/main/package/choco/monitor/chocolateyinstall.ps1
----------------------------------------------------------------------
diff --git 
a/ambari-metrics/ambari-metrics-assembly/src/main/package/choco/monitor/chocolateyinstall.ps1
 
b/ambari-metrics/ambari-metrics-assembly/src/main/package/choco/monitor/chocolateyinstall.ps1
index 2dcc7f2..c1ad8c3 100644
--- 
a/ambari-metrics/ambari-metrics-assembly/src/main/package/choco/monitor/chocolateyinstall.ps1
+++ 
b/ambari-metrics/ambari-metrics-assembly/src/main/package/choco/monitor/chocolateyinstall.ps1
@@ -28,6 +28,8 @@ $packageParameters = $env:chocolateyPackageParameters
 $arguments = @{}
 $ambariRoot = "C:\ambari"
 $retries = 5
+$lockTimeout = 60000
+
 # Parse the packageParameters
 #   /AmbariRoot:C:\ambari /Retries:5
 if ($packageParameters) {
@@ -53,6 +55,10 @@ if ($packageParameters) {
     Write-Debug "Retries Argument Found"
     $retries = $arguments["Retries"]
   }
+  if ($arguments.ContainsKey("LockTimeout")) {
+    Write-Debug "LockTimeout Argument Found"
+    $lockTimeout = $arguments["LockTimeout"]
+  }
 } else {
   Write-Debug "No Package Parameters Passed in"
 }
@@ -69,9 +75,19 @@ $monitorConfDir = "$link\conf"
 Import-Module "$modulesFolder\link.psm1"
 Import-Module "$modulesFolder\retry.psm1"
 
-Retry-Command -Command "Get-ChocolateyUnzip" -Arguments @{ FileFullPath = 
$zipFile; Destination = $target; SpecificFolder = $specificFolder; PackageName 
= $packageName} -Retries $retries
-Retry-Command -Command "Remove-Symlink-IfExists" -Arguments @{Link = $link} 
-Retries $retries
-Retry-Command -Command "New-Symlink" -Arguments @{ Link = $link; Target = 
$target } -Retries $retries
+$monitorMutex = New-Object System.Threading.Mutex $false, "Global\$packageName"
+if($monitorMutex.WaitOne($lockTimeout)) {
+  try {
+    Retry-Command -Command "Get-ChocolateyUnzip" -Arguments @{ FileFullPath = 
$zipFile; Destination = $target; SpecificFolder = $specificFolder; PackageName 
= $packageName} -Retries $retries
+    Retry-Command -Command "Remove-Symlink-IfExists" -Arguments @{Link = 
$link} -Retries $retries
+    Retry-Command -Command "New-Symlink" -Arguments @{ Link = $link; Target = 
$target } -Retries $retries
 
-[Environment]::SetEnvironmentVariable("MONITOR_HOME", $monitorHome, "Machine")
-[Environment]::SetEnvironmentVariable("MONITOR_CONF_DIR", $monitorConfDir, 
"Machine")
+    [Environment]::SetEnvironmentVariable("MONITOR_HOME", $monitorHome, 
"Machine")
+    [Environment]::SetEnvironmentVariable("MONITOR_CONF_DIR", $monitorConfDir, 
"Machine")
+  } finally {
+    $monitorMutex.ReleaseMutex()
+  }
+} else {
+  Write-Host ("Failed to acquire lock [$packageName] within [$lockTimeout] ms. 
Installation failed!")
+  throw
+}

http://git-wip-us.apache.org/repos/asf/ambari/blob/5463432a/ambari-metrics/ambari-metrics-assembly/src/main/package/choco/sink/chocolateyinstall.ps1
----------------------------------------------------------------------
diff --git 
a/ambari-metrics/ambari-metrics-assembly/src/main/package/choco/sink/chocolateyinstall.ps1
 
b/ambari-metrics/ambari-metrics-assembly/src/main/package/choco/sink/chocolateyinstall.ps1
index 71ab3ca..898f7d7 100644
--- 
a/ambari-metrics/ambari-metrics-assembly/src/main/package/choco/sink/chocolateyinstall.ps1
+++ 
b/ambari-metrics/ambari-metrics-assembly/src/main/package/choco/sink/chocolateyinstall.ps1
@@ -28,6 +28,8 @@ $packageParameters = $env:chocolateyPackageParameters
 $arguments = @{}
 $ambariRoot = "C:\ambari"
 $retries = 5
+$lockTimeout = 60000
+
 # Parse the packageParameters
 #   /AmbariRoot:C:\ambari /Retries:5
 if ($packageParameters) {
@@ -53,6 +55,10 @@ if ($packageParameters) {
     Write-Debug "Retries Argument Found"
     $retries = $arguments["Retries"]
   }
+  if ($arguments.ContainsKey("LockTimeout")) {
+    Write-Debug "LockTimeout Argument Found"
+    $lockTimeout = $arguments["LockTimeout"]
+  }
 } else {
   Write-Debug "No Package Parameters Passed in"
 }
@@ -68,8 +74,18 @@ $sinkHome = $link
 Import-Module "$modulesFolder\link.psm1"
 Import-Module "$modulesFolder\retry.psm1"
 
-Retry-Command -Command "Get-ChocolateyUnzip" -Arguments @{ FileFullPath = 
$zipFile; Destination = $target; SpecificFolder = $specificFolder; PackageName 
= $packageName} -Retries $retries
-Retry-Command -Command "Remove-Symlink-IfExists" -Arguments @{Link = $link} 
-Retries $retries
-Retry-Command -Command "New-Symlink" -Arguments @{ Link = $link; Target = 
$target } -Retries $retries
+$sinkMutex = New-Object System.Threading.Mutex $false, "Global\$packageName"
+if($sinkMutex.WaitOne($lockTimeout)) {
+  try {
+    Retry-Command -Command "Get-ChocolateyUnzip" -Arguments @{ FileFullPath = 
$zipFile; Destination = $target; SpecificFolder = $specificFolder; PackageName 
= $packageName} -Retries $retries
+    Retry-Command -Command "Remove-Symlink-IfExists" -Arguments @{Link = 
$link} -Retries $retries
+    Retry-Command -Command "New-Symlink" -Arguments @{ Link = $link; Target = 
$target } -Retries $retries
 
-[Environment]::SetEnvironmentVariable("SINK_HOME", $sinkHome, "Machine")
\ No newline at end of file
+    [Environment]::SetEnvironmentVariable("SINK_HOME", $sinkHome, "Machine")
+  } finally {
+    $sinkMutex.ReleaseMutex()
+  }
+} else {
+  Write-Host ("Failed to acquire lock [$packageName] within [$lockTimeout] ms. 
Installation failed!")
+  throw
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/ambari/blob/5463432a/ambari-server/src/main/package/choco/chocolateyinstall.ps1
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/package/choco/chocolateyinstall.ps1 
b/ambari-server/src/main/package/choco/chocolateyinstall.ps1
index a9d74e6..4144e30 100644
--- a/ambari-server/src/main/package/choco/chocolateyinstall.ps1
+++ b/ambari-server/src/main/package/choco/chocolateyinstall.ps1
@@ -28,6 +28,8 @@ $packageParameters = $env:chocolateyPackageParameters
 $arguments = @{}
 $ambariRoot = "C:\ambari"
 $retries = 5
+$lockTimeout = 60000
+
 # Parse the packageParameters
 #   /AmbariRoot:C:\ambari /Retries:5
 if ($packageParameters) {
@@ -53,6 +55,10 @@ if ($packageParameters) {
     Write-Debug "Retries Argument Found"
     $retries = $arguments["Retries"]
   }
+  if ($arguments.ContainsKey("LockTimeout")) {
+    Write-Debug "LockTimeout Argument Found"
+    $lockTimeout = $arguments["LockTimeout"]
+  }
 } else {
   Write-Debug "No Package Parameters Passed in"
 }
@@ -67,6 +73,16 @@ $target = "$ambariRoot\$packageName-$packageVersion"
 Import-Module "$modulesFolder\link.psm1"
 Import-Module "$modulesFolder\retry.psm1"
 
-Retry-Command -Command "Get-ChocolateyUnzip" -Arguments @{ FileFullPath = 
$zipFile; Destination = $ambariRoot; SpecificFolder = $specificFolder; 
PackageName = $packageName} -Retries $retries
-Retry-Command -Command "Remove-Symlink-IfExists" -Arguments @{Link = $link} 
-Retries $retries
-Retry-Command -Command "New-Symlink" -Arguments @{ Link = $link; Target = 
$target } -Retries $retries
+$serverMutex = New-Object System.Threading.Mutex $false, "Global\$packageName"
+if($serverMutex.WaitOne($lockTimeout)) {
+  try {
+    Retry-Command -Command "Get-ChocolateyUnzip" -Arguments @{ FileFullPath = 
$zipFile; Destination = $ambariRoot; SpecificFolder = $specificFolder; 
PackageName = $packageName} -Retries $retries
+    Retry-Command -Command "Remove-Symlink-IfExists" -Arguments @{Link = 
$link} -Retries $retries
+    Retry-Command -Command "New-Symlink" -Arguments @{ Link = $link; Target = 
$target } -Retries $retries
+  } finally {
+    $serverMutex.ReleaseMutex()
+  }
+} else {
+  Write-Host ("Failed to acquire lock [$packageName] within [$lockTimeout] ms. 
Installation failed!")
+  throw
+}

Reply via email to