accumulo-user mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Benjamin Parrish <benjamin.d.parr...@gmail.com>
Subject Re: Setting authorizations in code
Date Mon, 23 Sep 2013 16:28:18 GMT
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 <eric.newton@gmail.com> 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 <benjamin.d.parrish@gmail.com>
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();
> 	}
> 


Mime
View raw message