Ejemplo n.º 1
0
  @Override
  public UsedIpInventory allocateIp(IpAllocateMessage msg) {
    if (msg.getRequiredIp() != null) {
      return allocateRequiredIp(msg);
    }

    SimpleQuery<IpRangeVO> query = dbf.createQuery(IpRangeVO.class);
    query.add(IpRangeVO_.l3NetworkUuid, Op.EQ, msg.getL3NetworkUuid());
    List<IpRangeVO> ranges = query.list();

    Collections.shuffle(ranges);

    do {
      String ip = null;
      IpRangeVO tr = null;

      for (IpRangeVO r : ranges) {
        ip = allocateIp(r);
        tr = r;
        if (ip != null) {
          break;
        }
      }

      if (ip == null) {
        /* No available ip in ranges */
        return null;
      }

      UsedIpInventory inv = l3NwMgr.reserveIp(IpRangeInventory.valueOf(tr), ip);
      if (inv != null) {
        return inv;
      }
    } while (true);
  }