code: func (e *engineImpl) GetVisibleJobBatch(c context.Context, jobIDs []string) (map[string]*Job, error) {
  	// TODO(vadimsh): This can be parallelized to be single GetMulti RPC to fetch
  	// jobs and single filterForRole to check ACLs. In practice O(len(jobIDs)) is
  	// small, so there's no pressing need to do this.
  	visible := make(map[string]*Job, len(jobIDs))
  	for _, id := range jobIDs {
  		switch job, err := e.GetVisibleJob(c, id); {
  		case err == nil:
  			visible[id] = job
  		case err != ErrNoSuchJob:
  			return nil, err
  		}
  	}
  	return visible, nil
  }
docs: // GetVisibleJobBatch is like GetVisibleJob, except it operates on a batch of
  // jobs at once.
  //
  // Part of the public interface.
  //
  // Part of the public interface, checks ACLs.