No longer artificially limit the size of entries
Instead, serialize the entries and split them up over multiple blobs.
This commit is contained in:
		@@ -8,7 +8,6 @@
 | 
				
			|||||||
use entry::{create_entry_mut, Entry};
 | 
					use entry::{create_entry_mut, Entry};
 | 
				
			||||||
use event::Event;
 | 
					use event::Event;
 | 
				
			||||||
use hash::{hash, Hash};
 | 
					use hash::{hash, Hash};
 | 
				
			||||||
use packet::BLOB_DATA_SIZE;
 | 
					 | 
				
			||||||
use std::mem;
 | 
					use std::mem;
 | 
				
			||||||
use std::sync::mpsc::{Receiver, SyncSender, TryRecvError};
 | 
					use std::sync::mpsc::{Receiver, SyncSender, TryRecvError};
 | 
				
			||||||
use std::time::{Duration, Instant};
 | 
					use std::time::{Duration, Instant};
 | 
				
			||||||
@@ -80,13 +79,6 @@ impl Recorder {
 | 
				
			|||||||
                    }
 | 
					                    }
 | 
				
			||||||
                    Signal::Event(event) => {
 | 
					                    Signal::Event(event) => {
 | 
				
			||||||
                        self.events.push(event);
 | 
					                        self.events.push(event);
 | 
				
			||||||
 | 
					 | 
				
			||||||
                        // Record an entry early if we anticipate its serialized size will
 | 
					 | 
				
			||||||
                        // be larger than 64kb. At the time of this writing, we assume each
 | 
					 | 
				
			||||||
                        // event will be well under 256 bytes.
 | 
					 | 
				
			||||||
                        if self.events.len() >= BLOB_DATA_SIZE / 256 {
 | 
					 | 
				
			||||||
                            self.record_entry()?;
 | 
					 | 
				
			||||||
                        }
 | 
					 | 
				
			||||||
                    }
 | 
					                    }
 | 
				
			||||||
                },
 | 
					                },
 | 
				
			||||||
                Err(TryRecvError::Empty) => return Ok(()),
 | 
					                Err(TryRecvError::Empty) => return Ok(()),
 | 
				
			||||||
@@ -96,33 +88,31 @@ impl Recorder {
 | 
				
			|||||||
    }
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#[cfg(test)]
 | 
					//#[cfg(test)]
 | 
				
			||||||
mod tests {
 | 
					//mod tests {
 | 
				
			||||||
    use super::*;
 | 
					//    use super::*;
 | 
				
			||||||
    use bincode::serialize;
 | 
					//    use bincode::serialize;
 | 
				
			||||||
    use signature::{KeyPair, KeyPairUtil};
 | 
					//    use signature::{KeyPair, KeyPairUtil};
 | 
				
			||||||
    use std::sync::mpsc::sync_channel;
 | 
					//    use std::sync::mpsc::sync_channel;
 | 
				
			||||||
    use transaction::Transaction;
 | 
					//    use transaction::Transaction;
 | 
				
			||||||
 | 
					//
 | 
				
			||||||
    #[test]
 | 
					//    #[test]
 | 
				
			||||||
    fn test_sub64k_entry_size() {
 | 
					//    fn test_events() {
 | 
				
			||||||
        let (signal_sender, signal_receiver) = sync_channel(500);
 | 
					//        let (signal_sender, signal_receiver) = sync_channel(500);
 | 
				
			||||||
        let (entry_sender, entry_receiver) = sync_channel(10);
 | 
					//        let (entry_sender, entry_receiver) = sync_channel(10);
 | 
				
			||||||
        let zero = Hash::default();
 | 
					//        let zero = Hash::default();
 | 
				
			||||||
        let mut recorder = Recorder::new(signal_receiver, entry_sender, zero);
 | 
					//        let mut recorder = Recorder::new(signal_receiver, entry_sender, zero);
 | 
				
			||||||
        let alice_keypair = KeyPair::new();
 | 
					//        let alice_keypair = KeyPair::new();
 | 
				
			||||||
        let bob_pubkey = KeyPair::new().pubkey();
 | 
					//        let bob_pubkey = KeyPair::new().pubkey();
 | 
				
			||||||
        for _ in 0..256 {
 | 
					//        let event0 = Event::Transaction(Transaction::new(&alice_keypair, bob_pubkey, 1, zero));
 | 
				
			||||||
            let tx = Transaction::new(&alice_keypair, bob_pubkey, 1, zero);
 | 
					//        let event1 = Event::Transaction(Transaction::new(&alice_keypair, bob_pubkey, 2, zero));
 | 
				
			||||||
            let event = Event::Transaction(tx);
 | 
					//        signal_sender
 | 
				
			||||||
            signal_sender.send(Signal::Event(event)).unwrap();
 | 
					//            .send(Signal::Events(vec![event0, event1]))
 | 
				
			||||||
        }
 | 
					//            .unwrap();
 | 
				
			||||||
 | 
					//        recorder.process_events(Instant::now(), None).unwrap();
 | 
				
			||||||
        recorder.process_events(Instant::now(), None).unwrap();
 | 
					//
 | 
				
			||||||
 | 
					//        drop(recorder.sender);
 | 
				
			||||||
        drop(recorder.sender);
 | 
					//        let entries: Vec<_> = entry_receiver.iter().collect();
 | 
				
			||||||
        let entries: Vec<_> = entry_receiver.iter().collect();
 | 
					//        assert_eq!(entries.len(), 1);
 | 
				
			||||||
        assert_eq!(entries.len(), 1);
 | 
					//    }
 | 
				
			||||||
        assert!(serialize(&entries[0]).unwrap().len() <= 65_536);
 | 
					//}
 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user