/**
* Copyright 2013, Big Switch Networks, Inc.
*
* Licensed under the Apache License, Version 2.0 (the "License"); you may
* not use this file except in compliance with the License. You may obtain
* a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
* License for the specific language governing permissions and limitations
* under the License.
**/
package net.floodlightcontroller.loadbalancer;
import java.util.ArrayList;
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import net.floodlightcontroller.loadbalancer.LoadBalancer.IPClient;
/**
* Data structure for Load Balancer based on
* Quantum proposal http://wiki.openstack.org/LBaaS/CoreResourceModel/proposal
*
* @author KC Wang
*/
@JsonSerialize(using=LBPoolSerializer.class)
public class LBPool {
protected String id;
protected String name;
protected String tenantId;
protected String netId;
protected short lbMethod;
protected byte protocol;
protected ArrayList<String> members;
protected ArrayList<String> monitors;
protected short adminState;
protected short status;
protected String vipId;
protected int previousMemberIndex;
public LBPool() {
id = String.valueOf((int) (Math.random()*10000));
name = null;
tenantId = null;
netId = null;
lbMethod = 0;
protocol = 0;
members = new ArrayList<String>();
monitors = new ArrayList<String>();
adminState = 0;
status = 0;
previousMemberIndex = -1;
}
public String pickMember(IPClient client) {
// simple round robin for now; add different lbmethod later
if (members.size() > 0) {
previousMemberIndex = (previousMemberIndex + 1) % members.size();
return members.get(previousMemberIndex);
} else {
return null;
}
}
}