Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Ftr: Added more event distribution types and improved event distribution mechanism for 1.5 #1405

Conversation

ChangedenCZD
Copy link
Contributor

@ChangedenCZD ChangedenCZD commented Aug 20, 2021

What this PR does:
分发机制
未命名文件 (2)

单元测试

// 实现事件分发接口
type CustomEvent struct {
	t *testing.T
}

// implements interfaces.ConfigPostProcessor's functions
func (c CustomEvent) PostProcessReferenceConfig(u *common.URL, event string, errMsg *string) {
	logger.Debug("PostProcessReferenceConfig Start")
	logger.Debug("Event: ", event)
	logger.Debug("Url: ", u)
	if errMsg != nil {
		logger.Debug("Error Message: ", *errMsg)
	}
	logger.Debug("PostProcessReferenceConfig End")
	assert.Equal(c.t, u.GetParam(constant.SIDE_KEY, ""), "consumer")
}
func (c CustomEvent) PostProcessServiceConfig(u *common.URL, event string, errMsg *string) {
	logger.Debug("PostProcessServiceConfig Start")
	logger.Debug("Event: ", event)
	logger.Debug("Url: ", u)
	if errMsg != nil {
		logger.Debug("Error Message: ", *errMsg)
	}
	logger.Debug("PostProcessServiceConfig End")
	assert.Equal(c.t, u.GetParam(constant.SIDE_KEY, ""), "provider")
}
func (c CustomEvent) AllReferencesConnectComplete() {
	logger.Debug("AllConsumersConnectComplete")
}
func (c CustomEvent) AllServicesListenComplete() {
	logger.Debug("AllServicesListenComplete")
}
func (c CustomEvent) BeforeShutdown() {
	logger.Debug("BeforeShutdown")
}

func TestLoadWithEventDispatch(t *testing.T) {
	doInitConsumer()
	doInitProvider()
	for _, v := range providerConfig.Services {
		v.export = true
	}

	ms := &MockService{}
	SetConsumerService(ms)
	SetProviderService(ms)

	extension.SetProtocol("registry", GetProtocol)
	extension.SetCluster(constant.ZONEAWARE_CLUSTER_NAME, cluster_impl.NewZoneAwareCluster)
	extension.SetProxyFactory("default", proxy_factory.NewDefaultProxyFactory)
	GetApplicationConfig().MetadataType = "mock"
	var mm *mockMetadataService
	extension.SetMetadataService("mock", func() (metadataService service.MetadataService, err error) {
		if mm == nil {
			mm = &mockMetadataService{
				exportedServiceURLs: new(sync.Map),
				lock:                new(sync.RWMutex),
			}
		}
		return mm, nil
	})

	extension.SetConfigPostProcessor("TestLoadWithEventDispatch", CustomEvent{t})

	Load()

	assert.Equal(t, ms, GetRPCService(ms.Reference()))
	ms2 := &struct {
		MockService
	}{}
	RPCService(ms2)
	assert.NotEqual(t, ms2, GetRPCService(ms2.Reference()))

	conServices = map[string]common.RPCService{}
	proServices = map[string]common.RPCService{}
	err := common.ServiceMap.UnRegister("com.MockService", "mock",
		common.ServiceKey("com.MockService", "huadong_idc", "1.0.0"))
	assert.Nil(t, err)
	consumerConfig = nil
	providerConfig = nil
}

Which issue(s) this PR fixes:

Fixes #1364

Special notes for your reviewer:
钩子方式的实现方式 #1372

Does this PR introduce a user-facing change?:

- 需要重新实现interfaces.ConfigPostProcessor中的PostProcessReferenceConfig、PostProcessServiceConfig函数,参数从[u *common.URL]拓展为[u *common.URL, event string, errMsg *string]
- 额外实现interfaces.ConfigPostProcessor中的AllReferencesConnectComplete、AllServicesListenComplete、BeforeShutdown函数

@codecov-commenter
Copy link

codecov-commenter commented Aug 20, 2021

Codecov Report

Merging #1405 (fa59c63) into 1.5 (467c867) will decrease coverage by 2.13%.
The diff coverage is 64.13%.

❗ Current head fa59c63 differs from pull request most recent head 460bcd2. Consider uploading reports for the commit 460bcd2 to get more accurate results
Impacted file tree graph

@@            Coverage Diff             @@
##              1.5    #1405      +/-   ##
==========================================
- Coverage   58.07%   55.94%   -2.14%     
==========================================
  Files         275      276       +1     
  Lines       13381    15981    +2600     
==========================================
+ Hits         7771     8940    +1169     
- Misses       4650     6094    +1444     
+ Partials      960      947      -13     
Impacted Files Coverage Δ
common/extension/config_post_processor.go 0.00% <0.00%> (ø)
config/graceful_shutdown.go 55.43% <0.00%> (+1.14%) ⬆️
config/provider_config.go 62.06% <0.00%> (+7.52%) ⬆️
config_center/nacos/facade.go 71.87% <0.00%> (-17.79%) ⬇️
registry/consul/registry.go 51.64% <0.00%> (+2.31%) ⬆️
...gistry/event/protocol_ports_metadata_customizer.go 65.78% <ø> (+6.41%) ⬆️
registry/kubernetes/registry.go 64.15% <0.00%> (+13.03%) ⬆️
registry/zookeeper/listener.go 26.58% <0.00%> (-42.65%) ⬇️
remoting/etcdv3/client.go 55.69% <0.00%> (+2.69%) ⬆️
remoting/etcdv3/facade.go 0.00% <0.00%> (ø)
... and 311 more

Continue to review full report at Codecov.

Legend - Click here to learn more
Δ = absolute <relative> (impact), ø = not affected, ? = missing data
Powered by Codecov. Last update e3d0ae9...460bcd2. Read the comment docs.

config/config_loader.go Outdated Show resolved Hide resolved
@AlexStocks AlexStocks merged commit 13e7a6d into apache:1.5 Aug 27, 2021
@ChangedenCZD ChangedenCZD deleted the feature/config_load_with_event_dispatch_for_1.5 branch September 9, 2021 08:38
@zhaoyunxing92 zhaoyunxing92 added this to the v1.5.7 milestone Sep 20, 2021
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

None yet

6 participants