code: func (helper *CacheHelper) DoResync(resyncEv datasync.ResyncEvent) error {
  	var wasError error
  	//idx.Put()
  	ifaces, found := resyncEv.GetValues()[helper.Prefix]
  	if found {
  		// Step 1: fill the existing things
  		resyncNames := map[string]interface{}{}
  		for {
  			item, stop := ifaces.GetNext()
  			if stop {
  				break
  			}
  			ifaceName, err := helper.ParseName(item.GetKey())
  			if err != nil {
  				wasError = err
  			} else {
  				current := proto.Clone(helper.DataPrototype)
  				item.GetValue(current)
  				helper.IDX.Put(ifaceName, current)
  				resyncNames[ifaceName] = nil
  			}
  		}
  
  		// Step 2:
  		existingNames := []string{} //TODO
  		for _, existingName := range existingNames {
  			if _, found := resyncNames[existingName]; !found {
  				helper.IDX.Delete(existingName)
  			}
  		}
  	}
  	return wasError
  }
docs: // DoResync list keys&values in ResyncEvent and then:
  // - Put (for names that are part of ResyncEvent)
  // - Delete (for names that are not part of ResyncEvent)