[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