[VOL-4514] Addressing device reconciliation failure
See comments on https://jira.opencord.org/browse/VOL-4514
This change is dependent on the related proto and voltha lib go
changes to be merged first. Until then jenkins will fail.
Change-Id: I8d99c3619d630677d402b9fb4b4f0bc22dd9a9f0
diff --git a/rw_core/core/adapter/agent.go b/rw_core/core/adapter/agent.go
index c164826..d030e72 100644
--- a/rw_core/core/adapter/agent.go
+++ b/rw_core/core/adapter/agent.go
@@ -22,10 +22,10 @@
"sync"
"time"
- "github.com/golang/protobuf/ptypes/empty"
vgrpc "github.com/opencord/voltha-lib-go/v7/pkg/grpc"
"github.com/opencord/voltha-lib-go/v7/pkg/log"
"github.com/opencord/voltha-protos/v5/go/adapter_service"
+ "github.com/opencord/voltha-protos/v5/go/common"
"github.com/opencord/voltha-protos/v5/go/health"
"github.com/opencord/voltha-protos/v5/go/voltha"
"google.golang.org/grpc"
@@ -40,32 +40,35 @@
adapterLock sync.RWMutex
onAdapterRestart vgrpc.RestartedHandler
liveProbeInterval time.Duration
+ coreEndpoint string
}
-func setAndTestAdapterServiceHandler(ctx context.Context, conn *grpc.ClientConn) interface{} {
+func setAndTestAdapterServiceHandler(ctx context.Context, conn *grpc.ClientConn, clientConn *common.Connection) interface{} {
svc := adapter_service.NewAdapterServiceClient(conn)
- if h, err := svc.GetHealthStatus(ctx, &empty.Empty{}); err != nil || h.State != health.HealthStatus_HEALTHY {
- logger.Debugw(ctx, "connection-not-ready", log.Fields{"error": err, "health": h})
+ if h, err := svc.GetHealthStatus(ctx, clientConn); err != nil || h.State != health.HealthStatus_HEALTHY {
+ logger.Debugw(ctx, "remote-connection-not-ready", log.Fields{"error": err, "health": h, "requester": clientConn, "target": conn.Target()})
return nil
}
return svc
}
-func newAdapterAgent(adapter *voltha.Adapter, onAdapterRestart vgrpc.RestartedHandler, liveProbeInterval time.Duration) *agent {
+func newAdapterAgent(coreEndpoint string, adapter *voltha.Adapter, onAdapterRestart vgrpc.RestartedHandler, liveProbeInterval time.Duration) *agent {
return &agent{
adapter: adapter,
onAdapterRestart: onAdapterRestart,
adapterAPIEndPoint: adapter.Endpoint,
liveProbeInterval: liveProbeInterval,
+ coreEndpoint: coreEndpoint,
}
}
func (aa *agent) start(ctx context.Context) error {
// Establish grpc connection to Core
var err error
- if aa.vClient, err = vgrpc.NewClient(aa.adapterAPIEndPoint,
- aa.onAdapterRestart,
- vgrpc.ActivityCheck(true)); err != nil {
+ if aa.vClient, err = vgrpc.NewClient(
+ aa.coreEndpoint,
+ aa.adapterAPIEndPoint,
+ aa.onAdapterRestart); err != nil {
return err
}
diff --git a/rw_core/core/adapter/manager.go b/rw_core/core/adapter/manager.go
index 790a670..258ff2a 100644
--- a/rw_core/core/adapter/manager.go
+++ b/rw_core/core/adapter/manager.go
@@ -52,6 +52,7 @@
lockDeviceTypesMap sync.RWMutex
lockAdapterEndPointsMap sync.RWMutex
liveProbeInterval time.Duration
+ coreEndpoint string
}
// SetAdapterRestartedCallback is used to set the callback that needs to be invoked on an adapter restart
@@ -60,6 +61,7 @@
}
func NewAdapterManager(
+ coreEndpoint string,
dbPath *model.Path,
coreInstanceID string,
backend *db.Backend,
@@ -73,6 +75,7 @@
adapterEndpoints: make(map[Endpoint]*agent),
endpointMgr: NewEndpointManager(backend),
liveProbeInterval: liveProbeInterval,
+ coreEndpoint: coreEndpoint,
}
}
@@ -178,7 +181,7 @@
// Use a muted adapter restart handler which is invoked by the corresponding gRPC client on an adapter restart.
// This handler just log the restart event. The actual action taken following an adapter restart
// will be done when an adapter re-registers itself.
- aMgr.adapterAgents[adapter.Id] = newAdapterAgent(clonedAdapter, aMgr.mutedAdapterRestartedHandler, aMgr.liveProbeInterval)
+ aMgr.adapterAgents[adapter.Id] = newAdapterAgent(aMgr.coreEndpoint, clonedAdapter, aMgr.mutedAdapterRestartedHandler, aMgr.liveProbeInterval)
aMgr.adapterEndpoints[Endpoint(adapter.Endpoint)] = aMgr.adapterAgents[adapter.Id]
}
return nil