| Index: common/api/dm/service/v1/ensure_graph_data_normalize.go | 
| diff --git a/common/api/dm/service/v1/ensure_graph_data_normalize.go b/common/api/dm/service/v1/ensure_graph_data_normalize.go | 
| index b6f21f70ee8fd43157eeabd858415f1d5becdd55..def39cd14d20265de1931d8e104a7626e595faca 100644 | 
| --- a/common/api/dm/service/v1/ensure_graph_data_normalize.go | 
| +++ b/common/api/dm/service/v1/ensure_graph_data_normalize.go | 
| @@ -20,15 +20,23 @@ func (t *TemplateInstantiation) Normalize() error { | 
|  | 
| // Normalize returns an error iff the request is invalid. | 
| func (r *EnsureGraphDataReq) Normalize() error { | 
| +	if r.ForExecution != nil { | 
| +		if err := r.ForExecution.Normalize(); err != nil { | 
| +			return err | 
| +		} | 
| +	} | 
| + | 
| if err := r.Attempts.Normalize(); err != nil { | 
| return err | 
| } | 
|  | 
| hasAttempts := false | 
| -	for _, nums := range r.Attempts.To { | 
| -		hasAttempts = true | 
| -		if len(nums.Nums) == 0 { | 
| -			return errors.New("EnsureGraphDataReq.attempts must only include valid (non-0, non-empty) attempt numbers") | 
| +	if r.Attempts != nil { | 
| +		for _, nums := range r.Attempts.To { | 
| +			hasAttempts = true | 
| +			if len(nums.Nums) == 0 { | 
| +				return errors.New("EnsureGraphDataReq.attempts must only include valid (non-0, non-empty) attempt numbers") | 
| +			} | 
| } | 
| } | 
|  | 
| @@ -50,6 +58,12 @@ func (r *EnsureGraphDataReq) Normalize() error { | 
| } | 
| } | 
|  | 
| +	for i, desc := range r.Quest { | 
| +		if err := desc.Normalize(); err != nil { | 
| +			return fmt.Errorf("quest[%d]: %s", i, err) | 
| +		} | 
| +	} | 
| + | 
| if len(r.Quest) == 0 && !hasAttempts { | 
| return errors.New("EnsureGraphDataReq must have at least one of quests and attempts") | 
| } | 
|  |