void TAO_RT_Notify_Service::init_i (CORBA::ORB_ptr orb) { //Init the base class. TAO_CosNotify_Service::init_i (orb); TAO_Notify_RT_Properties* properties = TAO_Notify_RT_PROPERTIES::instance(); // Resolve RTORB CORBA::Object_var object = orb->resolve_initial_references ("RTORB"); RTCORBA::RTORB_var rt_orb = RTCORBA::RTORB::_narrow (object.in ()); // Resolve RTCurrent object = orb->resolve_initial_references ("RTCurrent"); RTCORBA::Current_var current = RTCORBA::Current::_narrow (object.in ()); /// Set the properties properties->rt_orb (rt_orb.in ()); properties->current (current.in ()); }
int Task::svc (void) { try { // Priority Mapping Manager. CORBA::Object_var object = this->orb_->resolve_initial_references ("PriorityMappingManager"); RTCORBA::PriorityMappingManager_var mapping_manager = RTCORBA::PriorityMappingManager::_narrow (object.in ()); if (check_for_nil (mapping_manager.in (), "Mapping Manager") == -1) return -1; RTCORBA::PriorityMapping *pm = mapping_manager->mapping (); // RTCurrent. object = this->orb_->resolve_initial_references ("RTCurrent"); RTCORBA::Current_var current = RTCORBA::Current::_narrow (object.in ()); if (check_for_nil (current.in (), "RTCurrent") == -1) return -1; // Obtain Test object reference. object = this->orb_->string_to_object (ior); Test_var server = Test::_narrow (object.in ()); if (check_for_nil (server.in (), "Test object") == -1) return -1; // Check that test object is configured with CLIENT_PROPAGATED // PriorityModelPolicy. CORBA::Policy_var policy = server->_get_policy (RTCORBA::PRIORITY_MODEL_POLICY_TYPE); RTCORBA::PriorityModelPolicy_var priority_policy = RTCORBA::PriorityModelPolicy::_narrow (policy.in ()); if (check_for_nil (priority_policy.in (), "PriorityModelPolicy") == -1) return -1; RTCORBA::PriorityModel priority_model = priority_policy->priority_model (); if (priority_model != RTCORBA::CLIENT_PROPAGATED) ACE_ERROR_RETURN ((LM_ERROR, "ERROR: priority_model != " "RTCORBA::CLIENT_PROPAGATED!\n"), -1); // Spawn two worker threads. ACE_Barrier thread_barrier (2); int flags = THR_NEW_LWP | THR_JOINABLE | this->orb_->orb_core ()->orb_params ()->thread_creation_flags (); // Worker 1. Worker_Thread worker1 (this->orb_.in (), server.in (), protocol1, &thread_barrier); CORBA::Short native_priority1 = 0; if (pm->to_native (priority1, native_priority1) == 0) ACE_ERROR_RETURN ((LM_ERROR, "Cannot convert corba priority %d to native priority\n", priority1), -1); if (worker1.activate (flags, 1, 0, native_priority1) != 0) ACE_ERROR_RETURN ((LM_ERROR, "Cannot activate first client worker threads\n"), -1); // Worker 2. Worker_Thread worker2 (this->orb_.in (), server.in (), protocol2, &thread_barrier); CORBA::Short native_priority2 = 0; if (pm->to_native (priority2, native_priority2) == 0) ACE_ERROR_RETURN ((LM_ERROR, "Cannot convert corba priority %d to native priority\n", priority2), -1); if (worker2.activate (flags, 1, 0, native_priority2) != 0) ACE_ERROR_RETURN ((LM_ERROR, "Cannot activate second client worker threads\n"), -1); // Wait for worker threads to finish. ACE_Thread_Manager::instance ()->wait (); // Testing over. Shut down the server. ACE_DEBUG ((LM_DEBUG, "Client threads finished\n")); current->the_priority (priority1); server->shutdown (); } catch (const CORBA::Exception& ex) { ex._tao_print_exception ( "Unexpected exception in MT_Client_Protocol_Priority test client:"); return -1; } return 0; }
int Task::svc (void) { Synchronizers synchronizers; gsf = ACE_High_Res_Timer::global_scale_factor (); try { CORBA::Object_var object = this->orb_->string_to_object (ior); test_var test = test::_narrow (object.in ()); object = this->orb_->resolve_initial_references ("RTCurrent"); RTCORBA::Current_var current = RTCORBA::Current::_narrow (object.in ()); object = this->orb_->resolve_initial_references ("PriorityMappingManager"); RTCORBA::PriorityMappingManager_var mapping_manager = RTCORBA::PriorityMappingManager::_narrow (object.in ()); RTCORBA::PriorityMapping &priority_mapping = *mapping_manager->mapping (); ULong_Array rates; int result = get_values ("client", rates_file, "rates", rates, 1); if (result != 0) return result; ULong_Array invocation_priorities; result = get_values ("client", invocation_priorities_file, "invocation priorities", invocation_priorities, 1); if (result != 0) return result; if (invocation_priorities.size () != 0 && invocation_priorities.size () != rates.size ()) ACE_ERROR_RETURN ((LM_ERROR, "Number of invocation priorities (%d) != Number of rates (%d)\n", invocation_priorities.size (), rates.size ()), -1); synchronizers.number_of_workers_ = rates.size () + continuous_workers; CORBA::ULong max_rate = 0; result = max_throughput (test.in (), current.in (), priority_mapping, max_rate); if (result != 0) return result; CORBA::Short priority_range = RTCORBA::maxPriority - RTCORBA::minPriority; ACE_Thread_Manager paced_workers_manager; CORBA::ULong i = 0; Paced_Worker **paced_workers = new Paced_Worker *[rates.size ()]; for (i = 0; i < rates.size (); ++i) { CORBA::Short priority = 0; if (invocation_priorities.size () == 0) priority = CORBA::Short ((priority_range / double (rates.size ())) * (i + 1)); else priority = invocation_priorities[i]; paced_workers[i] = new Paced_Worker (paced_workers_manager, test.in (), rates[i], time_for_test * rates[i], priority, current.in (), priority_mapping, synchronizers); } ACE_Thread_Manager continuous_workers_manager; Continuous_Worker continuous_worker (continuous_workers_manager, test.in (), max_rate * time_for_test, current.in (), priority_mapping, synchronizers); long flags = THR_NEW_LWP | THR_JOINABLE | this->orb_->orb_core ()->orb_params ()->thread_creation_flags (); CORBA::Short CORBA_priority = continuous_worker_priority; CORBA::Short native_priority; CORBA::Boolean convert_result = priority_mapping.to_native (CORBA_priority, native_priority); if (!convert_result) ACE_ERROR_RETURN ((LM_ERROR, "Error in converting CORBA priority %d to native priority\n", CORBA_priority), -1); int force_active = 0; if (priority_setting == AT_THREAD_CREATION) { result = continuous_worker.activate (flags, continuous_workers, force_active, native_priority); if (result != 0) ACE_ERROR_RETURN ((LM_ERROR, "Continuous_Worker::activate failed\n"), result); } else { result = continuous_worker.activate (flags, continuous_workers); if (result != 0) ACE_ERROR_RETURN ((LM_ERROR, "Continuous_Worker::activate failed\n"), result); } flags = THR_NEW_LWP | THR_JOINABLE | this->orb_->orb_core ()->orb_params ()->thread_creation_flags (); for (i = 0; i < rates.size (); ++i) { if (priority_setting == AT_THREAD_CREATION) { if (set_priority) { CORBA_priority = paced_workers[i]->priority_; convert_result = priority_mapping.to_native (CORBA_priority, native_priority); if (!convert_result) ACE_ERROR_RETURN ((LM_ERROR, "Error in converting CORBA priority %d to native priority\n", CORBA_priority), -1); } result = paced_workers[i]->activate (flags, 1, force_active, native_priority); if (result != 0) ACE_ERROR_RETURN ((LM_ERROR, "Paced_Worker::activate failed\n"), result); } else { result = paced_workers[i]->activate (flags); if (result != 0) ACE_ERROR_RETURN ((LM_ERROR, "Paced_Worker::activate failed\n"), result); } } if (rates.size () != 0) { paced_workers_manager.wait (); } continuous_workers_manager.wait (); continuous_worker.print_collective_stats (); for (i = 0; i < rates.size (); ++i) { delete paced_workers[i]; } delete[] paced_workers; if (shutdown_server) { test->shutdown (); } } catch (const CORBA::Exception& ex) { ex._tao_print_exception ("Exception caught:"); return -1; } return 0; }
int Task::svc (void) { try { CORBA::Object_var object = this->orb_->resolve_initial_references ("RTORB"); RTCORBA::RTORB_var rt_orb = RTCORBA::RTORB::_narrow (object.in ()); object = this->orb_->resolve_initial_references ("ORBPolicyManager"); CORBA::PolicyManager_var policy_manager = CORBA::PolicyManager::_narrow (object.in ()); object = this->orb_->resolve_initial_references ("RTCurrent"); RTCORBA::Current_var current = RTCORBA::Current::_narrow (object.in ()); current->the_priority (0); object = this->orb_->string_to_object (ior); test_var test = test::_narrow (object.in ()); Client client (test.in (), this->orb_.in (), current.in (), rt_orb.in (), policy_manager.in ()); client.vanilla_invocations (); client.set_private_connection_policies (); client.vanilla_invocations (); client.reset_policies (); client.set_client_protocols_policies (debug); client.vanilla_invocations (); client.set_private_connection_policies (); client.vanilla_invocations (); client.reset_policies (); client.set_priority_bands (debug); client.priority_invocations (debug); client.set_private_connection_policies (); client.priority_invocations (debug); client.reset_policies (); client.set_priority_bands (debug); client.set_client_protocols_policies (0); client.priority_invocations (0); client.set_private_connection_policies (); client.priority_invocations (debug); client.reset_policies (); if (shutdown_server) { test->shutdown (); } } catch (const CORBA::Exception& ex) { ex._tao_print_exception ("Error!"); return -1; } return 0; }