<?xml version="1.0" encoding="ascii"?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"> <head> <title>flumotion.component.misc.httpserver.cachedprovider.CopySession</title> <link rel="stylesheet" href="epydoc.css" type="text/css" /> <script type="text/javascript" src="epydoc.js"></script> </head> <body bgcolor="white" text="black" link="blue" vlink="#204080" alink="#204080"> <!-- ==================== NAVIGATION BAR ==================== --> <table class="navbar" border="0" width="100%" cellpadding="0" bgcolor="#a0c0ff" cellspacing="0"> <tr valign="middle"> <!-- Tree link --> <th> <a href="module-tree.html">Trees</a> </th> <!-- Index link --> <th> <a href="identifier-index.html">Indices</a> </th> <!-- Help link --> <th> <a href="help.html">Help</a> </th> <th class="navbar" width="100%"></th> </tr> </table> <table width="100%" cellpadding="0" cellspacing="0"> <tr valign="top"> <td width="100%"> <span class="breadcrumbs"> Package flumotion :: <a href="flumotion.component-module.html">Package component</a> :: <a href="flumotion.component.misc-module.html">Package misc</a> :: <a href="flumotion.component.misc.httpserver-module.html">Package httpserver</a> :: <a href="flumotion.component.misc.httpserver.cachedprovider-module.html">Module cachedprovider</a> :: Class CopySession </span> </td> <td> <table cellpadding="0" cellspacing="0"> <!-- hide/show private --> <tr><td align="right"><span class="options">[<a href="javascript:void(0);" class="privatelink" onclick="toggle_private();">hide private</a>]</span></td></tr> </table> </td> </tr> </table> <!-- ==================== CLASS DESCRIPTION ==================== --> <h1 class="epydoc">Class CopySession</h1><p class="nomargin-top"><span class="codelink"><a href="flumotion.component.misc.httpserver.cachedprovider-pysrc.html#CopySession">source code</a></span></p> <pre class="base-tree"> <a href="flumotion.extern.log.log.Loggable-class.html">extern.log.log.Loggable</a> --+ | <strong class="uidshort">CopySession</strong> </pre> <hr /> <p>I'm serving a file at the same time I'm copying it from the network file system to the cache. If the client ask for data not yet copied, the source file read operation is delegated the the copy thread as an asynchronous operation because file seeking/reading is not thread safe.</p> <p>The copy session have to open two times the temporary file, one for read-only and one for write only, because closing a read/write file change the modification time. We want the modification time to be set to a known value when the copy is finished even keeping read access to the file.</p> <p>The session manage a reference counter to know how many TempFileDelegate instances are using the session to delegate read operations. This is done for two reasons:</p> <ul> <li> To avoid circular references by have the session manage a list of delegate instances. </li> <li> If not cancelled, sessions should not be deleted when no delegates reference them anymore. So weakref cannot be used. </li> </ul> <!-- ==================== INSTANCE METHODS ==================== --> <a name="section-InstanceMethods"></a> <table class="summary" border="1" cellpadding="3" cellspacing="0" width="100%" bgcolor="white"> <tr bgcolor="#70b0f0" class="table-header"> <td colspan="2" class="table-header"> <table border="0" cellpadding="0" cellspacing="0" width="100%"> <tr valign="top"> <td align="left"><span class="table-header">Instance Methods</span></td> <td align="right" valign="top" ><span class="options">[<a href="#section-InstanceMethods" class="privatelink" onclick="toggle_private();" >hide private</a>]</span></td> </tr> </table> </td> </tr> <tr> <td width="15%" align="right" valign="top" class="summary"> <span class="summary-type"> </span> </td><td class="summary"> <table width="100%" cellpadding="0" cellspacing="0" border="0"> <tr> <td><span class="summary-sig"><a name="__init__"></a><span class="summary-sig-name">__init__</span>(<span class="summary-sig-arg">self</span>, <span class="summary-sig-arg">plug</span>, <span class="summary-sig-arg">sourcePath</span>, <span class="summary-sig-arg">sourceFile</span>, <span class="summary-sig-arg">sourceInfo</span>)</span></td> <td align="right" valign="top"> <span class="codelink"><a href="flumotion.component.misc.httpserver.cachedprovider-pysrc.html#CopySession.__init__">source code</a></span> </td> </tr> </table> </td> </tr> <tr> <td width="15%" align="right" valign="top" class="summary"> <span class="summary-type"> </span> </td><td class="summary"> <table width="100%" cellpadding="0" cellspacing="0" border="0"> <tr> <td><span class="summary-sig"><a name="outdate"></a><span class="summary-sig-name">outdate</span>(<span class="summary-sig-arg">self</span>)</span></td> <td align="right" valign="top"> <span class="codelink"><a href="flumotion.component.misc.httpserver.cachedprovider-pysrc.html#CopySession.outdate">source code</a></span> </td> </tr> </table> </td> </tr> <tr> <td width="15%" align="right" valign="top" class="summary"> <span class="summary-type"> </span> </td><td class="summary"> <table width="100%" cellpadding="0" cellspacing="0" border="0"> <tr> <td><span class="summary-sig"><a name="read"></a><span class="summary-sig-name">read</span>(<span class="summary-sig-arg">self</span>, <span class="summary-sig-arg">position</span>, <span class="summary-sig-arg">size</span>, <span class="summary-sig-arg">stats</span>)</span></td> <td align="right" valign="top"> <span class="codelink"><a href="flumotion.component.misc.httpserver.cachedprovider-pysrc.html#CopySession.read">source code</a></span> </td> </tr> </table> </td> </tr> <tr> <td width="15%" align="right" valign="top" class="summary"> <span class="summary-type"> </span> </td><td class="summary"> <table width="100%" cellpadding="0" cellspacing="0" border="0"> <tr> <td><span class="summary-sig"><a name="incRef"></a><span class="summary-sig-name">incRef</span>(<span class="summary-sig-arg">self</span>)</span></td> <td align="right" valign="top"> <span class="codelink"><a href="flumotion.component.misc.httpserver.cachedprovider-pysrc.html#CopySession.incRef">source code</a></span> </td> </tr> </table> </td> </tr> <tr> <td width="15%" align="right" valign="top" class="summary"> <span class="summary-type"> </span> </td><td class="summary"> <table width="100%" cellpadding="0" cellspacing="0" border="0"> <tr> <td><span class="summary-sig"><a name="decRef"></a><span class="summary-sig-name">decRef</span>(<span class="summary-sig-arg">self</span>)</span></td> <td align="right" valign="top"> <span class="codelink"><a href="flumotion.component.misc.httpserver.cachedprovider-pysrc.html#CopySession.decRef">source code</a></span> </td> </tr> </table> </td> </tr> <tr> <td width="15%" align="right" valign="top" class="summary"> <span class="summary-type"> </span> </td><td class="summary"> <table width="100%" cellpadding="0" cellspacing="0" border="0"> <tr> <td><span class="summary-sig"><a name="close"></a><span class="summary-sig-name">close</span>(<span class="summary-sig-arg">self</span>)</span></td> <td align="right" valign="top"> <span class="codelink"><a href="flumotion.component.misc.httpserver.cachedprovider-pysrc.html#CopySession.close">source code</a></span> </td> </tr> </table> </td> </tr> <tr> <td width="15%" align="right" valign="top" class="summary"> <span class="summary-type"> </span> </td><td class="summary"> <table width="100%" cellpadding="0" cellspacing="0" border="0"> <tr> <td><span class="summary-sig"><a name="doServe"></a><span class="summary-sig-name">doServe</span>(<span class="summary-sig-arg">self</span>)</span></td> <td align="right" valign="top"> <span class="codelink"><a href="flumotion.component.misc.httpserver.cachedprovider-pysrc.html#CopySession.doServe">source code</a></span> </td> </tr> </table> </td> </tr> <tr> <td width="15%" align="right" valign="top" class="summary"> <span class="summary-type"> </span> </td><td class="summary"> <table width="100%" cellpadding="0" cellspacing="0" border="0"> <tr> <td><span class="summary-sig"><a name="doCopy"></a><span class="summary-sig-name">doCopy</span>(<span class="summary-sig-arg">self</span>)</span></td> <td align="right" valign="top"> <span class="codelink"><a href="flumotion.component.misc.httpserver.cachedprovider-pysrc.html#CopySession.doCopy">source code</a></span> </td> </tr> </table> </td> </tr> <tr class="private"> <td width="15%" align="right" valign="top" class="summary"> <span class="summary-type"> </span> </td><td class="summary"> <table width="100%" cellpadding="0" cellspacing="0" border="0"> <tr> <td><span class="summary-sig"><a name="_allocCacheSpace"></a><span class="summary-sig-name">_allocCacheSpace</span>(<span class="summary-sig-arg">self</span>)</span></td> <td align="right" valign="top"> <span class="codelink"><a href="flumotion.component.misc.httpserver.cachedprovider-pysrc.html#CopySession._allocCacheSpace">source code</a></span> </td> </tr> </table> </td> </tr> <tr class="private"> <td width="15%" align="right" valign="top" class="summary"> <span class="summary-type"> </span> </td><td class="summary"> <table width="100%" cellpadding="0" cellspacing="0" border="0"> <tr> <td><span class="summary-sig"><a name="_releaseCacheSpace"></a><span class="summary-sig-name">_releaseCacheSpace</span>(<span class="summary-sig-arg">self</span>)</span></td> <td align="right" valign="top"> <span class="codelink"><a href="flumotion.component.misc.httpserver.cachedprovider-pysrc.html#CopySession._releaseCacheSpace">source code</a></span> </td> </tr> </table> </td> </tr> <tr class="private"> <td width="15%" align="right" valign="top" class="summary"> <span class="summary-type"> </span> </td><td class="summary"> <table width="100%" cellpadding="0" cellspacing="0" border="0"> <tr> <td><span class="summary-sig"><a name="_cancelSession"></a><span class="summary-sig-name">_cancelSession</span>(<span class="summary-sig-arg">self</span>)</span></td> <td align="right" valign="top"> <span class="codelink"><a href="flumotion.component.misc.httpserver.cachedprovider-pysrc.html#CopySession._cancelSession">source code</a></span> </td> </tr> </table> </td> </tr> <tr class="private"> <td width="15%" align="right" valign="top" class="summary"> <span class="summary-type"> </span> </td><td class="summary"> <table width="100%" cellpadding="0" cellspacing="0" border="0"> <tr> <td><span class="summary-sig"><a name="_startCopying"></a><span class="summary-sig-name">_startCopying</span>(<span class="summary-sig-arg">self</span>)</span></td> <td align="right" valign="top"> <span class="codelink"><a href="flumotion.component.misc.httpserver.cachedprovider-pysrc.html#CopySession._startCopying">source code</a></span> </td> </tr> </table> </td> </tr> <tr class="private"> <td width="15%" align="right" valign="top" class="summary"> <span class="summary-type"> </span> </td><td class="summary"> <table width="100%" cellpadding="0" cellspacing="0" border="0"> <tr> <td><span class="summary-sig"><a name="_cancelCopy"></a><span class="summary-sig-name">_cancelCopy</span>(<span class="summary-sig-arg">self</span>, <span class="summary-sig-arg">closeSource</span>, <span class="summary-sig-arg">closeTempWrite</span>)</span></td> <td align="right" valign="top"> <span class="codelink"><a href="flumotion.component.misc.httpserver.cachedprovider-pysrc.html#CopySession._cancelCopy">source code</a></span> </td> </tr> </table> </td> </tr> <tr class="private"> <td width="15%" align="right" valign="top" class="summary"> <span class="summary-type"> </span> </td><td class="summary"> <table width="100%" cellpadding="0" cellspacing="0" border="0"> <tr> <td><span class="summary-sig"><a name="_onCopyCancelled"></a><span class="summary-sig-name">_onCopyCancelled</span>(<span class="summary-sig-arg">self</span>, <span class="summary-sig-arg">closeSource</span>, <span class="summary-sig-arg">closeTempWrite</span>)</span></td> <td align="right" valign="top"> <span class="codelink"><a href="flumotion.component.misc.httpserver.cachedprovider-pysrc.html#CopySession._onCopyCancelled">source code</a></span> </td> </tr> </table> </td> </tr> <tr class="private"> <td width="15%" align="right" valign="top" class="summary"> <span class="summary-type"> </span> </td><td class="summary"> <table width="100%" cellpadding="0" cellspacing="0" border="0"> <tr> <td><span class="summary-sig"><a name="_onCopyFinished"></a><span class="summary-sig-name">_onCopyFinished</span>(<span class="summary-sig-arg">self</span>)</span></td> <td align="right" valign="top"> <span class="codelink"><a href="flumotion.component.misc.httpserver.cachedprovider-pysrc.html#CopySession._onCopyFinished">source code</a></span> </td> </tr> </table> </td> </tr> <tr class="private"> <td width="15%" align="right" valign="top" class="summary"> <span class="summary-type"> </span> </td><td class="summary"> <table width="100%" cellpadding="0" cellspacing="0" border="0"> <tr> <td><span class="summary-sig"><a name="_removeTempFile"></a><span class="summary-sig-name">_removeTempFile</span>(<span class="summary-sig-arg">self</span>)</span></td> <td align="right" valign="top"> <span class="codelink"><a href="flumotion.component.misc.httpserver.cachedprovider-pysrc.html#CopySession._removeTempFile">source code</a></span> </td> </tr> </table> </td> </tr> <tr class="private"> <td width="15%" align="right" valign="top" class="summary"> <span class="summary-type"> </span> </td><td class="summary"> <table width="100%" cellpadding="0" cellspacing="0" border="0"> <tr> <td><span class="summary-sig"><a name="_closeSourceFile"></a><span class="summary-sig-name">_closeSourceFile</span>(<span class="summary-sig-arg">self</span>)</span></td> <td align="right" valign="top"> <span class="codelink"><a href="flumotion.component.misc.httpserver.cachedprovider-pysrc.html#CopySession._closeSourceFile">source code</a></span> </td> </tr> </table> </td> </tr> <tr class="private"> <td width="15%" align="right" valign="top" class="summary"> <span class="summary-type"> </span> </td><td class="summary"> <table width="100%" cellpadding="0" cellspacing="0" border="0"> <tr> <td><span class="summary-sig"><a name="_closeReadTempFile"></a><span class="summary-sig-name">_closeReadTempFile</span>(<span class="summary-sig-arg">self</span>)</span></td> <td align="right" valign="top"> <span class="codelink"><a href="flumotion.component.misc.httpserver.cachedprovider-pysrc.html#CopySession._closeReadTempFile">source code</a></span> </td> </tr> </table> </td> </tr> <tr class="private"> <td width="15%" align="right" valign="top" class="summary"> <span class="summary-type"> </span> </td><td class="summary"> <table width="100%" cellpadding="0" cellspacing="0" border="0"> <tr> <td><span class="summary-sig"><a name="_closeWriteTempFile"></a><span class="summary-sig-name">_closeWriteTempFile</span>(<span class="summary-sig-arg">self</span>)</span></td> <td align="right" valign="top"> <span class="codelink"><a href="flumotion.component.misc.httpserver.cachedprovider-pysrc.html#CopySession._closeWriteTempFile">source code</a></span> </td> </tr> </table> </td> </tr> <tr> <td colspan="2" class="summary"> <p class="indent-wrapped-lines"><b>Inherited from <code><a href="flumotion.extern.log.log.Loggable-class.html">extern.log.log.Loggable</a></code></b>: <code><a href="flumotion.extern.log.log.Loggable-class.html#__providedBy__">__providedBy__</a></code>, <code><a href="flumotion.extern.log.log.Loggable-class.html#__provides__">__provides__</a></code>, <code><a href="flumotion.extern.log.log.Loggable-class.html#debug">debug</a></code>, <code><a href="flumotion.extern.log.log.Loggable-class.html#doLog">doLog</a></code>, <code><a href="flumotion.extern.log.log.Loggable-class.html#error">error</a></code>, <code><a href="flumotion.extern.log.log.Loggable-class.html#info">info</a></code>, <code><a href="flumotion.extern.log.log.Loggable-class.html#log">log</a></code>, <code><a href="flumotion.extern.log.log.Loggable-class.html#logFunction">logFunction</a></code>, <code><a href="flumotion.extern.log.log.Loggable-class.html#logObjectName">logObjectName</a></code>, <code><a href="flumotion.extern.log.log.Loggable-class.html#warning">warning</a></code>, <code><a href="flumotion.extern.log.log.Loggable-class.html#warningFailure">warningFailure</a></code>, <code><a href="flumotion.extern.log.log.Loggable-class.html#writeMarker">writeMarker</a></code> </p> </td> </tr> </table> <!-- ==================== CLASS VARIABLES ==================== --> <a name="section-ClassVariables"></a> <table class="summary" border="1" cellpadding="3" cellspacing="0" width="100%" bgcolor="white"> <tr bgcolor="#70b0f0" class="table-header"> <td colspan="2" class="table-header"> <table border="0" cellpadding="0" cellspacing="0" width="100%"> <tr valign="top"> <td align="left"><span class="table-header">Class Variables</span></td> <td align="right" valign="top" ><span class="options">[<a href="#section-ClassVariables" class="privatelink" onclick="toggle_private();" >hide private</a>]</span></td> </tr> </table> </td> </tr> <tr> <td width="15%" align="right" valign="top" class="summary"> <span class="summary-type"> </span> </td><td class="summary"> <a name="logCategory"></a><span class="summary-name">logCategory</span> = <code title="'fileprovider-localcached'"><code class="variable-quote">'</code><code class="variable-string">fileprovider-localcached</code><code class="variable-quote">'</code></code><br /> Implementors can provide a category to log their messages under. </td> </tr> <tr> <td colspan="2" class="summary"> <p class="indent-wrapped-lines"><b>Inherited from <code><a href="flumotion.extern.log.log.Loggable-class.html">extern.log.log.Loggable</a></code></b>: <code><a href="flumotion.extern.log.log.Loggable-class.html#__implemented__">__implemented__</a></code> </p> </td> </tr> </table> <!-- ==================== NAVIGATION BAR ==================== --> <table class="navbar" border="0" width="100%" cellpadding="0" bgcolor="#a0c0ff" cellspacing="0"> <tr valign="middle"> <!-- Tree link --> <th> <a href="module-tree.html">Trees</a> </th> <!-- Index link --> <th> <a href="identifier-index.html">Indices</a> </th> <!-- Help link --> <th> <a href="help.html">Help</a> </th> <th class="navbar" width="100%"></th> </tr> </table> <table border="0" cellpadding="0" cellspacing="0" width="100%%"> <tr> <td align="left" class="footer"> Generated by Epydoc 3.0.1 on Wed Aug 11 21:33:15 2010 </td> <td align="right" class="footer"> <a target="mainFrame" href="http://epydoc.sourceforge.net" >http://epydoc.sourceforge.net</a> </td> </tr> </table> <script type="text/javascript"> <!-- // Private objects are initially displayed (because if // javascript is turned off then we want them to be // visible); but by default, we want to hide them. So hide // them unless we have a cookie that says to show them. checkCookie(); // --> </script> </body> </html>