code: @Override
    public Collection<HiveDatasetVersion> findDatasetVersions(Dataset dataset) throws IOException {
      if (!(dataset instanceof HiveDataset)) {
        throw new IllegalArgumentException("HiveDatasetVersionFinder is only compatible with HiveDataset");
      }
      final HiveDataset hiveDataset = (HiveDataset) dataset;
  
      if (!HiveUtils.isPartitioned(hiveDataset.getTable())) {
        throw new IllegalArgumentException("HiveDatasetVersionFinder is only compatible with partitioned hive tables");
      }
  
      try (AutoReturnableObject<IMetaStoreClient> client = hiveDataset.getClientPool().getClient()) {
  
        List<Partition> partitions = HiveUtils.getPartitions(client.get(), hiveDataset.getTable(), Optional.<String> absent());
        return Lists.newArrayList(Iterables.filter(Iterables.transform(partitions, new Function<Partition, HiveDatasetVersion>() {
  
          @Override
          public HiveDatasetVersion apply(Partition partition) {
            try {
              return getDatasetVersion(partition);
            } catch (Throwable e) {
              log.warn(String.format("Failed to get DatasetVersion %s. Skipping.", partition.getCompleteName()), e);
              return null;
            }
          }
        }), Predicates.notNull()));
      }
    }
docs: Create {@link HiveDatasetVersion}s for all {@link Partition}s of a {@link HiveDataset}.
  Calls {@link #getDatasetVersion(Partition)} for every {@link Partition} found.
  <p>
  Note: If an exception occurs while processing a partition, that partition will be ignored in the returned collection
  </p>
  
  @throws IllegalArgumentException if <code>dataset</code> is not a {@link HiveDataset}. Or if {@link HiveDataset#getTable()}
  is not partitioned.