Oplog queries require different metadata from heartbeats. There are fields that each need that the other doesn't, and there are fields that one should consider that the other should not. As we are defining the role that each of these commands play in the replication process, the metadata that each replication command carries must be clarified as well. We will now have ReplSetMetadata with $replData like we have now, but we will add in a new OplogQueryMetadata with $oplogQueryData. The OplogQueryMetadata can have the primaryIndex, the lastOpCommitted, the syncSourceIndex, the lastOpApplied, and the rbid from after the query. The OplogFetcher will then request both types of metadata. For backwards compatibility we need to keep ReplSetMetadata the same as it is now, but in the future (3.8) we can strip it down to term, configVersion, replsetID, and lastOpCommitted (as long as sharding needs it outside of oplog querying), to deduplicate the fields in OplogQueryMetadata only needed for oplog querying. We will keep having the OplogFetcher request both types of metadata since it needs fields from both. We are only removing fields that other commands like heartbeating do not need.