Skip to content

Commit bad6b68

Browse files
committed
Pre-registered raw UID version counters
1 parent aca3947 commit bad6b68

File tree

2 files changed

+32
-19
lines changed

2 files changed

+32
-19
lines changed

src/main/java/com/uid2/operator/model/IdentityVersion.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
import com.uid2.operator.vertx.ClientInputValidationException;
44

55
public enum IdentityVersion {
6+
V2(-1), // V2 raw UIDs don't encode version
67
V3(0),
78
V4(1);
89

@@ -18,6 +19,7 @@ public int getValue() {
1819

1920
public static IdentityVersion fromValue(int value) {
2021
return switch (value) {
22+
case -1 -> V2;
2123
case 0 -> V3;
2224
case 1 -> V4;
2325
default -> throw new ClientInputValidationException("Invalid valid for IdentityVersion: " + value);

src/main/java/com/uid2/operator/service/UIDOperatorService.java

Lines changed: 30 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,8 @@ public class UIDOperatorService implements IUIDOperatorService {
3636
private static final Instant REFRESH_CUTOFF = LocalDateTime.parse("2021-03-08T17:00:00", DateTimeFormatter.ISO_LOCAL_DATE_TIME).toInstant(ZoneOffset.UTC);
3737
private static final long DAY_IN_MS = Duration.ofDays(1).toMillis();
3838

39+
private static final Map<IdentityVersion, Counter> ADVERTISING_ID_VERSION_COUNTERS = new HashMap<>();
40+
3941
private final ISaltProvider saltProvider;
4042
private final IOptOutStore optOutStore;
4143
private final ITokenEncoder encoder;
@@ -83,18 +85,10 @@ public UIDOperatorService(IOptOutStore optOutStore, ISaltProvider saltProvider,
8385

8486
this.refreshTokenVersion = TokenVersion.V3;
8587
this.rawUidV3Enabled = identityV3Enabled;
86-
}
8788

88-
private void validateTokenDurations(Duration refreshIdentityAfter, Duration refreshExpiresAfter, Duration identityExpiresAfter) {
89-
if (identityExpiresAfter.compareTo(refreshExpiresAfter) > 0) {
90-
throw new IllegalStateException(REFRESH_TOKEN_EXPIRES_AFTER_SECONDS + " (" + refreshExpiresAfter.toSeconds() + ") < " + IDENTITY_TOKEN_EXPIRES_AFTER_SECONDS + " (" + identityExpiresAfter.toSeconds() + ")");
91-
}
92-
if (refreshIdentityAfter.compareTo(identityExpiresAfter) > 0) {
93-
throw new IllegalStateException(IDENTITY_TOKEN_EXPIRES_AFTER_SECONDS + " (" + identityExpiresAfter.toSeconds() + ") < " + REFRESH_IDENTITY_TOKEN_AFTER_SECONDS + " (" + refreshIdentityAfter.toSeconds() + ")");
94-
}
95-
if (refreshIdentityAfter.compareTo(refreshExpiresAfter) > 0) {
96-
throw new IllegalStateException(REFRESH_TOKEN_EXPIRES_AFTER_SECONDS + " (" + refreshExpiresAfter.toSeconds() + ") < " + REFRESH_IDENTITY_TOKEN_AFTER_SECONDS + " (" + refreshIdentityAfter.toSeconds() + ")");
97-
}
89+
registerAdvertisingIdVersionCounter(IdentityVersion.V2);
90+
registerAdvertisingIdVersionCounter(IdentityVersion.V3);
91+
registerAdvertisingIdVersionCounter(IdentityVersion.V4);
9892
}
9993

10094
@Override
@@ -208,6 +202,18 @@ public boolean advertisingTokenMatches(String advertisingToken, UserIdentity use
208202
return Arrays.equals(mappedIdentity.advertisingId, token.userIdentity.id);
209203
}
210204

205+
private void validateTokenDurations(Duration refreshIdentityAfter, Duration refreshExpiresAfter, Duration identityExpiresAfter) {
206+
if (identityExpiresAfter.compareTo(refreshExpiresAfter) > 0) {
207+
throw new IllegalStateException(REFRESH_TOKEN_EXPIRES_AFTER_SECONDS + " (" + refreshExpiresAfter.toSeconds() + ") < " + IDENTITY_TOKEN_EXPIRES_AFTER_SECONDS + " (" + identityExpiresAfter.toSeconds() + ")");
208+
}
209+
if (refreshIdentityAfter.compareTo(identityExpiresAfter) > 0) {
210+
throw new IllegalStateException(IDENTITY_TOKEN_EXPIRES_AFTER_SECONDS + " (" + identityExpiresAfter.toSeconds() + ") < " + REFRESH_IDENTITY_TOKEN_AFTER_SECONDS + " (" + refreshIdentityAfter.toSeconds() + ")");
211+
}
212+
if (refreshIdentityAfter.compareTo(refreshExpiresAfter) > 0) {
213+
throw new IllegalStateException(REFRESH_TOKEN_EXPIRES_AFTER_SECONDS + " (" + refreshExpiresAfter.toSeconds() + ") < " + REFRESH_IDENTITY_TOKEN_AFTER_SECONDS + " (" + refreshIdentityAfter.toSeconds() + ")");
214+
}
215+
}
216+
211217
private UserIdentity getFirstLevelHashIdentity(UserIdentity userIdentity, Instant asOf) {
212218
return getFirstLevelHashIdentity(userIdentity.identityScope, userIdentity.identityType, userIdentity.id, asOf);
213219
}
@@ -240,15 +246,15 @@ private byte[] getAdvertisingId(UserIdentity firstLevelHashIdentity, String salt
240246
if (salt != null) {
241247
if (rawUidV3Enabled) {
242248
advertisingId = TokenUtils.getAdvertisingIdV3(firstLevelHashIdentity.identityScope, firstLevelHashIdentity.identityType, firstLevelHashIdentity.id, salt);
243-
incrementAdvertisingIdVersionCounter("v3");
249+
incrementAdvertisingIdVersionCounter(IdentityVersion.V3);
244250
} else {
245251
advertisingId = TokenUtils.getAdvertisingIdV2(firstLevelHashIdentity.id, salt);
246-
incrementAdvertisingIdVersionCounter("v2");
252+
incrementAdvertisingIdVersionCounter(IdentityVersion.V2);
247253
}
248254
} else {
249255
try {
250256
advertisingId = TokenUtils.getAdvertisingIdV4(firstLevelHashIdentity.identityScope, firstLevelHashIdentity.identityType, env, firstLevelHashIdentity.id, key);
251-
incrementAdvertisingIdVersionCounter("v4");
257+
incrementAdvertisingIdVersionCounter(IdentityVersion.V4);
252258
} catch (Exception e) {
253259
LOGGER.error("Exception when generating V4 advertising ID", e);
254260
advertisingId = null;
@@ -258,12 +264,17 @@ private byte[] getAdvertisingId(UserIdentity firstLevelHashIdentity, String salt
258264
return advertisingId;
259265
}
260266

261-
private void incrementAdvertisingIdVersionCounter(String version) {
262-
Counter.builder("uid2_raw_uid_version_total")
267+
private void registerAdvertisingIdVersionCounter(IdentityVersion version) {
268+
Counter counter = Counter.builder("uid2_raw_uid_version_total")
263269
.description("counter for raw UID version")
264-
.tag("version", version)
265-
.register(Metrics.globalRegistry)
266-
.increment();
270+
.tag("version", version.toString())
271+
.register(Metrics.globalRegistry);
272+
273+
ADVERTISING_ID_VERSION_COUNTERS.put(version, counter);
274+
}
275+
276+
private void incrementAdvertisingIdVersionCounter(IdentityVersion version) {
277+
ADVERTISING_ID_VERSION_COUNTERS.get(version).increment();
267278
}
268279

269280
private byte[] getPreviousAdvertisingId(UserIdentity firstLevelHashIdentity, SaltEntry rotatingSalt, Instant asOf, IdentityEnvironment env) {

0 commit comments

Comments
 (0)