VOL-1283: Fixed callback execution consistency for all proxy levels

- Callbacks are executed at any proxy levels
- Uncovered some issues with the base children fields structure
- cleaned up the root/node structures
- Ensure that a get command returns a clone.

Change-Id: Ic2cd5420c29332bd9b5d6f303a7fd9d0d0ccaf06
diff --git a/db/model/event_bus.go b/db/model/event_bus.go
index c4dfbdc..aaeb7ac 100644
--- a/db/model/event_bus.go
+++ b/db/model/event_bus.go
@@ -17,6 +17,7 @@
 
 import (
 	"encoding/json"
+	"github.com/golang/protobuf/proto"
 	"github.com/opencord/voltha-go/common/log"
 	"github.com/opencord/voltha-go/protos/voltha"
 )
@@ -47,11 +48,11 @@
 //func (bus *EventBus) Advertise(eventType CallbackType, data interface{}, hash string) {
 func (bus *EventBus) Advertise(args ...interface{}) interface{} {
 	eventType := args[0].(CallbackType)
-	data := args[1]
-	hash := args[2].(string)
+	hash := args[1].(string)
+	data := args[2:]
 
 	if _, ok := IGNORED_CALLBACKS[eventType]; ok {
-		log.Debugf("ignoring event - type:%s, data:%+v\n", eventType, data)
+		log.Debugf("ignoring event - type:%s, data:%+v", eventType, data)
 	}
 	var kind voltha.ConfigEventType_ConfigEventType
 	switch eventType {
@@ -66,11 +67,15 @@
 	var msg []byte
 	var err error
 	if IsProtoMessage(data) {
-		if msg, err = json.Marshal(data); err != nil {
-			log.Errorf("problem marshalling data: %+v, err:%s\n", data, err.Error())
+		if msg, err = proto.Marshal(data[0].(proto.Message)); err != nil {
+			log.Errorf("problem marshalling proto data: %+v, err:%s", data[0], err.Error())
+		}
+	} else if data[0] != nil {
+		if msg, err = json.Marshal(data[0]); err != nil {
+			log.Errorf("problem marshalling json data: %+v, err:%s", data[0], err.Error())
 		}
 	} else {
-		msg = data.([]byte)
+		log.Errorf("no data to advertise : %+v", data[0])
 	}
 
 	event := voltha.ConfigEvent{