| 1843 | } |
| 1844 | |
| 1845 | void routing_manager_impl::update_routing_info(std::chrono::milliseconds _elapsed) { |
| 1846 | std::map<service_t, std::vector<instance_t>> its_expired_offers; |
| 1847 | |
| 1848 | { |
| 1849 | std::scoped_lock its_lock{services_remote_mutex_}; |
| 1850 | for (const auto& [service, instances] : services_remote_) { |
| 1851 | for (const auto& [instance, info] : instances) { |
| 1852 | ttl_t its_ttl = info->get_ttl(); |
| 1853 | if (its_ttl < DEFAULT_TTL) { // do not touch "forever" |
| 1854 | std::chrono::milliseconds precise_ttl = info->get_precise_ttl(); |
| 1855 | if (precise_ttl.count() < _elapsed.count() || precise_ttl.count() == 0) { |
| 1856 | info->set_ttl(0); |
| 1857 | its_expired_offers[service].push_back(instance); |
| 1858 | } else { |
| 1859 | std::chrono::milliseconds its_new_ttl(precise_ttl - _elapsed); |
| 1860 | info->set_precise_ttl(its_new_ttl); |
| 1861 | } |
| 1862 | } |
| 1863 | } |
| 1864 | } |
| 1865 | } |
| 1866 | |
| 1867 | for (const auto& [service, instances] : its_expired_offers) { |
| 1868 | for (const auto& instance : instances) { |
| 1869 | if (discovery_) { |
| 1870 | discovery_->unsubscribe_all(service, instance); |
| 1871 | // go to Initial Wait Phase |
| 1872 | discovery_->reset_request_sent_counter(service, instance); |
| 1873 | } |
| 1874 | del_routing_info(service, instance, true, true, true); |
| 1875 | VSOMEIP_INFO_P << "Update_routing_info: elapsed=" << _elapsed.count() << " : delete service/instance " << hex4(service) << "." |
| 1876 | << hex4(instance); |
| 1877 | } |
| 1878 | } |
| 1879 | } |
| 1880 | |
| 1881 | void routing_manager_impl::expire_services(const boost::asio::ip::address& _address) { |
| 1882 | expire_services(_address, port_range_t(ANY_PORT, ANY_PORT), false); |
no test coverage detected