This is on a stand-alone instance. Stepping through the code I can see that it is getting the correct Authorizations from getAuthorizations() method that I have, and it propagates to the Scanner object, but the Scanner object is not pulling in the data associated with that column visibility. I can run a setauths on the shell and see all the data with the same Authorization.
On Sep 23, 2013, at 12:06 PM, Eric Newton <[email protected]> wrote: > 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(); > } >
