futurewei-cloud / alcor

Alcor: Cloud native SDN platform powered by Kubernetes and Istio
MIT License
32 stars 33 forks source link

[PM - DPM] Fail to create a port #524

Closed kevin-zhonghao closed 3 years ago

kevin-zhonghao commented 3 years ago

Description: Fail to create a port by using the same payload as before.

PM throw Exception:

[{"timestamp":"2020-12-23T00:21:28.207+0000","status":500,"error":"Internal Server Error","message":"No message available","path":"/network-configuration"}]] with root cause

DPM throw Exception:
java.lang.NullPointerException: null
    at com.futurewei.alcor.dataplane.service.impl.DpmServiceImpl.processNetworkConfiguration(DpmServiceImpl.java:350) ~[classes/:na]
    at com.futurewei.alcor.dataplane.service.impl.DpmServiceImpl.updateNetworkConfiguration(DpmServiceImpl.java:377) ~[classes/:na]
    at com.futurewei.alcor.dataplane.controller.DpmController.updateNetworkConfiguration(DpmController.java:48) ~[classes/:na]

Payload:

{
  "port": {
    "admin_state_up": true,
    "allowed_address_pairs": [
      {
        "ip_address": "11.11.11.1",
        "mac_address": "00-AA-BB-15-EB-3F"
      }
    ],
    "binding:host_id": "node2",
    "binding:vif_details": {},
    "create_at": "string",
    "description": "string",
    "device_id": "8182a4d4-ffff-4ece-b3f0-8d36e3d00070",
    "device_owner": "compute:nova",
    "dns_assignment": {},
    "dns_domain": "string",
    "dns_name": "string",
    "extra_dhcp_opts": [
      {
        "ip_version": "string",
        "opt_name": "string",
        "opt_value": "string"
      }
    ],
    "fast_path": true,
    "fixed_ips": [
      {
        "ip_address": "10.0.0.25",
        "subnet_id": "9192a4d4-ffff-4ece-b3f0-8d36e3d88000"
      }
    ],
    "id": "9192a4d4-ffff-4ece-b3f0-8d36e3d00112",
    "mac_learning_enabled": true,
    "name": "port108",
    "network_id": "9192a4d4-ffff-4ece-b3f0-8d36e3d88038",
    "network_ns": "string",
    "port_security_enabled": true,
    "project_id": "3dda2801-d675-4688-a63f-dcda8d327f50",
    "qos_network_policy_id": "string",
    "qos_policy_id": "string",
    "revision_number": 0,
    "security_groups": [
      "3dda2801-d675-4688-a63f-dcda8d111111"
    ],
    "tags": [
      "string"
    ],
    "tenant_id": "3dda2801-d675-4688-a63f-dcda8d327f50",
    "update_at": "string",
    "uplink_status_propagation": true,
    "veth_name": "string"
  }
}
cj-chung commented 3 years ago

PM's log:

NetworkConfiguration{rsType=null, opType=null, 
portEntities=[InternalPortEntity(routes=[RouteEntity(destination=10.0.0.0/24, target=Local, priority=0, 
associatedType=VPC, associatedTableId=6b404fa8-e728-4466-893a-836131101d06)], 
bindingHostIP=10.213.43.161, internalNeighborInfo1=null, subnetEntities=null, vpcEntities=null)], 
vpcs=[VpcEntity(cidr=10.0.0.0/16, routeEntities=[RouteEntity(destination=10.0.0.0/16,
target=Local, priority=0, associatedType=VPC, associatedTableId=977afb04-fced-48ab-9b45-cb06e7d13369)], 
router=Router(neutronRouteTable=null, neutronSubnetRouteTables=null, vpcRouteTables=null, 
vpcDefaultRouteTableId=null, owner=null, routerExtraAttributeId=null, gatewayPorts=null, 
tenantId=null, adminStateUp=false, status=null, created_at=null, updated_at=null), 
adminStateUp=true, dnsDomain=domain, mtu=1400, 
portSecurityEnabled=true, networkType=vxlan, physicalNetwork=, segmentationId=2052096, 
routerExternal=false, segments=[], shared=false, vlanTransparent=false, isDefault=true, 
availabilityZoneHints=[], availabilityZones=[Nova], qosPolicyId=, revisionNumber=1, 
status=ACTIVE, tags=[], created_at=2020-12-23 00:18:36, updated_at=2020-12-23 00:18:36, 
ipv4AddressScope=, ipv6AddressScope=, l2Adjacency=, 
subnets=[9192a4d4-ffff-4ece-b3f0-8d36e3d88000, 9192a4d4-ffff-4ece-b3f0-8d36e3d88001])], 
subnets=[InternalSubnetEntity(tunnelId=2052096), InternalSubnetEntity(tunnelId=2052096)], 
securityGroups=[CustomerResource{projectId='3dda2801-d675-4688-a63f-dcda8d327f50', 
id='3dda2801-d675-4688-a63f-dcda8d111111', name='sg1', description='string'}], 
neighborInfos={10.0.0.2=NeighborInfo(hostIp=10.213.43.161, hostId=node2, 
portId=9192a4d4-ffff-4ece-b3f0-8d36e3d00111, portMac=aa:bb:cc:16:0d:05, portIp=10.0.0.2, 
vpcId=9192a4d4-ffff-4ece-b3f0-8d36e3d88038, 
subnetId=9192a4d4-ffff-4ece-b3f0-8d36e3d88000)}, 
neighborTable={10.0.0.25=[com.futurewei.alcor.web.entity.dataplane.NeighborEntry@124674a8]}, 
routerInfo=[com.futurewei.alcor.web.entity.route.InternalRouterInfo@71883c7c]}
cj-chung commented 3 years ago

@chenpiaoping It seems like PM didn't setup rsType and opType for port creation when PM creating a NetworkConfiguration object.

kevin-zhonghao commented 3 years ago

During my local test, it seems the issue has not been solved. PM still show: {"timestamp":"2020-12-28T19:52:23.229+0000","status":500,"error":"Internal Server Error","message":"No message available","path":"/network-configuration"}]] with root cause

DPM show: java.lang.NullPointerException: null at com.futurewei.alcor.dataplane.service.impl.DpmServiceImpl.processNetworkConfiguration(DpmServiceImpl.java:352) ~[classes/:na] at com.futurewei.alcor.dataplane.service.impl.DpmServiceImpl.deleteNetworkConfiguration(DpmServiceImpl.java:384) ~[classes/:na] at com.futurewei.alcor.dataplane.controller.DpmController.deleteNetworkConfiguration(DpmController.java:55) ~[classes/:na]

@chenpiaoping , can you reproduce this issue in local env?

xieus commented 3 years ago

As Issue #524 is not fixed completely, reopen the issue and link to a new issue #527.

chenpiaoping commented 3 years ago

During my local test, it seems the issue has not been solved. PM still show: {"timestamp":"2020-12-28T19:52:23.229+0000","status":500,"error":"Internal Server Error","message":"No message available","path":"/network-configuration"}]] with root cause

DPM show: java.lang.NullPointerException: null at com.futurewei.alcor.dataplane.service.impl.DpmServiceImpl.processNetworkConfiguration(DpmServiceImpl.java:352) ~[classes/:na] at com.futurewei.alcor.dataplane.service.impl.DpmServiceImpl.deleteNetworkConfiguration(DpmServiceImpl.java:384) ~[classes/:na] at com.futurewei.alcor.dataplane.controller.DpmController.deleteNetworkConfiguration(DpmController.java:55) ~[classes/:na]

@chenpiaoping , can you reproduce this issue in local env?

Seems like it's delete operation. Can you try the create operation? Can you see networkConfiguration.setRsType (Common.ResourceType.PORT); in line 243 of the DataPlaneProcessor.java file?

kevin-zhonghao commented 3 years ago

During my local test, it seems the issue has not been solved. PM still show: {"timestamp":"2020-12-28T19:52:23.229+0000","status":500,"error":"Internal Server Error","message":"No message available","path":"/network-configuration"}]] with root cause DPM show: java.lang.NullPointerException: null at com.futurewei.alcor.dataplane.service.impl.DpmServiceImpl.processNetworkConfiguration(DpmServiceImpl.java:352) ~[classes/:na] at com.futurewei.alcor.dataplane.service.impl.DpmServiceImpl.deleteNetworkConfiguration(DpmServiceImpl.java:384) ~[classes/:na] at com.futurewei.alcor.dataplane.controller.DpmController.deleteNetworkConfiguration(DpmController.java:55) ~[classes/:na] @chenpiaoping , can you reproduce this issue in local env?

Seems like it's delete operation. Can you try the create operation? Can you see networkConfiguration.setRsType (Common.ResourceType.PORT); in line 243 of the DataPlaneProcessor.java file?

Hi @chenpiaoping , Creating port operation triggered delete operation because of roll back mechanism. The issue may occur in the com.futurewei.alcor.dataplane.service.impl.NeighborService, line 114:

NeighborInfo neighborInfo1 = neighborInfos.get(localIp);

And neighborInfo1 is null when creating a normal port. Can you help to check it?

cj-chung commented 3 years ago

@chenpiaoping When I create a VM on a new deployed environment, I got following error message when Nova try to create a port for the VM:

Message

Exceeded maximum number of retries. Exceeded max scheduling attempts 5 for instance cc5657fa-e32f-41a3-85b0-8249c723e4b1. 
Last exception: org.springframework.web.client.HttpServerErrorException$InternalServerError: 500 : [{"timestamp":"2021-01-04T23:31:15

Code 500 Details

Traceback (most recent call last): File "/openstack/venvs/nova-20.1.1/lib/python3.6/site-packages/nova/conductor/manager.py", line 637, in build_instances filter_properties, instances[0].uuid) 
File "/openstack/venvs/nova-20.1.1/lib/python3.6/site-packages/nova/scheduler/utils.py", line 895, in populate_retry raise exception.MaxRetriesExceeded(reason=msg) 
nova.exception.MaxRetriesExceeded: Exceeded maximum number of retries. Exceeded max scheduling attempts 5 for instance cc5657fa-e32f-41a3-85b0-8249c723e4b1. 
Last exception: org.springframework.web.client.HttpServerErrorException$InternalServerError: 500 : 
[{"timestamp":"2021-01-04T23:31:15.748+0000","status":500,"error":"Internal Server Error", 
"message":"No enum constant com.futurewei.alcor.schema.SecurityGroup.SecurityGroupConfiguration.Direction.ingress",
"path":"/network-configuration"}]
chenpiaoping commented 3 years ago

@chenpiaoping When I create a VM on a new deployed environment, I got following error message when Nova try to create a port for the VM:

Message

Exceeded maximum number of retries. Exceeded max scheduling attempts 5 for instance cc5657fa-e32f-41a3-85b0-8249c723e4b1. 
Last exception: org.springframework.web.client.HttpServerErrorException$InternalServerError: 500 : [{"timestamp":"2021-01-04T23:31:15

Code 500 Details

Traceback (most recent call last): File "/openstack/venvs/nova-20.1.1/lib/python3.6/site-packages/nova/conductor/manager.py", line 637, in build_instances filter_properties, instances[0].uuid) 
File "/openstack/venvs/nova-20.1.1/lib/python3.6/site-packages/nova/scheduler/utils.py", line 895, in populate_retry raise exception.MaxRetriesExceeded(reason=msg) 
nova.exception.MaxRetriesExceeded: Exceeded maximum number of retries. Exceeded max scheduling attempts 5 for instance cc5657fa-e32f-41a3-85b0-8249c723e4b1. 
Last exception: org.springframework.web.client.HttpServerErrorException$InternalServerError: 500 : 
[{"timestamp":"2021-01-04T23:31:15.748+0000","status":500,"error":"Internal Server Error", 
"message":"No enum constant com.futurewei.alcor.schema.SecurityGroup.SecurityGroupConfiguration.Direction.ingress",
"path":"/network-configuration"}]

Did you see the EEROR-level log message in PM's log?

cj-chung commented 3 years ago

@chenpiaoping Here is PM's log:

2021-01-06 13:39:59.843 ERROR 9488 --- [nio-9006-exec-5] o.a.c.c.C.[.[.[/].[dispatcherServlet]    : Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Request processing failed; nested exception is org.springframework.web.client.HttpServerErrorException$InternalServerError: 500 : [{"timestamp":"2021-01-06T21:39:59.838+0000","status":500,"error":"Internal Server Error","message":"No enum constant com.futurewei.alcor.schema.SecurityGroup.SecurityGroupConfiguration.Direction.ingress","path":"/network-configuration"}]] with root cause

org.springframework.web.client.HttpServerErrorException$InternalServerError: 500 : [{"timestamp":"2021-01-06T21:39:59.838+0000","status":500,"error":"Internal Server Error","message":"No enum constant com.futurewei.alcor.schema.SecurityGroup.SecurityGroupConfiguration.Direction.ingress","path":"/network-configuration"}]
    at org.springframework.web.client.HttpServerErrorException.create(HttpServerErrorException.java:100) ~[spring-web-5.2.5.RELEASE.jar:5.2.5.RELEASE]
    at org.springframework.web.client.DefaultResponseErrorHandler.handleError(DefaultResponseErrorHandler.java:172) ~[spring-web-5.2.5.RELEASE.jar:5.2.5.RELEASE]
    at org.springframework.web.client.DefaultResponseErrorHandler.handleError(DefaultResponseErrorHandler.java:112) ~[spring-web-5.2.5.RELEASE.jar:5.2.5.RELEASE]
    at org.springframework.web.client.ResponseErrorHandler.handleError(ResponseErrorHandler.java:63) ~[spring-web-5.2.5.RELEASE.jar:5.2.5.RELEASE]
    at org.springframework.web.client.RestTemplate.handleResponse(RestTemplate.java:782) ~[spring-web-5.2.5.RELEASE.jar:5.2.5.RELEASE]
    at org.springframework.web.client.RestTemplate.doExecute(RestTemplate.java:740) ~[spring-web-5.2.5.RELEASE.jar:5.2.5.RELEASE]
    at org.springframework.web.client.RestTemplate.execute(RestTemplate.java:674) ~[spring-web-5.2.5.RELEASE.jar:5.2.5.RELEASE]
    at org.springframework.web.client.RestTemplate.put(RestTemplate.java:478) ~[spring-web-5.2.5.RELEASE.jar:5.2.5.RELEASE]
    at com.futurewei.alcor.web.restclient.DataPlaneManagerRestClient.deleteNetworkConfig(DataPlaneManagerRestClient.java:45) ~[classes/:na]
    at com.futurewei.alcor.web.restclient.DataPlaneManagerRestClient$$FastClassBySpringCGLIB$$91231339.invoke(<generated>) ~[classes/:na]
    at org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:218) ~[spring-core-5.2.5.RELEASE.jar:5.2.5.RELEASE]
    at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.invokeJoinpoint(CglibAopProxy.java:771) ~[spring-aop-5.2.5.RELEASE.jar:5.2.5.RELEASE]
    at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:163) ~[spring-aop-5.2.5.RELEASE.jar:5.2.5.RELEASE]
    at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:749) ~[spring-aop-5.2.5.RELEASE.jar:5.2.5.RELEASE]
    at org.springframework.aop.aspectj.MethodInvocationProceedingJoinPoint.proceed(MethodInvocationProceedingJoinPoint.java:88) ~[spring-aop-5.2.5.RELEASE.jar:5.2.5.RELEASE]
    at com.futurewei.alcor.common.stats.StatisticsAspect.durationStatistics(StatisticsAspect.java:47) ~[classes/:na]
    at jdk.internal.reflect.GeneratedMethodAccessor60.invoke(Unknown Source) ~[na:na]
    at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:na]
    at java.base/java.lang.reflect.Method.invoke(Method.java:566) ~[na:na]
    at org.springframework.aop.aspectj.AbstractAspectJAdvice.invokeAdviceMethodWithGivenArgs(AbstractAspectJAdvice.java:644) ~[spring-aop-5.2.5.RELEASE.jar:5.2.5.RELEASE]
    at org.springframework.aop.aspectj.AbstractAspectJAdvice.invokeAdviceMethod(AbstractAspectJAdvice.java:633) ~[spring-aop-5.2.5.RELEASE.jar:5.2.5.RELEASE]
    at org.springframework.aop.aspectj.AspectJAroundAdvice.invoke(AspectJAroundAdvice.java:70) ~[spring-aop-5.2.5.RELEASE.jar:5.2.5.RELEASE]
    at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:175) ~[spring-aop-5.2.5.RELEASE.jar:5.2.5.RELEASE]
    at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:749) ~[spring-aop-5.2.5.RELEASE.jar:5.2.5.RELEASE]
    at org.springframework.aop.interceptor.ExposeInvocationInterceptor.invoke(ExposeInvocationInterceptor.java:95) ~[spring-aop-5.2.5.RELEASE.jar:5.2.5.RELEASE]
    at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186) ~[spring-aop-5.2.5.RELEASE.jar:5.2.5.RELEASE]
    at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:749) ~[spring-aop-5.2.5.RELEASE.jar:5.2.5.RELEASE]
    at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:691) ~[spring-aop-5.2.5.RELEASE.jar:5.2.5.RELEASE]
    at com.futurewei.alcor.web.restclient.DataPlaneManagerRestClient$$EnhancerBySpringCGLIB$$d1d14795.deleteNetworkConfig(<generated>) ~[classes/:na]
    at com.futurewei.alcor.portmanager.request.CreateNetworkConfigRequest.rollback(CreateNetworkConfigRequest.java:45) ~[classes/:na]
    at com.futurewei.alcor.portmanager.request.RequestManager.rollbackAllRequests(RequestManager.java:96) ~[classes/:na]
    at com.futurewei.alcor.portmanager.service.PortServiceImpl.handleException(PortServiceImpl.java:52) ~[classes/:na]
    at com.futurewei.alcor.portmanager.service.PortServiceImpl.createPortEntities(PortServiceImpl.java:69) ~[classes/:na]
    at com.futurewei.alcor.portmanager.service.PortServiceImpl.createPort(PortServiceImpl.java:78) ~[classes/:na]
    at com.futurewei.alcor.portmanager.service.PortServiceImpl$$FastClassBySpringCGLIB$$f99fa763.invoke(<generated>) ~[classes/:na]
    at org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:218) ~[spring-core-5.2.5.RELEASE.jar:5.2.5.RELEASE]
    at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.invokeJoinpoint(CglibAopProxy.java:771) ~[spring-aop-5.2.5.RELEASE.jar:5.2.5.RELEASE]
    at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:163) ~[spring-aop-5.2.5.RELEASE.jar:5.2.5.RELEASE]
    at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:749) ~[spring-aop-5.2.5.RELEASE.jar:5.2.5.RELEASE]
    at org.springframework.aop.aspectj.MethodInvocationProceedingJoinPoint.proceed(MethodInvocationProceedingJoinPoint.java:88) ~[spring-aop-5.2.5.RELEASE.jar:5.2.5.RELEASE]
    at com.futurewei.alcor.common.stats.StatisticsAspect.durationStatistics(StatisticsAspect.java:47) ~[classes/:na]
    at jdk.internal.reflect.GeneratedMethodAccessor60.invoke(Unknown Source) ~[na:na]
    at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:na]
    at java.base/java.lang.reflect.Method.invoke(Method.java:566) ~[na:na]
    at org.springframework.aop.aspectj.AbstractAspectJAdvice.invokeAdviceMethodWithGivenArgs(AbstractAspectJAdvice.java:644) ~[spring-aop-5.2.5.RELEASE.jar:5.2.5.RELEASE]
    at org.springframework.aop.aspectj.AbstractAspectJAdvice.invokeAdviceMethod(AbstractAspectJAdvice.java:633) ~[spring-aop-5.2.5.RELEASE.jar:5.2.5.RELEASE]
    at org.springframework.aop.aspectj.AspectJAroundAdvice.invoke(AspectJAroundAdvice.java:70) ~[spring-aop-5.2.5.RELEASE.jar:5.2.5.RELEASE]
    at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:175) ~[spring-aop-5.2.5.RELEASE.jar:5.2.5.RELEASE]
    at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:749) ~[spring-aop-5.2.5.RELEASE.jar:5.2.5.RELEASE]
    at org.springframework.aop.interceptor.ExposeInvocationInterceptor.invoke(ExposeInvocationInterceptor.java:95) ~[spring-aop-5.2.5.RELEASE.jar:5.2.5.RELEASE]
    at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186) ~[spring-aop-5.2.5.RELEASE.jar:5.2.5.RELEASE]
    at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:749) ~[spring-aop-5.2.5.RELEASE.jar:5.2.5.RELEASE]
    at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:691) ~[spring-aop-5.2.5.RELEASE.jar:5.2.5.RELEASE]
    at com.futurewei.alcor.portmanager.service.PortServiceImpl$$EnhancerBySpringCGLIB$$a1e3d102.createPort(<generated>) ~[classes/:na]
    at com.futurewei.alcor.portmanager.controller.PortController.createPort(PortController.java:83) ~[classes/:na]
    at com.futurewei.alcor.portmanager.controller.PortController$$FastClassBySpringCGLIB$$e204b337.invoke(<generated>) ~[classes/:na]
    at org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:218) ~[spring-core-5.2.5.RELEASE.jar:5.2.5.RELEASE]
    at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.invokeJoinpoint(CglibAopProxy.java:771) ~[spring-aop-5.2.5.RELEASE.jar:5.2.5.RELEASE]
    at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:163) ~[spring-aop-5.2.5.RELEASE.jar:5.2.5.RELEASE]
    at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:749) ~[spring-aop-5.2.5.RELEASE.jar:5.2.5.RELEASE]
    at org.springframework.aop.aspectj.MethodInvocationProceedingJoinPoint.proceed(MethodInvocationProceedingJoinPoint.java:88) ~[spring-aop-5.2.5.RELEASE.jar:5.2.5.RELEASE]
    at com.futurewei.alcor.web.rbac.aspect.RbacAspect.checkRbac(RbacAspect.java:136) ~[classes/:na]
    at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:na]
    at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[na:na]
    at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:na]
    at java.base/java.lang.reflect.Method.invoke(Method.java:566) ~[na:na]
    at org.springframework.aop.aspectj.AbstractAspectJAdvice.invokeAdviceMethodWithGivenArgs(AbstractAspectJAdvice.java:644) ~[spring-aop-5.2.5.RELEASE.jar:5.2.5.RELEASE]
    at org.springframework.aop.aspectj.AbstractAspectJAdvice.invokeAdviceMethod(AbstractAspectJAdvice.java:633) ~[spring-aop-5.2.5.RELEASE.jar:5.2.5.RELEASE]
    at org.springframework.aop.aspectj.AspectJAroundAdvice.invoke(AspectJAroundAdvice.java:70) ~[spring-aop-5.2.5.RELEASE.jar:5.2.5.RELEASE]
    at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:175) ~[spring-aop-5.2.5.RELEASE.jar:5.2.5.RELEASE]
    at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:749) ~[spring-aop-5.2.5.RELEASE.jar:5.2.5.RELEASE]
    at org.springframework.aop.aspectj.MethodInvocationProceedingJoinPoint.proceed(MethodInvocationProceedingJoinPoint.java:88) ~[spring-aop-5.2.5.RELEASE.jar:5.2.5.RELEASE]
    at com.futurewei.alcor.common.stats.StatisticsAspect.durationStatistics(StatisticsAspect.java:47) ~[classes/:na]
    at jdk.internal.reflect.GeneratedMethodAccessor60.invoke(Unknown Source) ~[na:na]
    at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:na]
    at java.base/java.lang.reflect.Method.invoke(Method.java:566) ~[na:na]
    at org.springframework.aop.aspectj.AbstractAspectJAdvice.invokeAdviceMethodWithGivenArgs(AbstractAspectJAdvice.java:644) ~[spring-aop-5.2.5.RELEASE.jar:5.2.5.RELEASE]
    at org.springframework.aop.aspectj.AbstractAspectJAdvice.invokeAdviceMethod(AbstractAspectJAdvice.java:633) ~[spring-aop-5.2.5.RELEASE.jar:5.2.5.RELEASE]
    at org.springframework.aop.aspectj.AspectJAroundAdvice.invoke(AspectJAroundAdvice.java:70) ~[spring-aop-5.2.5.RELEASE.jar:5.2.5.RELEASE]
    at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:175) ~[spring-aop-5.2.5.RELEASE.jar:5.2.5.RELEASE]
    at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:749) ~[spring-aop-5.2.5.RELEASE.jar:5.2.5.RELEASE]
    at org.springframework.aop.interceptor.ExposeInvocationInterceptor.invoke(ExposeInvocationInterceptor.java:95) ~[spring-aop-5.2.5.RELEASE.jar:5.2.5.RELEASE]
    at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186) ~[spring-aop-5.2.5.RELEASE.jar:5.2.5.RELEASE]
    at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:749) ~[spring-aop-5.2.5.RELEASE.jar:5.2.5.RELEASE]
    at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:691) ~[spring-aop-5.2.5.RELEASE.jar:5.2.5.RELEASE]
    at com.futurewei.alcor.portmanager.controller.PortController$$EnhancerBySpringCGLIB$$fcc15c69.createPort(<generated>) ~[classes/:na]
    at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:na]
    at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[na:na]
    at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:na]
    at java.base/java.lang.reflect.Method.invoke(Method.java:566) ~[na:na]
    at org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:190) ~[spring-web-5.2.5.RELEASE.jar:5.2.5.RELEASE]
    at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:138) ~[spring-web-5.2.5.RELEASE.jar:5.2.5.RELEASE]
    at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:105) ~[spring-webmvc-5.2.5.RELEASE.jar:5.2.5.RELEASE]
    at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:879) ~[spring-webmvc-5.2.5.RELEASE.jar:5.2.5.RELEASE]
    at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:793) ~[spring-webmvc-5.2.5.RELEASE.jar:5.2.5.RELEASE]
    at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87) ~[spring-webmvc-5.2.5.RELEASE.jar:5.2.5.RELEASE]
    at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1040) ~[spring-webmvc-5.2.5.RELEASE.jar:5.2.5.RELEASE]
    at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:943) ~[spring-webmvc-5.2.5.RELEASE.jar:5.2.5.RELEASE]
    at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1006) ~[spring-webmvc-5.2.5.RELEASE.jar:5.2.5.RELEASE]
    at org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:909) ~[spring-webmvc-5.2.5.RELEASE.jar:5.2.5.RELEASE]
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:660) ~[tomcat-embed-core-9.0.33.jar:9.0.33]
    at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:883) ~[spring-webmvc-5.2.5.RELEASE.jar:5.2.5.RELEASE]
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:741) ~[tomcat-embed-core-9.0.33.jar:9.0.33]
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:231) ~[tomcat-embed-core-9.0.33.jar:9.0.33]
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) ~[tomcat-embed-core-9.0.33.jar:9.0.33]
    at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53) ~[tomcat-embed-websocket-9.0.33.jar:9.0.33]
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) ~[tomcat-embed-core-9.0.33.jar:9.0.33]
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) ~[tomcat-embed-core-9.0.33.jar:9.0.33]
    at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:100) ~[spring-web-5.2.5.RELEASE.jar:5.2.5.RELEASE]
    at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119) ~[spring-web-5.2.5.RELEASE.jar:5.2.5.RELEASE]
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) ~[tomcat-embed-core-9.0.33.jar:9.0.33]
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) ~[tomcat-embed-core-9.0.33.jar:9.0.33]
    at org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:93) ~[spring-web-5.2.5.RELEASE.jar:5.2.5.RELEASE]
    at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119) ~[spring-web-5.2.5.RELEASE.jar:5.2.5.RELEASE]
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) ~[tomcat-embed-core-9.0.33.jar:9.0.33]
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) ~[tomcat-embed-core-9.0.33.jar:9.0.33]
    at org.springframework.boot.actuate.metrics.web.servlet.WebMvcMetricsFilter.doFilterInternal(WebMvcMetricsFilter.java:109) ~[spring-boot-actuator-2.2.6.RELEASE.jar:2.2.6.RELEASE]
    at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119) ~[spring-web-5.2.5.RELEASE.jar:5.2.5.RELEASE]
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) ~[tomcat-embed-core-9.0.33.jar:9.0.33]
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) ~[tomcat-embed-core-9.0.33.jar:9.0.33]
    at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201) ~[spring-web-5.2.5.RELEASE.jar:5.2.5.RELEASE]
    at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119) ~[spring-web-5.2.5.RELEASE.jar:5.2.5.RELEASE]
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) ~[tomcat-embed-core-9.0.33.jar:9.0.33]
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) ~[tomcat-embed-core-9.0.33.jar:9.0.33]
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:202) ~[tomcat-embed-core-9.0.33.jar:9.0.33]
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:96) ~[tomcat-embed-core-9.0.33.jar:9.0.33]
    at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:541) ~[tomcat-embed-core-9.0.33.jar:9.0.33]
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:139) ~[tomcat-embed-core-9.0.33.jar:9.0.33]
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:92) ~[tomcat-embed-core-9.0.33.jar:9.0.33]
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:74) ~[tomcat-embed-core-9.0.33.jar:9.0.33]
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:343) ~[tomcat-embed-core-9.0.33.jar:9.0.33]
    at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:373) ~[tomcat-embed-core-9.0.33.jar:9.0.33]
    at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:65) ~[tomcat-embed-core-9.0.33.jar:9.0.33]
    at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:868) ~[tomcat-embed-core-9.0.33.jar:9.0.33]
    at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1594) ~[tomcat-embed-core-9.0.33.jar:9.0.33]
    at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49) ~[tomcat-embed-core-9.0.33.jar:9.0.33]
    at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128) ~[na:na]
    at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628) ~[na:na]
    at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) ~[tomcat-embed-core-9.0.33.jar:9.0.33]
    at java.base/java.lang.Thread.run(Thread.java:834) ~[na:na]

and here is DPM's log:

2021-01-06 13:39:59.837 ERROR 3200 --- [nio-9010-exec-6] o.a.c.c.C.[.[.[/].[dispatcherServlet]    : Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Request processing failed; nested exception is java.lang.IllegalArgumentException: No enum constant com.futurewei.alcor.schema.SecurityGroup.SecurityGroupConfiguration.Direction.ingress] with root cause

java.lang.IllegalArgumentException: No enum constant com.futurewei.alcor.schema.SecurityGroup.SecurityGroupConfiguration.Direction.ingress
    at java.base/java.lang.Enum.valueOf(Enum.java:240) ~[na:na]
    at com.futurewei.alcor.schema.SecurityGroup$SecurityGroupConfiguration$Direction.valueOf(SecurityGroup.java:231) ~[classes/:na]
    at com.futurewei.alcor.dataplane.service.impl.SecurityGroupService.buildSecurityGroupStates(SecurityGroupService.java:85) ~[classes/:na]
    at com.futurewei.alcor.dataplane.service.impl.DpmServiceImpl.buildUnicastGoalState(DpmServiceImpl.java:95) ~[classes/:na]
    at com.futurewei.alcor.dataplane.service.impl.DpmServiceImpl.doCreatePortConfiguration(DpmServiceImpl.java:116) ~[classes/:na]
    at com.futurewei.alcor.dataplane.service.impl.DpmServiceImpl.processPortConfiguration(DpmServiceImpl.java:162) ~[classes/:na]
    at com.futurewei.alcor.dataplane.service.impl.DpmServiceImpl.processNetworkConfiguration(DpmServiceImpl.java:354) ~[classes/:na]
    at com.futurewei.alcor.dataplane.service.impl.DpmServiceImpl.updateNetworkConfiguration(DpmServiceImpl.java:379) ~[classes/:na]
    at com.futurewei.alcor.dataplane.controller.DpmController.updateNetworkConfiguration(DpmController.java:48) ~[classes/:na]
    at com.futurewei.alcor.dataplane.controller.DpmController$$FastClassBySpringCGLIB$$207023bd.invoke(<generated>) ~[classes/:na]
    at org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:218) ~[spring-core-5.2.5.RELEASE.jar:5.2.5.RELEASE]
    at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.invokeJoinpoint(CglibAopProxy.java:771) ~[spring-aop-5.2.5.RELEASE.jar:5.2.5.RELEASE]
    at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:163) ~[spring-aop-5.2.5.RELEASE.jar:5.2.5.RELEASE]
    at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:749) ~[spring-aop-5.2.5.RELEASE.jar:5.2.5.RELEASE]
    at org.springframework.aop.aspectj.MethodInvocationProceedingJoinPoint.proceed(MethodInvocationProceedingJoinPoint.java:88) ~[spring-aop-5.2.5.RELEASE.jar:5.2.5.RELEASE]
    at com.futurewei.alcor.common.stats.StatisticsAspect.durationStatistics(StatisticsAspect.java:47) ~[classes/:na]
    at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:na]
    at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[na:na]
    at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:na]
    at java.base/java.lang.reflect.Method.invoke(Method.java:566) ~[na:na]
    at org.springframework.aop.aspectj.AbstractAspectJAdvice.invokeAdviceMethodWithGivenArgs(AbstractAspectJAdvice.java:644) ~[spring-aop-5.2.5.RELEASE.jar:5.2.5.RELEASE]
    at org.springframework.aop.aspectj.AbstractAspectJAdvice.invokeAdviceMethod(AbstractAspectJAdvice.java:633) ~[spring-aop-5.2.5.RELEASE.jar:5.2.5.RELEASE]
    at org.springframework.aop.aspectj.AspectJAroundAdvice.invoke(AspectJAroundAdvice.java:70) ~[spring-aop-5.2.5.RELEASE.jar:5.2.5.RELEASE]
    at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:175) ~[spring-aop-5.2.5.RELEASE.jar:5.2.5.RELEASE]
    at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:749) ~[spring-aop-5.2.5.RELEASE.jar:5.2.5.RELEASE]
    at org.springframework.aop.interceptor.ExposeInvocationInterceptor.invoke(ExposeInvocationInterceptor.java:95) ~[spring-aop-5.2.5.RELEASE.jar:5.2.5.RELEASE]
    at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186) ~[spring-aop-5.2.5.RELEASE.jar:5.2.5.RELEASE]
    at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:749) ~[spring-aop-5.2.5.RELEASE.jar:5.2.5.RELEASE]
    at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:691) ~[spring-aop-5.2.5.RELEASE.jar:5.2.5.RELEASE]
    at com.futurewei.alcor.dataplane.controller.DpmController$$EnhancerBySpringCGLIB$$fd1d14bf.updateNetworkConfiguration(<generated>) ~[classes/:na]
    at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:na]
    at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[na:na]
    at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:na]
    at java.base/java.lang.reflect.Method.invoke(Method.java:566) ~[na:na]
    at org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:190) ~[spring-web-5.2.5.RELEASE.jar:5.2.5.RELEASE]
    at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:138) ~[spring-web-5.2.5.RELEASE.jar:5.2.5.RELEASE]
    at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:105) ~[spring-webmvc-5.2.5.RELEASE.jar:5.2.5.RELEASE]
    at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:879) ~[spring-webmvc-5.2.5.RELEASE.jar:5.2.5.RELEASE]
    at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:793) ~[spring-webmvc-5.2.5.RELEASE.jar:5.2.5.RELEASE]
    at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87) ~[spring-webmvc-5.2.5.RELEASE.jar:5.2.5.RELEASE]
    at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1040) ~[spring-webmvc-5.2.5.RELEASE.jar:5.2.5.RELEASE]
    at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:943) ~[spring-webmvc-5.2.5.RELEASE.jar:5.2.5.RELEASE]
    at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1006) ~[spring-webmvc-5.2.5.RELEASE.jar:5.2.5.RELEASE]
    at org.springframework.web.servlet.FrameworkServlet.doPut(FrameworkServlet.java:920) ~[spring-webmvc-5.2.5.RELEASE.jar:5.2.5.RELEASE]
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:663) ~[tomcat-embed-core-9.0.33.jar:9.0.33]
    at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:883) ~[spring-webmvc-5.2.5.RELEASE.jar:5.2.5.RELEASE]
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:741) ~[tomcat-embed-core-9.0.33.jar:9.0.33]
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:231) ~[tomcat-embed-core-9.0.33.jar:9.0.33]
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) ~[tomcat-embed-core-9.0.33.jar:9.0.33]
    at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53) ~[tomcat-embed-websocket-9.0.33.jar:9.0.33]
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) ~[tomcat-embed-core-9.0.33.jar:9.0.33]
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) ~[tomcat-embed-core-9.0.33.jar:9.0.33]
    at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:100) ~[spring-web-5.2.5.RELEASE.jar:5.2.5.RELEASE]
    at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119) ~[spring-web-5.2.5.RELEASE.jar:5.2.5.RELEASE]
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) ~[tomcat-embed-core-9.0.33.jar:9.0.33]
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) ~[tomcat-embed-core-9.0.33.jar:9.0.33]
    at org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:93) ~[spring-web-5.2.5.RELEASE.jar:5.2.5.RELEASE]
    at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119) ~[spring-web-5.2.5.RELEASE.jar:5.2.5.RELEASE]
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) ~[tomcat-embed-core-9.0.33.jar:9.0.33]
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) ~[tomcat-embed-core-9.0.33.jar:9.0.33]
    at org.springframework.boot.actuate.metrics.web.servlet.WebMvcMetricsFilter.doFilterInternal(WebMvcMetricsFilter.java:109) ~[spring-boot-actuator-2.2.6.RELEASE.jar:2.2.6.RELEASE]
    at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119) ~[spring-web-5.2.5.RELEASE.jar:5.2.5.RELEASE]
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) ~[tomcat-embed-core-9.0.33.jar:9.0.33]
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) ~[tomcat-embed-core-9.0.33.jar:9.0.33]
    at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201) ~[spring-web-5.2.5.RELEASE.jar:5.2.5.RELEASE]
    at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119) ~[spring-web-5.2.5.RELEASE.jar:5.2.5.RELEASE]
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) ~[tomcat-embed-core-9.0.33.jar:9.0.33]
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) ~[tomcat-embed-core-9.0.33.jar:9.0.33]
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:202) ~[tomcat-embed-core-9.0.33.jar:9.0.33]
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:96) ~[tomcat-embed-core-9.0.33.jar:9.0.33]
    at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:541) ~[tomcat-embed-core-9.0.33.jar:9.0.33]
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:139) ~[tomcat-embed-core-9.0.33.jar:9.0.33]
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:92) ~[tomcat-embed-core-9.0.33.jar:9.0.33]
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:74) ~[tomcat-embed-core-9.0.33.jar:9.0.33]
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:343) ~[tomcat-embed-core-9.0.33.jar:9.0.33]
    at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:373) ~[tomcat-embed-core-9.0.33.jar:9.0.33]
    at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:65) ~[tomcat-embed-core-9.0.33.jar:9.0.33]
    at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:868) ~[tomcat-embed-core-9.0.33.jar:9.0.33]
    at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1594) ~[tomcat-embed-core-9.0.33.jar:9.0.33]
    at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49) ~[tomcat-embed-core-9.0.33.jar:9.0.33]
    at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128) ~[na:na]
    at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628) ~[na:na]
    at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) ~[tomcat-embed-core-9.0.33.jar:9.0.33]
    at java.base/java.lang.Thread.run(Thread.java:834) ~[na:na]
cj-chung commented 3 years ago

@chenpiaoping The root cause of this problem is that the following lines in SecurityGroupService.java in DPM doesn't handle the null value of each attribute in a rule.

            for (SecurityGroupRule securityGroupRule: securityGroup.getSecurityGroupRules()) {
                com.futurewei.alcor.schema.SecurityGroup.SecurityGroupConfiguration.SecurityGroupRule.Builder securityGroupRuleBuilder =
                        com.futurewei.alcor.schema.SecurityGroup.SecurityGroupConfiguration.SecurityGroupRule.newBuilder();
                securityGroupRuleBuilder.setSecurityGroupId(securityGroup.getId());
                securityGroupRuleBuilder.setId(securityGroupRule.getId());
                securityGroupRuleBuilder.setDirection(com.futurewei.alcor.schema.SecurityGroup.SecurityGroupConfiguration.Direction.valueOf(securityGroupRule.getDirection().toUpperCase()));
                securityGroupRuleBuilder.setEthertype(Common.EtherType.valueOf(securityGroupRule.getEtherType().toUpperCase()));
                securityGroupRuleBuilder.setProtocol(Common.Protocol.valueOf(securityGroupRule.getProtocol()));
                securityGroupRuleBuilder.setPortRangeMin(securityGroupRule.getPortRangeMin());
                securityGroupRuleBuilder.setPortRangeMax(securityGroupRule.getPortRangeMax());
                securityGroupRuleBuilder.setRemoteIpPrefix(securityGroupRule.getRemoteIpPrefix());
                securityGroupRuleBuilder.setRemoteGroupId(securityGroupRule.getRemoteGroupId());
                securityGroupConfigBuilder.addSecurityGroupRules(securityGroupRuleBuilder.build());
            }

I have create a PR to comment out these line for a temporary solution.

chenpiaoping commented 3 years ago

Fixed by this PR: https://github.com/futurewei-cloud/alcor/pull/530/commits/21f0a781610d5cf9aa8f3af491736264c798385b