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 +}
