#
# patch "ChangeLog"
# from [e6d610afcc4f92bcbeab2aa860fd84ff8a5bfdb8]
# to [a9a9797a127c19452fcfab59861e0d4ff24be637]
#
# patch "netsync.cc"
# from [11c23b266ccccb4742d2c0ae6502fbca9fccd6c5]
# to [3356a1e19ea706b038af1c28d74ae55e1e6fc712]
#
--- ChangeLog
+++ ChangeLog
@@ -1,5 +1,10 @@
2005-05-30 Timothy Brownawell
+ * netsync.cc: Call note_netsync_*_received hooks in the order they're
+ written to the db (for revisions, gives topological order).
+
+2005-05-30 Timothy Brownawell
+
* lua.{cc,hh}: Replace note_netsync_commit with
note_netsync_{revision,cert,pubkey}_received
* packet.{cc,hh}: Callbacks for cert or key written to the database.
--- netsync.cc
+++ netsync.cc
@@ -236,9 +236,9 @@
auto_ptr revision_out_ticker;
auto_ptr revision_checked_ticker;
- set written_revisions;
- set written_keys;
- set written_certs;
+ vector written_revisions;
+ vector written_keys;
+ vector written_certs;
map< std::pair,
boost::shared_ptr > merkle_tables;
@@ -489,57 +489,69 @@
session::~session()
{
+ vector unattached_certs;
+ map > revcerts;
+ for(vector::iterator i=written_revisions.begin();
+ i!=written_revisions.end(); ++i)
+ revcerts.insert(make_pair(*i, vector()));
+ for(vector::iterator i=written_certs.begin();
+ i!=written_certs.end(); ++i)
+ {
+ map >::iterator j;
+ j=revcerts.find(i->ident);
+ if(j==revcerts.end())
+ unattached_certs.push_back(*i);
+ else
+ j->second.push_back(*i);
+ }
+
//Keys
- for(set::iterator i=written_keys.begin();
+ for(vector::iterator i=written_keys.begin();
i!=written_keys.end(); ++i)
{
app.lua.hook_note_netsync_pubkey_received(*i);
}
//Revisions
- for(set::iterator i=written_revisions.begin();
+ for(vector::iterator i=written_revisions.begin();
i!=written_revisions.end(); ++i)
{
+ vector & ctmp(revcerts[*i]);
set > > certs;
- vector< revision > ctmp;
- app.db.get_revision_certs(*i, ctmp);
- for (vector< revision >::const_iterator j = ctmp.begin();
+ for (vector::const_iterator j = ctmp.begin();
j != ctmp.end(); ++j)
{
cert_value vtmp;
- decode_base64(j->inner().value, vtmp);
- certs.insert(make_pair(j->inner().key,
- make_pair(j->inner().name, vtmp)));
+ decode_base64(j->value, vtmp);
+ certs.insert(make_pair(j->key, make_pair(j->name, vtmp)));
}
app.lua.hook_note_netsync_revision_received(*i, certs);
}
//Certs (not attached to a new revision)
- for(set::iterator i=written_certs.begin();
- i!=written_certs.end(); ++i)
+ for(vector::iterator i = unattached_certs.begin();
+ i != unattached_certs.end(); ++i)
{
- if(written_revisions.find(i->ident)==written_revisions.end())
- {
- cert_value tmp;
- decode_base64(i->value, tmp);
- app.lua.hook_note_netsync_cert_received(i->ident, i->key,
- i->name, tmp);
- }
+ cert_value tmp;
+ decode_base64(i->value, tmp);
+ app.lua.hook_note_netsync_cert_received(i->ident, i->key,
+ i->name, tmp);
+
}
}
void session::rev_written_callback(revision_id rid)
{
if(revision_checked_ticker.get()) ++(*revision_checked_ticker);
- written_revisions.insert(rid);
+ written_revisions.push_back(rid);
}
void session::key_written_callback(rsa_keypair_id kid)
{
- written_keys.insert(kid);
+ written_keys.push_back(kid);
}
void session::cert_written_callback(cert const & c)
{
- written_certs.insert(c);
+ written_certs.push_back(c);
}
id