|
@@ -435,6 +435,12 @@ public class RecommendService {
|
|
|
boolean isNoneUserRisk = isNoneUserRisk(request, param);
|
|
boolean isNoneUserRisk = isNoneUserRisk(request, param);
|
|
|
boolean hitRiskScene = riskScenes.contains(request.getHotSceneType());
|
|
boolean hitRiskScene = riskScenes.contains(request.getHotSceneType());
|
|
|
boolean hitRiskUidCache = riskUserCache.getUnchecked(RedisKeyConstants.Recommend.riskUserUid).contains(param.getUid());
|
|
boolean hitRiskUidCache = riskUserCache.getUnchecked(RedisKeyConstants.Recommend.riskUserUid).contains(param.getUid());
|
|
|
|
|
+ // V563 实验补丁: 命中 V563 时, 把 String "null" uid 的命中改回 false,
|
|
|
|
|
+ // 修 RickUserCacheJob 将 BIGINT NULL 转 String.valueOf(null)="null" 写入
|
|
|
|
|
+ // Redis Set, 导致 client 传 "null" 字符串 uid 的 guest user 全部错杀的 bug.
|
|
|
|
|
+ if (hitRiskUidCache && "null".equals(param.getUid()) && isHitV563Exp(request, param)) {
|
|
|
|
|
+ hitRiskUidCache = false;
|
|
|
|
|
+ }
|
|
|
boolean hitRiskMidCache = riskUserCache.getUnchecked(RedisKeyConstants.Recommend.riskUserMid).contains(param.getMid());
|
|
boolean hitRiskMidCache = riskUserCache.getUnchecked(RedisKeyConstants.Recommend.riskUserMid).contains(param.getMid());
|
|
|
boolean riskUser = hitRiskScene || hitRiskUidCache || hitRiskMidCache || isNoneUserRisk;
|
|
boolean riskUser = hitRiskScene || hitRiskUidCache || hitRiskMidCache || isNoneUserRisk;
|
|
|
param.setRiskUser(riskUser);
|
|
param.setRiskUser(riskUser);
|
|
@@ -489,6 +495,20 @@ public class RecommendService {
|
|
|
return param;
|
|
return param;
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
+ /**
|
|
|
|
|
+ * 是否命中 V563 实验 (走 judgeHitAlgoExp, 同时覆盖 abExpCodes 通道和 rootSessionId
|
|
|
|
|
+ * 尾号通道). 当前只用于 risk uid 命中里 String "null" 错杀的精准修复.
|
|
|
|
|
+ */
|
|
|
|
|
+ private static final String V563_EXP_CODE = "563";
|
|
|
|
|
+
|
|
|
|
|
+ private boolean isHitV563Exp(RecommendRequest request, RecommendParam param) {
|
|
|
|
|
+ return experimentService.judgeHitAlgoExp(
|
|
|
|
|
+ param.getAppType(),
|
|
|
|
|
+ request.getRootSessionId(),
|
|
|
|
|
+ param.getAbExpCodes(),
|
|
|
|
|
+ V563_EXP_CODE);
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
private boolean isNoneUserRisk(RecommendRequest request, RecommendParam param) {
|
|
private boolean isNoneUserRisk(RecommendRequest request, RecommendParam param) {
|
|
|
boolean isNoneUserRisk = false;
|
|
boolean isNoneUserRisk = false;
|
|
|
try {
|
|
try {
|
|
@@ -651,6 +671,7 @@ public class RecommendService {
|
|
|
ctx.setSubSessionId(Strings.nullToEmpty(request.getSubSessionId()));
|
|
ctx.setSubSessionId(Strings.nullToEmpty(request.getSubSessionId()));
|
|
|
ctx.setRootSessionId(Strings.nullToEmpty(request.getRootSessionId()));
|
|
ctx.setRootSessionId(Strings.nullToEmpty(request.getRootSessionId()));
|
|
|
ctx.setMid(Strings.nullToEmpty(request.getMid()));
|
|
ctx.setMid(Strings.nullToEmpty(request.getMid()));
|
|
|
|
|
+ ctx.setUid(Strings.nullToEmpty(request.getUid()));
|
|
|
ctx.setAppType(request.getAppType());
|
|
ctx.setAppType(request.getAppType());
|
|
|
ctx.setNewExpGroup(Strings.nullToEmpty(request.getNewExpGroup()));
|
|
ctx.setNewExpGroup(Strings.nullToEmpty(request.getNewExpGroup()));
|
|
|
ctx.setHotSceneType(request.getHotSceneType());
|
|
ctx.setHotSceneType(request.getHotSceneType());
|