private static ThreadLocal<Map<String, String>> getPolicyMapping(SolrCloudManager cloudManager) { return (ThreadLocal<Map<String, String>>) cloudManager.getObjectCache() .computeIfAbsent(POLICY_MAPPING_KEY, k -> new ThreadLocal<>()); }
public <T> T computeIfAbsent(String key, Class<T> clazz, Function<String, ? extends T> mappingFunction) { ensureNotClosed(); Object o = super.computeIfAbsent(key, mappingFunction); return clazz.cast(o); }
public <T> T get(String key, Class<T> clazz) { Object o = get(key); if (o == null) { return null; } else { return clazz.cast(o); } }
public SolrClientCloudManager(DistributedQueueFactory queueFactory, CloudSolrClient solrClient) { this.queueFactory = queueFactory; this.solrClient = solrClient; this.zkStateReader = solrClient.getZkStateReader(); this.zkClient = zkStateReader.getZkClient(); this.stateManager = new ZkDistribStateManager(zkClient); this.isClosed = false; this.objectCache = new ObjectCache(); }
@Override public Object put(String key, Object val) { ensureNotClosed(); return super.put(key, val); }
/** * How to get a shared Policy Session * 1) call {@link #getSession(SolrCloudManager)} * 2) compute all suggestions * 3) call {@link SessionWrapper#returnSession(Policy.Session)} * 4) perform all suggestions * 5) call {@link SessionWrapper#release()} */ public static SessionWrapper getSession(SolrCloudManager cloudManager) throws IOException, InterruptedException { SessionRef sessionRef = (SessionRef) cloudManager.getObjectCache().computeIfAbsent(SessionRef.class.getName(), s -> new SessionRef()); return sessionRef.get(cloudManager); }
@Override public void clear() { ensureNotClosed(); super.clear(); }
@Override public Object get(String key) { ensureNotClosed(); return super.get(key); }
@Override public Object remove(String key) { ensureNotClosed(); return super.remove(key); }