Authorizations, like all settings, take a moment to propagate to all servers.
-Eric On Mon, Sep 23, 2013 at 9:24 AM, Benjamin Parrish < [email protected]> wrote: > I am trying to set authorizations in code, but the scanner is always > returning the previous fetch of data using the previous authorizations. I > am setting the Authorizations on the Connector, and then I get a new > Scanner after setting the Authorizations. > > > public Authorizations setAuthorizations(SecurityGroup[] authorizations) { > List<byte[]> authorizationList = new ArrayList<byte[]>(); > > > for (SecurityGroup auth : authorizations) { > String groupString = Security.getName(auth); > > > byte[] groupBytes = groupString.getBytes(); > > > authorizationList.add(groupBytes); > } > > > Authorizations auths = new Authorizations(authorizationList); > > > try { > connector.securityOperations().changeUserAuthorizations(_loggedInUser, > auths); > > > return auths; > } catch (AccumuloException e) { > // TODO Auto-generated catch block > e.printStackTrace(); > } catch (AccumuloSecurityException e) { > // TODO Auto-generated catch block > e.printStackTrace(); > } > > > return null; > } > > > public Scanner getScanner() { > try { > Authorizations auths = this.getAuthorizations(); > > > return connector.createScanner(TABLE, auths); > } catch (TableNotFoundException e) { > // TODO Auto-generated catch block > e.printStackTrace(); > } > > > return null; > } > > > @Override > public Collection<Plate> filter(SecurityGroup[] authorizations, String > regEx) { > _db.setAuthorizations(authorizations); > > > Scanner scanner = _db.getScanner(); > > String valueRegex = (regEx.equals("")) ? ".*" : regEx + ".*"; > > > scanner.fetchColumn(Plate.COLUMN_FAMILY, new Text(Plate.PLATE_QUALIFIER)); > > > IteratorSetting iter = new IteratorSetting(1, "regexfilter", RegExFilter. > class); > > > iter.addOption(RegExFilter.VALUE_REGEX, valueRegex); > > > scanner.addScanIterator(iter); > > > Iterator<Entry<Key, Value>> it = scanner.iterator(); > > > Map<Text, Plate> map = new HashMap<Text, Plate>(); > > > while (it.hasNext()) { > Entry<Key,Value> entry = it.next(); > > > Text rowId = entry.getKey().getRow(); > > > if (map.containsKey(rowId)) { > continue; > } > > > Plate plate = new Plate(Plate.getMap(rowId, scanner)); > > > map.put(rowId, plate); > } > > > return map.values(); > } >
