blob: bb2e34153ff7b54219a930f21ddaf4495a4ea9df [file] [log] [blame]
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
<meta name="generator" content="Doxygen 1.8.6"/>
<title>Impala: impala::LibCache Class Reference</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
<link href="navtree.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="resize.js"></script>
<script type="text/javascript" src="navtree.js"></script>
<script type="text/javascript">
$(document).ready(initResizable);
$(window).load(resizeHeight);
</script>
<link href="search/search.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="search/search.js"></script>
<script type="text/javascript">
$(document).ready(function() { searchBox.OnSelectItem(0); });
</script>
<link href="doxygen.css" rel="stylesheet" type="text/css" />
</head>
<body>
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
<div id="titlearea">
<table cellspacing="0" cellpadding="0">
<tbody>
<tr style="height: 56px;">
<td style="padding-left: 0.5em;">
<div id="projectname">Impala
</div>
<div id="projectbrief">Impalaistheopensource,nativeanalyticdatabaseforApacheHadoop.</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.8.6 -->
<script type="text/javascript">
var searchBox = new SearchBox("searchBox", "search",false,'Search');
</script>
<div id="navrow1" class="tabs">
<ul class="tablist">
<li><a href="index.html"><span>Main&#160;Page</span></a></li>
<li><a href="namespaces.html"><span>Namespaces</span></a></li>
<li class="current"><a href="annotated.html"><span>Classes</span></a></li>
<li><a href="files.html"><span>Files</span></a></li>
<li>
<div id="MSearchBox" class="MSearchBoxInactive">
<span class="left">
<img id="MSearchSelect" src="search/mag_sel.png"
onmouseover="return searchBox.OnSearchSelectShow()"
onmouseout="return searchBox.OnSearchSelectHide()"
alt=""/>
<input type="text" id="MSearchField" value="Search" accesskey="S"
onfocus="searchBox.OnSearchFieldFocus(true)"
onblur="searchBox.OnSearchFieldFocus(false)"
onkeyup="searchBox.OnSearchFieldChange(event)"/>
</span><span class="right">
<a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
</span>
</div>
</li>
</ul>
</div>
<div id="navrow2" class="tabs2">
<ul class="tablist">
<li><a href="annotated.html"><span>Class&#160;List</span></a></li>
<li><a href="classes.html"><span>Class&#160;Index</span></a></li>
<li><a href="inherits.html"><span>Class&#160;Hierarchy</span></a></li>
<li><a href="functions.html"><span>Class&#160;Members</span></a></li>
</ul>
</div>
</div><!-- top -->
<div id="side-nav" class="ui-resizable side-nav-resizable">
<div id="nav-tree">
<div id="nav-tree-contents">
<div id="nav-sync" class="sync"></div>
</div>
</div>
<div id="splitbar" style="-moz-user-select:none;"
class="ui-resizable-handle">
</div>
</div>
<script type="text/javascript">
$(document).ready(function(){initNavTree('classimpala_1_1LibCache.html','');});
</script>
<div id="doc-content">
<!-- window showing the filter options -->
<div id="MSearchSelectWindow"
onmouseover="return searchBox.OnSearchSelectShow()"
onmouseout="return searchBox.OnSearchSelectHide()"
onkeydown="return searchBox.OnSearchSelectKey(event)">
<a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(0)"><span class="SelectionMark">&#160;</span>All</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(1)"><span class="SelectionMark">&#160;</span>Classes</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(2)"><span class="SelectionMark">&#160;</span>Namespaces</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(3)"><span class="SelectionMark">&#160;</span>Files</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(4)"><span class="SelectionMark">&#160;</span>Functions</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(5)"><span class="SelectionMark">&#160;</span>Variables</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(6)"><span class="SelectionMark">&#160;</span>Typedefs</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(7)"><span class="SelectionMark">&#160;</span>Enumerations</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(8)"><span class="SelectionMark">&#160;</span>Enumerator</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(9)"><span class="SelectionMark">&#160;</span>Friends</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(10)"><span class="SelectionMark">&#160;</span>Macros</a></div>
<!-- iframe showing the search results (closed by default) -->
<div id="MSearchResultsWindow">
<iframe src="javascript:void(0)" frameborder="0"
name="MSearchResults" id="MSearchResults">
</iframe>
</div>
<div class="header">
<div class="summary">
<a href="#nested-classes">Classes</a> &#124;
<a href="#pub-types">Public Types</a> &#124;
<a href="#pub-methods">Public Member Functions</a> &#124;
<a href="#pub-static-methods">Static Public Member Functions</a> &#124;
<a href="#pri-types">Private Types</a> &#124;
<a href="#pri-methods">Private Member Functions</a> &#124;
<a href="#pri-attribs">Private Attributes</a> &#124;
<a href="#pri-static-attribs">Static Private Attributes</a> &#124;
<a href="classimpala_1_1LibCache-members.html">List of all members</a> </div>
<div class="headertitle">
<div class="title">impala::LibCache Class Reference</div> </div>
</div><!--header-->
<div class="contents">
<p><code>#include &lt;<a class="el" href="lib-cache_8h_source.html">lib-cache.h</a>&gt;</code></p>
<div class="dynheader">
Collaboration diagram for impala::LibCache:</div>
<div class="dyncontent">
<div class="center"><div class="zoom"><iframe scrolling="no" frameborder="0" src="classimpala_1_1LibCache__coll__graph.svg" width="100%" height="600"><p><b>This browser is not able to show SVG: try Firefox, Chrome, Safari, or Opera instead.</b></p></iframe></div></div>
</div>
<table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="nested-classes"></a>
Classes</h2></td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structLibCache_1_1LibCacheEntry.html">LibCacheEntry</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table><table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-types"></a>
Public Types</h2></td></tr>
<tr class="memitem:aa2a06cd571657a0b33c72f6a12a208f7"><td class="memItemLeft" align="right" valign="top">enum &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classimpala_1_1LibCache.html#aa2a06cd571657a0b33c72f6a12a208f7">LibType</a> { <a class="el" href="classimpala_1_1LibCache.html#aa2a06cd571657a0b33c72f6a12a208f7a7652f3b056d594b24af4e3362a44b6b2">TYPE_SO</a>,
<a class="el" href="classimpala_1_1LibCache.html#aa2a06cd571657a0b33c72f6a12a208f7ad7ff9b488eb0f88395559d4dd7c39995">TYPE_IR</a>,
<a class="el" href="classimpala_1_1LibCache.html#aa2a06cd571657a0b33c72f6a12a208f7a3695559d8ca8eb3bd7a6494a3d0d9183">TYPE_JAR</a>
}</td></tr>
<tr class="separator:aa2a06cd571657a0b33c72f6a12a208f7"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table><table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-methods"></a>
Public Member Functions</h2></td></tr>
<tr class="memitem:a95b338258c8e21614018ebfcebd3c127"><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classimpala_1_1LibCache.html#a95b338258c8e21614018ebfcebd3c127">~LibCache</a> ()</td></tr>
<tr class="memdesc:a95b338258c8e21614018ebfcebd3c127"><td class="mdescLeft">&#160;</td><td class="mdescRight">Calls dlclose on all cached handles. <a href="#a95b338258c8e21614018ebfcebd3c127">More...</a><br/></td></tr>
<tr class="separator:a95b338258c8e21614018ebfcebd3c127"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:aed661d9c7ae849633a60f0be588d99e1"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classimpala_1_1Status.html">Status</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classimpala_1_1LibCache.html#aed661d9c7ae849633a60f0be588d99e1">GetLocalLibPath</a> (const std::string &amp;hdfs_lib_file, <a class="el" href="classimpala_1_1LibCache.html#aa2a06cd571657a0b33c72f6a12a208f7">LibType</a> type, std::string *local_path)</td></tr>
<tr class="separator:aed661d9c7ae849633a60f0be588d99e1"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ae0b2004075c78531326dc3581b7051f5"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classimpala_1_1Status.html">Status</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classimpala_1_1LibCache.html#ae0b2004075c78531326dc3581b7051f5">CheckSymbolExists</a> (const std::string &amp;hdfs_lib_file, <a class="el" href="classimpala_1_1LibCache.html#aa2a06cd571657a0b33c72f6a12a208f7">LibType</a> type, const std::string &amp;symbol, <a class="el" href="classbool.html">bool</a> quiet=false)</td></tr>
<tr class="separator:ae0b2004075c78531326dc3581b7051f5"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a67a824b3ad1cb3676472b818014e15d4"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classimpala_1_1Status.html">Status</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classimpala_1_1LibCache.html#a67a824b3ad1cb3676472b818014e15d4">GetSoFunctionPtr</a> (const std::string &amp;hdfs_lib_file, const std::string &amp;symbol, void **fn_ptr, <a class="el" href="structLibCache_1_1LibCacheEntry.html">LibCacheEntry</a> **entry, <a class="el" href="classbool.html">bool</a> quiet=false)</td></tr>
<tr class="memdesc:a67a824b3ad1cb3676472b818014e15d4"><td class="mdescLeft">&#160;</td><td class="mdescRight">If 'quiet' is true, returned error statuses will not be logged. <a href="#a67a824b3ad1cb3676472b818014e15d4">More...</a><br/></td></tr>
<tr class="separator:a67a824b3ad1cb3676472b818014e15d4"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:af3e0a211126ed52940dc1a1b1609989a"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classimpala_1_1LibCache.html#af3e0a211126ed52940dc1a1b1609989a">SetNeedsRefresh</a> (const std::string &amp;hdfs_lib_file)</td></tr>
<tr class="separator:af3e0a211126ed52940dc1a1b1609989a"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a87c3204b49dfcf93a586e68318859a7f"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classimpala_1_1LibCache.html#a87c3204b49dfcf93a586e68318859a7f">DecrementUseCount</a> (<a class="el" href="structLibCache_1_1LibCacheEntry.html">LibCacheEntry</a> *entry)</td></tr>
<tr class="memdesc:a87c3204b49dfcf93a586e68318859a7f"><td class="mdescLeft">&#160;</td><td class="mdescRight">See comment in <a class="el" href="classimpala_1_1LibCache.html#a67a824b3ad1cb3676472b818014e15d4" title="If &#39;quiet&#39; is true, returned error statuses will not be logged. ">GetSoFunctionPtr()</a>. <a href="#a87c3204b49dfcf93a586e68318859a7f">More...</a><br/></td></tr>
<tr class="separator:a87c3204b49dfcf93a586e68318859a7f"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a480bc9d2c5b653810109cfe68dd7e8c0"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classimpala_1_1LibCache.html#a480bc9d2c5b653810109cfe68dd7e8c0">RemoveEntry</a> (const std::string &amp;hdfs_lib_file)</td></tr>
<tr class="memdesc:a480bc9d2c5b653810109cfe68dd7e8c0"><td class="mdescLeft">&#160;</td><td class="mdescRight">Removes the cache entry for 'hdfs_lib_file'. <a href="#a480bc9d2c5b653810109cfe68dd7e8c0">More...</a><br/></td></tr>
<tr class="separator:a480bc9d2c5b653810109cfe68dd7e8c0"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a14bf95e981621d9083614b710b869f9a"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classimpala_1_1LibCache.html#a14bf95e981621d9083614b710b869f9a">DropCache</a> ()</td></tr>
<tr class="memdesc:a14bf95e981621d9083614b710b869f9a"><td class="mdescLeft">&#160;</td><td class="mdescRight">Removes all cached entries. <a href="#a14bf95e981621d9083614b710b869f9a">More...</a><br/></td></tr>
<tr class="separator:a14bf95e981621d9083614b710b869f9a"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table><table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-static-methods"></a>
Static Public Member Functions</h2></td></tr>
<tr class="memitem:ae5378f8eacb0a7cb0fb4f5105a652ef0"><td class="memItemLeft" align="right" valign="top">static <a class="el" href="classimpala_1_1LibCache.html">LibCache</a> *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classimpala_1_1LibCache.html#ae5378f8eacb0a7cb0fb4f5105a652ef0">instance</a> ()</td></tr>
<tr class="separator:ae5378f8eacb0a7cb0fb4f5105a652ef0"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ac4873623d8eae562686095e8d5f32a83"><td class="memItemLeft" align="right" valign="top">static <a class="el" href="classimpala_1_1Status.html">Status</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classimpala_1_1LibCache.html#ac4873623d8eae562686095e8d5f32a83">Init</a> ()</td></tr>
<tr class="memdesc:ac4873623d8eae562686095e8d5f32a83"><td class="mdescLeft">&#160;</td><td class="mdescRight">Initializes the libcache. Must be called before any other APIs. <a href="#ac4873623d8eae562686095e8d5f32a83">More...</a><br/></td></tr>
<tr class="separator:ac4873623d8eae562686095e8d5f32a83"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table><table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pri-types"></a>
Private Types</h2></td></tr>
<tr class="memitem:a360df2ef63dabd0b034858135364e553"><td class="memItemLeft" align="right" valign="top">typedef boost::unordered_map<br class="typebreak"/>
&lt; std::string, <a class="el" href="structLibCache_1_1LibCacheEntry.html">LibCacheEntry</a> * &gt;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classimpala_1_1LibCache.html#a360df2ef63dabd0b034858135364e553">LibMap</a></td></tr>
<tr class="separator:a360df2ef63dabd0b034858135364e553"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table><table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pri-methods"></a>
Private Member Functions</h2></td></tr>
<tr class="memitem:ab9fcc5520a419b44188dad32992d7021"><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classimpala_1_1LibCache.html#ab9fcc5520a419b44188dad32992d7021">LibCache</a> ()</td></tr>
<tr class="separator:ab9fcc5520a419b44188dad32992d7021"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:abd44aba4bb3bb93d5475de55361048bb"><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classimpala_1_1LibCache.html#abd44aba4bb3bb93d5475de55361048bb">LibCache</a> (<a class="el" href="classimpala_1_1LibCache.html">LibCache</a> const &amp;l)</td></tr>
<tr class="separator:abd44aba4bb3bb93d5475de55361048bb"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a6845bb80ccece32a86460fb7a8d0e96d"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classimpala_1_1LibCache.html">LibCache</a> &amp;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classimpala_1_1LibCache.html#a6845bb80ccece32a86460fb7a8d0e96d">operator=</a> (<a class="el" href="classimpala_1_1LibCache.html">LibCache</a> const &amp;l)</td></tr>
<tr class="separator:a6845bb80ccece32a86460fb7a8d0e96d"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:af1c18bc4f9c13630b260a2c3817ed376"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classimpala_1_1Status.html">Status</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classimpala_1_1LibCache.html#af1c18bc4f9c13630b260a2c3817ed376">InitInternal</a> ()</td></tr>
<tr class="separator:af1c18bc4f9c13630b260a2c3817ed376"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ab6c8298ab1d55cddd4af8341db0c007a"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classimpala_1_1Status.html">Status</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classimpala_1_1LibCache.html#ab6c8298ab1d55cddd4af8341db0c007a">GetCacheEntry</a> (const std::string &amp;hdfs_lib_file, <a class="el" href="classimpala_1_1LibCache.html#aa2a06cd571657a0b33c72f6a12a208f7">LibType</a> type, boost::unique_lock&lt; boost::mutex &gt; *entry_lock, <a class="el" href="structLibCache_1_1LibCacheEntry.html">LibCacheEntry</a> **entry)</td></tr>
<tr class="separator:ab6c8298ab1d55cddd4af8341db0c007a"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a028408ab216047e7a7c1ef49e5cc00bb"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classimpala_1_1Status.html">Status</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classimpala_1_1LibCache.html#a028408ab216047e7a7c1ef49e5cc00bb">GetCacheEntryInternal</a> (const std::string &amp;hdfs_lib_file, <a class="el" href="classimpala_1_1LibCache.html#aa2a06cd571657a0b33c72f6a12a208f7">LibType</a> type, boost::unique_lock&lt; boost::mutex &gt; *entry_lock, <a class="el" href="structLibCache_1_1LibCacheEntry.html">LibCacheEntry</a> **entry)</td></tr>
<tr class="separator:a028408ab216047e7a7c1ef49e5cc00bb"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:aba8ceb8449042f2b375d2f2652c8ac2b"><td class="memItemLeft" align="right" valign="top">std::string&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classimpala_1_1LibCache.html#aba8ceb8449042f2b375d2f2652c8ac2b">MakeLocalPath</a> (const std::string &amp;hdfs_path, const std::string &amp;local_dir)</td></tr>
<tr class="separator:aba8ceb8449042f2b375d2f2652c8ac2b"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:aee8669f57a822764d75238f408b32482"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classimpala_1_1LibCache.html#aee8669f57a822764d75238f408b32482">RemoveEntryInternal</a> (const std::string &amp;hdfs_lib_file, const LibMap::iterator &amp;entry_iterator)</td></tr>
<tr class="separator:aee8669f57a822764d75238f408b32482"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table><table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pri-attribs"></a>
Private Attributes</h2></td></tr>
<tr class="memitem:a67d99867fccd77503e239db2b2bb3c2c"><td class="memItemLeft" align="right" valign="top">void *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classimpala_1_1LibCache.html#a67d99867fccd77503e239db2b2bb3c2c">current_process_handle_</a></td></tr>
<tr class="memdesc:a67d99867fccd77503e239db2b2bb3c2c"><td class="mdescLeft">&#160;</td><td class="mdescRight">dlopen() handle for the current process (i.e. impalad). <a href="#a67d99867fccd77503e239db2b2bb3c2c">More...</a><br/></td></tr>
<tr class="separator:a67d99867fccd77503e239db2b2bb3c2c"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a71c22c540e7d7c532a0d69c1f090cfe5"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classimpala_1_1AtomicInt.html">AtomicInt</a>&lt; int64_t &gt;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classimpala_1_1LibCache.html#a71c22c540e7d7c532a0d69c1f090cfe5">num_libs_copied_</a></td></tr>
<tr class="separator:a71c22c540e7d7c532a0d69c1f090cfe5"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a41c399f03be8fcaf81c6ae9bc8df1fd2"><td class="memItemLeft" align="right" valign="top">boost::mutex&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classimpala_1_1LibCache.html#a41c399f03be8fcaf81c6ae9bc8df1fd2">lock_</a></td></tr>
<tr class="separator:a41c399f03be8fcaf81c6ae9bc8df1fd2"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a57760e44606f715dc7d59711a5730139"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classimpala_1_1LibCache.html#a360df2ef63dabd0b034858135364e553">LibMap</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classimpala_1_1LibCache.html#a57760e44606f715dc7d59711a5730139">lib_cache_</a></td></tr>
<tr class="separator:a57760e44606f715dc7d59711a5730139"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table><table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pri-static-attribs"></a>
Static Private Attributes</h2></td></tr>
<tr class="memitem:a7622ae68068842a79e2966e6945e7045"><td class="memItemLeft" align="right" valign="top">static boost::scoped_ptr<br class="typebreak"/>
&lt; <a class="el" href="classimpala_1_1LibCache.html">LibCache</a> &gt;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classimpala_1_1LibCache.html#a7622ae68068842a79e2966e6945e7045">instance_</a></td></tr>
<tr class="memdesc:a7622ae68068842a79e2966e6945e7045"><td class="mdescLeft">&#160;</td><td class="mdescRight">Singleton instance. Instantiated in <a class="el" href="classimpala_1_1LibCache.html#ac4873623d8eae562686095e8d5f32a83" title="Initializes the libcache. Must be called before any other APIs. ">Init()</a>. <a href="#a7622ae68068842a79e2966e6945e7045">More...</a><br/></td></tr>
<tr class="separator:a7622ae68068842a79e2966e6945e7045"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table>
<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
<div class="textblock"><p>Process-wide cache of dynamically-linked libraries loaded from HDFS. These libraries can either be shared objects, llvm modules or jars. For shared objects, when we load the shared object, we dlopen() it and keep it in our process. For modules, we store the symbols in the module to service symbol lookups. We can't cache the module since it (i.e. the external module) is consumed when it is linked with the query codegen module. Locking strategy: We don't want to grab a big lock across all operations since one of the operations is copying a file from HDFS. With one lock that would prevent any UDFs from running on the system. Instead, we have a global lock that is taken when doing the cache lookup, but is not taking during any blocking calls. During the block calls, we take the per-lib lock. Entry lifetime management: We cannot delete the entry while a query is using the library. When the caller requests a ptr into the library, they are given the entry handle and must decrement the ref count when they are done. TODO:</p>
<ul>
<li>refresh libraries</li>
<li>better cached module management. </li>
</ul>
<p>Definition at line <a class="el" href="lib-cache_8h_source.html#l00053">53</a> of file <a class="el" href="lib-cache_8h_source.html">lib-cache.h</a>.</p>
</div><h2 class="groupheader">Member Typedef Documentation</h2>
<a class="anchor" id="a360df2ef63dabd0b034858135364e553"></a>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">typedef boost::unordered_map&lt;std::string, <a class="el" href="structLibCache_1_1LibCacheEntry.html">LibCacheEntry</a>*&gt; <a class="el" href="classimpala_1_1LibCache.html#a360df2ef63dabd0b034858135364e553">impala::LibCache::LibMap</a></td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">private</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p>Maps HDFS library path =&gt; cache entry. Entries in the cache need to be explicitly deleted. </p>
<p>Definition at line <a class="el" href="lib-cache_8h_source.html#l00128">128</a> of file <a class="el" href="lib-cache_8h_source.html">lib-cache.h</a>.</p>
</div>
</div>
<h2 class="groupheader">Member Enumeration Documentation</h2>
<a class="anchor" id="aa2a06cd571657a0b33c72f6a12a208f7"></a>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">enum <a class="el" href="classimpala_1_1LibCache.html#aa2a06cd571657a0b33c72f6a12a208f7">impala::LibCache::LibType</a></td>
</tr>
</table>
</div><div class="memdoc">
<table class="fieldtable">
<tr><th colspan="2">Enumerator</th></tr><tr><td class="fieldname"><em><a class="anchor" id="aa2a06cd571657a0b33c72f6a12a208f7a7652f3b056d594b24af4e3362a44b6b2"></a>TYPE_SO</em>&#160;</td><td class="fielddoc">
</td></tr>
<tr><td class="fieldname"><em><a class="anchor" id="aa2a06cd571657a0b33c72f6a12a208f7ad7ff9b488eb0f88395559d4dd7c39995"></a>TYPE_IR</em>&#160;</td><td class="fielddoc">
</td></tr>
<tr><td class="fieldname"><em><a class="anchor" id="aa2a06cd571657a0b33c72f6a12a208f7a3695559d8ca8eb3bd7a6494a3d0d9183"></a>TYPE_JAR</em>&#160;</td><td class="fielddoc">
</td></tr>
</table>
<p>Definition at line <a class="el" href="lib-cache_8h_source.html#l00057">57</a> of file <a class="el" href="lib-cache_8h_source.html">lib-cache.h</a>.</p>
</div>
</div>
<h2 class="groupheader">Constructor &amp; Destructor Documentation</h2>
<a class="anchor" id="a95b338258c8e21614018ebfcebd3c127"></a>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">LibCache::~LibCache </td>
<td>(</td>
<td class="paramname"></td><td>)</td>
<td></td>
</tr>
</table>
</div><div class="memdoc">
<p>Calls dlclose on all cached handles. </p>
<p>Definition at line <a class="el" href="lib-cache_8cc_source.html#l00095">95</a> of file <a class="el" href="lib-cache_8cc_source.html">lib-cache.cc</a>.</p>
<p>References <a class="el" href="lib-cache_8h_source.html#l00116">current_process_handle_</a>, <a class="el" href="lib-cache_8cc_source.html#l00262">DropCache()</a>, and <a class="el" href="dynamic-util_8cc_source.html#l00058">impala::DynamicClose()</a>.</p>
</div>
</div>
<a class="anchor" id="ab9fcc5520a419b44188dad32992d7021"></a>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">LibCache::LibCache </td>
<td>(</td>
<td class="paramname"></td><td>)</td>
<td></td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">private</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p>Definition at line <a class="el" href="lib-cache_8cc_source.html#l00092">92</a> of file <a class="el" href="lib-cache_8cc_source.html">lib-cache.cc</a>.</p>
<p>Referenced by <a class="el" href="lib-cache_8cc_source.html#l00100">Init()</a>.</p>
</div>
</div>
<a class="anchor" id="abd44aba4bb3bb93d5475de55361048bb"></a>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">impala::LibCache::LibCache </td>
<td>(</td>
<td class="paramtype"><a class="el" href="classimpala_1_1LibCache.html">LibCache</a> const &amp;&#160;</td>
<td class="paramname"><em>l</em></td><td>)</td>
<td></td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">private</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
</div>
</div>
<h2 class="groupheader">Member Function Documentation</h2>
<a class="anchor" id="ae0b2004075c78531326dc3581b7051f5"></a>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname"><a class="el" href="classimpala_1_1Status.html">Status</a> LibCache::CheckSymbolExists </td>
<td>(</td>
<td class="paramtype">const std::string &amp;&#160;</td>
<td class="paramname"><em>hdfs_lib_file</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="classimpala_1_1LibCache.html#aa2a06cd571657a0b33c72f6a12a208f7">LibType</a>&#160;</td>
<td class="paramname"><em>type</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const std::string &amp;&#160;</td>
<td class="paramname"><em>symbol</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="classbool.html">bool</a>&#160;</td>
<td class="paramname"><em>quiet</em> = <code>false</code>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p>Returns status.ok() if the symbol exists in 'hdfs_lib_file', non-ok otherwise. If 'quiet' is true, the error status for non-Java unfound symbols will not be logged. </p>
<p>Definition at line <a class="el" href="lib-cache_8cc_source.html#l00192">192</a> of file <a class="el" href="lib-cache_8cc_source.html">lib-cache.cc</a>.</p>
<p>References <a class="el" href="lib-cache_8cc_source.html#l00060">impala::LibCache::LibCacheEntry::local_path</a>, <a class="el" href="webserver_8cc_source.html#l00115">impala::OK</a>, <a class="el" href="status_8h_source.html#l00242">RETURN_IF_ERROR</a>, <a class="el" href="lib-cache_8cc_source.html#l00080">impala::LibCache::LibCacheEntry::symbols</a>, and <a class="el" href="lib-cache_8cc_source.html#l00057">impala::LibCache::LibCacheEntry::type</a>.</p>
<p>Referenced by <a class="el" href="fe-support_8cc_source.html#l00131">ResolveSymbolLookup()</a>.</p>
</div>
</div>
<a class="anchor" id="a87c3204b49dfcf93a586e68318859a7f"></a>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">void LibCache::DecrementUseCount </td>
<td>(</td>
<td class="paramtype"><a class="el" href="structLibCache_1_1LibCacheEntry.html">LibCacheEntry</a> *&#160;</td>
<td class="paramname"><em>entry</em></td><td>)</td>
<td></td>
</tr>
</table>
</div><div class="memdoc">
<p>See comment in <a class="el" href="classimpala_1_1LibCache.html#a67a824b3ad1cb3676472b818014e15d4" title="If &#39;quiet&#39; is true, returned error statuses will not be logged. ">GetSoFunctionPtr()</a>. </p>
<p>Definition at line <a class="el" href="lib-cache_8cc_source.html#l00170">170</a> of file <a class="el" href="lib-cache_8cc_source.html">lib-cache.cc</a>.</p>
<p>References <a class="el" href="lib-cache_8cc_source.html#l00042">impala::LibCache::LibCacheEntry::lock</a>, <a class="el" href="lib-cache_8cc_source.html#l00050">impala::LibCache::LibCacheEntry::should_remove</a>, and <a class="el" href="lib-cache_8cc_source.html#l00046">impala::LibCache::LibCacheEntry::use_count</a>.</p>
<p>Referenced by <a class="el" href="agg-fn-evaluator_8cc_source.html#l00227">impala::AggFnEvaluator::Close()</a>, and <a class="el" href="expr_8cc_source.html#l00114">impala::Expr::Close()</a>.</p>
</div>
</div>
<a class="anchor" id="a14bf95e981621d9083614b710b869f9a"></a>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">void LibCache::DropCache </td>
<td>(</td>
<td class="paramname"></td><td>)</td>
<td></td>
</tr>
</table>
</div><div class="memdoc">
<p>Removes all cached entries. </p>
<p>Definition at line <a class="el" href="lib-cache_8cc_source.html#l00262">262</a> of file <a class="el" href="lib-cache_8cc_source.html">lib-cache.cc</a>.</p>
<p>References <a class="el" href="lock-benchmark_8cc_source.html#l00072">lock_</a>.</p>
<p>Referenced by <a class="el" href="impala-server_8cc_source.html#l01137">impala::ImpalaServer::CatalogUpdateCallback()</a>, and <a class="el" href="lib-cache_8cc_source.html#l00095">~LibCache()</a>.</p>
</div>
</div>
<a class="anchor" id="ab6c8298ab1d55cddd4af8341db0c007a"></a>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname"><a class="el" href="classimpala_1_1Status.html">Status</a> LibCache::GetCacheEntry </td>
<td>(</td>
<td class="paramtype">const std::string &amp;&#160;</td>
<td class="paramname"><em>hdfs_lib_file</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="classimpala_1_1LibCache.html#aa2a06cd571657a0b33c72f6a12a208f7">LibType</a>&#160;</td>
<td class="paramname"><em>type</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">boost::unique_lock&lt; boost::mutex &gt; *&#160;</td>
<td class="paramname"><em>entry_lock</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="structLibCache_1_1LibCacheEntry.html">LibCacheEntry</a> **&#160;</td>
<td class="paramname"><em>entry</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">private</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p>Returns the cache entry for 'hdfs_lib_file'. If this library has not been copied locally, it will copy it and add a new LibCacheEntry to 'lib_cache_'. Result is returned in *entry. No locks should be take before calling this. On return the entry's lock is taken and returned in *entry_lock. If an error is returned, there will be no entry in lib_cache_ and *entry is NULL. </p>
<p>Definition at line <a class="el" href="lib-cache_8cc_source.html#l00279">279</a> of file <a class="el" href="lib-cache_8cc_source.html">lib-cache.cc</a>.</p>
<p>References <a class="el" href="status_8h_source.html#l00172">impala::Status::ok()</a>.</p>
</div>
</div>
<a class="anchor" id="a028408ab216047e7a7c1ef49e5cc00bb"></a>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname"><a class="el" href="classimpala_1_1Status.html">Status</a> LibCache::GetCacheEntryInternal </td>
<td>(</td>
<td class="paramtype">const std::string &amp;&#160;</td>
<td class="paramname"><em>hdfs_lib_file</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="classimpala_1_1LibCache.html#aa2a06cd571657a0b33c72f6a12a208f7">LibType</a>&#160;</td>
<td class="paramname"><em>type</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">boost::unique_lock&lt; boost::mutex &gt; *&#160;</td>
<td class="paramname"><em>entry_lock</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="structLibCache_1_1LibCacheEntry.html">LibCacheEntry</a> **&#160;</td>
<td class="paramname"><em>entry</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">private</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p>Implementation to get the cache entry for 'hdfs_lib_file'. Errors are returned without evicting the cache entry if the status is not OK and *entry is not NULL. </p>
<p>Definition at line <a class="el" href="lib-cache_8cc_source.html#l00304">304</a> of file <a class="el" href="lib-cache_8cc_source.html">lib-cache.cc</a>.</p>
<p>References <a class="el" href="hdfs-util_8cc_source.html#l00054">impala::CopyHdfsFile()</a>, <a class="el" href="dynamic-util_8cc_source.html#l00037">impala::DynamicOpen()</a>, <a class="el" href="hdfs-util_8cc_source.html#l00041">impala::GetLastModificationTime()</a>, <a class="el" href="lock-benchmark_8cc_source.html#l00072">lock_</a>, <a class="el" href="webserver_8cc_source.html#l00115">impala::OK</a>, <a class="el" href="status_8h_source.html#l00172">impala::Status::ok()</a>, <a class="el" href="sasl-test_8cc.html#a2db66f7b463c0e190f8933e51f43d91e">path()</a>, <a class="el" href="expr-benchmark_8cc_source.html#l00089">pool</a>, and <a class="el" href="status_8h_source.html#l00242">RETURN_IF_ERROR</a>.</p>
</div>
</div>
<a class="anchor" id="aed661d9c7ae849633a60f0be588d99e1"></a>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname"><a class="el" href="classimpala_1_1Status.html">Status</a> LibCache::GetLocalLibPath </td>
<td>(</td>
<td class="paramtype">const std::string &amp;&#160;</td>
<td class="paramname"><em>hdfs_lib_file</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="classimpala_1_1LibCache.html#aa2a06cd571657a0b33c72f6a12a208f7">LibType</a>&#160;</td>
<td class="paramname"><em>type</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">std::string *&#160;</td>
<td class="paramname"><em>local_path</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p>Gets the local file system path for the library at 'hdfs_lib_file'. If this file is not already on the local fs, it copies it and caches the result. Returns an error if 'hdfs_lib_file' cannot be copied to the local fs. </p>
<p>Definition at line <a class="el" href="lib-cache_8cc_source.html#l00181">181</a> of file <a class="el" href="lib-cache_8cc_source.html">lib-cache.cc</a>.</p>
<p>References <a class="el" href="lib-cache_8cc_source.html#l00060">impala::LibCache::LibCacheEntry::local_path</a>, <a class="el" href="webserver_8cc_source.html#l00115">impala::OK</a>, <a class="el" href="status_8h_source.html#l00242">RETURN_IF_ERROR</a>, and <a class="el" href="lib-cache_8cc_source.html#l00057">impala::LibCache::LibCacheEntry::type</a>.</p>
<p>Referenced by <a class="el" href="fe-support_8cc_source.html#l00238">Java_com_cloudera_impala_service_FeSupport_NativeCacheJar()</a>, and <a class="el" href="fe-support_8cc_source.html#l00131">ResolveSymbolLookup()</a>.</p>
</div>
</div>
<a class="anchor" id="a67a824b3ad1cb3676472b818014e15d4"></a>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname"><a class="el" href="classimpala_1_1Status.html">Status</a> LibCache::GetSoFunctionPtr </td>
<td>(</td>
<td class="paramtype">const std::string &amp;&#160;</td>
<td class="paramname"><em>hdfs_lib_file</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const std::string &amp;&#160;</td>
<td class="paramname"><em>symbol</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">void **&#160;</td>
<td class="paramname"><em>fn_ptr</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="structLibCache_1_1LibCacheEntry.html">LibCacheEntry</a> **&#160;</td>
<td class="paramname"><em>entry</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="classbool.html">bool</a>&#160;</td>
<td class="paramname"><em>quiet</em> = <code>false</code>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p>If 'quiet' is true, returned error statuses will not be logged. </p>
<p>Returns a pointer to the function for the given library and symbol. If 'hdfs_lib_file' is empty, the symbol is looked up in the impalad process. Otherwise, 'hdfs_lib_file' should be the HDFS path to a shared library (.so) file. dlopen handles and symbols are cached. Only usable if 'hdfs_lib_file' refers to a shared object. If entry is non-null and *entry is null, *entry will be set to the cached entry. If entry is non-null and *entry is non-null, *entry will be reused (i.e., the use count is not increased). The caller must call DecrementUseCount(*entry) when it is done using fn_ptr and it is no longer valid to use fn_ptr. </p>
<p>Definition at line <a class="el" href="lib-cache_8cc_source.html#l00130">130</a> of file <a class="el" href="lib-cache_8cc_source.html">lib-cache.cc</a>.</p>
<p>References <a class="el" href="dynamic-util_8cc_source.html#l00026">impala::DynamicLookup()</a>, <a class="el" href="lib-cache_8cc_source.html#l00042">impala::LibCache::LibCacheEntry::lock</a>, <a class="el" href="webserver_8cc_source.html#l00115">impala::OK</a>, <a class="el" href="status_8h_source.html#l00242">RETURN_IF_ERROR</a>, <a class="el" href="lib-cache_8cc_source.html#l00069">impala::LibCache::LibCacheEntry::shared_object_handle</a>, <a class="el" href="lib-cache_8cc_source.html#l00074">impala::LibCache::LibCacheEntry::symbol_cache</a>, <a class="el" href="lib-cache_8cc_source.html#l00057">impala::LibCache::LibCacheEntry::type</a>, and <a class="el" href="lib-cache_8cc_source.html#l00046">impala::LibCache::LibCacheEntry::use_count</a>.</p>
<p>Referenced by <a class="el" href="scalar-fn-call_8cc_source.html#l00472">impala::ScalarFnCall::GetFunction()</a>, <a class="el" href="scalar-fn-call_8cc_source.html#l00377">impala::ScalarFnCall::GetUdf()</a>, and <a class="el" href="scalar-fn-call_8cc_source.html#l00052">impala::ScalarFnCall::Prepare()</a>.</p>
</div>
</div>
<a class="anchor" id="ac4873623d8eae562686095e8d5f32a83"></a>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname"><a class="el" href="classimpala_1_1Status.html">Status</a> LibCache::Init </td>
<td>(</td>
<td class="paramname"></td><td>)</td>
<td></td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">static</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p>Initializes the libcache. Must be called before any other APIs. </p>
<p>Definition at line <a class="el" href="lib-cache_8cc_source.html#l00100">100</a> of file <a class="el" href="lib-cache_8cc_source.html">lib-cache.cc</a>.</p>
<p>References <a class="el" href="lib-cache_8h_source.html#l00113">instance_</a>, and <a class="el" href="lib-cache_8cc_source.html#l00092">LibCache()</a>.</p>
<p>Referenced by <a class="el" href="init_8cc_source.html#l00122">impala::InitCommonRuntime()</a>.</p>
</div>
</div>
<a class="anchor" id="af1c18bc4f9c13630b260a2c3817ed376"></a>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname"><a class="el" href="classimpala_1_1Status.html">Status</a> LibCache::InitInternal </td>
<td>(</td>
<td class="paramname"></td><td>)</td>
<td></td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">private</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p>Definition at line <a class="el" href="lib-cache_8cc_source.html#l00106">106</a> of file <a class="el" href="lib-cache_8cc_source.html">lib-cache.cc</a>.</p>
<p>References <a class="el" href="lib-cache_8h_source.html#l00116">current_process_handle_</a>, <a class="el" href="dynamic-util_8cc_source.html#l00037">impala::DynamicOpen()</a>, <a class="el" href="path-builder_8cc_source.html#l00038">impala::PathBuilder::GetFullBuildPath()</a>, <a class="el" href="test-info_8h_source.html#l00033">impala::TestInfo::is_fe_test()</a>, <a class="el" href="status_8h_source.html#l00087">impala::Status::OK</a>, and <a class="el" href="status_8h_source.html#l00242">RETURN_IF_ERROR</a>.</p>
</div>
</div>
<a class="anchor" id="ae5378f8eacb0a7cb0fb4f5105a652ef0"></a>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">static <a class="el" href="classimpala_1_1LibCache.html">LibCache</a>* impala::LibCache::instance </td>
<td>(</td>
<td class="paramname"></td><td>)</td>
<td></td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span><span class="mlabel">static</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p>Definition at line <a class="el" href="lib-cache_8h_source.html#l00063">63</a> of file <a class="el" href="lib-cache_8h_source.html">lib-cache.h</a>.</p>
<p>References <a class="el" href="lib-cache_8h_source.html#l00113">instance_</a>.</p>
<p>Referenced by <a class="el" href="impala-server_8cc_source.html#l01137">impala::ImpalaServer::CatalogUpdateCallback()</a>, <a class="el" href="agg-fn-evaluator_8cc_source.html#l00227">impala::AggFnEvaluator::Close()</a>, <a class="el" href="expr_8cc_source.html#l00114">impala::Expr::Close()</a>, <a class="el" href="scalar-fn-call_8cc_source.html#l00472">impala::ScalarFnCall::GetFunction()</a>, <a class="el" href="scalar-fn-call_8cc_source.html#l00377">impala::ScalarFnCall::GetUdf()</a>, <a class="el" href="catalog-op-executor_8cc_source.html#l00161">impala::CatalogOpExecutor::HandleDropDataSource()</a>, <a class="el" href="catalog-op-executor_8cc_source.html#l00130">impala::CatalogOpExecutor::HandleDropFunction()</a>, <a class="el" href="external-data-source-executor_8cc_source.html#l00035">impala::ExternalDataSourceExecutor::Init()</a>, <a class="el" href="fe-support_8cc_source.html#l00238">Java_com_cloudera_impala_service_FeSupport_NativeCacheJar()</a>, <a class="el" href="scalar-fn-call_8cc_source.html#l00052">impala::ScalarFnCall::Prepare()</a>, <a class="el" href="hive-udf-call_8cc_source.html#l00153">impala::HiveUdfCall::Prepare()</a>, <a class="el" href="agg-fn-evaluator_8cc_source.html#l00124">impala::AggFnEvaluator::Prepare()</a>, and <a class="el" href="fe-support_8cc_source.html#l00131">ResolveSymbolLookup()</a>.</p>
</div>
</div>
<a class="anchor" id="aba8ceb8449042f2b375d2f2652c8ac2b"></a>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">string LibCache::MakeLocalPath </td>
<td>(</td>
<td class="paramtype">const std::string &amp;&#160;</td>
<td class="paramname"><em>hdfs_path</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const std::string &amp;&#160;</td>
<td class="paramname"><em>local_dir</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">private</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p>Utility function for generating a filename unique to this process and 'hdfs_path'. This is to prevent multiple impalad processes or different library files with the same name from clobbering each other. 'hdfs_path' should be the full path (including the filename) of the file we're going to copy to the local FS, and 'local_dir' is the local directory prefix of the returned path. </p>
<p>Definition at line <a class="el" href="lib-cache_8cc_source.html#l00414">414</a> of file <a class="el" href="lib-cache_8cc_source.html">lib-cache.cc</a>.</p>
<p>References <a class="el" href="sasl-test_8cc.html#a2db66f7b463c0e190f8933e51f43d91e">path()</a>.</p>
</div>
</div>
<a class="anchor" id="a6845bb80ccece32a86460fb7a8d0e96d"></a>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname"><a class="el" href="classimpala_1_1LibCache.html">LibCache</a>&amp; impala::LibCache::operator= </td>
<td>(</td>
<td class="paramtype"><a class="el" href="classimpala_1_1LibCache.html">LibCache</a> const &amp;&#160;</td>
<td class="paramname"><em>l</em></td><td>)</td>
<td></td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">private</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
</div>
</div>
<a class="anchor" id="a480bc9d2c5b653810109cfe68dd7e8c0"></a>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">void LibCache::RemoveEntry </td>
<td>(</td>
<td class="paramtype">const std::string &amp;&#160;</td>
<td class="paramname"><em>hdfs_lib_file</em></td><td>)</td>
<td></td>
</tr>
</table>
</div><div class="memdoc">
<p>Removes the cache entry for 'hdfs_lib_file'. </p>
<p>Definition at line <a class="el" href="lib-cache_8cc_source.html#l00232">232</a> of file <a class="el" href="lib-cache_8cc_source.html">lib-cache.cc</a>.</p>
<p>References <a class="el" href="lock-benchmark_8cc_source.html#l00072">lock_</a>.</p>
<p>Referenced by <a class="el" href="impala-server_8cc_source.html#l01137">impala::ImpalaServer::CatalogUpdateCallback()</a>, <a class="el" href="catalog-op-executor_8cc_source.html#l00161">impala::CatalogOpExecutor::HandleDropDataSource()</a>, and <a class="el" href="catalog-op-executor_8cc_source.html#l00130">impala::CatalogOpExecutor::HandleDropFunction()</a>.</p>
</div>
</div>
<a class="anchor" id="aee8669f57a822764d75238f408b32482"></a>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">void LibCache::RemoveEntryInternal </td>
<td>(</td>
<td class="paramtype">const std::string &amp;&#160;</td>
<td class="paramname"><em>hdfs_lib_file</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const LibMap::iterator &amp;&#160;</td>
<td class="paramname"><em>entry_iterator</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">private</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p>Implementation to remove an entry from the cache. lock_ must be held. The entry's lock should not be held. </p>
<p>Definition at line <a class="el" href="lib-cache_8cc_source.html#l00239">239</a> of file <a class="el" href="lib-cache_8cc_source.html">lib-cache.cc</a>.</p>
<p>References <a class="el" href="lib-cache_8cc_source.html#l00060">impala::LibCache::LibCacheEntry::local_path</a>, <a class="el" href="lib-cache_8cc_source.html#l00042">impala::LibCache::LibCacheEntry::lock</a>, <a class="el" href="lib-cache_8cc_source.html#l00050">impala::LibCache::LibCacheEntry::should_remove</a>, and <a class="el" href="lib-cache_8cc_source.html#l00046">impala::LibCache::LibCacheEntry::use_count</a>.</p>
</div>
</div>
<a class="anchor" id="af3e0a211126ed52940dc1a1b1609989a"></a>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">void LibCache::SetNeedsRefresh </td>
<td>(</td>
<td class="paramtype">const std::string &amp;&#160;</td>
<td class="paramname"><em>hdfs_lib_file</em></td><td>)</td>
<td></td>
</tr>
</table>
</div><div class="memdoc">
<p>Marks the entry for 'hdfs_lib_file' as needing to be refreshed if the file in HDFS is newer than the local cached copied. The refresh will occur the next time the entry is accessed. </p>
<p>Definition at line <a class="el" href="lib-cache_8cc_source.html#l00221">221</a> of file <a class="el" href="lib-cache_8cc_source.html">lib-cache.cc</a>.</p>
<p>References <a class="el" href="lib-cache_8cc_source.html#l00054">impala::LibCache::LibCacheEntry::check_needs_refresh</a>, <a class="el" href="lib-cache_8cc_source.html#l00042">impala::LibCache::LibCacheEntry::lock</a>, and <a class="el" href="lock-benchmark_8cc_source.html#l00072">lock_</a>.</p>
<p>Referenced by <a class="el" href="impala-server_8cc_source.html#l01137">impala::ImpalaServer::CatalogUpdateCallback()</a>, and <a class="el" href="fe-support_8cc_source.html#l00131">ResolveSymbolLookup()</a>.</p>
</div>
</div>
<h2 class="groupheader">Member Data Documentation</h2>
<a class="anchor" id="a67d99867fccd77503e239db2b2bb3c2c"></a>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">void* impala::LibCache::current_process_handle_</td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">private</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p>dlopen() handle for the current process (i.e. impalad). </p>
<p>Definition at line <a class="el" href="lib-cache_8h_source.html#l00116">116</a> of file <a class="el" href="lib-cache_8h_source.html">lib-cache.h</a>.</p>
<p>Referenced by <a class="el" href="lib-cache_8cc_source.html#l00106">InitInternal()</a>, and <a class="el" href="lib-cache_8cc_source.html#l00095">~LibCache()</a>.</p>
</div>
</div>
<a class="anchor" id="a7622ae68068842a79e2966e6945e7045"></a>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">scoped_ptr&lt; <a class="el" href="classimpala_1_1LibCache.html">LibCache</a> &gt; LibCache::instance_</td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">static</span><span class="mlabel">private</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p>Singleton instance. Instantiated in <a class="el" href="classimpala_1_1LibCache.html#ac4873623d8eae562686095e8d5f32a83" title="Initializes the libcache. Must be called before any other APIs. ">Init()</a>. </p>
<p>Definition at line <a class="el" href="lib-cache_8h_source.html#l00113">113</a> of file <a class="el" href="lib-cache_8h_source.html">lib-cache.h</a>.</p>
<p>Referenced by <a class="el" href="lib-cache_8cc_source.html#l00100">Init()</a>, and <a class="el" href="lib-cache_8h_source.html#l00063">instance()</a>.</p>
</div>
</div>
<a class="anchor" id="a57760e44606f715dc7d59711a5730139"></a>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname"><a class="el" href="classimpala_1_1LibCache.html#a360df2ef63dabd0b034858135364e553">LibMap</a> impala::LibCache::lib_cache_</td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">private</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p>Definition at line <a class="el" href="lib-cache_8h_source.html#l00129">129</a> of file <a class="el" href="lib-cache_8h_source.html">lib-cache.h</a>.</p>
</div>
</div>
<a class="anchor" id="a41c399f03be8fcaf81c6ae9bc8df1fd2"></a>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">boost::mutex impala::LibCache::lock_</td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">private</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p>Protects lib_cache_. For lock ordering, this lock must always be taken before the per entry lock. </p>
<p>Definition at line <a class="el" href="lib-cache_8h_source.html#l00124">124</a> of file <a class="el" href="lib-cache_8h_source.html">lib-cache.h</a>.</p>
</div>
</div>
<a class="anchor" id="a71c22c540e7d7c532a0d69c1f090cfe5"></a>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname"><a class="el" href="classimpala_1_1AtomicInt.html">AtomicInt</a>&lt;int64_t&gt; impala::LibCache::num_libs_copied_</td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">private</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p>The number of libs that have been copied from HDFS to the local FS. This is appended to the local fs path to remove collisions. </p>
<p>Definition at line <a class="el" href="lib-cache_8h_source.html#l00120">120</a> of file <a class="el" href="lib-cache_8h_source.html">lib-cache.h</a>.</p>
</div>
</div>
<hr/>The documentation for this class was generated from the following files:<ul>
<li>be/src/runtime/<a class="el" href="lib-cache_8h_source.html">lib-cache.h</a></li>
<li>be/src/runtime/<a class="el" href="lib-cache_8cc_source.html">lib-cache.cc</a></li>
</ul>
</div><!-- contents -->
</div><!-- doc-content -->
<!-- start footer part -->
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
<ul>
<li class="navelem"><a class="el" href="namespaceimpala.html">impala</a></li><li class="navelem"><a class="el" href="classimpala_1_1LibCache.html">LibCache</a></li>
<li class="footer">Generated on Thu May 7 2015 16:10:49 for Impala by
<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.6 </li>
</ul>
</div>
</body>
</html>