From 46437f676581cbb331c1ef16c50d39fc9c258bc0 Mon Sep 17 00:00:00 2001 From: fuwei Date: Thu, 31 Aug 2023 21:04:37 +0800 Subject: [PATCH] [sugon_sdn]Remove set clean traffic config true when attach tf nic 1.Optimize tf api call of port sync task and create port 2.Remove set global config clean traffic to true when create tf port --- .../java/org/zstack/kvm/KVMAgentCommands.java | 9 +++++ .../controller/api/ApiBuilder.java | 10 ++++- .../controller/api/ApiConnector.java | 3 ++ .../controller/api/ApiConnectorImpl.java | 37 +++++++++++++------ .../controller/api/ApiConnectorMock.java | 5 +++ .../neutronClient/TfPortClient.java | 20 +++------- ...pleteNicInformationExtensionPointImpl.java | 3 +- 7 files changed, 57 insertions(+), 30 deletions(-) diff --git a/plugin/kvm/src/main/java/org/zstack/kvm/KVMAgentCommands.java b/plugin/kvm/src/main/java/org/zstack/kvm/KVMAgentCommands.java index f2aad41ed5..423322381b 100755 --- a/plugin/kvm/src/main/java/org/zstack/kvm/KVMAgentCommands.java +++ b/plugin/kvm/src/main/java/org/zstack/kvm/KVMAgentCommands.java @@ -868,6 +868,7 @@ public class KVMAgentCommands { public static class NicTO extends BaseVirtualDeviceTO { private String mac; private List ips; + private String ipForTf; private String bridgeName; // run `bridge fdb add NicTO.mac dev NicTO.physicalInterface` on vnics to allow vf <-> vnic communication private String physicalInterface; @@ -897,6 +898,14 @@ public class KVMAgentCommands { this.ips = ips; } + public String getIpForTf() { + return ipForTf; + } + + public void setIpForTf(String ipForTf) { + this.ipForTf = ipForTf; + } + public String getUuid() { return uuid; } diff --git a/plugin/sugonSdnController/src/main/java/org/zstack/sugonSdnController/controller/api/ApiBuilder.java b/plugin/sugonSdnController/src/main/java/org/zstack/sugonSdnController/controller/api/ApiBuilder.java index e7e1ea41ba..1d11c3ea8b 100644 --- a/plugin/sugonSdnController/src/main/java/org/zstack/sugonSdnController/controller/api/ApiBuilder.java +++ b/plugin/sugonSdnController/src/main/java/org/zstack/sugonSdnController/controller/api/ApiBuilder.java @@ -93,7 +93,7 @@ class ApiBuilder { return element.getAsString(); } - public List jsonToApiObjects(String data, Class cls, List parent) throws IOException { + public List jsonToApiObjects(String data, Class cls, boolean isList) throws IOException { if (data == null) { return null; } @@ -112,7 +112,13 @@ class ApiBuilder { } Gson json = ApiSerializer.getDeserializer(); for (JsonElement element : array) { - ApiObjectBase obj = json.fromJson(element.toString(), cls); + ApiObjectBase obj; + if (isList) { + obj = jsonToApiObject(element.toString(), cls); + } else { + obj = json.fromJson(element.toString(), cls); + } + if (obj == null) { s_logger.warn("Unable to decode list element"); continue; diff --git a/plugin/sugonSdnController/src/main/java/org/zstack/sugonSdnController/controller/api/ApiConnector.java b/plugin/sugonSdnController/src/main/java/org/zstack/sugonSdnController/controller/api/ApiConnector.java index d4bb524716..4c72dffb11 100644 --- a/plugin/sugonSdnController/src/main/java/org/zstack/sugonSdnController/controller/api/ApiConnector.java +++ b/plugin/sugonSdnController/src/main/java/org/zstack/sugonSdnController/controller/api/ApiConnector.java @@ -42,6 +42,9 @@ public interface ApiConnector { ApiObjectBase find(Class cls, ApiObjectBase parent, String name) throws IOException; ApiObjectBase findByFQN(Class cls, String fullName) throws IOException; List list(Class cls, List parent) throws IOException; + + List listWithDetail(Class cls, String fields, String filters) throws IOException; + List getObjects(Class cls, List> refList) throws IOException; diff --git a/plugin/sugonSdnController/src/main/java/org/zstack/sugonSdnController/controller/api/ApiConnectorImpl.java b/plugin/sugonSdnController/src/main/java/org/zstack/sugonSdnController/controller/api/ApiConnectorImpl.java index e04fede1f7..d8971f0dd0 100644 --- a/plugin/sugonSdnController/src/main/java/org/zstack/sugonSdnController/controller/api/ApiConnectorImpl.java +++ b/plugin/sugonSdnController/src/main/java/org/zstack/sugonSdnController/controller/api/ApiConnectorImpl.java @@ -45,11 +45,6 @@ import org.apache.http.protocol.RequestExpectContinue; import org.apache.http.protocol.RequestTargetHost; import org.apache.http.protocol.RequestUserAgent; import org.apache.http.util.EntityUtils; -/* -import org.openstack4j.api.OSClient; -import org.openstack4j.openstack.OSFactory; -import org.openstack4j.api.exceptions.AuthenticationException; - */ import com.google.common.base.Throwables; import com.google.common.collect.ImmutableList; import org.zstack.utils.Utils; @@ -608,11 +603,7 @@ class ApiConnectorImpl implements ApiConnector { return uuid; } - @Override - public synchronized List list(Class cls, List parent) throws IOException { - final String typename = _apiBuilder.getTypename(cls); - final HttpResponse response = execute(HttpGet.METHOD_NAME, '/' + typename + "s?detail=true", null); - + private synchronized List listResult(Class cls, HttpResponse response, boolean withDetail) throws IOException { if (response == null || response.getStatusLine() == null) { return null; } @@ -629,7 +620,7 @@ class ApiConnectorImpl implements ApiConnector { checkResponseKeepAliveStatus(response); return null; } - List list = _apiBuilder.jsonToApiObjects(data, cls, parent); + List list = _apiBuilder.jsonToApiObjects(data, cls, withDetail); if (list == null) { s_logger.warn("Unable to parse/deserialize response: " + data); } @@ -637,6 +628,30 @@ class ApiConnectorImpl implements ApiConnector { return list; } + @Override + public synchronized List list(Class cls, List parent) throws IOException { + final String typename = _apiBuilder.getTypename(cls); + final HttpResponse response = execute(HttpGet.METHOD_NAME, '/' + typename + 's', null); + return listResult(cls, response, false); + } + + @Override + public synchronized List listWithDetail(Class cls, + String fields, + String filters) throws IOException { + final String typename = _apiBuilder.getTypename(cls); + String uri = '/' + typename + "s?detail=true"; + if (fields != null) { + uri = uri + "&fields=" + fields; + } + if (filters != null) { + uri = uri + "&filters=" + filters; + } + final HttpResponse response = execute(HttpGet.METHOD_NAME, uri, null); + + return listResult(cls, response, true); + } + @Override public List diff --git a/plugin/sugonSdnController/src/main/java/org/zstack/sugonSdnController/controller/api/ApiConnectorMock.java b/plugin/sugonSdnController/src/main/java/org/zstack/sugonSdnController/controller/api/ApiConnectorMock.java index eb0b03bbbc..8278226c4c 100644 --- a/plugin/sugonSdnController/src/main/java/org/zstack/sugonSdnController/controller/api/ApiConnectorMock.java +++ b/plugin/sugonSdnController/src/main/java/org/zstack/sugonSdnController/controller/api/ApiConnectorMock.java @@ -505,6 +505,11 @@ public class ApiConnectorMock implements ApiConnector { return list; } + @Override + public List listWithDetail(Class cls, String fields, String filters) throws IOException { + return null; + } + private boolean isChildrenExists(ApiObjectBase parent) { String fqnParent = getFqnString(parent.getQualifiedName()); ArrayList>> clsDataList = new ArrayList>>(_map.values()); diff --git a/plugin/sugonSdnController/src/main/java/org/zstack/sugonSdnController/controller/neutronClient/TfPortClient.java b/plugin/sugonSdnController/src/main/java/org/zstack/sugonSdnController/controller/neutronClient/TfPortClient.java index 29bf9efe89..4b923786a5 100644 --- a/plugin/sugonSdnController/src/main/java/org/zstack/sugonSdnController/controller/neutronClient/TfPortClient.java +++ b/plugin/sugonSdnController/src/main/java/org/zstack/sugonSdnController/controller/neutronClient/TfPortClient.java @@ -63,8 +63,8 @@ public class TfPortClient { //if mac-address is specified, check against the exisitng ports //to see if there exists a port with the same mac-address if (!Objects.isNull(mac)) { - List ports = (List) apiConnector.list( - VirtualMachineInterface.class, Arrays.asList("default-domain", tenantId)); + List ports = (List) apiConnector.listWithDetail( + VirtualMachineInterface.class, null, null); for (VirtualMachineInterface port : ports) { MacAddressesType macAddressesType = null; @@ -303,19 +303,9 @@ public class TfPortClient { public List getVirtualMachineInterfaceDetail() { try { - List result = new ArrayList<>(); - List ports = (List) apiConnector.list( - VirtualMachineInterface.class, Arrays.asList("default-domain", tenantId)); - - for (VirtualMachineInterface port : ports) { - VirtualMachineInterface detail = (VirtualMachineInterface) apiConnector.findById( - VirtualMachineInterface.class, port.getUuid()); - if (detail == null) { - continue; - } - result.add(detail); - } - return result; + List ports = (List) apiConnector.listWithDetail( + VirtualMachineInterface.class, null, null); + return ports; } catch (IOException e) { throw new RuntimeException(e); } diff --git a/plugin/sugonSdnController/src/main/java/org/zstack/sugonSdnController/network/TfCompleteNicInformationExtensionPointImpl.java b/plugin/sugonSdnController/src/main/java/org/zstack/sugonSdnController/network/TfCompleteNicInformationExtensionPointImpl.java index a812bc5385..140a72f584 100644 --- a/plugin/sugonSdnController/src/main/java/org/zstack/sugonSdnController/network/TfCompleteNicInformationExtensionPointImpl.java +++ b/plugin/sugonSdnController/src/main/java/org/zstack/sugonSdnController/network/TfCompleteNicInformationExtensionPointImpl.java @@ -21,8 +21,7 @@ public class TfCompleteNicInformationExtensionPointImpl implements KVMCompleteNi @Override public NicTO completeNicInformation(L2NetworkInventory l2Network, L3NetworkInventory l3Network, VmNicInventory nic) { NicTO to = KVMAgentCommands.NicTO.fromVmNicInventory(nic); - to.setIps(new ArrayList(Arrays.asList(nic.getIp()))); - VmGlobalConfig.VM_CLEAN_TRAFFIC.updateValue(true); + to.setIpForTf(nic.getIp()); to.setMtu(new MtuGetter().getMtu(l3Network.getUuid())); to.setL2NetworkUuid(l2Network.getUuid()); logger.debug("Complete nic information for TfL2Network"); -- Gitee