Mandate that all MetricParts have valid default_encoding_ids

The 1.0 FIDL API depends on default encoding ids for deciding how to
encode MetricParts so mandate that all configs specify this value.

Change-Id: Ic835b2cfe0e429c611a7fbf183a4ae58ebede481
diff --git a/config/config_parser/src/config_validator/metrics.go b/config/config_parser/src/config_validator/metrics.go
index 6cc8724..e94e90f 100644
--- a/config/config_parser/src/config_validator/metrics.go
+++ b/config/config_parser/src/config_validator/metrics.go
@@ -20,9 +20,16 @@
 var validMetricPartName = regexp.MustCompile("^[a-zA-Z][_a-zA-Z0-9\\- ]+$")
 
 func validateConfiguredMetrics(config *config.CobaltConfig) (err error) {
+	// Set of encodingIds. Used to check that the Metric only refers to valid encodingIds.
+	encodingIds := map[string]bool{}
+
 	// Set of metric ids. Used to detect duplicates.
 	metricIds := map[string]bool{}
 
+	for _, encoding := range config.EncodingConfigs {
+		encodingIds[formatId(encoding.CustomerId, encoding.ProjectId, encoding.Id)] = true
+	}
+
 	for i, metric := range config.MetricConfigs {
 		metricKey := formatId(metric.CustomerId, metric.ProjectId, metric.Id)
 
@@ -31,14 +38,14 @@
 		}
 		metricIds[metricKey] = true
 
-		if err = validateMetric(metric); err != nil {
+		if err = validateMetric(metric, encodingIds); err != nil {
 			return fmt.Errorf("Error validating metric %v (%v, %v, %v): %v", metric.Name, metric.CustomerId, metric.ProjectId, metric.Id, err)
 		}
 	}
 	return nil
 }
 
-func validateMetric(m *config.Metric) (err error) {
+func validateMetric(m *config.Metric, encodingIds map[string]bool) (err error) {
 	if m.Id == 0 {
 		return fmt.Errorf("Metric id '0' is invalid.")
 	}
@@ -74,6 +81,11 @@
 		if !validMetricPartName.MatchString(name) {
 			return fmt.Errorf("Metric part name '%v' is invalid. Metric part names must match the regular expression '%v'.", name, validMetricPartName)
 		}
+
+		encodingId := formatId(m.CustomerId, m.ProjectId, v.DefaultEncodingId)
+		if !encodingIds[encodingId] {
+			return fmt.Errorf("Metric part '%v' is invalid. There is no encoding id %v.", name, encodingId)
+		}
 	}
 	return nil
 }
diff --git a/third_party/config b/third_party/config
index 2da4f62..c90a6a7 160000
--- a/third_party/config
+++ b/third_party/config
@@ -1 +1 @@
-Subproject commit 2da4f626c4097d1b3cfb818697c9c2f079f03284
+Subproject commit c90a6a7134e162dd8bd6ca629a45f53a436edd69