[Bro-Dev] some Broker questions

Aashish Sharma asharma at lbl.gov
Wed Jun 3 15:01:02 PDT 2015


I am trying using BrokerStore with a master and a clone setup. Where by I was thinking of using master on manager and all the workers are clones. However, I am somewhat confused at a few things - attaching the sample policies used: 

1) I see that stores-listener.bro has clone created into it and store-connector.bro has master in it.

Does that mean the idea is to have workers run listener and manager run connector ? Which fundamentally means manager connects to the workers ?
Or this is open to 'case-by-case' basis ?

2) What exactly does "bro/event/ready" mean ? Is idea here to compartmentalize various events for various policies ?
 something like bro/event/tor-ban/balh ?  

2b) Is it right to understand that with auto_event the event will be automatically called on workers if called on manager ? 

2c) How do I trigger a clone to update the master (how often or can I trigger updates on certain conditions ? ) 

3) Since all the action happens in "event BrokerComm::outgoing_connection_established"  I don't see way to pass data to it. 

Do I need to create global variables and then use them in this event ? I mean whats a good way to "pass"/use data to this event ?

3b) How is BrokerComm::outgoing_connection_established event triggered ? Does using BrokerStore::insert in some other event also trigger the updates to master from the clone ? 

4) Somewhat whimsical issue:  Why is peer_address of string type when we have peer_port as port data type. Shouldn't peer_address be address data type ? I was hoping may be one can use dns-names thats why but I cannot seem to get that working ? 

4b) Shouldn't this event be better off as : event BrokerComm::outgoing_connection_established(p: peer)

Oh also, I see that it supports sets but seems like doesn't support tables ?

I am really liking Broker from what my current understanding is so far. Its tremendously powerful.

Thanks,
Aashish

-------------- next part --------------
const broker_port= 9999/tcp &redef ; 
redef exit_only_after_terminate = T ;


global h:  opaque of BrokerStore::Handle ; 

function dv(d: BrokerComm::Data): BrokerComm::DataVector 
{
	local rval: BrokerComm::DataVector ;
	rval[0] = d; 
	return rval ;
}

global ready: event(); 

event BrokerComm::outgoing_connection_broken(peer_address: string, peer_port: port)
{
	terminate(); 
} 

event BrokerComm::outgoing_connection_established(peer_address: string, peer_port: port, peer_name: string)
{

	local myset: set[string] = ["a", "b", "c", "d" ];
	local myvec: vector of string = [ "alpha", "beta", "gamma", "theta"] ; 

	h = BrokerStore::create_master("mystore"); 
	BrokerStore::insert(h, BrokerComm::data("one"), BrokerComm::data(110)); 
	BrokerStore::insert(h, BrokerComm::data("two"), BrokerComm::data(223)); 
	BrokerStore::insert(h, BrokerComm::data("myset"), BrokerComm::data(myset)); 
	BrokerStore::insert(h, BrokerComm::data("myvec"), BrokerComm::data(myvec)); 

	BrokerStore::increment(h, BrokerComm::data("one")); 
	BrokerStore::increment(h, BrokerComm::data("two")); 

	BrokerStore::add_to_set(h, BrokerComm::data("myset"), BrokerComm::data("e")); 
	BrokerStore::remove_from_set(h, BrokerComm::data("myset"), BrokerComm::data("b")); 
	
	BrokerStore::push_left(h, BrokerComm::data("myvec"), dv(BrokerComm::data("delta"))); 
	BrokerStore::push_right(h, BrokerComm::data("myvec"), dv(BrokerComm::data("omega"))); 

	when (local res = BrokerStore::size(h) )
	{
		print "master size", res; 
		event ready(); 
	} 	
	timeout 10 sec 
	{ print "timeout" ; } 
} 


event bro_init()
{
	BrokerComm::enable(); 
	BrokerComm::connect("127.0.0.1", broker_port, 1 secs); 
	BrokerComm::auto_event("bro/event/ready", ready); 

}
-------------- next part --------------
const broker_port: port 9999/tcp &redef; 
redef exit_only_after_terminate = T ; 

global h: opaque of BrokerStore::Handle; 
global expected_key_count = 4; 
global key_count = 0 ;

function do_lookup(key: string)
{

	when (local res = BrokerStore::lookup(h, BrokerComm::data(key)) ) 
	{ 
		++key_count ; 
		print "lookup", key, res ; 
	
		if (key_count == expected_key_count)
			terminate();
	}
	timeout 10 sec
	{
		print "timeout",key; 
	} 

}


event ready()
{
	h = BrokerStore::create_clone("mystore"); 
	
	when (local res = BrokerStore::keys(h) ) 
	{
		print "clone keys", res ; 
		do_lookup(BrokerComm::refine_to_string(BrokerComm::vector_lookup(res$result,0))) ; 
		do_lookup(BrokerComm::refine_to_string(BrokerComm::vector_lookup(res$result,1))) ; 
		do_lookup(BrokerComm::refine_to_string(BrokerComm::vector_lookup(res$result,2))) ; 
		do_lookup(BrokerComm::refine_to_string(BrokerComm::vector_lookup(res$result,3))) ; 
	}
	timeout 10 sec 	
	{ 	print "timeout"; } 

}

event bro_init()
{
	BrokerComm::enable();
	BrokerComm::subscribe_to_events("bro/event/ready"); 
	BrokerComm::listen(broker_port, "127.0.0.1");

} 



More information about the bro-dev mailing list