private void cleanCaches(ObjectId objectId, Instant fromVersion, Instant toVersion) { Results results = getUidToDocumentCache().createQuery().includeKeys() .includeAttribute(getUidToDocumentCache().getSearchAttribute("ObjectId")) .includeAttribute(getUidToDocumentCache().getSearchAttribute("VersionFromInstant")) .includeAttribute(getUidToDocumentCache().getSearchAttribute("VersionToInstant")) .addCriteria(getUidToDocumentCache().getSearchAttribute("ObjectId") .eq(objectId.toString())) .addCriteria(getUidToDocumentCache().getSearchAttribute("VersionFromInstant") .le((fromVersion != null ? fromVersion : InstantExtractor.MIN_INSTANT).toString())) .addCriteria(getUidToDocumentCache().getSearchAttribute("VersionToInstant") .ge((toVersion != null ? toVersion : InstantExtractor.MAX_INSTANT).toString())) .execute(); for (Result result : results.all()) { getUidToDocumentCache().remove(result.getKey()); } }
private List searchPartitionKeys(final Query query) { LinkedList<Object> keys = new LinkedList<Object>(); System.out.println("Starting search..."); long startTime = System.currentTimeMillis(); Results results = query.execute(); if(log.isDebugEnabled()) log.debug(String.format("Search time: %d ms", System.currentTimeMillis() - startTime)); // perform the refresh for (Result result : results.all()) { keys.add(result.getKey()); } results.discard(); return keys; }
public Collection<T> fetchByCriteria( Criteria criteria ) { net.sf.ehcache.search.Query query = this.cache.createQuery(); query.includeValues(); query.addCriteria( criteria ); Results results = null; try { results = query.execute(); } catch ( Exception e ) { throw new SearchException( "Query error" ); } if ( results == null ) { return null; } Collection<T> genes = new HashSet<T>( results.size() ); for ( Result result : results.all() ) { genes.add( ( T ) result.getValue() ); } return genes; }
private <T extends ControlEntry> List<T> getAces(String uid, CacheId cacheId) { Cache cache = getCache(cacheId); List<T> aces = new ArrayList<T>(); // here search on uid take place Attribute<String> uidAttribute = cache.getSearchAttribute(UserDomainInterfaceOperationKey.USER_ID); // query is the fastest if you search for keys and if you need value then call Cache.get(key) Query queryRequestedUid = cache.createQuery().addCriteria(uidAttribute.eq(uid).or(uidAttribute.eq(WILDCARD))) // have specific user ids appear before wildcards .addOrderBy(uidAttribute, Direction.DESCENDING) .includeKeys() .end(); Results results = queryRequestedUid.execute(); for (Result result : results.all()) { aces.add(DomainAccessControlStoreEhCache.<T> getElementValue(cache.get(result.getKey()))); } return aces; }
private <T extends ControlEntry> List<T> getAces(String domain, String interfaceName, CacheId cacheId) { Cache cache = getCache(cacheId); List<T> aces = new ArrayList<T>(); // here search on domain and interface take place Attribute<String> domainAttribute = cache.getSearchAttribute(UserDomainInterfaceOperationKey.DOMAIN); Attribute<String> interfaceAttribute = cache.getSearchAttribute(UserDomainInterfaceOperationKey.INTERFACE); // query is the fastest if you search for keys and if you need value then call Cache.get(key) Query queryDomainInterface = cache.createQuery() .addCriteria(domainAttribute.eq(domain) .and(interfaceAttribute.eq(interfaceName))) .includeKeys() .end(); Results results = queryDomainInterface.execute(); for (Result result : results.all()) { T ace = DomainAccessControlStoreEhCache.<T> getElementValue(cache.get(result.getKey())); aces.add(ace); } return aces; }
@Override public Collection<Long> findAlarm(AlarmQuery query) { Ehcache ehcache = getCache(); ArrayList<Long> result = new ArrayList<Long>(); Query cacheQuery = ehcache.createQuery(); if (query.getFaultCode() != 0) { Attribute<Integer> fc = ehcache.getSearchAttribute("faultCode"); cacheQuery.addCriteria(fc.eq(query.getFaultCode())); } if (query.getFaultFamily() != null && !"".equals(query.getFaultFamily())) { Attribute<String> ff = ehcache.getSearchAttribute("faultFamily"); cacheQuery.addCriteria(ff.ilike(query.getFaultFamily())); } if (query.getFaultMember() != null && !"".equals(query.getFaultMember())) { Attribute<String> fm = ehcache.getSearchAttribute("faultMember"); cacheQuery.addCriteria(fm.ilike(query.getFaultMember())); } if (query.getPriority() != 0) { Attribute<Integer> prio = ehcache.getSearchAttribute("priority"); cacheQuery.addCriteria(prio.eq(query.getPriority())); } if (query.getActive() != null) { Attribute<Boolean> active = ehcache.getSearchAttribute("isActive"); cacheQuery.addCriteria(active.eq(query.getActive())); } for (Result res: cacheQuery.maxResults(query.getMaxResultSize()).includeKeys().execute().all()) { result.add((Long) res.getKey()); } return result; }
/** * Given DSD entry name, clear its corresponding object values from the cache. * * @param name contains the name of object to be cleared. * @param contextId maps to sub-tree in DIT, e.g. ou=contextId, dc=example, dc=com. * * @throws SecurityException in the event of system or rule violation. */ void clearDsdCacheEntry(String name, String contextId) { Attribute<String> context = m_dsdCache.getSearchAttribute(CONTEXT_ID); Attribute<String> dsdName = m_dsdCache.getSearchAttribute(DSD_NAME); Query query = m_dsdCache.createQuery(); query.includeKeys(); query.includeValues(); query.addCriteria(dsdName.eq(name).and(context.eq(contextId))); Results results = query.execute(); for (Result result : results.all()) { m_dsdCache.clear(result.getKey()); } }
/** * Given a role name, return the set of DSD's that have a matching member. * * @param name contains name of authorized Role used to search the cache. * @param contextId maps to sub-tree in DIT, e.g. ou=contextId, dc=example, dc=com. * @return un-ordered set of matching DSD's. * @throws SecurityException in the event of system or rule violation. */ private Set<SDSet> getDsdCache(String name, String contextId) throws SecurityException { contextId = getContextId(contextId); Set<SDSet> finalSet = new HashSet<>(); Attribute<String> context = m_dsdCache.getSearchAttribute(CONTEXT_ID); Attribute<String> member = m_dsdCache.getSearchAttribute(SchemaConstants.MEMBER_AT); Query query = m_dsdCache.createQuery(); query.includeKeys(); query.includeValues(); query.addCriteria(member.eq(name).and(context.eq(contextId))); Results results = query.execute(); boolean empty = false; for (Result result : results.all()) { DsdCacheEntry entry = (DsdCacheEntry) result.getValue(); if (!entry.isEmpty()) { finalSet.add(entry.getSdSet()); finalSet = putDsdCache(name, contextId); } else { empty = true; } finalSet.add(entry.getSdSet()); } // If nothing was found in the cache, determine if it needs to be seeded: if (finalSet.size() == 0 && !empty) { finalSet = putDsdCache(name, contextId); } return finalSet; }
void runTests() { loadCache(); Attribute<String> member = cache.getSearchAttribute( "member" ); Query query = cache.createQuery(); query.includeKeys(); query.includeValues(); Set<String> roles = new HashSet<>(); roles.add( "oamt17dsd1" ); roles.add( "oamt17dsd4" ); roles.add( "oamT13DSD6" ); roles.add( "oamT16SDR7" ); query.addCriteria( member.in( roles ) ); Results results = query.execute(); System.out.println( " Size: " + results.size() ); System.out.println( "----Results-----\n" ); Set<SDSet> resultSet = new HashSet<>(); for ( Result result : results.all() ) { DsdCacheEntry entry = ( DsdCacheEntry ) result.getValue(); resultSet.add( entry.getSdSet() ); } for ( SDSet sdSet : resultSet ) { LOG.info( "Found SDSet: " + sdSet.getName() ); } }
@Override public List<DomainRoleEntry> getDomainRoles(String uid) { Cache cache = getCache(CacheId.DOMAIN_ROLES); List<DomainRoleEntry> domainRoles = new ArrayList<DomainRoleEntry>(); Attribute<String> uidAttribute = cache.getSearchAttribute(UserRoleKey.USER_ID); // query is the fastest if you search for keys and if you need value then call Cache.get(key) Query queryRequestedUid = cache.createQuery().addCriteria(uidAttribute.eq(uid)).includeKeys().end(); Results results = queryRequestedUid.execute(); for (Result result : results.all()) { domainRoles.add(DomainAccessControlStoreEhCache.<DomainRoleEntry> getElementValue(cache.get(result.getKey()))); } return domainRoles; }
private <T extends ControlEntry> List<T> getAces(CacheId cacheId, String uid, String domain, String interfaceName) { Cache cache = getCache(cacheId); Attribute<String> uidAttribute = cache.getSearchAttribute(UserDomainInterfaceOperationKey.USER_ID); Attribute<String> domainAttribute = cache.getSearchAttribute(UserDomainInterfaceOperationKey.DOMAIN); Attribute<String> interfaceAttribute = cache.getSearchAttribute(UserDomainInterfaceOperationKey.INTERFACE); Query queryAllOperations = cache.createQuery() .addCriteria(uidAttribute.eq(uid).or(uidAttribute.eq(WILDCARD))) .addCriteria(domainAttribute.eq(domain)) .addCriteria(interfaceAttribute.eq(interfaceName)) // have specific user ids appear before wildcards .addOrderBy(uidAttribute, Direction.DESCENDING) .includeKeys() .end(); Results results = queryAllOperations.execute(); List<T> aces = new ArrayList<T>(); String currentUid = null; for (Result result : results.all()) { T ace = DomainAccessControlStoreEhCache.<T> getElementValue(cache.get(result.getKey())); // Don't add uid wildcards if a specific uid has been added to the results if (currentUid == null) { currentUid = ace.getUid(); } else if (!currentUid.equals(ace.getUid())) { break; } aces.add(ace); } return aces; }
private <T extends ControlEntry> List<T> getEditableAces(String uid, CacheId cacheId, Role role) { List<T> aces = new ArrayList<T>(); // find out first on which domains uid has specified role Cache drtCache = getCache(CacheId.DOMAIN_ROLES); UserRoleKey dreKey = new UserRoleKey(uid, role); String[] uidDomains = null; // read domains from DRE if (drtCache.isKeyInCache(dreKey)) { DomainRoleEntry dre = DomainAccessControlStoreEhCache.<DomainRoleEntry> getElementValue(drtCache.get(dreKey)); uidDomains = dre.getDomains(); } // if uid has no domains with specified role return empty list if (uidDomains == null || uidDomains.length == 0) { return aces; } Cache cache = getCache(cacheId); // here should search on uid and domain take place Attribute<String> uidAttribute = cache.getSearchAttribute(UserDomainInterfaceOperationKey.USER_ID); Attribute<String> domainAttribute = cache.getSearchAttribute(UserDomainInterfaceOperationKey.DOMAIN); for (String domain : uidDomains) { Query query = cache.createQuery() .addCriteria(uidAttribute.eq(uid).and(domainAttribute.eq(domain))) .includeKeys() .end(); Results results = query.execute(); for (Result result : results.all()) { aces.add(DomainAccessControlStoreEhCache.<T> getElementValue(cache.get(result.getKey()))); } } return aces; }
/** * Given a Set of authorized Roles, return the set of DSD's that have matching members. * * @param authorizedRoleSet contains an un-order Set of authorized Roles. * @param contextId maps to sub-tree in DIT, e.g. ou=contextId, dc=example, dc=com. * @return un-ordered set of matching DSD's. * @throws SecurityException in the event of system or rule violation. */ Set<SDSet> getDsdCache(Set<String> authorizedRoleSet, String contextId) throws SecurityException { contextId = getContextId(contextId); Set<SDSet> dsdRetSets = new HashSet<>(); // Need to proceed? if (!CollectionUtils.isNotEmpty( authorizedRoleSet )) { return dsdRetSets; } // Was the DSD Cache switched off? boolean isCacheDisabled = Config.getInstance().getBoolean(IS_DSD_CACHE_DISABLED_PARM, false); // If so, get DSD's from LDAP: if (isCacheDisabled) { SDSet sdSet = new SDSet(); sdSet.setType(SDSet.SDType.DYNAMIC); sdSet.setContextId(contextId); dsdRetSets = sp.search(authorizedRoleSet, sdSet); } // Search the DSD cache for matching Role members: else { // Search on roleName attribute which maps to 'member' attr on the cache record: Attribute<String> member = m_dsdCache.getSearchAttribute(SchemaConstants.MEMBER_AT); Attribute<String> context = m_dsdCache.getSearchAttribute(CONTEXT_ID); Query query = m_dsdCache.createQuery(); query.includeKeys(); query.includeValues(); // Add the passed in authorized Role names to this cache query: Set<String> roles = new HashSet<>(authorizedRoleSet); query.addCriteria(member.in(roles).and(context.eq(contextId))); // Return all DSD cache entries that match roleName to the 'member' attribute in cache entry: Results results = query.execute(); for (Result result : results.all()) { DsdCacheEntry entry = (DsdCacheEntry) result.getValue(); // Do not add dummy DSD sets to the final list: if (!entry.isEmpty()) { dsdRetSets.add(entry.getSdSet()); } // Remove role member from authorizedRoleSet to preclude from upcoming DSD search: //authorizedRoleSet.remove(entry.getMember()); } // Authorized roles remaining in this set correspond to missed cache hits from above: if (authorizedRoleSet.size() > 0) { dsdRetSets = putDsdCache(authorizedRoleSet, contextId); } } return dsdRetSets; }