Github user lavjain commented on a diff in the pull request:
https://github.com/apache/incubator-hawq/pull/1379#discussion_r202118803
--- Diff:
pxf/pxf-service/src/main/java/org/apache/hawq/pxf/service/UGICache.java ---
@@ -61,48 +64,51 @@
* create and destroy UserGroupInformation instances.
*/
public UGICache() {
- this(new UGIProvider());
+ this(new UGIProvider(), Ticker.systemTicker());
}
/**
* Create new proxy UGI if not found in cache and increment reference
count
*/
- public Entry getTimedProxyUGI(SessionId session)
- throws IOException {
-
+ public UserGroupInformation getUserGroupInformation(SessionId session)
throws IOException {
Integer segmentId = session.getSegmentId();
String user = session.getUser();
DelayQueue<Entry> delayQueue = getExpirationQueue(segmentId);
synchronized (delayQueue) {
// Use the opportunity to cleanup any expired entries
- cleanup(segmentId);
+ cleanup(session);
Entry entry = cache.get(session);
if (entry == null) {
LOG.info(session.toString() + " Creating proxy user = " +
user);
- entry = new Entry(ugiProvider.createProxyUGI(user),
session);
+ entry = new Entry(ticker,
ugiProvider.createProxyUGI(user));
delayQueue.offer(entry);
cache.put(session, entry);
}
entry.acquireReference();
- return entry;
+ return entry.getUGI();
}
}
/**
- * Decrement reference count for the given Entry.
+ * Decrement reference count for the given session's UGI. Resets the
time at which the UGI will
+ * expire to 15 minutes in the future.
*
- * @param timedProxyUGI the cache entry to release
- * @param forceClean if true, destroys the UGI for the given Entry
(only if it is now unreferenced).
+ * @param session the session for which we want to
release the UGI.
+ * @param cleanImmediatelyIfNoRefs if true, destroys the UGI for the
given session (only if it is
+ * now unreferenced).
*/
- public void release(Entry timedProxyUGI, boolean forceClean) {
+ public void release(SessionId session, boolean
cleanImmediatelyIfNoRefs) {
+
+ Entry timedProxyUGI = cache.get(session);
+
+ if (timedProxyUGI == null) return;
--- End diff --
Is there a case where the above condition would hold true?
---