Home | About | Sematext search-lucene.com search-hadoop.com
 Search Hadoop and all its subprojects:

Switch to Threaded View
Accumulo >> mail # user >> Setting authorizations in code


Copy link to this message
-
Re: Setting authorizations in code
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();
> }
>