diff --git a/cli/ctl/trisolaris_check.go b/cli/ctl/trisolaris_check.go index f0a7d91de79..fd44854f795 100644 --- a/cli/ctl/trisolaris_check.go +++ b/cli/ctl/trisolaris_check.go @@ -521,12 +521,12 @@ func formatString(data *trident.Interface) string { buffer := bytes.Buffer{} format := "Id: %d Mac: %s EpcId: %d DeviceType: %d DeviceId: %d IfType: %d" + " LaunchServer: %s LaunchServerId: %d RegionId: %d AzId: %d, PodGroupId: %d, " + - "PodNsId: %d, PodId: %d PodClusterId: %d IsVipInterface: %t " + "PodNsId: %d, PodId: %d, PodClusterId: %d, NetnsId: %d, VtapId: %d, IsVipInterface: %t " buffer.WriteString(fmt.Sprintf(format, data.GetId(), Uint64ToMac(data.GetMac()), data.GetEpcId(), data.GetDeviceType(), data.GetDeviceId(), data.GetIfType(), data.GetLaunchServer(), data.GetLaunchServerId(), data.GetRegionId(), data.GetAzId(), data.GetPodGroupId(), data.GetPodNsId(), data.GetPodId(), - data.GetPodClusterId(), data.GetIsVipInterface())) + data.GetPodClusterId(), data.GetNetnsId(), data.GetVtapId(), data.GetIsVipInterface())) if data.GetPodNodeId() > 0 { buffer.WriteString(fmt.Sprintf("PodNodeId: %d ", data.GetPodNodeId())) } @@ -554,6 +554,10 @@ func platformData(response *trident.SyncResponse) { for index, entry := range platform.Cidrs { JsonFormat(index+1, entry) } + fmt.Println("gprocess infos:") + for index, entry := range platform.GprocessInfos { + JsonFormat(index+1, entry) + } } } } diff --git a/cli/go.mod b/cli/go.mod index 5bdac34445c..7764f0ef79d 100644 --- a/cli/go.mod +++ b/cli/go.mod @@ -4,7 +4,7 @@ go 1.18 require ( github.com/bitly/go-simplejson v0.5.0 - github.com/deepflowio/deepflow/message v0.0.0-20230530102604-2aaf27c6681a + github.com/deepflowio/deepflow/message v0.0.0-20230712082052-d8a8bdf9faab github.com/deepflowio/deepflow/server v0.0.0-20230627003827-a0736467fe05 github.com/golang/protobuf v1.5.2 github.com/mattn/go-runewidth v0.0.14 diff --git a/cli/go.sum b/cli/go.sum index b508cc5a363..8141735df75 100644 --- a/cli/go.sum +++ b/cli/go.sum @@ -89,8 +89,8 @@ github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ3 github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= -github.com/deepflowio/deepflow/message v0.0.0-20230530102604-2aaf27c6681a h1:HPPeWjfRdoUOllDZq2z8QzQsgkb13/TsNJdt1s2oT14= -github.com/deepflowio/deepflow/message v0.0.0-20230530102604-2aaf27c6681a/go.mod h1:e+1lUMMlycCvFRKvlwt/y/0vxJnF8wVss3GyR1ARXY0= +github.com/deepflowio/deepflow/message v0.0.0-20230712082052-d8a8bdf9faab h1:S/2FDsQC4j9y9t7pl71YpxBctWzsxxWxn75KCwVGAX8= +github.com/deepflowio/deepflow/message v0.0.0-20230712082052-d8a8bdf9faab/go.mod h1:e+1lUMMlycCvFRKvlwt/y/0vxJnF8wVss3GyR1ARXY0= github.com/deepflowio/deepflow/server v0.0.0-20230627003827-a0736467fe05 h1:aNxt1SOsk909k8/wZ3doIZ5VOsTpINFRftC49DT5ZFs= github.com/deepflowio/deepflow/server v0.0.0-20230627003827-a0736467fe05/go.mod h1:cA/aI0aTksmlb2xrvSSCCvKvwdhgFrr8lpADNAevAFU= github.com/docker/go-units v0.4.0 h1:3uh0PgVws3nIA0Q+MwDC8yjEPf9zjRfZZWXZYDct3Tw= diff --git a/server/controller/trisolaris/metadata/db_data.go b/server/controller/trisolaris/metadata/db_data.go index 0ffb9d1a176..03d1313b7d6 100644 --- a/server/controller/trisolaris/metadata/db_data.go +++ b/server/controller/trisolaris/metadata/db_data.go @@ -68,6 +68,7 @@ type DBDataCache struct { npbPolicies []*models.NpbPolicy pcapPolicies []*models.PcapPolicy cens []*models.CEN + processes []*models.Process } func newDBDataCache() *DBDataCache { @@ -247,6 +248,10 @@ func (d *DBDataCache) GetCENs() []*models.CEN { return d.cens } +func (d *DBDataCache) GetProcesses() []*models.Process { + return d.processes +} + func GetTapTypesFromDB(db *gorm.DB) []*models.TapType { tapTypes, err := dbmgr.DBMgr[models.TapType](db).Gets() if err != nil { @@ -553,4 +558,11 @@ func (d *DBDataCache) GetDataCacheFromDB(db *gorm.DB) { } else { log.Error(err) } + + processes, err := dbmgr.DBMgr[models.Process](db).Gets() + if err == nil { + d.processes = processes + } else { + log.Error(err) + } } diff --git a/server/controller/trisolaris/metadata/domain_gprocess_info.go b/server/controller/trisolaris/metadata/domain_gprocess_info.go new file mode 100644 index 00000000000..714ec0847a3 --- /dev/null +++ b/server/controller/trisolaris/metadata/domain_gprocess_info.go @@ -0,0 +1,30 @@ +/* + * Copyright (c) 2023 Yunshan Networks + * + * Licensed 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. + */ + +package metadata + +import "github.com/deepflowio/deepflow/message/trident" + +// GProcessInfoProto is only used to send to the ingester module. +type GProcessInfoProto struct { + gprocessInfo []*trident.GProcessInfo +} + +func newGProcessInfoProto(length int) *GProcessInfoProto { + return &GProcessInfoProto{ + gprocessInfo: make([]*trident.GProcessInfo, 0, length), + } +} diff --git a/server/controller/trisolaris/metadata/platform_data.go b/server/controller/trisolaris/metadata/platform_data.go index 7fcc68a3c50..4aa16aaa855 100644 --- a/server/controller/trisolaris/metadata/platform_data.go +++ b/server/controller/trisolaris/metadata/platform_data.go @@ -37,6 +37,7 @@ type PlatformData struct { interfaceProtos []*trident.Interface peerConnProtos []*trident.PeerConnection cidrProtos []*trident.Cidr + gprocessInfoProtos []*trident.GProcessInfo version uint64 mergeDomains []string dataType uint32 @@ -52,14 +53,16 @@ func NewPlatformData(domain string, lcuuid string, version uint64, dataType uint interfaceProtos: []*trident.Interface{}, peerConnProtos: []*trident.PeerConnection{}, cidrProtos: []*trident.Cidr{}, + gprocessInfoProtos: []*trident.GProcessInfo{}, version: version, mergeDomains: []string{}, dataType: dataType, } } -func (f *PlatformData) setPlatformData(ifs []*trident.Interface, pcs []*trident.PeerConnection, cidrs []*trident.Cidr) { - f.initPlatformData(ifs, pcs, cidrs) +func (f *PlatformData) setPlatformData(ifs []*trident.Interface, pcs []*trident.PeerConnection, cidrs []*trident.Cidr, + gpis []*trident.GProcessInfo) { + f.initPlatformData(ifs, pcs, cidrs, gpis) f.GeneratePlatformDataResult() } @@ -89,10 +92,12 @@ func (f *PlatformData) initVersion() { offsetVersion += offsetInterval } -func (f *PlatformData) initPlatformData(ifs []*trident.Interface, pcs []*trident.PeerConnection, cidrs []*trident.Cidr) { +func (f *PlatformData) initPlatformData(ifs []*trident.Interface, pcs []*trident.PeerConnection, cidrs []*trident.Cidr, + gpi []*trident.GProcessInfo) { f.interfaceProtos = ifs f.peerConnProtos = pcs f.cidrProtos = cidrs + f.gprocessInfoProtos = gpi } func (f *PlatformData) GeneratePlatformDataResult() { @@ -100,6 +105,7 @@ func (f *PlatformData) GeneratePlatformDataResult() { Interfaces: f.interfaceProtos, PeerConnections: f.peerConnProtos, Cidrs: f.cidrProtos, + GprocessInfos: f.gprocessInfoProtos, } var err error f.platformDataStr, err = f.platformDataProtos.Marshal() @@ -118,6 +124,7 @@ func (f *PlatformData) Merge(other *PlatformData) { f.interfaceProtos = append(f.interfaceProtos, other.interfaceProtos...) f.peerConnProtos = append(f.peerConnProtos, other.peerConnProtos...) f.cidrProtos = append(f.cidrProtos, other.cidrProtos...) + f.gprocessInfoProtos = append(f.gprocessInfoProtos, other.gprocessInfoProtos...) f.version += other.version if len(other.domain) != 0 { f.mergeDomains = append(f.mergeDomains, other.domain) @@ -159,6 +166,6 @@ func (f *PlatformData) equal(other *PlatformData) bool { } func (f *PlatformData) String() string { - return fmt.Sprintf("name: %s, lcuuid: %s, data_type: %d, version: %d, platform_data_hash: %d, interfaces: %d, peer_connections: %d, cidrs: %d, merge_domains: %s", - f.domain, f.lcuuid, f.dataType, f.version, f.platformDataHash, len(f.interfaceProtos), len(f.peerConnProtos), len(f.cidrProtos), f.mergeDomains) + return fmt.Sprintf("name: %s, lcuuid: %s, data_type: %d, version: %d, platform_data_hash: %d, interfaces: %d, peer_connections: %d, cidrs: %d, gprocess_info: %d, merge_domains: %s", + f.domain, f.lcuuid, f.dataType, f.version, f.platformDataHash, len(f.interfaceProtos), len(f.peerConnProtos), len(f.cidrProtos), len(f.gprocessInfoProtos), f.mergeDomains) } diff --git a/server/controller/trisolaris/metadata/platform_op.go b/server/controller/trisolaris/metadata/platform_op.go index 67d7de69407..04b27b1032c 100644 --- a/server/controller/trisolaris/metadata/platform_op.go +++ b/server/controller/trisolaris/metadata/platform_op.go @@ -39,6 +39,9 @@ type PlatformDataOP struct { domainInterfaceProto *atomic.Value // *DomainInterfaceProto domainPeerConnProto *atomic.Value // *DomainPeerConnProto domainCIDRProto *atomic.Value // *DomainCIDRProto + + GProcessInfoProto *atomic.Value // *GProcessInfoProto + // ingester used platform data allPlatformDataForIngester *atomic.Value //*PlatformData @@ -69,6 +72,9 @@ func newPlatformDataOP(db *gorm.DB, metaData *MetaData) *PlatformDataOP { domainCIDRProto := &atomic.Value{} domainCIDRProto.Store(newDomainCIDRProto(0)) + gprocessInfoProto := &atomic.Value{} + gprocessInfoProto.Store(newGProcessInfoProto(0)) + allPlatformDataForIngester := &atomic.Value{} allPlatformDataForIngester.Store(NewPlatformData("", "", 0, INGESTER_ALL_PLATFORM_DATA)) @@ -77,6 +83,7 @@ func newPlatformDataOP(db *gorm.DB, metaData *MetaData) *PlatformDataOP { domainInterfaceProto: domainInterfaceProto, domainPeerConnProto: domainPeerConnProto, domainCIDRProto: domainCIDRProto, + GProcessInfoProto: gprocessInfoProto, allPlatformDataForIngester: allPlatformDataForIngester, DomainToPlatformData: newDomainToPlatformData(), db: db, @@ -136,6 +143,8 @@ func (p *PlatformDataOP) generateVInterfaces() { dipData := NewDomainInterfaceProto() vifPubIps := []string{} platformVips := p.metaData.GetPlatformVips() + // TODO(weiqiang): delete + log.Infof("vifs len: %v", len(vifs)) for index, _ := range vifs { vif := vifs[index] typeIDKey := TypeIDKey{ @@ -328,30 +337,55 @@ func (p *PlatformDataOP) generateCIDRs() { p.updateDomainCIDRProto(dcProto) } +func (p *PlatformDataOP) generateGProcessInfo() { + dbDataCache := p.metaData.GetDBDataCache() + processes := dbDataCache.GetProcesses() + gprocessData := newGProcessInfoProto(len(processes)) + for _, process := range processes { + p := &trident.GProcessInfo{ + GprocessId: proto.Uint32(uint32(process.ID)), + NetnsId: proto.Uint32(process.NetnsID), + VtapId: proto.Uint32(uint32(process.VTapID)), + } + gprocessData.gprocessInfo = append(gprocessData.gprocessInfo, p) + } + p.updateGProcessInfoProto(gprocessData) +} + func (p *PlatformDataOP) generateIngesterPlatformData() { domainInterfaceProto := p.getDomainInterfaceProto() domainPeerConnProto := p.getDomainPeerConnProto() domainCIDRProto := p.getDomainCIDRProto() + gprocessInfo := p.getGProcessInfoProto().gprocessInfo // AllPlatformDataForIngester newIngesterPlatformData := NewPlatformData("", "", 0, INGESTER_ALL_PLATFORM_DATA) newIngesterPlatformData.setPlatformData(domainInterfaceProto.allCompleteInterfaces, - domainPeerConnProto.peerConns, domainCIDRProto.cidrs) + domainPeerConnProto.peerConns, domainCIDRProto.cidrs, gprocessInfo) oldIngesterPlatformData := p.GetAllPlatformDataForIngester() + log.Info("weiqiang generateIngesterPlatformData") if oldIngesterPlatformData.GetVersion() == 0 { + // TODO(weiqiang): delete + log.Infof("weiqiang oldIngesterPlatformData.GetVersion() == 0: %v", oldIngesterPlatformData.GetVersion() == 0) newIngesterPlatformData.setVersion(uint64(time.Now().Unix())) p.updateAllPlatformDataForIngester(newIngesterPlatformData) } else if !newIngesterPlatformData.equal(oldIngesterPlatformData) { + // TODO(weiqiang): delete + log.Infof("weiqiang !newIngesterPlatformData.equal(oldIngesterPlatformData) : %v", !newIngesterPlatformData.equal(oldIngesterPlatformData)) newIngesterPlatformData.setVersion(oldIngesterPlatformData.GetVersion() + 1) p.updateAllPlatformDataForIngester(newIngesterPlatformData) } + for _, ifs := range domainInterfaceProto.allCompleteInterfaces { + log.Infof("weiqiang %v, %v, %v, %v", ifs.Id, ifs.Mac, ifs.NetnsId, ifs.VtapId) + } //生成所有完整数据 newACPData := NewPlatformData("", "", 0, ALL_COMPLETE_PLATFORM_DATA_EXCEPT_POD) newACPData.setPlatformData( domainInterfaceProto.allCompleteInterfacesExceptPod, domainPeerConnProto.peerConns, - domainCIDRProto.simplecidrs) + domainCIDRProto.simplecidrs, + gprocessInfo) oldACPData := p.GetAllCompletePlatformDataExceptPod() if oldACPData == nil { newACPData.initVersion() @@ -366,7 +400,7 @@ func (p *PlatformDataOP) generateIngesterPlatformData() { for _, region := range regions { interfaces := domainInterfaceProto.regionToInterfacesOnlyPod[region.Lcuuid] regionData := NewPlatformData(region.Name, region.Lcuuid, 0, REGION_TO_PLATFORM_DATA_ONLY_POD) - regionData.setPlatformData(interfaces, nil, nil) + regionData.setPlatformData(interfaces, nil, nil, nil) regionToData[region.Lcuuid] = regionData } if !p.GetRegionToPlatformDataOnlyPod().checkVersion(regionToData) { @@ -378,7 +412,7 @@ func (p *PlatformDataOP) generateIngesterPlatformData() { for _, az := range azs { interfaces := domainInterfaceProto.azToInterfacesOnlyPod[az.Lcuuid] azData := NewPlatformData(az.Name, az.Lcuuid, 0, AZ_TO_PLATFORM_DATA_ONLY_POD) - azData.setPlatformData(interfaces, nil, nil) + azData.setPlatformData(interfaces, nil, nil, nil) azToData[az.Lcuuid] = azData } if !p.GetAZToPlatformDataOnlyPod().checkVersion(azToData) { @@ -400,7 +434,8 @@ func (p *PlatformDataOP) generateAllSimplePlatformData() { aSPData.setPlatformData( domainInterfaceProto.allSimpleInterfaces, domainPeerConnProto.peerConns, - domainCIDRProto.simplecidrs) + domainCIDRProto.simplecidrs, + nil) pASPData := p.GetAllSimplePlatformData() if pASPData == nil { aSPData.initVersion() @@ -416,7 +451,8 @@ func (p *PlatformDataOP) generateAllSimplePlatformData() { aSPDExceptPod.setPlatformData( domainInterfaceProto.allSimpleInterfacesExceptPod, domainPeerConnProto.peerConns, - domainCIDRProto.simplecidrs) + domainCIDRProto.simplecidrs, + nil) pASPDExceptPod := p.GetAllSimplePlatformDataExceptPod() if pASPDExceptPod == nil { aSPDExceptPod.initVersion() @@ -447,20 +483,20 @@ func (p *PlatformDataOP) generateDomainPlatformData() { peerConnections := domainPeerConnProto.domainToPeerConns[domain.Lcuuid] cidrs := domainCIDRProto.domainToCIDRs[domain.Lcuuid] domainDate := NewPlatformData(domain.Name, domain.Lcuuid, 0, DOMAIN_TO_ALL_SIMPLE_PLATFORM_DATA) - domainDate.setPlatformData(interfaces, peerConnections, cidrs) + domainDate.setPlatformData(interfaces, peerConnections, cidrs, nil) dToAPData[domain.Lcuuid] = domainDate // vinterface包含集群内非pod信息 interfacesExceptPod := domainInterfaceProto.domainToInterfacesExceptPod[domain.Lcuuid] domainCIDRs := domainCIDRProto.domainOrSubdomainToCIDRs[domain.Lcuuid] domainDataExceptPod := NewPlatformData(domain.Name, domain.Lcuuid, 0, DOMAIN_TO_PLATFORM_DATA_EXCEPT_POD) - domainDataExceptPod.setPlatformData(interfacesExceptPod, peerConnections, domainCIDRs) + domainDataExceptPod.setPlatformData(interfacesExceptPod, peerConnections, domainCIDRs, nil) dToPDExceptPod[domain.Lcuuid] = domainDataExceptPod // domain仅包含pod信息 interfacesOnlyPod := domainInterfaceProto.domainOrSubdomainToInterfacesOnlyPod[domain.Lcuuid] domainDataOnlyPod := NewPlatformData(domain.Name, domain.Lcuuid, 0, DOMAIN_TO_PLATFORM_DATA_ONLY_POD) - domainDataOnlyPod.setPlatformData(interfacesOnlyPod, peerConnections, domainCIDRs) + domainDataOnlyPod.setPlatformData(interfacesOnlyPod, peerConnections, domainCIDRs, nil) dToPDOnlyPod[domain.Lcuuid] = domainDataOnlyPod } @@ -471,12 +507,12 @@ func (p *PlatformDataOP) generateDomainPlatformData() { peerConnections := domainPeerConnProto.domainToPeerConns[subDomain.Lcuuid] cidrs := domainCIDRProto.domainOrSubdomainToCIDRs[subDomain.Lcuuid] domainDataOnlyPod := NewPlatformData(subDomain.Name, subDomain.Lcuuid, 0, DOMAIN_TO_PLATFORM_DATA_ONLY_POD) - domainDataOnlyPod.setPlatformData(interfaces, peerConnections, cidrs) + domainDataOnlyPod.setPlatformData(interfaces, peerConnections, cidrs, nil) dToPDOnlyPod[subDomain.Lcuuid] = domainDataOnlyPod } noDomainData := NewPlatformData("no domain", "", 0, NO_DOMAIN_TO_PLATFORM) - noDomainData.setPlatformData(nil, domainPeerConnProto.getNoDomainPeerConns(), nil) + noDomainData.setPlatformData(nil, domainPeerConnProto.getNoDomainPeerConns(), nil, nil) oldNoDOmainDat := p.GetNoDomainPlatformData() if oldNoDOmainDat == nil { noDomainData.initVersion() @@ -570,6 +606,14 @@ func (p *PlatformDataOP) updateDomainCIDRProto(c *DomainCIDRProto) { p.domainCIDRProto.Store(c) } +func (p *PlatformDataOP) getGProcessInfoProto() *GProcessInfoProto { + return p.GProcessInfoProto.Load().(*GProcessInfoProto) +} + +func (p *PlatformDataOP) updateGProcessInfoProto(c *GProcessInfoProto) { + p.GProcessInfoProto.Store(c) +} + func (p *PlatformDataOP) GetAllPlatformDataForIngester() *PlatformData { return p.allPlatformDataForIngester.Load().(*PlatformData) } @@ -588,6 +632,7 @@ func (p *PlatformDataOP) generateBasePlatformData() { p.generateVInterfaces() p.generatePeerConnections() p.generateCIDRs() + p.generateGProcessInfo() p.generateIngesterPlatformData() p.generateAllSimplePlatformData() p.generateDomainPlatformData() diff --git a/server/controller/trisolaris/metadata/raw_data.go b/server/controller/trisolaris/metadata/raw_data.go index 7a7b9382a95..15c091ca971 100644 --- a/server/controller/trisolaris/metadata/raw_data.go +++ b/server/controller/trisolaris/metadata/raw_data.go @@ -103,6 +103,7 @@ type PlatformRawData struct { lbIDs mapset.Set natIDs mapset.Set podServicePortIDs mapset.Set + processIDs mapset.Set subnetPrefix []string subnetMask []string serverToVmIDs map[string]mapset.Set @@ -168,6 +169,7 @@ func NewPlatformRawData() *PlatformRawData { lbIDs: mapset.NewSet(), natIDs: mapset.NewSet(), podServicePortIDs: mapset.NewSet(), + processIDs: mapset.NewSet(), serverToVmIDs: make(map[string]mapset.Set), floatingIPs: make(map[int]*IPData), podServiceIDToPodGroupPortIDs: make(map[int]mapset.Set), @@ -1021,6 +1023,16 @@ func (r *PlatformRawData) ConvertSkipVTapVIfIDs(dbDataCache *DBDataCache) { log.Debug(r.launchServerToSkipInterface) } +func (r *PlatformRawData) ConvertDBProcesses(dbDataCache *DBDataCache) { + processes := dbDataCache.GetProcesses() + if processes == nil { + return + } + for _, process := range processes { + r.processIDs.Add(process.ID) + } +} + // 有依赖 需要按顺序convert func (r *PlatformRawData) ConvertDBCache(dbDataCache *DBDataCache) { r.ConvertHost(dbDataCache) @@ -1047,6 +1059,7 @@ func (r *PlatformRawData) ConvertDBCache(dbDataCache *DBDataCache) { r.ConvertDBVmPodNodeConn(dbDataCache) r.ConvertDBVipDomain(dbDataCache) r.ConvertSkipVTapVIfIDs(dbDataCache) + r.ConvertDBProcesses(dbDataCache) } func (r *PlatformRawData) checkIsVip(ip string, vif *models.VInterface, platformVips []string) bool { @@ -1096,6 +1109,8 @@ func (r *PlatformRawData) vInterfaceToProto( if err != nil { log.Error(err, vif.Mac) } + // TODO(weiqiang): delete + log.Infof("vInterfaceToProto aInterface, mac: %v, NetnsId: %v, VtapId: %v", macU64, vif.NetnsID, vif.VtapID) aInterface := &trident.Interface{ Id: proto.Uint32(uint32(vif.ID)), Mac: proto.Uint64(macU64), @@ -1114,7 +1129,8 @@ func (r *PlatformRawData) vInterfaceToProto( PodNodeId: proto.Uint32(uint32(device.PodNodeID)), PodId: proto.Uint32(uint32(device.PodID)), IsVipInterface: proto.Bool(ipResourceData.isVipInterface), - NetnsId: proto.Uint32(uint32(vif.NetnsID)), + NetnsId: proto.Uint32(vif.NetnsID), + VtapId: proto.Uint32(vif.VtapID), } sInterface := &trident.Interface{ Id: proto.Uint32(uint32(vif.ID)), @@ -1434,6 +1450,11 @@ func (r *PlatformRawData) equal(o *PlatformRawData) bool { return false } + if !r.processIDs.Equal(o.processIDs) { + log.Info("platform processes changed") + return false + } + if len(r.podServiceIDToPodGroupPortIDs) != len(o.podServiceIDToPodGroupPortIDs) { log.Info("platform pod service pod group ports changed") return false diff --git a/server/controller/trisolaris/services/grpc/synchronize/tsdb.go b/server/controller/trisolaris/services/grpc/synchronize/tsdb.go index 0496f03a014..949f5520370 100644 --- a/server/controller/trisolaris/services/grpc/synchronize/tsdb.go +++ b/server/controller/trisolaris/services/grpc/synchronize/tsdb.go @@ -24,6 +24,7 @@ import ( "github.com/op/go-logging" context "golang.org/x/net/context" + "github.com/deepflowio/deepflow/message/trident" api "github.com/deepflowio/deepflow/message/trident" "github.com/deepflowio/deepflow/server/controller/trisolaris" . "github.com/deepflowio/deepflow/server/controller/trisolaris/common" @@ -104,7 +105,17 @@ func (e *TSDBEvent) AnalyzerSync(ctx context.Context, in *api.SyncRequest) (*api configure := e.generateConfig(tsdbIP) platformData := []byte{} if versionPlatformData != in.GetVersionPlatformData() { + // TODO(weiqiang): delete + log.Info("AnalyzerSync platformData") platformData = nodeInfo.GetPlatformDataStr() + // TODO(weiqiang): delete + platform := trident.PlatformData{} + if err := platform.Unmarshal(platformData); err != nil { + log.Error(err) + } + for _, i := range platform.GetInterfaces() { + log.Infof("weiqiang %v, %v, %v, %v", i.GetId(), i.GetMac(), i.GetNetnsId(), i.GetVtapId()) + } } groups := []byte{} if versionGroups != in.GetVersionGroups() { diff --git a/server/go.mod b/server/go.mod index 0db06052528..13d54177910 100644 --- a/server/go.mod +++ b/server/go.mod @@ -31,7 +31,7 @@ require ( github.com/cornelk/hashmap v1.0.8 github.com/deckarep/golang-set v1.8.0 github.com/deckarep/golang-set/v2 v2.1.0 - github.com/deepflowio/deepflow/message v0.0.0-20230530102604-2aaf27c6681a + github.com/deepflowio/deepflow/message v0.0.0-20230712082052-d8a8bdf9faab github.com/deepflowio/deepflow/server/controller/cloud/kubernetes_gather/expand v0.0.0-00010101000000-000000000000 github.com/deepflowio/deepflow/server/controller/cloud/platform v0.0.0-00010101000000-000000000000 github.com/deepflowio/deepflow/server/controller/db/mysql/migrator v0.0.0-00010101000000-000000000000 diff --git a/server/go.sum b/server/go.sum index dfd9cc2021c..8b1c92db8b2 100644 --- a/server/go.sum +++ b/server/go.sum @@ -153,8 +153,8 @@ github.com/deckarep/golang-set v1.8.0 h1:sk9/l/KqpunDwP7pSjUg0keiOOLEnOBHzykLrsP github.com/deckarep/golang-set v1.8.0/go.mod h1:5nI87KwE7wgsBU1F4GKAw2Qod7p5kyS383rP6+o6qqo= github.com/deckarep/golang-set/v2 v2.1.0 h1:g47V4Or+DUdzbs8FxCCmgb6VYd+ptPAngjM6dtGktsI= github.com/deckarep/golang-set/v2 v2.1.0/go.mod h1:VAky9rY/yGXJOLEDv3OMci+7wtDpOF4IN+y82NBOac4= -github.com/deepflowio/deepflow/message v0.0.0-20230530102604-2aaf27c6681a h1:HPPeWjfRdoUOllDZq2z8QzQsgkb13/TsNJdt1s2oT14= -github.com/deepflowio/deepflow/message v0.0.0-20230530102604-2aaf27c6681a/go.mod h1:e+1lUMMlycCvFRKvlwt/y/0vxJnF8wVss3GyR1ARXY0= +github.com/deepflowio/deepflow/message v0.0.0-20230712082052-d8a8bdf9faab h1:S/2FDsQC4j9y9t7pl71YpxBctWzsxxWxn75KCwVGAX8= +github.com/deepflowio/deepflow/message v0.0.0-20230712082052-d8a8bdf9faab/go.mod h1:e+1lUMMlycCvFRKvlwt/y/0vxJnF8wVss3GyR1ARXY0= github.com/deepflowio/tempopb v0.0.0-20230215110519-15853baf3a79 h1:erRwXyZiUZxxZX/Q1QHesZXgxjiunZUFy+ggCRimkD4= github.com/deepflowio/tempopb v0.0.0-20230215110519-15853baf3a79/go.mod h1:h2rkZ319TExIUGuK8a2dlcGd8qc6wdhsrcpXWaJQaQE= github.com/dennwc/varint v1.0.0 h1:kGNFFSSw8ToIy3obO/kKr8U9GZYUAxQEVuix4zfDWzE=