yeah, I think I found the error when trying to add a Range to the Scanner object when doing 'Plate plate = new Plate(Plate.getMap(rowId, scanner));' I modified the Scanner in the getMap() method, but the data wasn't persisting correctly.
Side question. Has anyone started a helper library or GORM for Accumulo? On Sep 23, 2013, at 2:46 PM, Michael Wall <[email protected]> wrote: > 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(); >>> } >> >> >>
