Github user ctubbsii commented on a diff in the pull request: https://github.com/apache/accumulo/pull/253#discussion_r129899084 --- Diff: server/base/src/main/java/org/apache/accumulo/server/fs/PreferredVolumeChooser.java --- @@ -39,73 +40,139 @@ /** * A {@link RandomVolumeChooser} that limits its choices from a given set of options to the subset of those options preferred for a particular table. Defaults - * to selecting from all of the options presented. Can be customized via the table property {@value #PREFERRED_VOLUMES_CUSTOM_KEY}, which should contain a comma + * to selecting from all of the options presented. Can be customized via the table property table.custom.preferredVolumes, which should contain a comma * separated list of {@link Volume} URIs. Note that both the property name and the format of its value are specific to this particular implementation. */ public class PreferredVolumeChooser extends RandomVolumeChooser { private static final Logger log = LoggerFactory.getLogger(PreferredVolumeChooser.class); - /** - * This should match {@link Property#TABLE_ARBITRARY_PROP_PREFIX} - */ - public static final String PREFERRED_VOLUMES_CUSTOM_KEY = "table.custom.preferredVolumes"; - // TODO ACCUMULO-3417 replace this with the ability to retrieve by String key. - private static final Predicate<String> PREFERRED_VOLUMES_FILTER = key -> PREFERRED_VOLUMES_CUSTOM_KEY.equals(key); + public static final String TABLE_PREFERRED_VOLUMES = Property.TABLE_ARBITRARY_PROP_PREFIX.getKey() + "preferred.volumes"; + + public static final String SCOPED_PREFERRED_VOLUMES(String scope) { + return Property.GENERAL_ARBITRARY_PROP_PREFIX.getKey() + scope + ".preferred.volumes"; + } + + public static final String DEFAULT_SCOPED_PREFERRED_VOLUMES = SCOPED_PREFERRED_VOLUMES("scoped"); @SuppressWarnings("unchecked") private final Map<String,Set<String>> parsedPreferredVolumes = Collections.synchronizedMap(new LRUMap(1000)); // TODO has to be lazily initialized currently because of the reliance on HdfsZooInstance. see ACCUMULO-3411 private volatile ServerConfigurationFactory serverConfs; @Override - public String choose(VolumeChooserEnvironment env, String[] options) { - if (!env.hasTableId()) + public String choose(VolumeChooserEnvironment env, String[] options) throws AccumuloException { + if (!env.hasTableId() && !env.hasScope()) { + // this should only happen during initialize + log.warn("No table id or scope, so it's not possible to determine preferred volumes. Using all volumes."); --- End diff -- Should this fail here instead?
--- If your project is set up for it, you can reply to this email and have your reply appear on GitHub as well. If your project does not have this feature enabled and wishes so, or if the feature is enabled but not working, please contact infrastructure at infrastruct...@apache.org or file a JIRA ticket with INFRA. ---