private RangeSet getVipPortRangeList(String vipUuid, String protocol){ String useFor = Q.New(VipVO.class).select(VipVO_.useFor).eq(VipVO_.uuid, vipUuid).findValue(); VipUseForList vipUseForList; if (useFor != null){ vipUseForList = new VipUseForList(useFor); } else { vipUseForList = new VipUseForList(); } List<RangeSet.Range> portRangeList = new ArrayList<RangeSet.Range>(); for (VipGetUsedPortRangeExtensionPoint ext : pluginRgty.getExtensionList(VipGetUsedPortRangeExtensionPoint.class)){ RangeSet range = ext.getVipUsePortRange(vipUuid, protocol, vipUseForList); portRangeList.addAll(range.getRanges()); } RangeSet portRange = new RangeSet(); portRange.setRanges(portRangeList); portRange.sort(); return portRange; }
private List<String> getVipUsedPortList(String vipUuid, String protocol){ String useFor = Q.New(VipVO.class).select(VipVO_.useFor).eq(VipVO_.uuid, vipUuid).findValue(); VipUseForList vipUseForList; if (useFor != null){ vipUseForList = new VipUseForList(useFor); } else { vipUseForList = new VipUseForList(); } List<RangeSet.Range> portRangeList = new ArrayList<RangeSet.Range>(); for (VipGetUsedPortRangeExtensionPoint ext : vipGetUsedPortRangeExtensionPoints) { RangeSet range = ext.getVipUsePortRange(vipUuid, protocol, vipUseForList); portRangeList.addAll(range.getRanges()); } RangeSet portRange = new RangeSet(); portRange.setRanges(portRangeList); return portRange.sortAndToString(); }
@Override public RangeSet getVipUsePortRange(String vipUuid, String protocol, VipUseForList useForList){ RangeSet portRangeList = new RangeSet(); List<RangeSet.Range> portRanges = new ArrayList<RangeSet.Range>(); List<String> protocols = new ArrayList<>(); if (LoadBalancerConstants.LB_PROTOCOL_UDP.equals(protocol.toLowerCase())) { protocols.add(LoadBalancerConstants.LB_PROTOCOL_UDP); } else { protocols.add(LoadBalancerConstants.LB_PROTOCOL_TCP); protocols.add(LoadBalancerConstants.LB_PROTOCOL_HTTP); protocols.add(LoadBalancerConstants.LB_PROTOCOL_HTTPS); } List<Tuple> lbPortList = SQL.New("select lbl.loadBalancerPort, lbl.loadBalancerPort from LoadBalancerListenerVO lbl, LoadBalancerVO lb " + "where lbl.protocol in (:protocols) and lbl.loadBalancerUuid=lb.uuid and lb.vipUuid = :vipUuid", Tuple.class). param("protocols", protocols). param("vipUuid", vipUuid).list(); Iterator<Tuple> it = lbPortList.iterator(); while (it.hasNext()) { Tuple strRange = it.next(); int start = strRange.get(0, Integer.class); int end = strRange.get(1, Integer.class); RangeSet.Range range = new RangeSet.Range(start, end); portRanges.add(range); } portRangeList.setRanges(portRanges); return portRangeList; }
public static RangeSet valueOf(Collection<Long> numbers) { RangeSet results = new RangeSet(); if (numbers.isEmpty()) { return results; } List<Long> asc = numbers.stream().sorted().distinct().collect(Collectors.toList()); Long begin = asc.remove(0); Long end = begin; for (long n : asc) { long lastEnd = end; if (n != ++end) { results.ranges.add(new Range(begin, lastEnd)); begin = n; end = n; } } results.ranges.add(new Range(begin, end)); return results; }
private void checkVipPortConfliction(String vipUuid, String protocol, RangeSet.Range range){ RangeSet portRangeList = getVipPortRangeList(vipUuid, protocol); portRangeList.sort(); Iterator<RangeSet.Range> it = portRangeList.getRanges().iterator(); while (it.hasNext()){ RangeSet.Range cur = it.next(); if (cur.isOverlap(range) || range.isOverlap(cur)){ throw new ApiMessageInterceptionException(operr("Current port range[%s, %s] is conflicted with used port range [%s, %s] with vip[uuid: %s] protocol: %s ", Long.toString(range.getStart()), Long.toString(range.getEnd()), Long.toString(cur.getStart()), Long.toString(cur.getEnd()), vipUuid, protocol)); } } } }
public List<String> sortAndToString() { List<String> strList = new ArrayList<String>(); if (ranges.isEmpty()){ return strList; } sort(); Iterator<Range> it = ranges.iterator(); while (it.hasNext()){ Range range = it.next(); for (long i = range.start; i <= range.end; i++){ strList.add(Long.toString(i)); } } return strList; }
@Override public RangeSet getVipUsePortRange(String vipUuid, String protocol, VipUseForList useForList){ RangeSet portRangeList = new RangeSet(); List<RangeSet.Range> portRanges = new ArrayList<RangeSet.Range>(); if (protocol.toUpperCase().equals(PortForwardingProtocolType.UDP.toString()) || protocol.toUpperCase().equals(PortForwardingProtocolType.TCP.toString())) { List<Tuple> pfPortList = Q.New(PortForwardingRuleVO.class).select(PortForwardingRuleVO_.vipPortStart, PortForwardingRuleVO_.vipPortEnd) .eq(PortForwardingRuleVO_.vipUuid, vipUuid).eq(PortForwardingRuleVO_.protocolType, PortForwardingProtocolType.valueOf(protocol.toUpperCase())).listTuple(); Iterator<Tuple> it = pfPortList.iterator(); while (it.hasNext()){ Tuple strRange = it.next(); int start = strRange.get(0, Integer.class); int end = strRange.get(1, Integer.class); RangeSet.Range range = new RangeSet.Range(start, end); portRanges.add(range); } } portRangeList.setRanges(portRanges); return portRangeList; }
public List<Range> merge() { List<Range> ret = new ArrayList<Range>(); if (ranges.isEmpty()) { return ret; } sort(); Range r = ranges.get(0); for (int i=1; i<ranges.size(); i++) { Range r1 = ranges.get(i); if (r.isOverlap(r1) || r.isConnected(r1)) { r.merge(r1); } else { ret.add(r); r = r1; } } ret.add(r); return ret; }