Without seeing all your code, I notice that both setAuthorizations and getScanner return null. Are you sure whatever _db is in the filter method is getting setup as you expect?
On Mon, Sep 23, 2013 at 12:28 PM, Benjamin Parrish <[email protected]> wrote: > 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(); >> } > > >
