mirror of
https://github.com/apache/cloudstack.git
synced 2025-10-26 08:42:29 +01:00
Merge release branch 4.6 to master
* 4.6: CLOUDSTACK-9134: set device_id as the first device_id not in use instead of nic count
This commit is contained in:
commit
50c20dab17
@ -3147,7 +3147,7 @@ public class NetworkOrchestrator extends ManagerBase implements NetworkOrchestra
|
||||
|
||||
//1) allocate nic (if needed) Always allocate if it is a user vm
|
||||
if (nic == null || (vmProfile.getType() == VirtualMachine.Type.User)) {
|
||||
int deviceId = _nicDao.countNics(vm.getId());
|
||||
int deviceId = _nicDao.getFreeDeviceId(vm.getId());
|
||||
|
||||
nic = allocateNic(requested, network, false, deviceId, vmProfile).first();
|
||||
|
||||
|
||||
@ -55,7 +55,7 @@ public interface NicDao extends GenericDao<NicVO, Long> {
|
||||
|
||||
String getIpAddress(long networkId, long instanceId);
|
||||
|
||||
int countNics(long instanceId);
|
||||
int getFreeDeviceId(long instanceId);
|
||||
|
||||
NicVO findByNetworkIdInstanceIdAndBroadcastUri(long networkId, long instanceId, String broadcastUri);
|
||||
|
||||
|
||||
@ -24,6 +24,7 @@ import javax.inject.Inject;
|
||||
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
import com.cloud.utils.db.Filter;
|
||||
import com.cloud.utils.db.GenericDaoBase;
|
||||
import com.cloud.utils.db.GenericSearchBuilder;
|
||||
import com.cloud.utils.db.JoinBuilder;
|
||||
@ -42,7 +43,7 @@ public class NicDaoImpl extends GenericDaoBase<NicVO, Long> implements NicDao {
|
||||
private SearchBuilder<NicVO> AllFieldsSearch;
|
||||
private GenericSearchBuilder<NicVO, String> IpSearch;
|
||||
private SearchBuilder<NicVO> NonReleasedSearch;
|
||||
private GenericSearchBuilder<NicVO, Integer> CountBy;
|
||||
private GenericSearchBuilder<NicVO, Integer> deviceIdSearch;
|
||||
private GenericSearchBuilder<NicVO, Integer> CountByForStartingVms;
|
||||
|
||||
@Inject
|
||||
@ -79,11 +80,10 @@ public class NicDaoImpl extends GenericDaoBase<NicVO, Long> implements NicDao {
|
||||
NonReleasedSearch.and("state", NonReleasedSearch.entity().getState(), Op.NOTIN);
|
||||
NonReleasedSearch.done();
|
||||
|
||||
CountBy = createSearchBuilder(Integer.class);
|
||||
CountBy.select(null, Func.COUNT, CountBy.entity().getId());
|
||||
CountBy.and("vmId", CountBy.entity().getInstanceId(), Op.EQ);
|
||||
CountBy.and("removed", CountBy.entity().getRemoved(), Op.NULL);
|
||||
CountBy.done();
|
||||
deviceIdSearch = createSearchBuilder(Integer.class);
|
||||
deviceIdSearch.select(null, Func.DISTINCT, deviceIdSearch.entity().getDeviceId());
|
||||
deviceIdSearch.and("instance", deviceIdSearch.entity().getInstanceId(), Op.EQ);
|
||||
deviceIdSearch.done();
|
||||
|
||||
CountByForStartingVms = createSearchBuilder(Integer.class);
|
||||
CountByForStartingVms.select(null, Func.COUNT, CountByForStartingVms.entity().getId());
|
||||
@ -220,11 +220,20 @@ public class NicDaoImpl extends GenericDaoBase<NicVO, Long> implements NicDao {
|
||||
}
|
||||
|
||||
@Override
|
||||
public int countNics(long instanceId) {
|
||||
SearchCriteria<Integer> sc = CountBy.create();
|
||||
sc.setParameters("vmId", instanceId);
|
||||
List<Integer> results = customSearch(sc, null);
|
||||
return results.get(0);
|
||||
public int getFreeDeviceId(long instanceId) {
|
||||
Filter searchFilter = new Filter(NicVO.class, "deviceId", true, null, null);
|
||||
SearchCriteria<Integer> sc = deviceIdSearch.create();
|
||||
sc.setParameters("instance", instanceId);
|
||||
List<Integer> deviceIds = customSearch(sc, searchFilter);
|
||||
|
||||
int freeDeviceId = 0;
|
||||
for (int deviceId : deviceIds) {
|
||||
if (deviceId > freeDeviceId)
|
||||
break;
|
||||
freeDeviceId ++;
|
||||
}
|
||||
|
||||
return freeDeviceId;
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user