Skip to content

Commit

Permalink
Merge pull request #1678 from jinlinGuan/issue-1677
Browse files Browse the repository at this point in the history
fix: Add core-metadata dependency check
  • Loading branch information
cloudxxx8 authored Jan 17, 2025
2 parents 6b36588 + f602b1d commit ef783ae
Show file tree
Hide file tree
Showing 3 changed files with 80 additions and 39 deletions.
20 changes: 10 additions & 10 deletions go.mod
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ go 1.23

require (
github.com/OneOfOne/xxhash v1.2.8
github.com/edgexfoundry/go-mod-bootstrap/v4 v4.0.0-dev.19
github.com/edgexfoundry/go-mod-bootstrap/v4 v4.0.0-dev.20
github.com/edgexfoundry/go-mod-core-contracts/v4 v4.0.0-dev.22
github.com/edgexfoundry/go-mod-messaging/v4 v4.0.0-dev.10
github.com/google/uuid v1.6.0
Expand Down Expand Up @@ -80,14 +80,14 @@ require (
github.com/nats-io/nuid v1.0.1 // indirect
github.com/oklog/ulid v1.3.1 // indirect
github.com/opentracing/opentracing-go v1.2.0 // indirect
github.com/openziti/channel/v3 v3.0.4 // indirect
github.com/openziti/edge-api v0.26.34 // indirect
github.com/openziti/foundation/v2 v2.0.49 // indirect
github.com/openziti/identity v1.0.85 // indirect
github.com/openziti/metrics v1.2.58 // indirect
github.com/openziti/sdk-golang v0.23.44 // indirect
github.com/openziti/secretstream v0.1.25 // indirect
github.com/openziti/transport/v2 v2.0.146 // indirect
github.com/openziti/channel/v3 v3.0.26 // indirect
github.com/openziti/edge-api v0.26.36 // indirect
github.com/openziti/foundation/v2 v2.0.56 // indirect
github.com/openziti/identity v1.0.94 // indirect
github.com/openziti/metrics v1.2.65 // indirect
github.com/openziti/sdk-golang v0.23.45 // indirect
github.com/openziti/secretstream v0.1.28 // indirect
github.com/openziti/transport/v2 v2.0.159 // indirect
github.com/orcaman/concurrent-map/v2 v2.0.1 // indirect
github.com/parallaxsecond/parsec-client-go v0.0.0-20221025095442-f0a77d263cf9 // indirect
github.com/pkg/errors v0.9.1 // indirect
Expand Down Expand Up @@ -122,7 +122,7 @@ require (
golang.org/x/time v0.8.0 // indirect
google.golang.org/genproto/googleapis/rpc v0.0.0-20240814211410-ddb44dafa142 // indirect
google.golang.org/grpc v1.67.1 // indirect
google.golang.org/protobuf v1.34.2 // indirect
google.golang.org/protobuf v1.36.2 // indirect
gopkg.in/go-jose/go-jose.v2 v2.6.3 // indirect
nhooyr.io/websocket v1.8.17 // indirect
)
40 changes: 20 additions & 20 deletions go.sum
Original file line number Diff line number Diff line change
Expand Up @@ -70,8 +70,8 @@ github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc h1:U9qPSI2PIWSS1
github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
github.com/eclipse/paho.mqtt.golang v1.5.0 h1:EH+bUVJNgttidWFkLLVKaQPGmkTUfQQqjOsyvMGvD6o=
github.com/eclipse/paho.mqtt.golang v1.5.0/go.mod h1:du/2qNQVqJf/Sqs4MEL77kR8QTqANF7XU7Fk0aOTAgk=
github.com/edgexfoundry/go-mod-bootstrap/v4 v4.0.0-dev.19 h1:BEebSP3P3Y6kGMxs2dk8vj8g43CFoxsFJNHRUjeszuI=
github.com/edgexfoundry/go-mod-bootstrap/v4 v4.0.0-dev.19/go.mod h1:/70YQdZazwvjC5oSBcH0uKN4bTcmIH9e9JHaK1ixuCc=
github.com/edgexfoundry/go-mod-bootstrap/v4 v4.0.0-dev.20 h1:nijx+kCDRIFOBuWcPtGMoxNwmjF5U6Cacun6z85fh+Q=
github.com/edgexfoundry/go-mod-bootstrap/v4 v4.0.0-dev.20/go.mod h1:OBvLqNUh/8TzbTLVmlBDDI/MSXV2N3pNuJNlPs2LIWc=
github.com/edgexfoundry/go-mod-configuration/v4 v4.0.0-dev.10 h1:DMv5LZDxcqUeb1dREMd/vK+reXmZYlpafgtm8XhYdHQ=
github.com/edgexfoundry/go-mod-configuration/v4 v4.0.0-dev.10/go.mod h1:ltUpMcOpJSzmabBtZox5qg1AK2wEikvZJyIBXtJ7mUQ=
github.com/edgexfoundry/go-mod-core-contracts/v4 v4.0.0-dev.22 h1:XzDtbAmvp/v+DZlFoSgttnUQsIXGhlf+H8xgGxBClUA=
Expand Down Expand Up @@ -361,22 +361,22 @@ github.com/onsi/gomega v1.13.0 h1:7lLHu94wT9Ij0o6EWWclhu0aOh32VxhkwEJvzuWPeak=
github.com/onsi/gomega v1.13.0/go.mod h1:lRk9szgn8TxENtWd0Tp4c3wjlRfMTMH27I+3Je41yGY=
github.com/opentracing/opentracing-go v1.2.0 h1:uEJPy/1a5RIPAJ0Ov+OIO8OxWu77jEv+1B0VhjKrZUs=
github.com/opentracing/opentracing-go v1.2.0/go.mod h1:GxEUsuufX4nBwe+T+Wl9TAgYrxe9dPLANfrWvHYVTgc=
github.com/openziti/channel/v3 v3.0.4 h1:1A2HH9fVT5xq3G2Fy20L/5ZbpmFzbXfY7CEq6vQnbI0=
github.com/openziti/channel/v3 v3.0.4/go.mod h1:MiVIlcPpcErv8E/TLDpxWNV1fGh8lb0g7qMlQGFYTec=
github.com/openziti/edge-api v0.26.34 h1:73OcSpEeE2pdLKxPH2cGwDi8YcROWRGJfR+BAFRPGIE=
github.com/openziti/edge-api v0.26.34/go.mod h1:sYHVpm26Jr1u7VooNJzTb2b2nGSlmCHMnbGC8XfWSng=
github.com/openziti/foundation/v2 v2.0.49 h1:aQ5I/lMhkHQ6urhRpLwrWP+7YtoeUitCfY/wub+nOqo=
github.com/openziti/foundation/v2 v2.0.49/go.mod h1:tFk7wg5WE/nDDur5jSVQTROugKDXQkFvmqRSV4pvWp0=
github.com/openziti/identity v1.0.85 h1:jphDHrUCXCJGdbVTMBqsdtS0Ei/vhDH337DMNMYzLro=
github.com/openziti/identity v1.0.85/go.mod h1:beIXWNDImEjZn93XPOorJzyuQCQUYOvKFQ0fWhLN2qM=
github.com/openziti/metrics v1.2.58 h1:AbHSTMKHP/o6r6fh7a08c486Y/5f5xjkZQbcyn3w1tM=
github.com/openziti/metrics v1.2.58/go.mod h1:zGLMrLvVFOxo9tXUf8svcUsASxsPjhW9foW92FUzmDs=
github.com/openziti/sdk-golang v0.23.44 h1:TzRO8dz6aAO2g0IXsKC6PvmT+cYyJpw2oJRUqhnPeCA=
github.com/openziti/sdk-golang v0.23.44/go.mod h1:tJ8KXdqWRfAEekvbo/vJsN2PYydbPK/Gh2rAcc65+qE=
github.com/openziti/secretstream v0.1.25 h1:40gHKcAcoXqKs0J7Tz1jTAmPoMXmMn4HP3Mg6scgJ5c=
github.com/openziti/secretstream v0.1.25/go.mod h1:zgBcyN7h/zLBIWeqSrWwlOGOMQW51oQGYYlkiArR6Ec=
github.com/openziti/transport/v2 v2.0.146 h1:Wdr4udri/fFpdj9GR9DR7/FKqt/2cMTgBdt3gfrqFaQ=
github.com/openziti/transport/v2 v2.0.146/go.mod h1:ULrJdwxs0sKmjAhen9Vk9E+Do4qpdDdx1YJeVVu3bZ4=
github.com/openziti/channel/v3 v3.0.26 h1:KVMOpqA8teIUcjG8u21pg8iI1YOjaY/SQyWWozWfXpA=
github.com/openziti/channel/v3 v3.0.26/go.mod h1:o5/tWvfHgEzVBqdl8WBHFJNc7m8zHcCb3S5ymocDZEk=
github.com/openziti/edge-api v0.26.36 h1:zy2DjmIz/B+WxPpIzhFOAxi/LhM/yeKa8s1Vz2h8cQk=
github.com/openziti/edge-api v0.26.36/go.mod h1:sYHVpm26Jr1u7VooNJzTb2b2nGSlmCHMnbGC8XfWSng=
github.com/openziti/foundation/v2 v2.0.56 h1:YXqBmkrN0fYr3TqIlWZSZGluE2QpJxlA29Z6okZyQ5I=
github.com/openziti/foundation/v2 v2.0.56/go.mod h1:f12R1pwEod348qONZr6esZgackX1ScLGDcEyPF2G5/w=
github.com/openziti/identity v1.0.94 h1:nF4etu/5LmOlbT24lpSKq9p+90A9jeyLr5U23LemgD4=
github.com/openziti/identity v1.0.94/go.mod h1:3VGYqa9E26zPPA8lJwE7eUPvRH2Oz8ZAd46cUCWKz/M=
github.com/openziti/metrics v1.2.65 h1:Jhhbds+BUbywfspxcb9oyz9p9LI/oERT9lbeDpnNpmY=
github.com/openziti/metrics v1.2.65/go.mod h1:GJObRZX05cxCs23mrsEA9fT9Vk5pbXA6/FkUaslVi8k=
github.com/openziti/sdk-golang v0.23.45 h1:6rH1GxKUs71lhMc2MXC2tralimi+YD6cpi0ojSr9YCg=
github.com/openziti/sdk-golang v0.23.45/go.mod h1:anMPCyFB1i25ZiOG8zepx6rNjNvUQk/jTtWSKIOq9uc=
github.com/openziti/secretstream v0.1.28 h1:D+a5TcvbY3i7HOIecoTL0Pq8HJGnJqS0XmUyO1ohObg=
github.com/openziti/secretstream v0.1.28/go.mod h1:BESAWnpyIr9A+ditH4vk15ZVsnP8zdy6vGi8Qr1lgAg=
github.com/openziti/transport/v2 v2.0.159 h1:Ol6vTrXWJdkfRLWYI2hjDTeH2Ji0cYC26UuPnBylALg=
github.com/openziti/transport/v2 v2.0.159/go.mod h1:Hw4TIlDd97D5m8BrlxTZ3bqO01+hwddTDMSOOzz/4cs=
github.com/orcaman/concurrent-map/v2 v2.0.1 h1:jOJ5Pg2w1oeB6PeDurIYf6k9PQ+aTITr/6lP/L/zp6c=
github.com/orcaman/concurrent-map/v2 v2.0.1/go.mod h1:9Eq3TG2oBe5FirmYWQfYO5iH1q0Jv47PLaNK++uCdOM=
github.com/panjf2000/ants/v2 v2.11.0 h1:sHrqEwTBQTQ2w6PMvbMfvBtVUuhsaYPzUmAYDLYmJPg=
Expand Down Expand Up @@ -854,8 +854,8 @@ google.golang.org/protobuf v1.24.0/go.mod h1:r/3tXBNzIEhYS9I1OUVjXDlt8tc493IdKGj
google.golang.org/protobuf v1.25.0/go.mod h1:9JNX74DMeImyA3h4bdi1ymwjUzf21/xIlbajtzgsN7c=
google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw=
google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc=
google.golang.org/protobuf v1.34.2 h1:6xV6lTsCfpGD21XK49h7MhtcApnLqkfYgPcdHftf6hg=
google.golang.org/protobuf v1.34.2/go.mod h1:qYOHts0dSfpeUzUFpOMr/WGzszTmLH+DiWniOlNbLDw=
google.golang.org/protobuf v1.36.2 h1:R8FeyR1/eLmkutZOM5CWghmo5itiG9z0ktFlTVLuTmU=
google.golang.org/protobuf v1.36.2/go.mod h1:9fA7Ob0pmnwhb644+1+CVWFRbNajQ6iRojtC/QF5bRE=
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
gopkg.in/check.v1 v1.0.0-20200902074654-038fdea0a05b/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
Expand Down
59 changes: 50 additions & 9 deletions pkg/service/init.go
Original file line number Diff line number Diff line change
Expand Up @@ -8,18 +8,21 @@ package service

import (
"context"
"net/http"
"sync"

"github.com/edgexfoundry/go-mod-core-contracts/v4/common"

bootstrapContainer "github.com/edgexfoundry/go-mod-bootstrap/v4/bootstrap/container"
"github.com/edgexfoundry/go-mod-bootstrap/v4/bootstrap/controller"
"github.com/edgexfoundry/go-mod-bootstrap/v4/bootstrap/handlers"
"github.com/edgexfoundry/go-mod-bootstrap/v4/bootstrap/startup"
"github.com/edgexfoundry/go-mod-bootstrap/v4/di"

"github.com/edgexfoundry/device-sdk-go/v4/internal/cache"
"github.com/edgexfoundry/device-sdk-go/v4/internal/common"
sdkCommon "github.com/edgexfoundry/device-sdk-go/v4/internal/common"
"github.com/edgexfoundry/device-sdk-go/v4/internal/container"
"github.com/edgexfoundry/device-sdk-go/v4/internal/controller/http"
restController "github.com/edgexfoundry/device-sdk-go/v4/internal/controller/http"
"github.com/edgexfoundry/device-sdk-go/v4/internal/controller/messaging"
"github.com/edgexfoundry/device-sdk-go/v4/internal/provision"
"github.com/edgexfoundry/device-sdk-go/v4/pkg/models"
Expand All @@ -41,19 +44,18 @@ func NewBootstrap(ds *deviceService, router *echo.Echo) *Bootstrap {
}
}

func (b *Bootstrap) BootstrapHandler(ctx context.Context, wg *sync.WaitGroup, _ startup.Timer, dic *di.Container) (success bool) {
func (b *Bootstrap) BootstrapHandler(ctx context.Context, wg *sync.WaitGroup, startupTimer startup.Timer, dic *di.Container) (success bool) {
s := b.deviceService
s.wg = wg
s.ctx = ctx
s.lc = bootstrapContainer.LoggingClientFrom(dic.Get)
s.autoEventManager = container.AutoEventManagerFrom(dic.Get)
s.commonController = controller.NewCommonController(dic, b.router, s.serviceKey, common.ServiceVersion)
s.commonController.SetSDKVersion(common.SDKVersion)
s.controller = http.NewRestController(b.router, dic, s.serviceKey)
s.commonController = controller.NewCommonController(dic, b.router, s.serviceKey, sdkCommon.ServiceVersion)
s.commonController.SetSDKVersion(sdkCommon.SDKVersion)
s.controller = restController.NewRestController(b.router, dic, s.serviceKey)
s.controller.InitRestRoutes(dic)

if bootstrapContainer.DeviceClientFrom(dic.Get) == nil {
s.lc.Error("Client configuration for core-metadata not found, missing common config? Use -cp or -cc flags for common config.")
if !b.checkDependencyServiceAvailable(common.CoreMetaDataServiceKey, startupTimer) {
return false
}

Expand Down Expand Up @@ -127,7 +129,46 @@ func (b *Bootstrap) BootstrapHandler(ctx context.Context, wg *sync.WaitGroup, _

// Very important that this bootstrap handler is called after the NewServiceMetrics handler so
// MetricsManager dependency has been created.
common.InitializeSentMetrics(s.lc, dic)
sdkCommon.InitializeSentMetrics(s.lc, dic)
return true
}

func (b *Bootstrap) checkDependencyServiceAvailable(serviceKey string, startupTimer startup.Timer) bool {
lc := b.deviceService.lc
registry := bootstrapContainer.RegistryFrom(b.deviceService.dic.Get)
mode := bootstrapContainer.DevRemoteModeFrom(b.deviceService.dic.Get)
clients := bootstrapContainer.ConfigurationFrom(b.deviceService.dic.Get).GetBootstrap().Clients
clientInfo, ok := (*clients)[serviceKey]
if !ok {
lc.Errorf("Client configuration for '%s' not found, missing common config? Use -cp or -cc flags for common config.", serviceKey)
return false
}
pingUrl := clientInfo.Url() + common.ApiPingRoute

var err error
for startupTimer.HasNotElapsed() {
if registry == nil || mode.InDevMode || mode.InRemoteMode {
lc.Debugf("Check service '%s' availability by Ping", serviceKey)
client := &http.Client{}
_, err = client.Get(pingUrl)
} else {
lc.Debugf("Check service '%s' availability via Registry", serviceKey)
_, err = registry.IsServiceAvailable(serviceKey)
}
if err == nil {
break
}
lc.Warnf("Check service '%s' availability failed: %s. retrying...", serviceKey, err.Error())
startupTimer.SleepForInterval()
}

if err != nil {
lc.Errorf("Check service '%s' availability time out: %s", serviceKey, err.Error())
return false
}

lc.Infof("Check service '%s' availability succeeded", serviceKey)

return true
}

Expand Down

0 comments on commit ef783ae

Please sign in to comment.