code: func (s *Store) ServiceTagNodes(ws memdb.WatchSet, service string, tags []string) (uint64, structs.ServiceNodes, error) {
  	tx := s.db.Txn(false)
  	defer tx.Abort()
  
  	// List all the services.
  	services, err := tx.Get("services", "service", service)
  	if err != nil {
  		return 0, nil, fmt.Errorf("failed service lookup: %s", err)
  	}
  	ws.Add(services.WatchCh())
  
  	// Gather all the services and apply the tag filter.
  	serviceExists := false
  	var results structs.ServiceNodes
  	for service := services.Next(); service != nil; service = services.Next() {
  		svc := service.(*structs.ServiceNode)
  		serviceExists = true
  		if !serviceTagsFilter(svc, tags) {
  			results = append(results, svc)
  		}
  	}
  
  	// Fill in the node details.
  	results, err = s.parseServiceNodes(tx, ws, results)
  	if err != nil {
  		return 0, nil, fmt.Errorf("failed parsing service nodes: %s", err)
  	}
  	// Get the table index.
  	idx := maxIndexForService(tx, service, serviceExists, false)
  
  	return idx, results, nil
  }
docs: // ServiceTagNodes returns the nodes associated with a given service, filtering
  // out services that don't contain the given tags.