mirror of
https://github.com/Sagit-chu/flvx.git
synced 2026-09-29 07:56:37 +08:00
fix: improve batch tunnel migration and simplify batch action labels
This commit is contained in:
@@ -1384,6 +1384,15 @@ public class ForwardServiceImpl extends ServiceImpl<ForwardMapper, Forward> impl
|
||||
result.addFailedItem(forwardId, "已是目标隧道");
|
||||
continue;
|
||||
}
|
||||
|
||||
List<ForwardPort> existingForwardPorts = forwardPortService.list(
|
||||
new QueryWrapper<ForwardPort>().eq("forward_id", forwardId).orderByAsc("id")
|
||||
);
|
||||
Integer originalInPort = existingForwardPorts.stream()
|
||||
.map(ForwardPort::getPort)
|
||||
.filter(Objects::nonNull)
|
||||
.findFirst()
|
||||
.orElse(null);
|
||||
|
||||
Tunnel oldTunnel = validateTunnel(forward.getTunnelId());
|
||||
if (oldTunnel != null) {
|
||||
@@ -1424,7 +1433,7 @@ public class ForwardServiceImpl extends ServiceImpl<ForwardMapper, Forward> impl
|
||||
List<ChainTunnel> newChainTunnels = chainTunnelService.list(
|
||||
new QueryWrapper<ChainTunnel>().eq("tunnel_id", targetTunnel.getId()).eq("chain_type", 1)
|
||||
);
|
||||
List<ChainTunnel> chainTunnelsWithPort = get_port(newChainTunnels, null, forwardId);
|
||||
List<ChainTunnel> chainTunnelsWithPort = allocatePortsForBatchTunnelChange(newChainTunnels, originalInPort, forwardId);
|
||||
|
||||
for (ChainTunnel chainTunnel : chainTunnelsWithPort) {
|
||||
ForwardPort forwardPort = new ForwardPort();
|
||||
@@ -1450,4 +1459,23 @@ public class ForwardServiceImpl extends ServiceImpl<ForwardMapper, Forward> impl
|
||||
return R.ok(result);
|
||||
}
|
||||
|
||||
private List<ChainTunnel> allocatePortsForBatchTunnelChange(List<ChainTunnel> newChainTunnels, Integer originalInPort, Long forwardId) {
|
||||
if (originalInPort == null) {
|
||||
return get_port(newChainTunnels, null, forwardId);
|
||||
}
|
||||
|
||||
try {
|
||||
return get_port(newChainTunnels, originalInPort, forwardId);
|
||||
} catch (RuntimeException originalPortError) {
|
||||
try {
|
||||
return get_port(newChainTunnels, null, forwardId);
|
||||
} catch (RuntimeException autoAllocateError) {
|
||||
throw new RuntimeException(
|
||||
"原入口端口 " + originalInPort + " 在目标隧道不可用,自动分配新端口也失败: " + autoAllocateError.getMessage(),
|
||||
autoAllocateError
|
||||
);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user