This is an automated email from the ASF dual-hosted git repository.

alexstocks pushed a commit to branch 1.5
in repository https://gitbox.apache.org/repos/asf/dubbo-go.git


The following commit(s) were added to refs/heads/1.5 by this push:
     new 16e3744  Ftr: Modify event dispatch interface and optimit dispatch 
functions (#1453)
16e3744 is described below

commit 16e3744bcd36b1291291f8e97ae8c7bd0ec7d9fb
Author: ChangedenChan <[email protected]>
AuthorDate: Sun Sep 26 13:07:35 2021 +0800

    Ftr: Modify event dispatch interface and optimit dispatch functions (#1453)
    
    * Modify event dispatch interface and optimit dispatch functions
    
    * 增加注释
    
    * 优化代码
    
    * 优化导包
    
    * 优化代码逻辑
    
    * 优化代码逻辑
    
    * 优化代码逻辑
    
    * 变更文件名
    
    * 完善单元测试
    
    * 优化函数名
    
    * Add read/write lock
    
    * 调整读写锁逻辑
    
    * 增加线程安全
    
    * 优化变量初始化方式
    
    Co-authored-by: Changeden <[email protected]>
---
 common/constant/key.go                     |  12 +-
 common/extension/config_load_processor.go  | 183 +++++++++++++++++++++++++++++
 config/config_loader.go                    |  14 ++-
 config/config_loader_test.go               |  48 +++++---
 config/graceful_shutdown.go                |  10 +-
 config/interfaces/config_load_processor.go |  56 +++++++++
 config/interfaces/config_post_processor.go |  15 +--
 config/reference_config.go                 |  18 +--
 config/service_config.go                   |  18 +--
 9 files changed, 310 insertions(+), 64 deletions(-)

diff --git a/common/constant/key.go b/common/constant/key.go
index b062b07..40499ab 100644
--- a/common/constant/key.go
+++ b/common/constant/key.go
@@ -357,7 +357,13 @@ const (
        HookEventReferenceConnectSuccess = "reference-connect-success"
        HookEventReferenceConnectFail    = "reference-connect-fail"
 
-       HookEventBeforeProviderConnect  = "before-service-listen"
-       HookEventProviderConnectSuccess = "service-listen-success"
-       HookEventProviderConnectFail    = "service-listen-fail"
+       HookEventBeforeServiceListen  = "before-service-listen"
+       HookEventServiceListenSuccess = "service-listen-success"
+       HookEventServiceListenFail    = "service-listen-fail"
+
+       LoadProcessReferenceConfigFunctionName        = 
"LoadProcessReferenceConfig"
+       LoadProcessServiceConfigFunctionName          = 
"LoadProcessServiceConfig"
+       AfterAllReferencesConnectCompleteFunctionName = 
"AfterAllReferencesConnectComplete"
+       AfterAllServicesListenCompleteFunctionName    = 
"AfterAllServicesListenComplete"
+       BeforeShutdownFunctionName                    = "BeforeShutdown"
 )
diff --git a/common/extension/config_load_processor.go 
b/common/extension/config_load_processor.go
new file mode 100644
index 0000000..fc7bf4b
--- /dev/null
+++ b/common/extension/config_load_processor.go
@@ -0,0 +1,183 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You 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 extension
+
+import (
+       "reflect"
+)
+
+import (
+       "github.com/apache/dubbo-go/common"
+       "github.com/apache/dubbo-go/common/constant"
+       "github.com/apache/dubbo-go/config/interfaces"
+)
+
+var (
+       configLoadProcessorHolder = &interfaces.ConfigLoadProcessorHolder{}
+
+       loadProcessors      = make(map[string]interfaces.ConfigLoadProcessor)
+       loadProcessorValues = make(map[string]reflect.Value)
+
+       referenceURL = make(map[string][]*common.URL)
+       serviceURL   = make(map[string][]*common.URL)
+)
+
+// SetConfigLoadProcessor registers a ConfigLoadProcessor with the given name.
+func SetConfigLoadProcessor(name string, processor 
interfaces.ConfigLoadProcessor) {
+       configLoadProcessorHolder.Lock()
+       defer configLoadProcessorHolder.Unlock()
+       loadProcessors[name] = processor
+       loadProcessorValues[name] = reflect.ValueOf(processor)
+}
+
+// GetConfigLoadProcessor finds a ConfigLoadProcessor by name.
+func GetConfigLoadProcessor(name string) interfaces.ConfigLoadProcessor {
+       configLoadProcessorHolder.Lock()
+       defer configLoadProcessorHolder.Unlock()
+       return loadProcessors[name]
+}
+
+// RemoveConfigLoadProcessor remove process from processors.
+func RemoveConfigLoadProcessor(name string) {
+       configLoadProcessorHolder.Lock()
+       defer configLoadProcessorHolder.Unlock()
+       delete(loadProcessors, name)
+       delete(loadProcessorValues, name)
+}
+
+// GetConfigLoadProcessors returns all registered instances of 
ConfigLoadProcessor.
+func GetConfigLoadProcessors() []interfaces.ConfigLoadProcessor {
+       ret := make([]interfaces.ConfigLoadProcessor, 0, len(loadProcessors))
+       configLoadProcessorHolder.Lock()
+       defer configLoadProcessorHolder.Unlock()
+       for _, v := range loadProcessors {
+               ret = append(ret, v)
+       }
+       return ret
+}
+
+// GetReferenceURL returns the URL of all clones of references
+func GetReferenceURL() map[string][]*common.URL {
+       configLoadProcessorHolder.Lock()
+       defer configLoadProcessorHolder.Unlock()
+       urlMap := make(map[string][]*common.URL)
+       for event, urls := range referenceURL {
+               var list []*common.URL
+               for _, url := range urls {
+                       list = append(list, url)
+               }
+               urlMap[event] = list
+       }
+       return urlMap
+}
+
+// GetServiceURL returns the URL of all clones of services
+func GetServiceURL() map[string][]*common.URL {
+       configLoadProcessorHolder.Lock()
+       defer configLoadProcessorHolder.Unlock()
+       urlMap := make(map[string][]*common.URL)
+       for event, urls := range serviceURL {
+               var list []*common.URL
+               for _, url := range urls {
+                       list = append(list, url)
+               }
+               urlMap[event] = list
+       }
+       return urlMap
+}
+
+// ResetURL remove all URL
+func ResetURL() {
+       configLoadProcessorHolder.Lock()
+       defer configLoadProcessorHolder.Unlock()
+       for k := range referenceURL {
+               referenceURL[k] = nil
+               delete(referenceURL, k)
+       }
+       for k := range serviceURL {
+               serviceURL[k] = nil
+               delete(serviceURL, k)
+       }
+}
+
+// emit
+func emit(funcName string, val ...interface{}) {
+       var values []reflect.Value
+       for _, arg := range val {
+               values = append(values, reflect.ValueOf(arg))
+       }
+       configLoadProcessorHolder.Lock()
+       defer configLoadProcessorHolder.Unlock()
+       for _, p := range loadProcessorValues {
+               p.MethodByName(funcName).Call(values)
+       }
+}
+
+// LoadProcessReferenceConfig emit reference config load event
+func LoadProcessReferenceConfig(url *common.URL, event string, errMsg *string) 
{
+       emitReferenceOrService(&referenceURL, 
constant.HookEventBeforeReferenceConnect, // return raw URL when event is before
+               constant.LoadProcessReferenceConfigFunctionName, url, event, 
errMsg)
+}
+
+// LoadProcessServiceConfig emit service config load event
+func LoadProcessServiceConfig(url *common.URL, event string, errMsg *string) {
+       emitReferenceOrService(&serviceURL, 
constant.HookEventBeforeServiceListen, // return raw URL when event is before
+               constant.LoadProcessServiceConfigFunctionName, url, event, 
errMsg)
+}
+
+func emitReferenceOrService(urlMap *map[string][]*common.URL, ignoreCloneEvent 
string,
+       funcName string, url *common.URL, event string, errMsg *string) {
+       configLoadProcessorHolder.Lock()
+       if !(event == ignoreCloneEvent || url == nil) {
+               url = url.Clone()
+       }
+       configLoadProcessorHolder.Unlock()
+       emit(funcName, url, event, errMsg)
+       configLoadProcessorHolder.Lock()
+       defer configLoadProcessorHolder.Unlock()
+       (*urlMap)[event] = append((*urlMap)[event], url)
+}
+
+// AllReferencesConnectComplete emit all references config load complete event
+func AllReferencesConnectComplete() {
+       referenceURL := GetReferenceURL()
+       configLoadProcessorHolder.Lock()
+       binder := interfaces.ConfigLoadProcessorURLBinder{
+               Success: 
referenceURL[constant.HookEventReferenceConnectSuccess],
+               Fail:    referenceURL[constant.HookEventReferenceConnectFail],
+       }
+       configLoadProcessorHolder.Unlock()
+       emit(constant.AfterAllReferencesConnectCompleteFunctionName, binder)
+}
+
+// AllServicesListenComplete emit all services config load complete event
+func AllServicesListenComplete() {
+       serviceURL := GetServiceURL()
+       configLoadProcessorHolder.Lock()
+       binder := interfaces.ConfigLoadProcessorURLBinder{
+               Success: serviceURL[constant.HookEventServiceListenSuccess],
+               Fail:    serviceURL[constant.HookEventServiceListenFail],
+       }
+       configLoadProcessorHolder.Unlock()
+       emit(constant.AfterAllServicesListenCompleteFunctionName, binder)
+}
+
+// BeforeShutdown emit before os.Exit(0)
+func BeforeShutdown() {
+       emit(constant.BeforeShutdownFunctionName)
+}
diff --git a/config/config_loader.go b/config/config_loader.go
index 7ec64aa..d9288f9 100644
--- a/config/config_loader.go
+++ b/config/config_loader.go
@@ -180,7 +180,7 @@ func loadConsumerConfig() {
                                        if count > maxWait {
                                                errMsg := fmt.Sprintf("Failed 
to check the status of the service %v. No provider available for the service to 
the consumer use dubbo version %v", refconfig.InterfaceName, constant.Version)
                                                logger.Error(errMsg)
-                                               
refconfig.postProcessConfig(referenceURL, 
constant.HookEventReferenceConnectFail, &errMsg)
+                                               
refconfig.loadProcessConfig(referenceURL, 
constant.HookEventReferenceConnectFail, &errMsg)
                                                panic(errMsg)
                                        }
                                        time.Sleep(time.Second * 1)
@@ -191,13 +191,13 @@ func loadConsumerConfig() {
                                        continue
                                }
                        }
-                       refconfig.postProcessConfig(referenceURL, 
constant.HookEventReferenceConnectSuccess, nil)
+                       refconfig.loadProcessConfig(referenceURL, 
constant.HookEventReferenceConnectSuccess, nil)
                }
                if checkok {
                        break
                }
        }
-       postAllConsumersConnectComplete()
+       extension.AllReferencesConnectComplete()
 }
 
 func loadProviderConfig() {
@@ -256,13 +256,15 @@ func loadProviderConfig() {
                serviceURL := svs.getValidURL()
                if err != nil {
                        errMsg := fmt.Sprintf("service %s export failed! err: 
%#v", key, err)
-                       svs.postProcessConfig(serviceURL, 
constant.HookEventProviderConnectFail, &errMsg)
+                       svs.loadProcessConfig(serviceURL, 
constant.HookEventServiceListenFail, &errMsg)
                        panic(errMsg)
                }
-               svs.postProcessConfig(serviceURL, 
constant.HookEventProviderConnectSuccess, nil)
+               if serviceURL != nil {
+                       svs.loadProcessConfig(serviceURL, 
constant.HookEventServiceListenSuccess, nil)
+               }
        }
        registerServiceInstance()
-       postAllProvidersConnectComplete()
+       extension.AllServicesListenComplete()
 }
 
 // registerServiceInstance register service instance
diff --git a/config/config_loader_test.go b/config/config_loader_test.go
index be51665..05e9499 100644
--- a/config/config_loader_test.go
+++ b/config/config_loader_test.go
@@ -40,6 +40,7 @@ import (
        "github.com/apache/dubbo-go/common/extension"
        "github.com/apache/dubbo-go/common/logger"
        "github.com/apache/dubbo-go/common/proxy/proxy_factory"
+       "github.com/apache/dubbo-go/config/interfaces"
        "github.com/apache/dubbo-go/config_center"
        "github.com/apache/dubbo-go/metadata/service"
        "github.com/apache/dubbo-go/registry"
@@ -115,32 +116,42 @@ 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")
+// implements interfaces.ConfigLoadProcessor's functions
+func (c CustomEvent) LoadProcessReferenceConfig(u *common.URL, event string, 
errMsg *string) {
+       logger.Debug("LoadProcessReferenceConfig 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")
+       assert.Equal(c.t, "consumer", u.GetParam(constant.SIDE_KEY, ""))
 }
-func (c CustomEvent) PostProcessServiceConfig(u *common.URL, event string, 
errMsg *string) {
-       logger.Debug("PostProcessServiceConfig Start")
+func (c CustomEvent) LoadProcessServiceConfig(u *common.URL, event string, 
errMsg *string) {
+       logger.Debug("LoadProcessServiceConfig 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")
+       assert.Equal(c.t, "provider", u.GetParam(constant.SIDE_KEY, ""))
+}
+func (c CustomEvent) AfterAllReferencesConnectComplete(urls 
interfaces.ConfigLoadProcessorURLBinder) {
+       logger.Debug("AfterAllReferencesConnectComplete")
+       logger.Debug("Success Url: ", urls.Success)
+       logger.Debug("Fail Url: ", urls.Fail)
+       assert.NotNil(c.t, urls)
+       assert.NotNil(c.t, urls.Success)
+       assert.Nil(c.t, urls.Fail)
+}
+func (c CustomEvent) AfterAllServicesListenComplete(urls 
interfaces.ConfigLoadProcessorURLBinder) {
+       logger.Debug("AfterAllServicesListenComplete")
+       logger.Debug("Success Url: ", urls.Success)
+       logger.Debug("Fail Url: ", urls.Fail)
+       assert.NotNil(c.t, urls)
+       assert.NotNil(c.t, urls.Success)
+       assert.Nil(c.t, urls.Fail)
 }
 func (c CustomEvent) BeforeShutdown() {
        logger.Debug("BeforeShutdown")
@@ -172,8 +183,8 @@ func TestLoadWithEventDispatch(t *testing.T) {
                return mm, nil
        })
 
-       configPostProcessorName := "TestLoadWithEventDispatch"
-       extension.SetConfigPostProcessor(configPostProcessorName, 
CustomEvent{t})
+       configLoadProcessorName := "TestLoadWithEventDispatch"
+       extension.SetConfigLoadProcessor(configLoadProcessorName, 
CustomEvent{t})
 
        Load()
 
@@ -189,7 +200,12 @@ func TestLoadWithEventDispatch(t *testing.T) {
        err := common.ServiceMap.UnRegister("com.MockService", "mock",
                common.ServiceKey("com.MockService", "huadong_idc", "1.0.0"))
        assert.Nil(t, err)
-       extension.RemoveConfigPostProcessor(configPostProcessorName)
+       extension.RemoveConfigLoadProcessor(configLoadProcessorName)
+       assert.Less(t, 0, len(extension.GetReferenceURL()))
+       assert.Less(t, 0, len(extension.GetServiceURL()))
+       extension.ResetURL()
+       assert.Equal(t, 0, len(extension.GetReferenceURL()))
+       assert.Equal(t, 0, len(extension.GetServiceURL()))
        consumerConfig = nil
        providerConfig = nil
 }
diff --git a/config/graceful_shutdown.go b/config/graceful_shutdown.go
index f8f29c2..c2c166d 100644
--- a/config/graceful_shutdown.go
+++ b/config/graceful_shutdown.go
@@ -67,7 +67,7 @@ func GracefulShutdownInit() {
                        // gracefulShutdownOnce.Do(func() {
                        time.AfterFunc(totalTimeout(), func() {
                                logger.Warn("Shutdown gracefully timeout, 
application will shutdown immediately. ")
-                               postBeforeShutdown()
+                               extension.BeforeShutdown()
                                os.Exit(0)
                        })
                        BeforeShutdown()
@@ -77,7 +77,7 @@ func GracefulShutdownInit() {
                                        debug.WriteHeapDump(os.Stdout.Fd())
                                }
                        }
-                       postBeforeShutdown()
+                       extension.BeforeShutdown()
                        os.Exit(0)
                }
        }()
@@ -225,9 +225,3 @@ func getConsumerProtocols() *gxset.HashSet {
        }
        return result
 }
-
-func postBeforeShutdown() {
-       for _, p := range extension.GetConfigPostProcessors() {
-               p.BeforeShutdown()
-       }
-}
diff --git a/config/interfaces/config_load_processor.go 
b/config/interfaces/config_load_processor.go
new file mode 100644
index 0000000..19c54b0
--- /dev/null
+++ b/config/interfaces/config_load_processor.go
@@ -0,0 +1,56 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You 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 interfaces
+
+import (
+       "sync"
+)
+
+import (
+       "github.com/apache/dubbo-go/common"
+)
+
+// ConfigLoadProcessor is an extension to give users a chance to customize 
configs against ReferenceConfig and
+// ServiceConfig during deployment time.
+type ConfigLoadProcessor interface {
+       // LoadProcessReferenceConfig customizes ReferenceConfig's params.
+       // LoadProcessReferenceConfig emits on refer reference (event: 
before-reference-connect, reference-connect-success, reference-connect-fail)
+       LoadProcessReferenceConfig(url *common.URL, event string, errMsg 
*string)
+
+       // LoadProcessServiceConfig customizes ServiceConfig's params.
+       // LoadProcessServiceConfig emits on export service (event: 
before-service-listen, service-listen-success, service-listen-fail)
+       LoadProcessServiceConfig(url *common.URL, event string, errMsg *string)
+
+       // AfterAllReferencesConnectComplete emits on all references export 
complete
+       AfterAllReferencesConnectComplete(urls ConfigLoadProcessorURLBinder)
+
+       // AfterAllServicesListenComplete emits on all services export complete
+       AfterAllServicesListenComplete(urls ConfigLoadProcessorURLBinder)
+
+       // BeforeShutdown emits on before shutdown
+       BeforeShutdown()
+}
+
+type ConfigLoadProcessorHolder struct {
+       sync.Mutex
+}
+
+type ConfigLoadProcessorURLBinder struct {
+       Success []*common.URL
+       Fail    []*common.URL
+}
diff --git a/config/interfaces/config_post_processor.go 
b/config/interfaces/config_post_processor.go
index 4578c59..53dd717 100644
--- a/config/interfaces/config_post_processor.go
+++ b/config/interfaces/config_post_processor.go
@@ -25,19 +25,8 @@ import (
 // ServiceConfig during deployment time.
 type ConfigPostProcessor interface {
        // PostProcessReferenceConfig customizes ReferenceConfig's params.
-       // PostProcessReferenceConfig emit on refer reference (event: 
before-reference-connect, reference-connect-success, reference-connect-fail)
-       PostProcessReferenceConfig(url *common.URL, event string, errMsg 
*string)
+       PostProcessReferenceConfig(*common.URL)
 
        // PostProcessServiceConfig customizes ServiceConfig's params.
-       // PostProcessServiceConfig emit on export service (event: 
before-service-listen, service-listen-success, service-listen-fail)
-       PostProcessServiceConfig(url *common.URL, event string, errMsg *string)
-
-       // AllReferencesConnectComplete emit on all references export complete
-       AllReferencesConnectComplete()
-
-       // AllServicesListenComplete emit on all services export complete
-       AllServicesListenComplete()
-
-       // BeforeShutdown emit on before shutdown
-       BeforeShutdown()
+       PostProcessServiceConfig(*common.URL)
 }
diff --git a/config/reference_config.go b/config/reference_config.go
index eb35ee3..97ac688 100644
--- a/config/reference_config.go
+++ b/config/reference_config.go
@@ -101,7 +101,8 @@ func (c *ReferenceConfig) Refer(_ interface{}) {
        if c.ForceTag {
                cfgURL.AddParam(constant.ForceUseTag, "true")
        }
-       c.postProcessConfig(cfgURL, constant.HookEventBeforeReferenceConnect, 
nil)
+       c.loadProcessConfig(cfgURL, constant.HookEventBeforeReferenceConnect, 
nil)
+       c.postProcessConfig(cfgURL)
        if c.URL != "" {
                // 1. user specified URL, could be peer-to-peer address, or 
register center's address.
                urlStrings := gxstrings.RegSplit(c.URL, "\\s*[;]+\\s*")
@@ -302,12 +303,17 @@ func publishConsumerDefinition(url *common.URL) {
 }
 
 // postProcessConfig asks registered ConfigPostProcessor to post-process the 
current ReferenceConfig.
-func (c *ReferenceConfig) postProcessConfig(url *common.URL, event string, 
errMsg *string) {
+func (c *ReferenceConfig) postProcessConfig(url *common.URL) {
        for _, p := range extension.GetConfigPostProcessors() {
-               p.PostProcessReferenceConfig(url, event, errMsg)
+               p.PostProcessReferenceConfig(url)
        }
 }
 
+// loadProcessConfig asks registered ConfigLoadProcessor to post-process the 
current ReferenceConfig.
+func (c *ReferenceConfig) loadProcessConfig(url *common.URL, event string, 
errMsg *string) {
+       extension.LoadProcessReferenceConfig(url, event, errMsg)
+}
+
 func (c *ReferenceConfig) getValidURL() *common.URL {
        urls := c.urls
        var u *common.URL
@@ -319,9 +325,3 @@ func (c *ReferenceConfig) getValidURL() *common.URL {
        }
        return u
 }
-
-func postAllConsumersConnectComplete() {
-       for _, p := range extension.GetConfigPostProcessors() {
-               p.AllReferencesConnectComplete()
-       }
-}
diff --git a/config/service_config.go b/config/service_config.go
index dc4902e..4452fef 100644
--- a/config/service_config.go
+++ b/config/service_config.go
@@ -203,7 +203,8 @@ func (c *ServiceConfig) Export() error {
                }
 
                // post process the URL to be exported
-               c.postProcessConfig(ivkURL, 
constant.HookEventBeforeProviderConnect, nil)
+               c.loadProcessConfig(ivkURL, 
constant.HookEventBeforeServiceListen, nil)
+               c.postProcessConfig(ivkURL)
                // config post processor may set "export" to false
                if !ivkURL.GetParamBool(constant.EXPORT_KEY, true) {
                        return nil
@@ -355,12 +356,17 @@ func publishServiceDefinition(url *common.URL) {
 }
 
 // postProcessConfig asks registered ConfigPostProcessor to post-process the 
current ServiceConfig.
-func (c *ServiceConfig) postProcessConfig(url *common.URL, event string, 
errMsg *string) {
+func (c *ServiceConfig) postProcessConfig(url *common.URL) {
        for _, p := range extension.GetConfigPostProcessors() {
-               p.PostProcessServiceConfig(url, event, errMsg)
+               p.PostProcessServiceConfig(url)
        }
 }
 
+// loadProcessConfig asks registered ConfigLoadProcessor to post-process the 
current ServiceConfig.
+func (c *ServiceConfig) loadProcessConfig(url *common.URL, event string, 
errMsg *string) {
+       extension.LoadProcessServiceConfig(url, event, errMsg)
+}
+
 func (c *ServiceConfig) getValidURL() *common.URL {
        urls := c.GetExportedUrls()
        var u *common.URL
@@ -372,9 +378,3 @@ func (c *ServiceConfig) getValidURL() *common.URL {
        }
        return u
 }
-
-func postAllProvidersConnectComplete() {
-       for _, p := range extension.GetConfigPostProcessors() {
-               p.AllServicesListenComplete()
-       }
-}

Reply via email to