Repository: cassandra Updated Branches: refs/heads/cassandra-3.0 7ad1da567 -> a3d9e6c47
Speed up launch scripts on Windows Patch by jmckenzie; reviewed by pthompson for CASSANDRA-9615 Project: http://git-wip-us.apache.org/repos/asf/cassandra/repo Commit: http://git-wip-us.apache.org/repos/asf/cassandra/commit/2d477a4c Tree: http://git-wip-us.apache.org/repos/asf/cassandra/tree/2d477a4c Diff: http://git-wip-us.apache.org/repos/asf/cassandra/diff/2d477a4c Branch: refs/heads/cassandra-3.0 Commit: 2d477a4cc238ac1d7b7fe1f2086d01fb61d84cce Parents: 941a5dd Author: Joshua McKenzie <jmcken...@apache.org> Authored: Mon Aug 24 12:44:00 2015 -0400 Committer: Joshua McKenzie <jmcken...@apache.org> Committed: Mon Aug 24 12:44:00 2015 -0400 ---------------------------------------------------------------------- bin/cassandra.ps1 | 88 ++++++++------------------------------------- conf/cassandra-env.ps1 | 34 +++++++++--------- 2 files changed, 30 insertions(+), 92 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/cassandra/blob/2d477a4c/bin/cassandra.ps1 ---------------------------------------------------------------------- diff --git a/bin/cassandra.ps1 b/bin/cassandra.ps1 index b841841..5cc99aa 100644 --- a/bin/cassandra.ps1 +++ b/bin/cassandra.ps1 @@ -36,8 +36,6 @@ usage: cassandra.ps1 [-f] [-h] [-p pidfile] [-H dumpfile] [-D arg] [-E errorfile } #----------------------------------------------------------------------------- -# Note: throughout these scripts we're replacing \ with /. This allows clean -# operation on both command-prompt and cygwin-based environments. Function Main { ValidateArguments @@ -289,89 +287,28 @@ Function VerifyPortsAreAvailable # native_transport_port # rpc_port, which we'll match to rpc_address # and from env: JMX_PORT which we cache in our environment during SetCassandraEnvironment for this check - $toMatch = @("storage_port:","ssl_storage_port:","native_transport_port:","rpc_port") + $yamlRegex = "storage_port:|ssl_storage_port:|native_transport_port:|rpc_port" $yaml = Get-Content "$env:CASSANDRA_CONF\cassandra.yaml" + $portRegex = ":$env:JMX_PORT |" - $listenAddress = "" - $rpcAddress = "" foreach ($line in $yaml) { - if ($line -match "^listen_address:") + if ($line -match $yamlRegex) { - $args = $line -Split ": " - $listenAddress = $args[1] -replace " ", "" + $sa = $line.Split(":") + $portRegex = $portRegex + ":" + ($sa[1] -replace " ","") + " |" } - if ($line -match "^rpc_address:") - { - $args = $line -Split ": " - $rpcAddress = $args[1] -replace " ", "" - } - } - if ([string]::IsNullOrEmpty($listenAddress)) - { - Write-Error "Failed to parse listen_address from cassandra.yaml to check open ports. Aborting startup." - Exit - } - if ([string]::IsNullOrEmpty($rpcAddress)) - { - Write-Error "Failed to parse rpc_address from cassandra.yaml to check open ports. Aborting startup." - Exit } + $portRegex = $portRegex.Substring(0, $portRegex.Length - 2) - foreach ($line in $yaml) - { - foreach ($match in $toMatch) - { - if ($line -match "^$match") - { - if ($line.contains("rpc")) - { - CheckPort $rpcAddress $line - } - else - { - CheckPort $listenAddress $line - } - } - } - } - if ([string]::IsNullOrEmpty($env:JMX_PORT)) - { - Write-Error "No JMX_PORT is set in environment. Aborting startup." - Exit - } - CheckPort $listenAddress "jmx_port: $env:JMX_PORT" -} + $netstat = netstat -an -#----------------------------------------------------------------------------- -Function CheckPort([string]$listenAddress, [string]$configLine) -{ - $split = $configLine -Split ":" - if ($split.Length -ne 2) - { - echo "Invalid cassandra.yaml config line parsed while checking for available ports:" - echo "$configLine" - echo "Aborting startup" - Exit - } - else + foreach ($line in $netstat) { - $port = $split[1] -replace " ", "" - - # start an async connect to the ip/port combo, give it 25ms, and error out if it succeeded - $tcpobject = new-Object system.Net.Sockets.TcpClient - $connect = $tcpobject.BeginConnect($listenAddress, $port, $null, $null) - $wait = $connect.AsyncWaitHandle.WaitOne(25, $false) - - if (!$wait) - { - # still trying to connect, if it's not serviced in 25ms we'll assume it's not open - $tcpobject.Close() - } - else + if ($line -match "TCP" -and $line -match $portRegex) { - $tcpobject.EndConnect($connect) | out-Null - echo "Cassandra port already in use ($configLine). Aborting" + Write-Error "Found a port already in use. Aborting startup" + Write-Error $line Exit } } @@ -391,6 +328,7 @@ Function ValidateArguments } } +#----------------------------------------------------------------------------- Function CheckEmptyParam($param) { if ([String]::IsNullOrEmpty($param)) @@ -400,6 +338,8 @@ Function CheckEmptyParam($param) } } +#----------------------------------------------------------------------------- +# Populate arguments for ($i = 0; $i -lt $args.count; $i++) { # Skip JVM args http://git-wip-us.apache.org/repos/asf/cassandra/blob/2d477a4c/conf/cassandra-env.ps1 ---------------------------------------------------------------------- diff --git a/conf/cassandra-env.ps1 b/conf/cassandra-env.ps1 index ad2392e..f6cd6bc 100644 --- a/conf/cassandra-env.ps1 +++ b/conf/cassandra-env.ps1 @@ -241,13 +241,28 @@ Function ParseJVMInfo $pinfo.RedirectStandardError = $true $pinfo.RedirectStandardOutput = $true $pinfo.UseShellExecute = $false - $pinfo.Arguments = "-version" + $pinfo.Arguments = "-d64 -version" $p = New-Object System.Diagnostics.Process $p.StartInfo = $pinfo $p.Start() | Out-Null $p.WaitForExit() $stderr = $p.StandardError.ReadToEnd() + $env:JVM_ARCH = "64-bit" + + if ($stderr.Contains("Error")) + { + # 32-bit JVM. re-run w/out -d64 + echo "Failed 64-bit check. Re-running to get version from 32-bit" + $pinfo.Arguments = "-version" + $p = New-Object System.Diagnostics.Process + $p.StartInfo = $pinfo + $p.Start() | Out-Null + $p.WaitForExit() + $stderr = $p.StandardError.ReadToEnd() + $env:JVM_ARCH = "32-bit" + } + $sa = $stderr.Split("""") $env:JVM_VERSION = $sa[1] @@ -266,23 +281,6 @@ Function ParseJVMInfo $pa = $sa[1].Split("_") $env:JVM_PATCH_VERSION=$pa[1] - - # get 64-bit vs. 32-bit - $pinfo.Arguments = "-d64 -version" - $pArch = New-Object System.Diagnostics.Process - $p.StartInfo = $pinfo - $p.Start() | Out-Null - $p.WaitForExit() - $stderr = $p.StandardError.ReadToEnd() - - if ($stderr.Contains("Error")) - { - $env:JVM_ARCH = "32-bit" - } - else - { - $env:JVM_ARCH = "64-bit" - } } #-----------------------------------------------------------------------------