Skip to content

Commit

Permalink
Merge pull request #207 from zinu-x/201-surport-fallback-policy
Browse files Browse the repository at this point in the history
#201 Support fallback policy in lane
  • Loading branch information
hexiaofeng authored Jan 12, 2025
2 parents 4e10ce8 + 4066c7f commit fba299c
Showing 1 changed file with 11 additions and 3 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,7 @@
import com.jd.live.agent.governance.invoke.filter.RouteFilter;
import com.jd.live.agent.governance.invoke.filter.RouteFilterChain;
import com.jd.live.agent.governance.invoke.metadata.LaneMetadata;
import com.jd.live.agent.governance.policy.lane.FallbackType;
import com.jd.live.agent.governance.policy.lane.Lane;
import com.jd.live.agent.governance.policy.lane.LaneSpace;
import com.jd.live.agent.governance.policy.service.ServicePolicy;
Expand Down Expand Up @@ -61,12 +62,19 @@ public <T extends OutboundRequest> void filter(OutboundInvocation<T> invocation,
Lane targetLane = redirect == null || redirect.isEmpty()
? metadata.getTargetLaneOrDefault(targetSpace.getDefaultLane())
: targetSpace.getOrDefault(redirect);
FallbackType fallbackType = lanePolicy == null ? null : lanePolicy.getFallbackType();
String fallbackLaneCode = lanePolicy == null ? null : lanePolicy.getFallbackLane();
if (targetLane != null) {
Lane defaultLane = targetSpace.getDefaultLane();
boolean redirectDefaultLane = defaultLane != null && targetLane != defaultLane;
boolean redirectDefaultLane = defaultLane != null && targetLane != defaultLane && (fallbackType == null || FallbackType.DEFAULT.equals(fallbackType));
boolean redirectFallbackLane = fallbackLaneCode != null && FallbackType.CUSTOM.equals(fallbackType);
// Filter the route target based on the lane space ID and route lane code
int count = target.filter(e -> e.isLane(targetSpaceId, targetLane.getCode(), defaultSpaceId, defaultLaneId), -1, !redirectDefaultLane);
// If no matches and a default lane exists, use the default lane
int count = target.filter(e -> e.isLane(targetSpaceId, targetLane.getCode(), defaultSpaceId, defaultLaneId), -1, !redirectDefaultLane || !redirectFallbackLane);
// If no matches and a fallback lane exists, use the fallbackLane
if (count <= 0 && redirectFallbackLane) {
target.filter(e -> e.isLane(targetSpaceId, fallbackLaneCode, defaultSpaceId, defaultLaneId), -1, true);
}
// If no matches and a default lane exists, use the defaultLane
if (count <= 0 && redirectDefaultLane) {
target.filter(e -> e.isLane(targetSpaceId, defaultLane.getCode(), defaultSpaceId, defaultLaneId), -1, true);
}
Expand Down

0 comments on commit fba299c

Please sign in to comment.