UNPKG

35.3 kBHTMLView Raw
1<!DOCTYPE html> <html> <head> <title>Log.coffee</title> <meta http-equiv="content-type" content="text/html; charset=UTF-8"> <link rel="stylesheet" media="all" href="docco.css" /> </head> <body> <div id="container"> <div id="background"></div> <div id="jump_to"> Jump To &hellip; <div id="jump_wrapper"> <div id="jump_page"> <a class="source" href="ByteIterable.html"> ByteIterable.coffee </a> <a class="source" href="ByteIterator.html"> ByteIterator.coffee </a> <a class="source" href="ArrayByteIterable.html"> ArrayByteIterable.coffee </a> <a class="source" href="ByteIterableBase.html"> ByteIterableBase.coffee </a> <a class="source" href="ByteIterableUtil.html"> ByteIterableUtil.coffee </a> <a class="source" href="LightOutputStream.html"> LightOutputStream.coffee </a> <a class="source" href="StoreConfiguration.html"> StoreConfiguration.coffee </a> <a class="source" href="Reader.html"> Reader.coffee </a> <a class="source" href="Writer.html"> Writer.coffee </a> <a class="source" href="List.html"> List.coffee </a> <a class="source" href="ListNode.html"> ListNode.coffee </a> <a class="source" href="Cursor.html"> Cursor.coffee </a> <a class="source" href="DatabaseRoot.html"> DatabaseRoot.coffee </a> <a class="source" href="Environment.html"> Environment.coffee </a> <a class="source" href="EnvironmentConfig.html"> EnvironmentConfig.coffee </a> <a class="source" href="Store.html"> Store.coffee </a> <a class="source" href="Transaction.html"> Transaction.coffee </a> <a class="source" href="Addr64.html"> Addr64.coffee </a> <a class="source" href="DataIterator.html"> DataIterator.coffee </a> <a class="source" href="Log.html"> Log.coffee </a> <a class="source" href="LogCache.html"> LogCache.coffee </a> <a class="source" href="LogConfig.html"> LogConfig.coffee </a> <a class="source" href="LogUtil.html"> LogUtil.coffee </a> <a class="source" href="Loggable.html"> Loggable.coffee </a> <a class="source" href="LoggableFactory.html"> LoggableFactory.coffee </a> <a class="source" href="LoggableIterator.html"> LoggableIterator.coffee </a> <a class="source" href="LoggableToWrite.html"> LoggableToWrite.coffee </a> <a class="source" href="NullLoggable.html"> NullLoggable.coffee </a> <a class="source" href="RandomAccessByteIterable.html"> RandomAccessByteIterable.coffee </a> <a class="source" href="RandomAccessLoggable.html"> RandomAccessLoggable.coffee </a> <a class="source" href="RandomAccessLoggableIterator.html"> RandomAccessLoggableIterator.coffee </a> <a class="source" href="StackList.html"> StackList.coffee </a> <a class="source" href="CompoundByteIterable.html"> CompoundByteIterable.coffee </a> <a class="source" href="CompoundByteIteratorBase.html"> CompoundByteIteratorBase.coffee </a> <a class="source" href="CompressedUnsignedLongByteIterable.html"> CompressedUnsignedLongByteIterable.coffee </a> <a class="source" href="FixedLengthByteIterable.html"> FixedLengthByteIterable.coffee </a> </div> </div> </div> <table cellpadding="0" cellspacing="0"> <thead> <tr> <th class="docs"> <h1> Log.coffee </h1> </th> <th class="code"> </th> </tr> </thead> <tbody> <tr id="section-1"> <td class="docs"> <div class="pilwrap"> <a class="pilcrow" href="#section-1">&#182;</a> </div> </td> <td class="code"> <div class="highlight"><pre><span class="nv">fs = </span><span class="nx">require</span> <span class="s1">&#39;fs&#39;</span>
2<span class="nv">Addr64 = </span><span class="p">(</span><span class="nx">require</span> <span class="s1">&#39;./Addr64.coffee&#39;</span><span class="p">).</span><span class="nx">Addr64</span>
3<span class="nv">LogUtil = </span><span class="p">(</span><span class="nx">require</span> <span class="s1">&#39;./LogUtil.coffee&#39;</span><span class="p">).</span><span class="nx">LogUtil</span>
4<span class="nv">EventEmitter = </span><span class="p">(</span><span class="nx">require</span> <span class="s1">&#39;events&#39;</span><span class="p">).</span><span class="nx">EventEmitter</span>
5<span class="nv">DataIterator = </span><span class="p">(</span><span class="nx">require</span> <span class="s1">&#39;./DataIterator.coffee&#39;</span><span class="p">).</span><span class="nx">DataIterator</span>
6<span class="nv">LoggableIterator = </span><span class="p">(</span><span class="nx">require</span> <span class="s1">&#39;./LoggableIterator.coffee&#39;</span><span class="p">).</span><span class="nx">LoggableIterator</span></pre></div> </td> </tr> <tr id="section-2"> <td class="docs"> <div class="pilwrap"> <a class="pilcrow" href="#section-2">&#182;</a> </div> <p>This class implements the virtual file space conception. The data is actually
7stored in several files but the user of Log doesn't need to know anything
8about it. Takes WriteLogable when writing and returns ReadLogable when
9reading. Deals with Addr64 and allows the maximum capacity of 2^64 bytes.</p> </td> <td class="code"> <div class="highlight"><pre><span class="k">class</span> <span class="nx">Log</span> <span class="k">extends</span> <span class="nx">EventEmitter</span></pre></div> </td> </tr> <tr id="section-3"> <td class="docs"> <div class="pilwrap"> <a class="pilcrow" href="#section-3">&#182;</a> </div> <p>@private</p> </td> <td class="code"> <div class="highlight"><pre> <span class="nv">logConfig: </span><span class="kc">undefined</span></pre></div> </td> </tr> <tr id="section-4"> <td class="docs"> <div class="pilwrap"> <a class="pilcrow" href="#section-4">&#182;</a> </div> <p>@private</p> </td> <td class="code"> <div class="highlight"><pre> <span class="nv">directory: </span><span class="kc">undefined</span></pre></div> </td> </tr> <tr id="section-5"> <td class="docs"> <div class="pilwrap"> <a class="pilcrow" href="#section-5">&#182;</a> </div> <p>@private</p> </td> <td class="code"> <div class="highlight"><pre> <span class="nv">fileSize: </span><span class="kc">undefined</span></pre></div> </td> </tr> <tr id="section-6"> <td class="docs"> <div class="pilwrap"> <a class="pilcrow" href="#section-6">&#182;</a> </div> <p>@private</p> </td> <td class="code"> <div class="highlight"><pre> <span class="nv">writer: </span><span class="kc">undefined</span></pre></div> </td> </tr> <tr id="section-7"> <td class="docs"> <div class="pilwrap"> <a class="pilcrow" href="#section-7">&#182;</a> </div> <p>@private</p> </td> <td class="code"> <div class="highlight"><pre> <span class="nv">reader: </span><span class="kc">undefined</span></pre></div> </td> </tr> <tr id="section-8"> <td class="docs"> <div class="pilwrap"> <a class="pilcrow" href="#section-8">&#182;</a> </div> <p>@private</p> </td> <td class="code"> <div class="highlight"><pre> <span class="nv">lastFlushAddr: </span><span class="kc">undefined</span></pre></div> </td> </tr> <tr id="section-9"> <td class="docs"> <div class="pilwrap"> <a class="pilcrow" href="#section-9">&#182;</a> </div> <p>@private</p> </td> <td class="code"> <div class="highlight"><pre> <span class="nv">fn: </span><span class="kc">undefined</span></pre></div> </td> </tr> <tr id="section-10"> <td class="docs"> <div class="pilwrap"> <a class="pilcrow" href="#section-10">&#182;</a> </div> <p>@private</p> </td> <td class="code"> <div class="highlight"><pre> <span class="nv">offset: </span><span class="kc">undefined</span></pre></div> </td> </tr> <tr id="section-11"> <td class="docs"> <div class="pilwrap"> <a class="pilcrow" href="#section-11">&#182;</a> </div> <p>Constructor.</p>
10
11<p>@param logConfig.</p> </td> <td class="code"> <div class="highlight"><pre> <span class="nx">@create</span><span class="nv">$LogConfig: </span><span class="nf">(logConfig, o) -&gt;</span>
12 <span class="k">if</span> <span class="o">!</span><span class="nx">o</span><span class="o">?</span> <span class="k">then</span> <span class="nv">o = </span><span class="k">new</span> <span class="nx">Log</span>
13 <span class="nv">o.logConfig = </span><span class="nx">logConfig</span>
14 <span class="nv">o.directory = </span><span class="nx">logConfig</span><span class="p">.</span><span class="nx">getDir</span><span class="p">()</span>
15 <span class="nv">o.fileSize = </span><span class="nx">logConfig</span><span class="p">.</span><span class="nx">getFileSize</span><span class="p">()</span>
16 <span class="nv">o.writer = </span><span class="nx">logConfig</span><span class="p">.</span><span class="nx">getWriter</span><span class="p">()</span>
17 <span class="nv">o.reader = </span><span class="nx">logConfig</span><span class="p">.</span><span class="nx">getReader</span><span class="p">()</span>
18 <span class="nv">o.lastFlushAddr = </span><span class="kc">undefined</span>
19 <span class="k">return</span> <span class="nx">o</span>
20
21 <span class="nv">getReader: </span><span class="nf">() -&gt;</span>
22 <span class="k">return</span> <span class="nx">@reader</span>
23
24 <span class="nx">hasAddress</span><span class="nv">$Addr64: </span><span class="nf">(address) -&gt;</span>
25 <span class="k">return</span> <span class="nx">address</span><span class="p">.</span><span class="nx">less$Addr64</span> <span class="nx">@writer</span><span class="p">.</span><span class="nx">getHighAddress</span><span class="p">()</span>
26
27 <span class="nv">getHighAddress: </span><span class="nf">() -&gt;</span>
28 <span class="k">return</span> <span class="nx">@writer</span><span class="p">.</span><span class="nx">getHighAddress</span><span class="p">()</span></pre></div> </td> </tr> <tr id="section-12"> <td class="docs"> <div class="pilwrap"> <a class="pilcrow" href="#section-12">&#182;</a> </div> <p>Returns iterator which reads raw bytes of the log starting from
29specified address.</p>
30
31<p>@param address
32@return instance of ByteIterator</p> </td> <td class="code"> <div class="highlight"><pre> <span class="nx">readIteratorFrom</span><span class="nv">$Addr64: </span><span class="nf">(address) -&gt;</span>
33 <span class="k">return</span> <span class="nx">DataIterator</span><span class="p">.</span><span class="nx">create$LogCache$Addr64</span> <span class="nx">@reader</span><span class="p">.</span><span class="nx">getCache</span><span class="p">(),</span> <span class="nx">address</span></pre></div> </td> </tr> <tr id="section-13"> <td class="docs"> <div class="pilwrap"> <a class="pilcrow" href="#section-13">&#182;</a> </div> <p>@private
34Gets filename and offset from address.</p>
35
36<p>@param addr address to be parsed.</p> </td> <td class="code"> <div class="highlight"><pre> <span class="nx">parseAddr</span><span class="nv">$Addr64: </span><span class="nf">(addr) -&gt;</span>
37 <span class="vi">@offset = </span><span class="nx">addr</span><span class="p">.</span><span class="nx">logAnd$Addr64</span><span class="p">(</span><span class="nx">@reader</span><span class="p">.</span><span class="nx">getCache</span><span class="p">().</span><span class="nx">getFileMask</span><span class="p">()).</span><span class="nx">toFloat</span><span class="p">()</span>
38 <span class="vi">@fn = </span><span class="nx">@directory</span> <span class="o">+</span> <span class="nx">LogUtil</span><span class="p">.</span><span class="nx">getLogFilename$Addr64</span> <span class="nx">addr</span>
39
40 <span class="nx">getLastLoggableOfType$int</span><span class="nv">$emit: </span><span class="nf">(type) -&gt;</span>
41 <span class="nv">nullAddr = </span><span class="nx">Addr64</span><span class="p">.</span><span class="nx">create$int$int</span> <span class="mi">0</span><span class="p">,</span> <span class="mi">0</span>
42 <span class="nv">lastLoggableOfType = </span><span class="kc">undefined</span>
43 <span class="nv">addr = </span><span class="nx">@getHighAddress</span><span class="p">()</span>
44 <span class="nx">@parseAddr$Addr64</span> <span class="nx">addr</span>
45 <span class="nv">startAddr = </span><span class="nx">addr</span><span class="p">.</span><span class="nx">plus$int</span><span class="p">(</span><span class="o">-</span><span class="nx">@offset</span><span class="p">)</span>
46 <span class="nv">finishAddr = </span><span class="nx">addr</span>
47 <span class="nv">li = </span><span class="nx">LoggableIterator</span><span class="p">.</span><span class="nx">create$Log$Addr64</span> <span class="k">this</span><span class="p">,</span> <span class="nx">startAddr</span>
48 <span class="nv">lastRead = </span><span class="nx">li</span><span class="p">.</span><span class="nx">getHighAddress</span><span class="p">()</span>
49
50 <span class="k">if</span> <span class="o">!</span><span class="nx">startAddr</span><span class="p">.</span><span class="nx">equals$Addr64</span> <span class="nx">finishAddr</span>
51
52 <span class="nv">moveToPrevFileOrFinish = </span><span class="p">()</span> <span class="o">=&gt;</span>
53 <span class="k">if</span> <span class="nx">lastLoggableOfType</span> <span class="o">!=</span> <span class="kc">undefined</span>
54 <span class="nx">@emit</span> <span class="s1">&#39;getLastLoggableOfType&#39;</span><span class="p">,</span> <span class="nx">lastLoggableOfType</span>
55 <span class="k">else</span>
56 <span class="k">if</span> <span class="o">!</span><span class="nx">startAddr</span><span class="p">.</span><span class="nx">equals$Addr64</span> <span class="nx">nullAddr</span>
57 <span class="nv">finishAddr = </span><span class="nx">startAddr</span><span class="p">.</span><span class="nx">plus$int</span> <span class="mi">0</span>
58 <span class="nv">startAddr = </span><span class="nx">startAddr</span><span class="p">.</span><span class="nx">plus$int</span><span class="p">(</span><span class="o">-</span><span class="nx">@fileSize</span> <span class="o">*</span> <span class="nx">LogUtil</span><span class="p">.</span><span class="nx">LOG_BLOCK_ALIGNMENT</span><span class="p">)</span>
59 <span class="nv">li.it = </span><span class="nx">@readIteratorFrom$Addr64</span> <span class="nx">startAddr</span>
60 <span class="nx">@parseAddr$Addr64</span> <span class="nx">startAddr</span>
61 <span class="nx">li</span><span class="p">.</span><span class="nx">once</span> <span class="s1">&#39;next&#39;</span><span class="p">,</span> <span class="p">(</span><span class="nx">loggable</span><span class="p">)</span> <span class="o">=&gt;</span>
62 <span class="nx">onGetLogable</span> <span class="nx">loggable</span>
63 <span class="nv">loggable = </span><span class="nx">li</span><span class="p">.</span><span class="nx">next$emit</span><span class="p">()</span>
64 <span class="k">if</span> <span class="nx">loggable</span><span class="o">?</span>
65 <span class="nx">li</span><span class="p">.</span><span class="nx">removeAllListeners</span> <span class="s1">&#39;next&#39;</span>
66 <span class="nx">onGetLogable</span> <span class="nx">loggable</span>
67 <span class="k">else</span>
68 <span class="nx">@emit</span> <span class="s1">&#39;getLastLoggableOfType&#39;</span><span class="p">,</span> <span class="nx">lastLoggableOfType</span>
69
70 <span class="nv">continueReading = </span><span class="p">()</span> <span class="o">=&gt;</span>
71 <span class="k">if</span> <span class="o">!</span><span class="nx">li</span><span class="p">.</span><span class="nx">getHighAddress</span><span class="p">().</span><span class="nx">equals$Addr64</span> <span class="nx">finishAddr</span>
72 <span class="nv">b = </span><span class="nx">li</span><span class="p">.</span><span class="nx">hasNext</span><span class="p">()</span>
73 <span class="k">if</span> <span class="nx">b</span>
74 <span class="nx">li</span><span class="p">.</span><span class="nx">once</span> <span class="s1">&#39;next&#39;</span><span class="p">,</span> <span class="p">(</span><span class="nx">loggable</span><span class="p">)</span> <span class="o">=&gt;</span>
75 <span class="nx">onGetLogable</span> <span class="nx">loggable</span>
76 <span class="nv">loggable = </span><span class="nx">li</span><span class="p">.</span><span class="nx">next$emit</span><span class="p">()</span>
77 <span class="k">if</span> <span class="nx">loggable</span><span class="o">?</span>
78 <span class="nx">li</span><span class="p">.</span><span class="nx">removeAllListeners</span> <span class="s1">&#39;next&#39;</span>
79 <span class="nx">onGetLogable</span> <span class="nx">loggable</span>
80 <span class="k">else</span>
81 <span class="nx">moveToPrevFileOrFinish</span><span class="p">()</span>
82 <span class="k">else</span>
83 <span class="nx">moveToPrevFileOrFinish</span><span class="p">()</span>
84
85 <span class="nv">onGetLogable = </span><span class="p">(</span><span class="nx">loggable</span><span class="p">)</span> <span class="o">=&gt;</span>
86 <span class="k">if</span> <span class="nx">loggable</span><span class="p">.</span><span class="nx">getType</span><span class="p">()</span> <span class="o">==</span> <span class="nx">type</span>
87 <span class="nv">lastLoggableOfType = </span><span class="nx">loggable</span>
88 <span class="nx">continueReading</span><span class="p">()</span>
89
90 <span class="nx">li</span><span class="p">.</span><span class="nx">once</span> <span class="s1">&#39;next&#39;</span><span class="p">,</span> <span class="p">(</span><span class="nx">loggable</span><span class="p">)</span> <span class="o">=&gt;</span>
91 <span class="nx">onGetLogable</span> <span class="nx">loggable</span>
92 <span class="nv">loggable = </span><span class="nx">li</span><span class="p">.</span><span class="nx">next$emit</span><span class="p">()</span>
93 <span class="k">if</span> <span class="nx">loggable</span><span class="o">?</span>
94 <span class="nx">li</span><span class="p">.</span><span class="nx">removeAllListeners</span> <span class="s1">&#39;next&#39;</span>
95 <span class="nx">onGetLogable</span> <span class="nx">loggable</span>
96 <span class="k">else</span>
97 <span class="nx">@emit</span> <span class="s1">&#39;getLastLoggableOfType&#39;</span><span class="p">,</span> <span class="kc">undefined</span></pre></div> </td> </tr> <tr id="section-14"> <td class="docs"> <div class="pilwrap"> <a class="pilcrow" href="#section-14">&#182;</a> </div> <p>Reads Loggable.</p>
98
99<p>@param addr Addr64 object that points at position of addr in log.
100Event 'read' is emitted when done. Note: the data in this Logable is not
101actually read! Take dataIterator from logable and use its methods
102for reading.</p> </td> <td class="code"> <div class="highlight"><pre> <span class="nx">read$Addr64</span><span class="nv">$emit: </span><span class="nf">(addr) -&gt;</span>
103 <span class="nv">addrString = </span><span class="nx">Addr64</span><span class="p">.</span><span class="nx">addr64ToString$Addr64$int</span><span class="p">(</span><span class="nx">addr</span><span class="p">,</span> <span class="nx">LogUtil</span><span class="p">.</span><span class="nx">LOG_NAME_BASE</span><span class="p">)</span>
104 <span class="nx">@reader</span><span class="p">.</span><span class="nx">once</span> <span class="s1">&#39;read&#39;</span> <span class="o">+</span> <span class="nx">addrString</span><span class="p">,</span> <span class="p">(</span><span class="nx">loggable</span><span class="p">)</span> <span class="o">=&gt;</span>
105 <span class="nx">@emit</span> <span class="s1">&#39;read&#39;</span> <span class="o">+</span> <span class="nx">addrString</span><span class="p">,</span> <span class="nx">loggable</span>
106 <span class="nx">@reader</span><span class="p">.</span><span class="nx">read$Addr64$emit</span> <span class="nx">addr</span></pre></div> </td> </tr> <tr id="section-15"> <td class="docs"> <div class="pilwrap"> <a class="pilcrow" href="#section-15">&#182;</a> </div> <p>Reads Loggable.</p>
107
108<p>@param it DataIterator that points at position of addr in log.
109Event 'read' is emitted when done. Note: the data in this Logable is not
110actually read! Take dataIterator from logable and use its methods
111for reading.</p> </td> <td class="code"> <div class="highlight"><pre> <span class="nx">read$DataIterator</span><span class="nv">$emit: </span><span class="nf">(it) -&gt;</span>
112 <span class="nv">addrString = </span><span class="nx">Addr64</span><span class="p">.</span>
113 <span class="nx">addr64ToString$Addr64$int</span><span class="p">(</span><span class="nx">it</span><span class="p">.</span><span class="nx">getHighAddress</span><span class="p">(),</span> <span class="nx">LogUtil</span><span class="p">.</span><span class="nx">LOG_NAME_BASE</span><span class="p">)</span>
114 <span class="nx">@reader</span><span class="p">.</span><span class="nx">once</span> <span class="s1">&#39;read&#39;</span> <span class="o">+</span> <span class="nx">addrString</span><span class="p">,</span> <span class="p">(</span><span class="nx">loggable</span><span class="p">)</span> <span class="o">=&gt;</span>
115 <span class="nx">@emit</span> <span class="s1">&#39;read&#39;</span> <span class="o">+</span> <span class="nx">addrString</span><span class="p">,</span> <span class="nx">loggable</span>
116 <span class="nx">@reader</span><span class="p">.</span><span class="nx">read$DataIterator$emit</span> <span class="nx">it</span></pre></div> </td> </tr> <tr id="section-16"> <td class="docs"> <div class="pilwrap"> <a class="pilcrow" href="#section-16">&#182;</a> </div> <p>Reads Loggable.</p>
117
118<p>@param addr Addr64 object that points at position of addr in log.
119@param it DataIterator that points at position of addr in log.
120Event 'read' is emitted when done. Note: the data in this Logable is not
121actually read! Take dataIterator from logable and use its methods
122for reading.</p> </td> <td class="code"> <div class="highlight"><pre> <span class="nx">read$DataIterator$Addr64</span><span class="nv">$emit: </span><span class="nf">(it, addr) -&gt;</span>
123 <span class="nv">addrString = </span><span class="nx">Addr64</span><span class="p">.</span>
124 <span class="nx">addr64ToString$Addr64$int</span><span class="p">(</span><span class="nx">it</span><span class="p">.</span><span class="nx">getHighAddress</span><span class="p">(),</span> <span class="nx">LogUtil</span><span class="p">.</span><span class="nx">LOG_NAME_BASE</span><span class="p">)</span>
125 <span class="nx">@reader</span><span class="p">.</span><span class="nx">once</span> <span class="s1">&#39;read&#39;</span> <span class="o">+</span> <span class="nx">addrString</span><span class="p">,</span> <span class="p">(</span><span class="nx">loggable</span><span class="p">)</span> <span class="o">=&gt;</span>
126 <span class="nx">@emit</span> <span class="s1">&#39;read&#39;</span> <span class="o">+</span> <span class="nx">addrString</span><span class="p">,</span> <span class="nx">loggable</span>
127 <span class="nx">@reader</span><span class="p">.</span><span class="nx">read$DataIterator$emit</span> <span class="nx">it</span></pre></div> </td> </tr> <tr id="section-17"> <td class="docs"> <div class="pilwrap"> <a class="pilcrow" href="#section-17">&#182;</a> </div> <p>Pad current file with null loggables. Null loggable takes only one byte in
128the log,so each file of the log with arbitrary alignment can be padded with
129nulls. Padding with nulls is automatically performed when a loggable to be
130written can't be placed within the appendable file without overcome
131of the value of fileLengthBound. This feature allows to guarantee that
132each file starts with a new loggable, no loggable can begin in one file
133and end in another. Also, this simplifies reading algorithm: if we started
134reading by address it definitely should finish within current file.</p> </td> <td class="code"> <div class="highlight"><pre> <span class="nv">padWithNulls: </span><span class="nf">() -&gt;</span>
135 <span class="nx">@writer</span><span class="p">.</span><span class="nx">padWithNulls</span><span class="p">()</span></pre></div> </td> </tr> <tr id="section-18"> <td class="docs"> <div class="pilwrap"> <a class="pilcrow" href="#section-18">&#182;</a> </div> <p>Writes specified loggable continuously in a single file.</p>
136
137<p>@param loggable the loggable to write.
138@return address where the loggable was placed or undefined value
139if the loggable can't be written continuously in current appendable file.</p> </td> <td class="code"> <div class="highlight"><pre> <span class="nx">writeContinuosly</span><span class="nv">$Loggable: </span><span class="nf">(loggable) -&gt;</span>
140 <span class="k">return</span> <span class="nx">@writer</span><span class="p">.</span><span class="nx">write$Loggable</span> <span class="nx">loggable</span></pre></div> </td> </tr> <tr id="section-19"> <td class="docs"> <div class="pilwrap"> <a class="pilcrow" href="#section-19">&#182;</a> </div> <p>Writes a loggable to the end of the log
141If padding is needed, it is performed, but loggable is not written</p>
142
143<p>@param loggable - loggable to write.
144@return address where the loggable was placed.</p> </td> <td class="code"> <div class="highlight"><pre> <span class="nx">tryWrite</span><span class="nv">$Loggable: </span><span class="nf">(loggable) -&gt;</span>
145 <span class="nv">res = </span><span class="nx">@writeContinuosly$Loggable</span> <span class="nx">loggable</span>
146 <span class="k">if</span> <span class="o">!</span><span class="nx">res</span><span class="o">?</span>
147 <span class="nx">@padWithNulls</span><span class="p">()</span>
148 <span class="k">return</span> <span class="nx">res</span></pre></div> </td> </tr> <tr id="section-20"> <td class="docs"> <div class="pilwrap"> <a class="pilcrow" href="#section-20">&#182;</a> </div> <p>Writes a loggable to the end of the log padding the log with nulls if
149necessary. So auto-alignment guarantees the loggable to be placed in a
150single file. The exact time of writing is not known. Use close or flush
151to be sure that data is stored on disk.</p>
152
153<p>@param loggable - loggable to write.
154@return address where the loggable was placed.</p> </td> <td class="code"> <div class="highlight"><pre> <span class="nx">write</span><span class="nv">$Loggable: </span><span class="nf">(loggable) -&gt;</span>
155 <span class="vi">@lastFlushAddr = </span><span class="kc">undefined</span>
156 <span class="vi">@lastStructureId = </span><span class="nx">loggable</span><span class="p">.</span><span class="nx">structureId</span>
157 <span class="nv">res = </span><span class="nx">@writeContinuosly$Loggable</span> <span class="nx">loggable</span>
158 <span class="k">if</span> <span class="o">!</span><span class="nx">res</span><span class="o">?</span>
159 <span class="nx">@padWithNulls</span><span class="p">()</span>
160 <span class="nv">res = </span><span class="nx">@writeContinuosly$Loggable</span> <span class="nx">loggable</span>
161 <span class="k">return</span> <span class="nx">res</span></pre></div> </td> </tr> <tr id="section-21"> <td class="docs"> <div class="pilwrap"> <a class="pilcrow" href="#section-21">&#182;</a> </div> <p>Closes all streams. This is the last operation, it's impossible to write
162after it. Use flush if you want to write more.</p> </td> <td class="code"> <div class="highlight"><pre> <span class="nx">close</span><span class="nv">$emit: </span><span class="nf">() -&gt;</span>
163 <span class="nx">@writer</span><span class="p">.</span><span class="nx">once</span> <span class="s1">&#39;close&#39;</span><span class="p">,</span> <span class="p">()</span> <span class="o">=&gt;</span>
164 <span class="nx">@emit</span> <span class="s1">&#39;close&#39;</span>
165 <span class="nx">@writer</span><span class="p">.</span><span class="nx">close$emit</span><span class="p">()</span></pre></div> </td> </tr> <tr id="section-22"> <td class="docs"> <div class="pilwrap"> <a class="pilcrow" href="#section-22">&#182;</a> </div> <p>Flushes data. Use this method to be sure that data is stored on disk and
166you can continue. Do not continue writing before event 'flush' is emitted.</p>
167
168<p>@return addr of the end of data flushed.</p> </td> <td class="code"> <div class="highlight"><pre> <span class="nx">flush</span><span class="nv">$emit: </span><span class="nf">() -&gt;</span>
169 <span class="k">if</span> <span class="nx">@lastFlushAddr</span> <span class="o">==</span> <span class="kc">undefined</span>
170 <span class="nx">@writer</span><span class="p">.</span><span class="nx">once</span> <span class="s1">&#39;flush&#39;</span><span class="p">,</span> <span class="p">()</span> <span class="o">=&gt;</span>
171 <span class="nx">@emit</span> <span class="s1">&#39;flush&#39;</span>
172 <span class="vi">@lastFlushAddr = </span><span class="nx">@writer</span><span class="p">.</span><span class="nx">flush$emit</span><span class="p">()</span>
173 <span class="k">else</span>
174 <span class="nx">@emit</span> <span class="s1">&#39;flush&#39;</span>
175 <span class="k">return</span> <span class="nx">@lastFlushAddr</span>
176
177<span class="nv">exports.Log = </span><span class="nx">Log</span>
178
179</pre></div> </td> </tr> </tbody> </table> </div> </body> </html>
\No newline at end of file