| # | |
| # Licensed to the Apache Software Foundation (ASF) under one | |
| # or more contributor license agreements. See the NOTICE file | |
| # distributed with this work for additional information | |
| # regarding copyright ownership. The ASF licenses this file | |
| # to you under the Apache License, Version 2.0 (the | |
| # "License"); you may not use this file except in compliance | |
| # with the License. You may obtain a copy of the License at | |
| # | |
| # http://www.apache.org/licenses/LICENSE-2.0 | |
| # | |
| # Unless required by applicable law or agreed to in writing, | |
| # software distributed under the License is distributed on an | |
| # "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY | |
| # KIND, either express or implied. See the License for the | |
| # specific language governing permissions and limitations | |
| # under the License. | |
| # | |
| param( | |
| [Parameter(Mandatory = $true)] | |
| [string]$ConfigFile | |
| ) | |
| $ErrorActionPreference = 'Stop' | |
| # Match the ConfigNode and DataNode defaults when a property is absent. | |
| $ports = [ordered]@{ | |
| cn_internal_port = 10710 | |
| cn_consensus_port = 10720 | |
| dn_rpc_port = 6667 | |
| dn_internal_port = 10730 | |
| dn_mpp_data_exchange_port = 10740 | |
| dn_schema_region_consensus_port = 10750 | |
| dn_data_region_consensus_port = 10760 | |
| } | |
| if (Test-Path -LiteralPath $ConfigFile -PathType Leaf) { | |
| foreach ($line in Get-Content -LiteralPath $ConfigFile) { | |
| if ($line -cmatch '^\s*([^#!\s=]+)\s*=\s*(.*?)\s*$' -and $ports.Keys -ccontains $Matches[1]) { | |
| $name = $Matches[1] | |
| $value = $Matches[2] | |
| $port = 0 | |
| if (-not [int]::TryParse($value, [ref]$port) -or $port -lt 1 -or $port -gt 65535) { | |
| throw "Invalid port for ${name}: $value" | |
| } | |
| $ports[$name] = $port | |
| } | |
| } | |
| } else { | |
| Write-Host "Cannot find $ConfigFile; checking the default ports." | |
| } | |
| Write-Host 'Checking whether the ConfigNode and DataNode ports are already occupied...' | |
| $listeners = [System.Net.NetworkInformation.IPGlobalProperties]::GetIPGlobalProperties().GetActiveTcpListeners() | |
| $occupied = $false | |
| foreach ($entry in $ports.GetEnumerator()) { | |
| if ($listeners.Port -contains $entry.Value) { | |
| Write-Host "The $($entry.Key) $($entry.Value) is already occupied." | |
| $occupied = $true | |
| } | |
| } | |
| if ($occupied) { | |
| exit 1 | |
| } | |
| exit 0 |