Ejemplo n.º 1
0
DataObjectRef Forwarder::createRoutingInformationDataObject()
{
	// No need to have a reference in this function because it won't be 
	// visible outside until this function is done with it.
	DataObjectRef dObj = DataObject::create();
	
	if (!dObj)
		return NULL;

	HAGGLE_DBG2("Creating routing info data object\n");

	dObj->setPersistent(false);
	dObj->addAttribute("Forwarding", getName());
	
	// Add the metric data to the forwarding section:
	Metadata *md = dObj->getMetadata()->addMetadata(getManager()->getName());
	
	md = md->addMetadata(getName());
	md->setParameter("node_id", getKernel()->getThisNode()->getIdStr());
	
	if (!addRoutingInformation(dObj, md)) {
        // SW: ERR->DBG, this is not fatal, we return false when we don't want
        // to add routing data.
	        // HAGGLE_DBG("Could not add routing information\n");
		return NULL;
	}

	return dObj;
}
Ejemplo n.º 2
0
/*
	On send events, the security manager 
 
 */
void SecurityManager::onSendDataObject(Event *e)
{
	if (!e || !e->hasData())
		return;

	DataObjectRef dObj = e->getDataObject();
	
	if (dObj->isThisNodeDescription()) {
		// This is our node description. Piggy-back our certificate.
		if (myCert) {
			Metadata *m;

			m = dObj->getMetadata()->getMetadata("Security");
			
			if (m) {
				HAGGLE_ERR("Node description already has a Security tag!\n");
			} else {
				m = dObj->getMetadata()->addMetadata("Security");
				
				if (m) {
					m->addMetadata(myCert->toMetadata());
				}
			}
		}
	}
	
	// In most cases the data object is already signed here (e.g., if it is generated by a local
	// application, or was received from another node). The only reason to check if we should
	// sign the data object here, is if a data object was generated internally by Haggle -- in
	// which case the data object might not have a signature (e.g., the data object is a node
	// description).
	InterfaceRef iface = dObj->getRemoteInterface();
	
	if (dObj->shouldSign() && !(iface && iface->getType() == Interface::TYPE_APPLICATION_PORT)) {
		// FIXME: data objects should really be signed in the SecurityHelper thread since
		// it is a potentially CPU intensive operation. But it is currently not possible
		// to ensure that the signing operation has finished in the helper thread before
		// the data object is actually sent on the wire by the protocol manager.
		// To handle this situation, we probably need to add a new public event for 
		// security related operations, after which the security manager generates the
		// real send event.
		
		if (helper->signDataObject(dObj, privKey)) {
			HAGGLE_DBG("Successfully signed data object %s\n", dObj->getIdStr());
		} else {
			HAGGLE_DBG("Signing of data object %s failed!\n", dObj->getIdStr());
		}
	}	
}
Ejemplo n.º 3
0
void HaggleKernel::log_eventQueue(Metadata *m) {

	HashMap<string, size_t> counts;
	HashMap<string, size_t>::iterator cit;
	Heap theHeap;

	Metadata *dm = m->addMetadata("Events");
	if (!dm) {
		return;
	}

	List<Event *> list = getEventList();
	for (List<Event *>::iterator it = list.begin(); it != list.end(); it++) {
		Event *e = *it;
		theHeap.insert(*it);

		cit = counts.find(e->getName());
		if (cit == counts.end()) {
			counts.insert(make_pair(e->getName(), 1));
		} else {
			size_t count = (*cit).second;
			counts.erase(cit);
			counts.insert(make_pair(e->getName(), count+1));
		}
	}

	for (size_t i = 0; i < list.size(); i++) {

		Event *e = static_cast<Event *>(theHeap.extractFirst());

		if (e) {
			if (i < 200) {
				Metadata *dmm = dm->addMetadata("Event");
				dmm->setParameter("name", e->getName());
				dmm->setParameter("time", e->getTimeout().getAsString());
				dmm->setParameter("canceled", e->isCanceled() ? "true" : "false");
				
				if (e->getDataObject()) {
					dmm->setParameter("dObj", e->getDataObject()->getIdStr());
				}
				if (e->getNode()) {
					dmm->setParameter("node", e->getNode()->getIdStr());
				}
				if (e->getInterface()) {
					dmm->setParameter("iface", e->getInterface()->getIdentifierStr());
				}
				if (e->getNodeList().size() > 0) {
					dmm->setParameter("nodeListSize", e->getNodeList().size());
				}
				if (e->getDataObjectList().size() > 0) {
					dmm->setParameter("dataObjectListSize", e->getDataObjectList().size());
				}

				if (strcmp(e->getName(), "BFRemoveDelay") == 0) {
					const DataObjectId_t *id = (DataObjectId_t *) e->getData();
					if (id) {
						dmm->setParameter("dObj", DataObject::idString(*id));
					}
				}
			}

			delete e;
		}
	}

	dm = m->addMetadata("Counts");
	if (!dm) {
		return;
	}

	for (cit = counts.begin(); cit != counts.end(); cit++) {
		Metadata *dmm = dm->addMetadata("Event");

		if (dmm) {
			dmm->setParameter("name", (*cit).first);
			dmm->setParameter("count", (*cit).second);
		}
	}

}
Ejemplo n.º 4
0
int main(void){
	
	Metadata metadata;
	
	metadata.addMetadata("key1", "val1");
	
	vector<string> values;
	
	values.push_back("val1");
	values.push_back("val2");
	values.push_back("val3");
	
	metadata.addMetadata("key2", values);
	
	cout << "Checking the value of key1: Value: " << metadata.getMetadata("key1") << endl;
	cout << "Checking the value of key2: Value: " << metadata.getMetadata("key2") << endl;

	vector<string> key2Vals = metadata.getAllMetadata("key2");
	cout << "Checking all values for key2: Values: " << endl;
		
	for(int i=0; i < key2Vals.size(); i++){
		 cout << "Value: " << key2Vals[i] << endl;
	}
		
    if(metadata.getAllMetadata("key3") == cas::Metadata::EMPTY_VEC){
    	   cout << "No multiple values for key3!" << endl;
    }
    
    if(metadata.getMetadata("key3") == cas::Metadata::EMPTY_STR){
    	cout << "No singular value for key3!" << endl;
    }
	
	metadata.addMetadata("key3", "val3");
	
	if(metadata.getMetadata("key3") != cas::Metadata::EMPTY_STR){
		cout << "New value for key3: " << metadata.getMetadata("key3") << endl;
	}
	
	if(!metadata.containsKey("blah")){
		cout << "Metadata doesn't contain key blah: correct!" << endl;
	}
	
	if(metadata.containsKey("key3")){
		cout << "Metadata contains key key3: correct!" << endl;
	}
	
	if(metadata.isMultiValued("key2")){
		cout << "Key2 is correctly multi-valued: correct!" << endl;
	}
	
	if(!metadata.isMultiValued("key3")){
		cout << "Key3 is correctly NOT multi-valued: correct!" << endl;
	}
	
	metadata.addMetadata("key4", "val99");
	
	if(metadata.getMetadata("key4") != cas::Metadata::EMPTY_STR){
		cout << "Metadata exists for key4, now deleting key4 and retesting" << endl;
		
		metadata.removeMetadata("key4");
		
		if(metadata.getMetadata("key4") == cas::Metadata::EMPTY_STR){
			cout << "Metadata successfully removed for key4! " << endl;
		}
	}
	
	vector<string> key5vals;
	key5vals.push_back("key5val1");
	key5vals.push_back("key5val2");
	
	metadata.addMetadata("key5", key5vals);
	
	vector<string> key5replvals;
	key5replvals.push_back("key5_replaced_val1");
	key5replvals.push_back("key5_replaced_val2");
	
	metadata.replaceMetadata("key5", key5replvals);

	for(int i=0; i < metadata.getAllMetadata("key5").size(); i++){
		 cout << "Value: " << metadata.getAllMetadata("key5")[i] << endl;
	}	
	
	metadata.addMetadata("key6", "key6val1");
	
	if(metadata.getMetadata("key6") == "key6val1"){
		cout << "key6: value = key6val1, as appropriate" << endl;
	}
	
	metadata.replaceMetadata("key6", "key6_replaced_val1");
	
	if(metadata.getMetadata("key6") == "key6_replaced_val1"){
		cout << "key6: value = key6_replaced_val1, as appropriate" << endl;
	}
	
	
	cout << "XML is: " << endl;
    DOMDocument* doc = metadata.toXML();
	XMLCh tempStr[100];
 

	XMLString::transcode("LS", tempStr, 99);
	DOMImplementation *impl          = DOMImplementationRegistry::getDOMImplementation(tempStr);
    DOMLSSerializer* theSerializer = ((DOMImplementationLS*)impl)->createLSSerializer();


	if (theSerializer->getDomConfig()->canSetParameter(XMLUni::fgDOMWRTFormatPrettyPrint, true))
	  theSerializer->getDomConfig()->setParameter(XMLUni::fgDOMWRTFormatPrettyPrint, true);

	XMLFormatTarget *myFormTarget;
        myFormTarget = new StdOutFormatTarget();
    DOMLSOutput* theOutput = ((DOMImplementationLS*)impl)->createLSOutput();
    theOutput->setByteStream(myFormTarget);

	theSerializer->write((DOMNode*)doc, theOutput);
	
	cout << "Now attempting to parse cas xml document: data/sample.met.xml" << endl;
	
	XercesDOMParser parser_;
	
	parser_.setValidationScheme( xercesc::XercesDOMParser::Val_Never ) ;
	parser_.setDoNamespaces( false ) ;
	parser_.setDoSchema( false ) ;
	parser_.setLoadExternalDTD( false ) ;
	
	 parser_.parse("./data/sample.met.xml") ;

    // there's no need to free this pointer -- it's
    // owned by the parent parser object
    DOMDocument* xmlDoc = parser_.getDocument() ;
    
    cout << "Metadata XML file parsed: constructing CAS Metadata object from it " << endl;
    
    Metadata newMetadata(xmlDoc);
    
    cout << "Outputting XML from CAS Metadata " << endl;
        
    DOMDocument *newDoc = newMetadata.toXML();
    theSerializer->write((DOMNode*)doc, theOutput);
    
	return 1;
		
}
Ejemplo n.º 5
0
// CBMEN, HL, Begin
void
CacheStrategyUtility::_handleGetCacheStrategyAsMetadata(Metadata *m)
{
    Metadata *dm = m->addMetadata("CacheStrategyUtility");
    if (!dm) {
        return;
    }

    dm->setParameter("knapsack_optimizer", getKnapsackOptimizer()->getName());
    dm->setParameter("global_optimizer", getGlobalOptimizer()->getPrettyName());
    dm->setParameter("utility_function", getUtilityFunction()->getPrettyName());
    dm->setParameter("utility_compute_period_ms", computePeriodMs);
    dm->setParameter("poll_period_ms", pollPeriodMs);
    dm->setParameter("event_based_purging", purgeOnInsert ? "enabled" : "disabled");
    dm->setParameter("keep_in_bloomfilter", keep_in_bloomfilter ? "enabled" : "disabled");
    dm->setParameter("bloomfilter_remove_delay_ms", bloomfilter_remove_delay_ms);
    dm->setParameter("handle_zero_size", handle_zero_size ? "enabled" : "disabled");
    dm->setParameter("manage_only_remote_files", manage_only_remote_files ? "enabled" : "disabled");
    dm->setParameter("manage_locally_sent_files", manage_locally_sent_files ? "enabled" : "disabled");
    dm->setParameter("allow_db_purging", allow_db_purging ? "enabled" : "disabled");
    dm->setParameter("db_size_threshold", db_size_threshold);
    dm->setParameter("current_size_kb", current_size / (long long) 1024);
    dm->setParameter("max_capacity_kb", max_capacity_kb);
    dm->setParameter("current_capacity_ratio", 100*current_size/((double)max_capacity_kb * 1024));
    dm->setParameter("watermark_capacity_kb", watermark_capacity_kb);
    dm->setParameter("watermark_capacity_ratio", 100*current_size/((double)watermark_capacity_kb * 1024));
    dm->setParameter("current_num_do", current_num_do);
    dm->setParameter("total_db_evicted", total_db_evicted);
    dm->setParameter("current_dupe_do_recv", current_dupe_do_recv);
    dm->setParameter("current_drop_on_insert", current_drop_on_insert);
    dm->setParameter("total_do_inserted", total_do_inserted);
    dm->setParameter("total_do_inserted_bytes", total_do_inserted_bytes);
    dm->setParameter("total_do_evicted", total_do_evicted);
    dm->setParameter("total_do_evicted_bytes", total_do_evicted_bytes);
    dm->setParameter("total_do_hard_evicted", total_do_hard_evicted);
    dm->setParameter("total_do_hard_evicted_bytes", total_do_hard_evicted_bytes);

    PrintHelperHeapItem::PrinterHelperType_t types[] = {PrintHelperHeapItem::HIGH_UTIL, PrintHelperHeapItem::LOW_UTIL, PrintHelperHeapItem::HIGH_COST, PrintHelperHeapItem::OLD_CREATION};
    string names[] = {"Top10Utility", "Bottom10Utility", "Top10Largest", "Top10Oldest"};

    do_util_metadata_list_t metadata_list;
    for (size_t i = 0; i < 4; i++)
    {
        Metadata *dmm = dm->addMetadata(names[i]);
        if (!dmm) {
            continue;
        }

        PrintHelperHeapItem::getTopKHelper(10, types[i], utilMetadata, &metadata_list);
        for (do_util_metadata_list_t::iterator it = metadata_list.begin(); it != metadata_list.end(); it++) {
            Metadata *dmmm = dmm->addMetadata("DataObject");
            if (!dmmm) {
                break;
            }
            DataObjectUtilityMetadata *do_metadata = *it;
            dmmm->setParameter("id", do_metadata->getId());
            dmmm->setParameter("create_time", do_metadata->getCreateTime().getAsString());
            dmmm->setParameter("computed_time", do_metadata->getComputedTime().getAsString());
            dmmm->setParameter("cost", do_metadata->getCost());
            dmmm->setParameter("utility", do_metadata->getUtility());
        }
        metadata_list.clear();
    }

    kernel->addEvent(new Event(EVENT_TYPE_SEND_OBSERVER_DATAOBJECT, m->copy()));
}