Skip to content

Commit edf9ddd

Browse files
author
Alex Huang
committed
added reservation id to vnet
1 parent 734cd0b commit edf9ddd

13 files changed

Lines changed: 183 additions & 45 deletions

api/src/com/cloud/exception/PermissionDeniedException.java

Lines changed: 30 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,10 @@
1717
*/
1818
package com.cloud.exception;
1919

20+
import java.util.List;
21+
22+
import com.cloud.acl.ControlledEntity;
23+
import com.cloud.user.Account;
2024
import com.cloud.utils.SerialVersionUID;
2125
import com.cloud.utils.exception.CloudRuntimeException;
2226

@@ -35,5 +39,30 @@ public PermissionDeniedException(String message) {
3539
protected PermissionDeniedException() {
3640
super();
3741
}
38-
42+
43+
List<? extends ControlledEntity> violations;
44+
Account account;
45+
46+
public PermissionDeniedException(String message, Account account, List<? extends ControlledEntity> violations) {
47+
super(message);
48+
this.violations = violations;
49+
this.account = account;
50+
}
51+
52+
public Account getAccount() {
53+
return account;
54+
}
55+
56+
public List<? extends ControlledEntity> getEntitiesInViolation() {
57+
return violations;
58+
}
59+
60+
public void addDetails(Account account, List<? extends ControlledEntity> violations) {
61+
this.account = account;
62+
this.violations = violations;
63+
}
64+
65+
public void addViolations(List<? extends ControlledEntity> violations) {
66+
this.violations = violations;
67+
}
3968
}

core/src/com/cloud/dc/DataCenterVnetVO.java

Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@ public class DataCenterVnetVO {
3535
@Id
3636
@GeneratedValue(strategy=GenerationType.IDENTITY)
3737
@Column(name="id")
38-
Long id;
38+
long id;
3939

4040
@Column(name="taken", nullable=true)
4141
@Temporal(value=TemporalType.TIMESTAMP)
@@ -50,6 +50,9 @@ public class DataCenterVnetVO {
5050
@Column(name="account_id")
5151
protected Long accountId;
5252

53+
@Column(name="reservation_id")
54+
protected String reservationId;
55+
5356
public Date getTakenAt() {
5457
return takenAt;
5558
}
@@ -64,14 +67,22 @@ public DataCenterVnetVO(String vnet, long dcId) {
6467
this.takenAt = null;
6568
}
6669

67-
public Long getId() {
70+
public long getId() {
6871
return id;
6972
}
7073

7174
public String getVnet() {
7275
return vnet;
7376
}
7477

78+
public String getReservationId() {
79+
return reservationId;
80+
}
81+
82+
public void setReservationId(String reservationId) {
83+
this.reservationId = reservationId;
84+
}
85+
7586
public Long getAccountId() {
7687
return accountId;
7788
}

core/src/com/cloud/dc/dao/DataCenterDao.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -35,9 +35,9 @@ public interface DataCenterDao extends GenericDao<DataCenterVO, Long> {
3535
String[] getNextAvailableMacAddressPair(long id, long mask);
3636
String allocatePrivateIpAddress(long id, long podId, long instanceId, String reservationId);
3737
String allocateLinkLocalIpAddress(long id, long podId, long instanceId, String reservationId);
38-
String allocateVnet(long dcId, long accountId);
38+
String allocateVnet(long dcId, long accountId, String reservationId);
3939

40-
void releaseVnet(String vnet, long dcId, long accountId);
40+
void releaseVnet(String vnet, long dcId, long accountId, String reservationId);
4141
void releasePrivateIpAddress(String ipAddress, long dcId, Long instanceId);
4242
void releasePrivateIpAddress(long nicId, String reservationId);
4343
void releaseLinkLocalIpAddress(String ipAddress, long dcId, Long instanceId);

core/src/com/cloud/dc/dao/DataCenterDaoImpl.java

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -94,8 +94,8 @@ public List<DataCenterVO> listPublicZones(){
9494
}
9595

9696
@Override
97-
public void releaseVnet(String vnet, long dcId, long accountId) {
98-
_vnetAllocDao.release(vnet, dcId, accountId);
97+
public void releaseVnet(String vnet, long dcId, long accountId, String reservationId) {
98+
_vnetAllocDao.release(vnet, dcId, accountId, reservationId);
9999
}
100100

101101
@Override
@@ -134,8 +134,8 @@ public boolean deleteLinkLocalIpAddressByPod(long podId) {
134134
}
135135

136136
@Override
137-
public String allocateVnet(long dataCenterId, long accountId) {
138-
DataCenterVnetVO vo = _vnetAllocDao.take(dataCenterId, accountId);
137+
public String allocateVnet(long dataCenterId, long accountId, String reservationId) {
138+
DataCenterVnetVO vo = _vnetAllocDao.take(dataCenterId, accountId, reservationId);
139139
if (vo == null) {
140140
return null;
141141
}

core/src/com/cloud/dc/dao/DataCenterVnetDaoImpl.java

Lines changed: 24 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@
2323
import java.util.List;
2424

2525
import com.cloud.dc.DataCenterVnetVO;
26+
import com.cloud.utils.db.DB;
2627
import com.cloud.utils.db.GenericDao;
2728
import com.cloud.utils.db.GenericDaoBase;
2829
import com.cloud.utils.db.SearchBuilder;
@@ -34,6 +35,7 @@
3435
* DataCenterVnetDaoImpl maintains the one-to-many relationship between
3536
* data center and the vnet that appears within its network.
3637
*/
38+
@DB(txn=false)
3739
public class DataCenterVnetDaoImpl extends GenericDaoBase<DataCenterVnetVO, Long> implements GenericDao<DataCenterVnetVO, Long> {
3840
private final SearchBuilder<DataCenterVnetVO> FreeVnetSearch;
3941
private final SearchBuilder<DataCenterVnetVO> VnetDcSearch;
@@ -53,6 +55,7 @@ public List<DataCenterVnetVO> findVnet(long dcId, String vnet) {
5355
return listBy(sc);
5456
}
5557

58+
@DB
5659
public void add(long dcId, int start, int end) {
5760
String insertVnet = "INSERT INTO `cloud`.`op_dc_vnet_alloc` (vnet, data_center_id) VALUES ( ?, ?)";
5861

@@ -73,46 +76,38 @@ public void add(long dcId, int start, int end) {
7376
}
7477

7578
public void delete(long dcId) {
76-
String deleteVnet = "DELETE FROM `cloud`.`op_dc_vnet_alloc` WHERE data_center_id = ?";
77-
78-
Transaction txn = Transaction.currentTxn();
79-
try {
80-
PreparedStatement stmt = txn.prepareAutoCloseStatement(deleteVnet);
81-
stmt.setLong(1, dcId);
82-
stmt.executeUpdate();
83-
} catch (SQLException e) {
84-
throw new CloudRuntimeException("Exception caught deleting vnet ", e);
85-
}
79+
SearchCriteria<DataCenterVnetVO> sc = VnetDcSearch.create();
80+
sc.setParameters("dc", dcId);
81+
82+
remove(sc);
8683
}
8784

88-
public DataCenterVnetVO take(long dcId, long accountId) {
85+
@DB
86+
public DataCenterVnetVO take(long dcId, long accountId, String reservationId) {
8987
SearchCriteria<DataCenterVnetVO> sc = FreeVnetSearch.create();
9088
sc.setParameters("dc", dcId);
9189
Date now = new Date();
9290
Transaction txn = Transaction.currentTxn();
93-
try {
94-
txn.start();
95-
DataCenterVnetVO vo = lockOneRandomRow(sc, true);
96-
if (vo == null) {
97-
return null;
98-
}
99-
100-
vo.setTakenAt(now);
101-
vo.setAccountId(accountId);
102-
update(vo.getId(), vo);
103-
txn.commit();
104-
return vo;
105-
106-
} catch (Exception e) {
107-
throw new CloudRuntimeException("Caught Exception ", e);
91+
txn.start();
92+
DataCenterVnetVO vo = lockOneRandomRow(sc, true);
93+
if (vo == null) {
94+
return null;
10895
}
96+
97+
vo.setTakenAt(now);
98+
vo.setAccountId(accountId);
99+
vo.setReservationId(reservationId);
100+
update(vo.getId(), vo);
101+
txn.commit();
102+
return vo;
109103
}
110104

111-
public void release(String vnet, long dcId, long accountId) {
105+
public void release(String vnet, long dcId, long accountId, String reservationId) {
112106
SearchCriteria<DataCenterVnetVO> sc = VnetDcSearchAllocated.create();
113107
sc.setParameters("vnet", vnet);
114108
sc.setParameters("dc", dcId);
115109
sc.setParameters("account", accountId);
110+
sc.setParameters("reservation", reservationId);
116111

117112
DataCenterVnetVO vo = findOneIncludingRemovedBy(sc);
118113
if (vo == null) {
@@ -121,6 +116,7 @@ public void release(String vnet, long dcId, long accountId) {
121116

122117
vo.setTakenAt(null);
123118
vo.setAccountId(null);
119+
vo.setReservationId(null);
124120
update(vo.getId(), vo);
125121
}
126122

@@ -146,6 +142,7 @@ protected DataCenterVnetDaoImpl() {
146142
VnetDcSearchAllocated.and("dc", VnetDcSearchAllocated.entity().getDataCenterId(), SearchCriteria.Op.EQ);
147143
VnetDcSearchAllocated.and("taken", VnetDcSearchAllocated.entity().getTakenAt(), SearchCriteria.Op.NNULL);
148144
VnetDcSearchAllocated.and("account", VnetDcSearchAllocated.entity().getAccountId(), SearchCriteria.Op.EQ);
145+
VnetDcSearchAllocated.and("reservation", VnetDcSearchAllocated.entity().getReservationId(), SearchCriteria.Op.EQ);
149146
VnetDcSearchAllocated.done();
150147
}
151148
}

core/src/com/cloud/network/BasicVirtualNetworkAllocator.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -39,12 +39,12 @@ public BasicVirtualNetworkAllocator() {
3939

4040
@Override
4141
public String allocateTag(AccountVO account, HostVO host, VMInstanceVO vm, ServiceOfferingVO so) {
42-
return _dcDao.allocateVnet(host.getDataCenterId(), account.getId());
42+
return _dcDao.allocateVnet(host.getDataCenterId(), account.getId(), null);
4343
}
4444

4545
@Override
4646
public void releaseTag(String tag, HostVO host, AccountVO account, VMInstanceVO vm) {
47-
_dcDao.releaseVnet(tag, host.getDataCenterId(), account.getId());
47+
_dcDao.releaseVnet(tag, host.getDataCenterId(), account.getId(), null);
4848
}
4949

5050
@Override

server/src/com/cloud/acl/DomainChecker.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -88,7 +88,7 @@ public boolean checkAccess(Account account, ControlledEntity entity) throws Perm
8888

8989
return true;
9090
} else {
91-
return false;
91+
return true;
9292
}
9393
}
9494

server/src/com/cloud/network/DomainRouterService.java

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,10 +17,15 @@
1717
*/
1818
package com.cloud.network;
1919

20+
import com.cloud.api.commands.StartRouter2Cmd;
2021
import com.cloud.api.commands.StartRouterCmd;
22+
import com.cloud.api.commands.StopRouter2Cmd;
2123
import com.cloud.api.commands.StopRouterCmd;
24+
import com.cloud.exception.ConcurrentOperationException;
25+
import com.cloud.exception.InsufficientCapacityException;
2226
import com.cloud.exception.InvalidParameterValueException;
2327
import com.cloud.exception.PermissionDeniedException;
28+
import com.cloud.exception.ResourceUnavailableException;
2429
import com.cloud.utils.component.Manager;
2530
import com.cloud.vm.DomainRouter;
2631

@@ -40,4 +45,16 @@ public interface DomainRouterService extends Manager {
4045
* @throws InvalidParameterValueException, PermissionDeniedException
4146
*/
4247
DomainRouter stopRouter(StopRouterCmd cmd);
48+
49+
DomainRouter startRouter(StartRouter2Cmd cmd) throws ResourceUnavailableException, InsufficientCapacityException, ConcurrentOperationException;
50+
51+
/**
52+
* Stops domain router
53+
* @param cmd the command specifying router's id
54+
* @return router if successful, null otherwise
55+
* @throws ConcurrentOperationException
56+
* @throws ResourceUnavailableException
57+
* @throws InvalidParameterValueException, PermissionDeniedException
58+
*/
59+
DomainRouter stopRouter(StopRouter2Cmd cmd) throws ResourceUnavailableException, ConcurrentOperationException;
4360
}

server/src/com/cloud/network/configuration/GuestNetworkGuru.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -133,7 +133,7 @@ public NetworkConfiguration implement(NetworkConfiguration config, NetworkOfferi
133133
NetworkConfigurationVO implemented = new NetworkConfigurationVO(config.getTrafficType(), config.getGuestType(), config.getMode(), config.getBroadcastDomainType(), config.getNetworkOfferingId(), config.getDataCenterId());
134134

135135
if (config.getBroadcastUri() == null) {
136-
String vnet = _dcDao.allocateVnet(dcId, config.getAccountId());
136+
String vnet = _dcDao.allocateVnet(dcId, config.getAccountId(), context.getReservationId());
137137
implemented.setBroadcastUri(BroadcastDomainType.Vlan.toUri(vnet));
138138
} else {
139139
implemented.setBroadcastUri(config.getBroadcastUri());

0 commit comments

Comments
 (0)