<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
</head>
<body style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space;" class="">
<div class="">Hi all,</div>
<div class=""><br class="">
</div>
<div class="">I’m curious whether there is any work done on the issue I’ll explain below. The issue concerns fetching historical chat data that was generated while a user was gone from the chat. This means two cases:</div>
<div class=""><br class="">
</div>
<div class=""><b class="">#1 Newcomers</b></div>
<div class="">In current <a href="https://github.com/named-data/ndn-cpp/blob/master/include/ndn-cpp/sync/chrono-sync2013.hpp" class="">ChronoSync implementation</a>, when a newcomer wants to join
<b class="">existing chat</b> (i.e. chat that was created earlier by someone else), she issues initial sync interest with “00” marker (or any
<i class="">initial</i> marker defined by implementation). Then, she waits for the current sync state data object (which contains current digest tree). This sync state data object can be sent out only by one of the currently active members (in the chatroom).
 Hence, the problem - if there are <b class="">no</b> <b class="">active chat members
</b>(meaning, everyone already left the chatroom)<b class="">, </b>newcomer will never receive the latest sync state object and eventually, will initialize a new digest tree from scratch, thus leaving herself without knowledge of the previous chat history.</div>
<div class="">Basically, I’m trying to figure out now how to prevent this and allow newcomers to retrieve chat history that was generated before them, without relying on the presence of active chat members.</div>
<div class=""><br class="">
</div>
<div class=""><b class="">#2 Returning users</b></div>
<div class="">Similar case, but simpler, with <b class="">returning users. </b>How do returning users (those, who were in the chat earlier, left eventually and now have joined chat again) can fetch all the data that was published while they were gone? </div>
<div class="">I<i class="">MPORTANT NOTE: For both cases (#1 and #2), I assume the presence of the "network persistent storage" which stores all chat and sync data.
</i>With such assumption, I think, fetching of historical data can be resolved rather straightforwardly: returning user instead of issuing initial sync interest (with “00” marker) issues sync interest with the digest, known for her when she left. Upon receiving
 sync state data, she updates digest tree with new changes and issues another, new sync interest. By repeating these steps sequentially, returning user is able to “fast-forward” to the latest sync state and successfully join the chat.</div>
<div class=""><br class="">
</div>
<div class="">Back to the case #1 -  after some thinking on the possible implementation workarounds, I came with few alternatives, neither of which seems satisfying to me:</div>
<div class=""><br class="">
</div>
<div class="">1/ Publish initial sync state data (initial digest tree generated by chat’s creator) under the name with initial marker (“00”). </div>
<div class="">As this data will go to the “network persistent storage” (i guess this will need to be clarified further on what does it actually mean), newcomers are able to receive data for their initial interests without requiring any active members in the
 chat. Upon receipt of this data, they “fast-forward” in a similar way as returning users do.</div>
<div class=""><br class="">
</div>
<div class="">2/ Publish versioned meta-object under the name with initial marker (“00”) which encapsulates <i class="">latest sync state object
</i>(or it’s name) so that newcomer is able to use exclusion filters and/or rightmost child selector to quickly "jump" to the latest sync state object.</div>
<div class="">As this meta-object needs to be re-generated every time sync state object is updated, it seems that there might be potential difficulties in cases of simultaneous data generation and recovering.</div>
<div class=""><br class="">
</div>
<div class="">3/ Use digests, where every newly generated digest comes after previous one in lexicographical order.</div>
<div class="">That way, newcomers simply use RightMostChild selector for initial interest (instead of “00” marker) to fetch latest available sync state. </div>
<div class="">Didn’t do any research yet on whether this is possible in ChronoSync case (<a href="http://www.itu.dk/people/pagh/papers/sparse.pdf" class="">this</a> seems relevant).</div>
<div class=""><br class="">
</div>
<div class="">Please, let me know what you guys think on any of this. Any input will be appreciated.</div>
<div class="">
<div style="color: rgb(0, 0, 0); letter-spacing: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-stroke-width: 0px; word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space;" class="">
<div style="color: rgb(0, 0, 0); letter-spacing: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-stroke-width: 0px; word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space;" class="">
<div style="color: rgb(0, 0, 0); letter-spacing: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-stroke-width: 0px; word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space;" class="">
<div style="color: rgb(0, 0, 0); letter-spacing: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-stroke-width: 0px; word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space;" class="">
<div style="color: rgb(0, 0, 0); font-family: Helvetica; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: 2; text-align: -webkit-auto; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space;" class="">
Thanks, </div>
<div style="color: rgb(0, 0, 0); font-family: Helvetica; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: 2; text-align: -webkit-auto; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space;" class="">
<br class="">
</div>
<div style="color: rgb(0, 0, 0); font-family: Helvetica; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: 2; text-align: -webkit-auto; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space;" class="">
-- <br class="">
Peter Gusev</div>
<div style="color: rgb(0, 0, 0); font-family: Helvetica; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: 2; text-align: -webkit-auto; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space;" class="">
<br class="">
<a href="mailto:peter@remap.ucla.edu" class="">peter@remap.ucla.edu</a><br class="">
+1 213 5872748<br class="">
peetonn_ (skype)</div>
<div style="color: rgb(0, 0, 0); font-family: Helvetica; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: 2; text-align: -webkit-auto; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space;" class="">
<br class="">
</div>
<div style="color: rgb(0, 0, 0); font-family: Helvetica; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: 2; text-align: -webkit-auto; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space;" class="">
Software Engineer/Programmer Analyst @ REMAP UCLA<br class="">
<br class="">
Video streaming/ICN networks/Creative Development</div>
</div>
</div>
</div>
</div>
</div>
<br class="">
</body>
</html>