[ndnSIM] [2] ContentStore order

Alex Afanasyev alexander.afanasyev at ucla.edu
Mon Nov 18 10:15:35 PST 2013


Oh... I forgot to mention to update the ndnSIM codebase.  I have added GetPolicy() method to ContentStoreImpl class.

Making it public also solves the problem, but I have intentionally made the qualifier protected, so to ensure that access to the data is only through ContentStore interface.

---
Alex


On Nov 17, 2013, at 9:55 PM, Wassim Drira <drirawassim+ndnsim at gmail.com> wrote:

> I resolved the issue by changing protected to public in :
> 
> template<class Policy>
> class ContentStoreImpl : public ContentStore,
>                          protected ndnSIM::trie_with_policy< Name,
> 
> 
> Regards,
> 
> 
> On Mon, Nov 18, 2013 at 5:48 AM, Wassim Drira <drirawassim+ndnsim at gmail.com> wrote:
> Hi Alex, 
> 
> Thanks Alex! 
> This resolves partially the issue, when I use cs->Print(std::cout); the entries are correctly printed but when I use for (Policy::iterator it = cs->GetPolicy().begin (); ... it gives me a build error.
> 
> %%%%%%%% ----- Build Error ----- %%%%%%%
> ./ns3/ndnSIM/model/cs/../../utils/trie/trie-with-policy.h: In member function ‘virtual void ns3::ndn::ANode::OnMsg(ns3::Ptr<const ns3::ndn::Data>)’:
> ./ns3/ndnSIM/model/cs/../../utils/trie/trie-with-policy.h:288:3: error: ‘ns3::ndn::ndnSIM::trie_with_policy<FullKey, PayloadTraits, PolicyTraits>::policy_container& ns3::ndn::ndnSIM::trie_with_policy<FullKey, PayloadTraits, PolicyTraits>::getPolicy() [with FullKey = ns3::ndn::Name, PayloadTraits = ns3::ndn::ndnSIM::smart_pointer_payload_traits<ns3::ndn::cs::EntryImpl<ns3::ndn::cs::ContentStoreImpl<ns3::ndn::ndnSIM::fifo_policy_traits> >, ns3::ndn::cs::Entry>, PolicyTraits = ns3::ndn::ndnSIM::fifo_policy_traits, ns3::ndn::ndnSIM::trie_with_policy<FullKey, PayloadTraits, PolicyTraits>::policy_container = ns3::ndn::ndnSIM::fifo_policy_traits::policy<ns3::ndn::ndnSIM::trie_with_policy<ns3::ndn::Name, ns3::ndn::ndnSIM::smart_pointer_payload_traits<ns3::ndn::cs::EntryImpl<ns3::ndn::cs::ContentStoreImpl<ns3::ndn::ndnSIM::fifo_policy_traits> >, ns3::ndn::cs::Entry>, ns3::ndn::ndnSIM::fifo_policy_traits>, ns3::ndn::ndnSIM::trie<ns3::ndn::Name, ns3::ndn::ndnSIM::smart_pointer_payload_traits<ns3::ndn::cs::EntryImpl<ns3::ndn::cs::ContentStoreImpl<ns3::ndn::ndnSIM::fifo_policy_traits> >, ns3::ndn::cs::Entry>, ns3::ndn::ndnSIM::fifo_policy_traits::policy_hook_type>, boost::intrusive::member_hook<ns3::ndn::ndnSIM::trie<ns3::ndn::Name, ns3::ndn::ndnSIM::smart_pointer_payload_traits<ns3::ndn::cs::EntryImpl<ns3::ndn::cs::ContentStoreImpl<ns3::ndn::ndnSIM::fifo_policy_traits> >, ns3::ndn::cs::Entry>, ns3::ndn::ndnSIM::fifo_policy_traits::policy_hook_type>, ns3::ndn::ndnSIM::fifo_policy_traits::policy_hook_type, &ns3::ndn::ndnSIM::trie<ns3::ndn::Name, ns3::ndn::ndnSIM::smart_pointer_payload_traits<ns3::ndn::cs::EntryImpl<ns3::ndn::cs::ContentStoreImpl<ns3::ndn::ndnSIM::fifo_policy_traits> >, ns3::ndn::cs::Entry>, ns3::ndn::ndnSIM::fifo_policy_traits::policy_hook_type>::policy_hook_> >::type]’ is inaccessible
> ../src/ndnSIM/apps/ndn-anode-simple.cc:182:46: error: within this context
> ../src/ndnSIM/apps/ndn-anode-simple.cc:182:46: error: ‘ns3::ndn::ndnSIM::trie_with_policy<ns3::ndn::Name, ns3::ndn::ndnSIM::smart_pointer_payload_traits<ns3::ndn::cs::EntryImpl<ns3::ndn::cs::ContentStoreImpl<ns3::ndn::ndnSIM::fifo_policy_traits> >, ns3::ndn::cs::Entry>, ns3::ndn::ndnSIM::fifo_policy_traits>’ is not an accessible base of ‘ns3::ndn::cs::ContentStoreImpl<ns3::ndn::ndnSIM::fifo_policy_traits>’
> ./ns3/ndnSIM/model/cs/../../utils/trie/trie-with-policy.h:288:3: error: ‘ns3::ndn::ndnSIM::trie_with_policy<FullKey, PayloadTraits, PolicyTraits>::policy_container& ns3::ndn::ndnSIM::trie_with_policy<FullKey, PayloadTraits, PolicyTraits>::getPolicy() [with FullKey = ns3::ndn::Name, PayloadTraits = ns3::ndn::ndnSIM::smart_pointer_payload_traits<ns3::ndn::cs::EntryImpl<ns3::ndn::cs::ContentStoreImpl<ns3::ndn::ndnSIM::fifo_policy_traits> >, ns3::ndn::cs::Entry>, PolicyTraits = ns3::ndn::ndnSIM::fifo_policy_traits, ns3::ndn::ndnSIM::trie_with_policy<FullKey, PayloadTraits, PolicyTraits>::policy_container = ns3::ndn::ndnSIM::fifo_policy_traits::policy<ns3::ndn::ndnSIM::trie_with_policy<ns3::ndn::Name, ns3::ndn::ndnSIM::smart_pointer_payload_traits<ns3::ndn::cs::EntryImpl<ns3::ndn::cs::ContentStoreImpl<ns3::ndn::ndnSIM::fifo_policy_traits> >, ns3::ndn::cs::Entry>, ns3::ndn::ndnSIM::fifo_policy_traits>, ns3::ndn::ndnSIM::trie<ns3::ndn::Name, ns3::ndn::ndnSIM::smart_pointer_payload_traits<ns3::ndn::cs::EntryImpl<ns3::ndn::cs::ContentStoreImpl<ns3::ndn::ndnSIM::fifo_policy_traits> >, ns3::ndn::cs::Entry>, ns3::ndn::ndnSIM::fifo_policy_traits::policy_hook_type>, boost::intrusive::member_hook<ns3::ndn::ndnSIM::trie<ns3::ndn::Name, ns3::ndn::ndnSIM::smart_pointer_payload_traits<ns3::ndn::cs::EntryImpl<ns3::ndn::cs::ContentStoreImpl<ns3::ndn::ndnSIM::fifo_policy_traits> >, ns3::ndn::cs::Entry>, ns3::ndn::ndnSIM::fifo_policy_traits::policy_hook_type>, ns3::ndn::ndnSIM::fifo_policy_traits::policy_hook_type, &ns3::ndn::ndnSIM::trie<ns3::ndn::Name, ns3::ndn::ndnSIM::smart_pointer_payload_traits<ns3::ndn::cs::EntryImpl<ns3::ndn::cs::ContentStoreImpl<ns3::ndn::ndnSIM::fifo_policy_traits> >, ns3::ndn::cs::Entry>, ns3::ndn::ndnSIM::fifo_policy_traits::policy_hook_type>::policy_hook_> >::type]’ is inaccessible
> ../src/ndnSIM/apps/ndn-anode-simple.cc:183:30: error: within this context
> ../src/ndnSIM/apps/ndn-anode-simple.cc:183:30: error: ‘ns3::ndn::ndnSIM::trie_with_policy<ns3::ndn::Name, ns3::ndn::ndnSIM::smart_pointer_payload_traits<ns3::ndn::cs::EntryImpl<ns3::ndn::cs::ContentStoreImpl<ns3::ndn::ndnSIM::fifo_policy_traits> >, ns3::ndn::cs::Entry>, ns3::ndn::ndnSIM::fifo_policy_traits>’ is not an accessible base of ‘ns3::ndn::cs::ContentStoreImpl<ns3::ndn::ndnSIM::fifo_policy_traits>’
> 
> Regards,
> 
> 
> On Sun, Nov 17, 2013 at 10:58 PM, Alex Afanasyev <alexander.afanasyev at ucla.edu> wrote:
> Hi Wassim,
> 
> Cache is organized as a hash-based container, so it is expected that entries are not in any particular order.  To get access to policy-based ordering (FIFO in your case), you would need a little bit more complex code.  Here is a basic example:
> 
> #include "ns3/ndnSIM/model/cs/content-store-impl.h"
> #include "ns3/ndnSIM/utils/trie/fifo-policy.h"
> #include "ns3/ndnSIM/utils/trie/random-policy.h"
> 
> ...
> 
> 
>   // typedef ns3::ndn::ndnSIM::random_policy_traits policy;
>   typedef ns3::ndn::ndnSIM::fifo_policy_traits policy;
>   
>   typedef ns3::ndn::cs::ContentStoreImpl<policy> CS;
>   typedef CS::super::policy_container Policy;
> 
>   Ptr<CS> cs = DynamicCast<CS> (NodeList::GetNode(1)->GetObject<ndn::ContentStore> ());
>   if (!cs)
>     {
>       std::cerr << "Please select the right CS policy" << std::endl;
>       exit (1);
>     }
> 
>   for (Policy::iterator it = cs->GetPolicy().begin ();
>        it != cs->GetPolicy().end();
>        it++)
>     {
>       std::cout << it->payload()->GetName() << std::endl;
>     }
> 
> ---
> Alex
> 
> On Nov 17, 2013, at 3:37 AM, Wassim Drira <drirawassim+ndnsim at gmail.com> wrote:
> 
>> Hi all,
>> 
>> I am using ContentStore to store some msgs in reception order. I am using the fifo variant. The issue is when printing the content of the cache, it looks not ordered as you can see below (sequence number in the end of the name).
>> 
>> Do you have an idea about the cause and may be a solution to this issue...
>> 
>> %%%%%%%% ----- Code ----- %%%%%%%
>> ObjectFactory m_contentStoreFactory;
>> m_contentStoreFactory.SetTypeId ("ns3::ndn::cs::Stats::Fifo");
>> m_contentStoreFactory.Set("MaxSize", StringValue ("50"));
>> m_pubCS = m_contentStoreFactory.Create<ContentStore> ();
>> ......
>> Ptr<ns3::ndn::cs::Entry> entry = m_pubCS->Begin();
>> while(entry){
>>         NS_LOG_DEBUG("Cache Entry:"<< entry->GetData()->GetName());
>>         entry = m_pubCS->Next(entry);
>> }
>> %%%%%%%% ----- OutPut ----- %%%%%%%
>> 18.0186s 1 ndn.ANode:OnMsg(): [DEBUG] Cache Entry:/news/2/%00%02
>> 18.0186s 1 ndn.ANode:OnMsg(): [DEBUG] Cache Entry:/news/2/%00%01
>> 18.0186s 1 ndn.ANode:OnMsg(): [DEBUG] Cache Entry:/news/2/%00%04
>> 18.0186s 1 ndn.ANode:OnMsg(): [DEBUG] Cache Entry:/news/2/%00%03
>> 18.0186s 1 ndn.ANode:OnMsg(): [DEBUG] Cache Entry:/news/2/%00%06
>> 18.0186s 1 ndn.ANode:OnMsg(): [DEBUG] Cache Entry:/news/2/%00%05
>> 18.0186s 1 ndn.ANode:OnMsg(): [DEBUG] Cache Entry:/news/2/%00%08
>> 18.0186s 1 ndn.ANode:OnMsg(): [DEBUG] Cache Entry:/news/2/%00%07
>> 18.0186s 1 ndn.ANode:OnMsg(): [DEBUG] Cache Entry:/news/2/%00%0A
>> 18.0186s 1 ndn.ANode:OnMsg(): [DEBUG] Cache Entry:/news/2/%00%09
>> 18.0186s 1 ndn.ANode:OnMsg(): [DEBUG] Cache Entry:/news/2/%00%0C
>> 18.0186s 1 ndn.ANode:OnMsg(): [DEBUG] Cache Entry:/news/2/%00%0B
>> 18.0186s 1 ndn.ANode:OnMsg(): [DEBUG] Cache Entry:/news/2/%00%0E
>> 18.0186s 1 ndn.ANode:OnMsg(): [DEBUG] Cache Entry:/news/2/%00%0D
>> 18.0186s 1 ndn.ANode:OnMsg(): [DEBUG] Cache Entry:/news/2/%00%10
>> 18.0186s 1 ndn.ANode:OnMsg(): [DEBUG] Cache Entry:/news/2/%00%0F
>> 
>> 
>> Best regards
>> _______________________________________________
>> ndnSIM mailing list
>> ndnSIM at lists.cs.ucla.edu
>> http://www.lists.cs.ucla.edu/mailman/listinfo/ndnsim
> 
> 
> 
> _______________________________________________
> ndnSIM mailing list
> ndnSIM at lists.cs.ucla.edu
> http://www.lists.cs.ucla.edu/mailman/listinfo/ndnsim

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://www.lists.cs.ucla.edu/pipermail/ndnsim/attachments/20131118/95f7eda9/attachment.html>


More information about the ndnSIM mailing list