diff --git a/metadata/report/delegate/delegate_report.go b/metadata/report/delegate/delegate_report.go index cd92fbb332..e1495d1539 100644 --- a/metadata/report/delegate/delegate_report.go +++ b/metadata/report/delegate/delegate_report.go @@ -148,13 +148,13 @@ func NewMetadataReport() (*MetadataReport, error) { return bmr, nil } -// GetAppMetadata delegate get metadata info +// PublishAppMetadata delegate publish metadata info func (mr *MetadataReport) PublishAppMetadata(identifier *identifier.SubscriberMetadataIdentifier, info *common.MetadataInfo) error { report := instance.GetMetadataReportInstance() return report.PublishAppMetadata(identifier, info) } -// PublishAppMetadata delegate publish metadata info +// GetAppMetadata delegate get metadata info func (mr *MetadataReport) GetAppMetadata(identifier *identifier.SubscriberMetadataIdentifier) (*common.MetadataInfo, error) { report := instance.GetMetadataReportInstance() return report.GetAppMetadata(identifier) diff --git a/metadata/report/etcd/report.go b/metadata/report/etcd/report.go index 159713029e..bec551c843 100644 --- a/metadata/report/etcd/report.go +++ b/metadata/report/etcd/report.go @@ -18,6 +18,7 @@ package etcd import ( + "encoding/json" "strings" "time" ) @@ -52,14 +53,25 @@ type etcdMetadataReport struct { // GetAppMetadata get metadata info from etcd func (e *etcdMetadataReport) GetAppMetadata(metadataIdentifier *identifier.SubscriberMetadataIdentifier) (*common.MetadataInfo, error) { - // TODO will implement - panic("implement me") + key := e.getNodeKey(metadataIdentifier) + data, err := e.client.Get(key) + if err != nil { + return nil, err + } + + info := &common.MetadataInfo{} + return info, json.Unmarshal([]byte(data), info) } // PublishAppMetadata publish metadata info to etcd func (e *etcdMetadataReport) PublishAppMetadata(metadataIdentifier *identifier.SubscriberMetadataIdentifier, info *common.MetadataInfo) error { - // TODO will implement - panic("implement me") + key := e.getNodeKey(metadataIdentifier) + value, err := json.Marshal(info) + if err == nil { + err = e.client.Put(key, string(value)) + } + + return err } // StoreProviderMetadata will store the metadata diff --git a/metadata/report/etcd/report_test.go b/metadata/report/etcd/report_test.go index a459791dd6..d0162ebd4b 100644 --- a/metadata/report/etcd/report_test.go +++ b/metadata/report/etcd/report_test.go @@ -94,8 +94,21 @@ func TestEtcdMetadataReport_CRUD(t *testing.T) { err = metadataReport.SaveSubscribedData(subMi, string(urls)) assert.Nil(t, err) + serviceUrl, _ = common.NewURL("dubbo://127.0.0.1:20000/com.ikurento.user.UserProvider?interface=com.ikurento.user.UserProvider&group=&version=2.6.0") + metadataInfo := common.NewMetadataInfo(subMi.Application, "", map[string]*common.ServiceInfo{ + "com.ikurento.user.UserProvider": common.NewServiceInfoWithURL(serviceUrl), + }) err = metadataReport.RemoveServiceMetadata(serviceMi) assert.Nil(t, err) + err = metadataReport.PublishAppMetadata(subMi, metadataInfo) + assert.Nil(t, err) + + mdInfo, err := metadataReport.GetAppMetadata(subMi) + assert.Nil(t, err) + assert.Equal(t, metadataInfo.App, mdInfo.App) + assert.Equal(t, metadataInfo.Revision, mdInfo.Revision) + assert.Equal(t, 1, len(mdInfo.Services)) + assert.NotNil(t, metadataInfo.Services["com.ikurento.user.UserProvider"]) e.Close() }