eu-federation-gateway-service / efgs-federation-gateway

The goal of this project is to develop the official European solution for the interoperability between national backend servers of decentralised contact tracing applications to combat COVID-19.
Apache License 2.0
59 stars 25 forks source link

Native support for 'traveler' bit #216

Closed mikehelmick closed 3 years ago

mikehelmick commented 3 years ago

Feature description

Provide a traveler bit in the batch upload, specific to an individual TEK. When this is set to true, mark that TEK as being present in all participating countries.

As an alternative, provide an endpoint where a fresh list of all participating countries can be obtained so that this fan-out can be done on the client side.

Problem and motivation

The Google exposure-notifications-server and the Apple+Google Exposure Notifications Express program does not give the granularity of individual countries a TEK may be been in, but instead has home country plus traveler (or not).

The current solution is for the exposure-notifications-sever EFGS integration to say that a given key is all participating countries - but any given server implementation has no way to know this. So our current integration will just send ALL ISO codes. This is lots of wasted bits over the wire and in the database, when a boolean captures the same item.

Is this something you're interested in working on

Yes

mikehelmick commented 3 years ago

This is specifically what I'm worried out. With the "traveller only" roaming model, and the current need to do fan out client side, we will be passing a rather large list absent the ability to get it dynamically: https://github.com/google/exposure-notifications-server/pull/1095/files#diff-0ae5d7acb5bc1b9b2a36d8a7e622155209a0dec7249e64d4c7cf1ac87b189738

I would be happy to submit PRs to add support for a "traveler" bit directly, greatly reducing the key size on the wire and in the database.

alstiefel commented 3 years ago

Thank you for the input, the underlying issue already generated a number of discussion between the participating countries. @SchulzeS will follow up the discussion.

mikehelmick commented 3 years ago

Hello - any guidance here?

I'm happy to contribute PRs to add support for the Apple + Google roaming model (home country + traveler boolean)

SchulzeStTSI commented 3 years ago

Hello,

Currently we add all EU+EFTA countries listed on this page if you are using Traveller or OneEU/World Pattern: https://ec.europa.eu/eurostat/statistics-explained/index.php/Glossary:Country_codes

Your idea with the traveller bit it is good for upload, but in the download not transparent, because there are mixed patterns in the keys. A new route to give out the existing onboarded members is under discussion.

mikehelmick commented 3 years ago

I don't believe the traveler bit is any more or less transparent. It conveys the information that is known about the key in total, which is origin country of the key + traveler status.

SchulzeStTSI commented 3 years ago

The bit itself is not intransparent, but the meaning and the interpretation on the national backend side. If you set this bit, it means you are a traveller, but the country of interest interpretation didn't know where do you travel to. Of course we can define something like "bit means DE,NL,AT,... etc pp" But this is not very explizit. It avoids simply some mb of traffic. The same effect is also reached with a custom value in the visitiedCountries Array like "visitedCountries:[]" which has the same effect. I saved some bytes but everyone needs to know what that means. This needs a lot of alignment between all attendees. Of course the insertion of explizit countries is not beautiful, but it's currently explicit and understandable. It can also turn back to a country of interest pattern without so much effort. (just country list is smaller) We must be very careful here. Would be the solution also an acceptable way for you?

mikehelmick commented 3 years ago

For the Apple+Google roaming model, traveler=true indicates that key may have been in all countries.

Having visitedCountrues:[*] could function the same way, but having to look for a sentinel value in an array would seem to be more error prone than an explicit boolean value.

We could work with either solution.

mikehelmick commented 3 years ago

I'm gong to close this issue out. We're no longer requesting this change.