24
24
import com .tencent .polaris .api .pojo .RetStatus ;
25
25
import com .tencent .polaris .api .pojo .ServiceEventKey ;
26
26
import com .tencent .polaris .api .pojo .ServiceKey ;
27
- import com .tencent .polaris .api .rpc .BaseEntity ;
28
- import com .tencent .polaris .api .rpc .GetAllInstancesRequest ;
29
- import com .tencent .polaris .api .rpc .GetHealthyInstancesRequest ;
30
- import com .tencent .polaris .api .rpc .GetInstancesRequest ;
31
- import com .tencent .polaris .api .rpc .GetOneInstanceRequest ;
32
- import com .tencent .polaris .api .rpc .GetResourcesRequest ;
33
- import com .tencent .polaris .api .rpc .GetServiceContractRequest ;
34
- import com .tencent .polaris .api .rpc .GetServiceRuleRequest ;
35
- import com .tencent .polaris .api .rpc .InstanceDeregisterRequest ;
36
- import com .tencent .polaris .api .rpc .InstanceHeartbeatRequest ;
37
- import com .tencent .polaris .api .rpc .InstanceRegisterRequest ;
38
- import com .tencent .polaris .api .rpc .ServiceCallResult ;
39
- import com .tencent .polaris .api .rpc .UnWatchServiceRequest ;
40
- import com .tencent .polaris .api .rpc .WatchServiceRequest ;
27
+ import com .tencent .polaris .api .rpc .*;
41
28
import com .tencent .polaris .api .utils .CollectionUtils ;
42
29
import com .tencent .polaris .api .utils .StringUtils ;
43
30
import com .tencent .polaris .client .util .CommonValidator ;
31
+ import com .tencent .polaris .logging .LoggerFactory ;
32
+ import org .slf4j .Logger ;
44
33
45
- import java .util .Objects ;
46
34
import java .util .Set ;
47
35
48
36
/**
53
41
*/
54
42
public class Validator {
55
43
44
+ private static final Logger LOG = LoggerFactory .getLogger (Validator .class );
45
+
56
46
private static final int MAX_PORT = 65536 ;
57
47
58
48
/**
@@ -164,7 +154,7 @@ public static void validateServiceCallResult(ServiceCallResult serviceCallResult
164
154
throw new PolarisException (ErrorCode .API_INVALID_ARGUMENT , "delay can not be less than 0" );
165
155
}
166
156
if (!RetStatus .RetReject .equals (serviceCallResult .getRetStatus ())) {
167
- validateHostPort (serviceCallResult .getHost (), serviceCallResult .getPort ());
157
+ validateServiceCallResultHostPort (serviceCallResult .getHost (), serviceCallResult .getPort ());
168
158
}
169
159
}
170
160
@@ -187,6 +177,29 @@ private static void validateHostPort(String host, Integer port) throws PolarisEx
187
177
}
188
178
}
189
179
180
+ /**
181
+ * 校验服务请求端口信息。某些场景下端口号为0,例如Dubbo的本地调用。
182
+ *
183
+ * @param host
184
+ * @param port
185
+ * @throws PolarisException
186
+ */
187
+ private static void validateServiceCallResultHostPort (String host , Integer port ) throws PolarisException {
188
+ if (StringUtils .isBlank (host )) {
189
+ throw new PolarisException (ErrorCode .API_INVALID_ARGUMENT , "host can not be blank" );
190
+ }
191
+ if (port == null ) {
192
+ throw new PolarisException (ErrorCode .API_INVALID_ARGUMENT , "port can not be null" );
193
+ }
194
+ if (port == 0 ) {
195
+ LOG .warn ("port is 0 with host {}. Please check if it meets expectations." , host );
196
+ }
197
+ if (port < 0 || port >= MAX_PORT ) {
198
+ throw new PolarisException (
199
+ ErrorCode .API_INVALID_ARGUMENT , "port value should be in range [0, 65536)." );
200
+ }
201
+ }
202
+
190
203
/**
191
204
* 校验实例注册请求
192
205
*
0 commit comments