@Override public void removeIterator(String tableName, String name, EnumSet<IteratorScope> scopes) throws AccumuloSecurityException, AccumuloException, TableNotFoundException { Map<String,String> copy = new TreeMap<>(); for (Entry<String,String> property : this.getProperties(tableName)) { copy.put(property.getKey(), property.getValue()); } for (IteratorScope scope : scopes) { String root = String.format("%s%s.%s", Property.TABLE_ITERATOR_PREFIX, scope.name().toLowerCase(), name); for (Entry<String,String> property : copy.entrySet()) { if (property.getKey().equals(root) || property.getKey().startsWith(root + ".opt.")) this.removeProperty(tableName, property.getKey()); } } }
private void setScopeOptions(Options o) { allScopeOpt = new Option("all", "all-scopes", false, "applied at scan time, minor and major compactions"); mincScopeOpt = new Option(IteratorScope.minc.name(), "minor-compaction", false, "applied at minor compaction"); majcScopeOpt = new Option(IteratorScope.majc.name(), "major-compaction", false, "applied at major compaction"); scanScopeOpt = new Option(IteratorScope.scan.name(), "scan-time", false, "applied at scan time"); o.addOption(allScopeOpt); o.addOption(mincScopeOpt); o.addOption(majcScopeOpt); o.addOption(scanScopeOpt); }
@Override public void removeIterator(String namespace, String name, EnumSet<IteratorScope> scopes) throws AccumuloSecurityException, AccumuloException, NamespaceNotFoundException { if (!exists(namespace)) throw new NamespaceNotFoundException(null, namespace, null); Map<String,String> copy = new TreeMap<>(); for (Entry<String,String> property : this.getProperties(namespace)) { copy.put(property.getKey(), property.getValue()); } for (IteratorScope scope : scopes) { String root = String.format("%s%s.%s", Property.TABLE_ITERATOR_PREFIX, scope.name().toLowerCase(), name); for (Entry<String,String> property : copy.entrySet()) { if (property.getKey().equals(root) || property.getKey().startsWith(root + ".opt.")) this.removeProperty(namespace, property.getKey()); } } }
@Override public void configure(TableOperations tops) throws AccumuloException, AccumuloSecurityException, TableNotFoundException { for (IteratorScope scope : IteratorScope.values()) { setCombinerForLoadDateCounts(tops, scope.name()); configureToDropBadData(tops, scope.name()); } setLocalityGroupConfigurationIfNecessary(getLoadDatesTableName(conf), localityGroups, tops, log); }
@Override public void configure(TableOperations tops) throws AccumuloException, AccumuloSecurityException, TableNotFoundException { super.configure(tops); for (IteratorUtil.IteratorScope scope : IteratorUtil.IteratorScope.values()) { configureToDropBadData(tops, scope.name()); } }
@Override public void configure(TableOperations tops) throws AccumuloException, AccumuloSecurityException, TableNotFoundException { if (tableName != null) { for (IteratorScope scope : IteratorScope.values()) { setFrequencyCombiner(tops, scope.name()); setCombinerForCountMetadata(tops, scope.name()); setCombinerForEdgeMetadata(tops, scope.name()); } } }
public void overrideUidAggregator() throws AccumuloSecurityException, AccumuloException { for (IteratorUtil.IteratorScope scope : IteratorUtil.IteratorScope.values()) { String stem = String.format("%s%s.%s", Property.TABLE_ITERATOR_PREFIX, scope.name(), "UIDAggregator"); // Override the UidAggregator with a mock aggregator to lower the UID.List MAX uid limit. connector.tableOperations().setProperty(SHARD_INDEX_TABLE_NAME, stem + ".opt.*", "datawave.query.util.InMemoryGlobalIndexUidAggregator"); connector.tableOperations().setProperty(SHARD_RINDEX_TABLE_NAME, stem + ".opt.*", "datawave.query.util.InMemoryGlobalIndexUidAggregator"); } }
protected void configureDateIndexTable(TableOperations tops) throws AccumuloException, AccumuloSecurityException, TableNotFoundException { // Add the DATE aggregator for (IteratorScope scope : IteratorScope.values()) { String stem = String.format("%s%s.%s", Property.TABLE_ITERATOR_PREFIX, scope.name(), "DATEAggregator"); setPropertyIfNecessary(tableName, stem, "19,datawave.iterators.TotalAggregatingIterator", tops, log); stem += ".opt."; setPropertyIfNecessary(tableName, stem + "*", "datawave.ingest.table.aggregator.DateIndexDateAggregator", tops, log); } setPropertyIfNecessary(tableName, Property.TABLE_BLOOM_ENABLED.getKey(), Boolean.toString(false), tops, log); // Set the locality group for the full content column family setLocalityGroupConfigurationIfNecessary(tableName, localityGroups, tops, log); }
public static org.apache.accumulo.proxy.thrift.IteratorScope toThrift(IteratorScope is) { // we can't just use the enum values, since thrift MINC=0 but Apache // minc=1. we can't just use the names, since thrift are in upper case, // and/ Apache are lower. assuming Thrift will remain uppercase and use // the same characters as Apache try { return org.apache.accumulo.proxy.thrift.IteratorScope.valueOf(is.name().toUpperCase()); } catch (IllegalArgumentException ex) { throw ExceptionFactory.noEnumMapping(is, org.apache.accumulo.proxy.thrift.IteratorScope.class); } }
for (IteratorScope scope : scopes) { String scopeStr = String.format("%s%s", Property.TABLE_ITERATOR_PREFIX, scope.name().toLowerCase()); String nameStr = String.format("%s.%s", scopeStr, setting.getName()); String optStr = String.format("%s.opt.", nameStr);
for (IteratorScope scope : scopes) { String scopeStr = String.format("%s%s", Property.TABLE_ITERATOR_PREFIX, scope.name().toLowerCase()); String nameStr = String.format("%s.%s", scopeStr, setting.getName()); String optStr = String.format("%s.opt.", nameStr);
scope.name().toLowerCase(), setting.getName()); for (Entry<String,String> prop : setting.getOptions().entrySet()) { iteratorProps.put(root + ".opt." + prop.getKey(), prop.getValue());
@Override public IteratorSetting getIteratorSetting(String tableName, String name, IteratorScope scope) throws AccumuloException, TableNotFoundException { checkArgument(tableName != null, "tableName is null"); checkArgument(name != null, "name is null"); checkArgument(scope != null, "scope is null"); int priority = -1; String classname = null; Map<String,String> settings = new HashMap<>(); String root = String.format("%s%s.%s", Property.TABLE_ITERATOR_PREFIX, scope.name().toLowerCase(), name); String opt = root + ".opt."; for (Entry<String,String> property : this.getProperties(tableName)) { if (property.getKey().equals(root)) { String parts[] = property.getValue().split(","); if (parts.length != 2) { throw new AccumuloException("Bad value for iterator setting: " + property.getValue()); } priority = Integer.parseInt(parts[0]); classname = parts[1]; } else if (property.getKey().startsWith(opt)) { settings.put(property.getKey().substring(opt.length()), property.getValue()); } } if (priority <= 0 || classname == null) { return null; } return new IteratorSetting(priority, name, classname, settings); }
@Override public IteratorSetting getIteratorSetting(String namespace, String name, IteratorScope scope) throws AccumuloSecurityException, AccumuloException, NamespaceNotFoundException { if (!exists(namespace)) throw new NamespaceNotFoundException(null, namespace, null); int priority = -1; String classname = null; Map<String,String> settings = new HashMap<>(); String root = String.format("%s%s.%s", Property.TABLE_ITERATOR_PREFIX, scope.name().toLowerCase(), name); String opt = root + ".opt."; for (Entry<String,String> property : this.getProperties(namespace)) { if (property.getKey().equals(root)) { String parts[] = property.getValue().split(","); if (parts.length != 2) { throw new AccumuloException("Bad value for iterator setting: " + property.getValue()); } priority = Integer.parseInt(parts[0]); classname = parts[1]; } else if (property.getKey().startsWith(opt)) { settings.put(property.getKey().substring(opt.length()), property.getValue()); } } if (priority <= 0 || classname == null) { return null; } return new IteratorSetting(priority, name, classname, settings); }
scopeOpts.put(IteratorScope.minc, new Option(IteratorScope.minc.name(), "minor-compaction", false, "list iterator for minor compaction scope")); scopeOpts.put(IteratorScope.majc, new Option(IteratorScope.majc.name(), "major-compaction", false, "list iterator for major compaction scope")); scopeOpts.put(IteratorScope.scan, new Option(IteratorScope.scan.name(), "scan-time", false, "list iterator for scan scope"));
@Override public Options getOptions() { final Options o = new Options(); nameOpt = new Option("n", "name", true, "iterator to delete"); nameOpt.setArgName("itername"); nameOpt.setRequired(true); allScopeOpt = new Option("all", "all-scopes", false, "remove from all scopes"); mincScopeOpt = new Option(IteratorScope.minc.name(), "minor-compaction", false, "remove from minor compaction scope"); majcScopeOpt = new Option(IteratorScope.majc.name(), "major-compaction", false, "remove from major compaction scope"); scanScopeOpt = new Option(IteratorScope.scan.name(), "scan-time", false, "remove from scan scope"); OptionGroup grp = new OptionGroup(); grp.addOption(OptUtil.tableOpt("table to delete the iterator from")); grp.addOption(OptUtil.namespaceOpt("namespace to delete the iterator from")); o.addOptionGroup(grp); o.addOption(nameOpt); o.addOption(allScopeOpt); o.addOption(mincScopeOpt); o.addOption(majcScopeOpt); o.addOption(scanScopeOpt); return o; }
@Override public Options getOptions() { // Remove the options that specify which type of iterator this is, since // they are all scan iterators with this command. final HashSet<OptionGroup> groups = new HashSet<>(); final Options parentOptions = super.getOptions(); final Options modifiedOptions = new Options(); for (Iterator<?> it = parentOptions.getOptions().iterator(); it.hasNext();) { Option o = (Option) it.next(); if (!IteratorScope.majc.name().equals(o.getOpt()) && !IteratorScope.minc.name().equals(o.getOpt()) && !IteratorScope.scan.name().equals(o.getOpt())) { modifiedOptions.addOption(o); OptionGroup group = parentOptions.getOptionGroup(o); if (group != null) groups.add(group); } } for (OptionGroup group : groups) { modifiedOptions.addOptionGroup(group); } return modifiedOptions; }
/** * Generate the initial (default) properties for a table * * @param limitVersion * include a VersioningIterator at priority 20 that retains a single version of a given * K/V pair. * @return A map of Table properties */ public static Map<String,String> generateInitialTableProperties(boolean limitVersion) { TreeMap<String,String> props = new TreeMap<>(); if (limitVersion) { for (IteratorScope iterScope : IteratorScope.values()) { props.put(Property.TABLE_ITERATOR_PREFIX + iterScope.name() + ".vers", "20," + VersioningIterator.class.getName()); props.put(Property.TABLE_ITERATOR_PREFIX + iterScope.name() + ".vers.opt.maxVersions", "1"); } } props.put(Property.TABLE_CONSTRAINT_PREFIX + "1", DefaultKeySizeConstraint.class.getName()); return props; }
@Override public void attachIterator(String tableName, IteratorSetting setting, EnumSet<IteratorScope> scopes) throws AccumuloSecurityException, AccumuloException, TableNotFoundException { checkArgument(tableName != null, "tableName is null"); checkArgument(setting != null, "setting is null"); checkArgument(scopes != null, "scopes is null"); checkIteratorConflicts(tableName, setting, scopes); for (IteratorScope scope : scopes) { String root = String.format("%s%s.%s", Property.TABLE_ITERATOR_PREFIX, scope.name().toLowerCase(), setting.getName()); for (Entry<String,String> prop : setting.getOptions().entrySet()) { this.setProperty(tableName, root + ".opt." + prop.getKey(), prop.getValue()); } this.setProperty(tableName, root, setting.getPriority() + "," + setting.getIteratorClass()); } }
@Override public void attachIterator(String namespace, IteratorSetting setting, EnumSet<IteratorScope> scopes) throws AccumuloSecurityException, AccumuloException, NamespaceNotFoundException { checkIteratorConflicts(namespace, setting, scopes); for (IteratorScope scope : scopes) { String root = String.format("%s%s.%s", Property.TABLE_ITERATOR_PREFIX, scope.name().toLowerCase(), setting.getName()); for (Entry<String,String> prop : setting.getOptions().entrySet()) { this.setProperty(namespace, root + ".opt." + prop.getKey(), prop.getValue()); } this.setProperty(namespace, root, setting.getPriority() + "," + setting.getIteratorClass()); } }