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();
>       }
> 

Reply via email to