Skip to content

Commit 62de5fa

Browse files
committed
Merge branch 'feature/ZSTAC-81715@@3' into 'feature-5.5.6-local-cache'
<feature>[vm_local_volume_cache]: vm local volume cache imp See merge request zstackio/zstack!9343
2 parents cf48ab8 + ab160bd commit 62de5fa

87 files changed

Lines changed: 4309 additions & 29 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

compute/src/main/java/org/zstack/compute/host/HostBase.java

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -188,6 +188,8 @@ protected void handleApiMessage(APIMessage msg) {
188188
handle((APIPowerResetHostMsg) msg);
189189
} else if (msg instanceof APIGetHostPowerStatusMsg) {
190190
handle((APIGetHostPowerStatusMsg) msg);
191+
} else if (msg instanceof APIGetBlockDevicesMsg) {
192+
handle((APIGetBlockDevicesMsg) msg);
191193
} else {
192194
bus.dealWithUnknownMessage(msg);
193195
}
@@ -214,6 +216,26 @@ public void run(MessageReply reply) {
214216
});
215217
}
216218

219+
private void handle(APIGetBlockDevicesMsg msg) {
220+
APIGetBlockDevicesEvent event = new APIGetBlockDevicesEvent(msg.getId());
221+
GetBlockDevicesOnHostMsg gmsg = new GetBlockDevicesOnHostMsg();
222+
gmsg.setHostUuid(msg.getHostUuid());
223+
bus.makeTargetServiceIdByResourceUuid(gmsg, HostConstant.SERVICE_ID, msg.getHostUuid());
224+
bus.send(gmsg, new CloudBusCallBack(msg) {
225+
@Override
226+
public void run(MessageReply reply) {
227+
if (!reply.isSuccess()) {
228+
event.setSuccess(false);
229+
event.setError(reply.getError());
230+
} else {
231+
GetBlockDevicesOnHostReply r = reply.castReply();
232+
event.setBlockDevices(r.getBlockDevices());
233+
}
234+
bus.publish(event);
235+
}
236+
});
237+
}
238+
217239
private void handle(APIPowerResetHostMsg msg) {
218240
final APIPowerResetHostEvent event = new APIPowerResetHostEvent(msg.getId());
219241
RebootHostMsg rebootHostMsg = new RebootHostMsg();

compute/src/main/java/org/zstack/compute/vm/VmAllocateHostFlow.java

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,6 @@
66
import org.zstack.core.cloudbus.CloudBus;
77
import org.zstack.core.cloudbus.CloudBusCallBack;
88
import org.zstack.core.db.DatabaseFacade;
9-
import org.zstack.core.db.Q;
109
import org.zstack.core.db.SQL;
1110
import org.zstack.core.errorcode.ErrorFacade;
1211
import org.zstack.header.allocator.*;
@@ -15,16 +14,13 @@
1514
import org.zstack.header.core.workflow.Flow;
1615
import org.zstack.header.core.workflow.FlowRollback;
1716
import org.zstack.header.core.workflow.FlowTrigger;
18-
import org.zstack.header.errorcode.ErrorCode;
1917
import org.zstack.header.exception.CloudRuntimeException;
2018
import org.zstack.header.host.HostInventory;
2119
import org.zstack.header.host.HostVO;
2220
import org.zstack.header.image.ImageConstant.ImageMediaType;
2321
import org.zstack.header.image.ImageInventory;
2422
import org.zstack.header.message.MessageReply;
2523
import org.zstack.header.network.l3.L3NetworkInventory;
26-
import org.zstack.header.storage.primary.PrimaryStorageClusterRefVO;
27-
import org.zstack.header.storage.primary.PrimaryStorageClusterRefVO_;
2824
import org.zstack.header.vm.*;
2925
import org.zstack.header.vm.VmInstanceConstant.VmOperation;
3026
import org.zstack.utils.CollectionUtils;
@@ -158,6 +154,7 @@ public void run(final FlowTrigger chain, Map data) {
158154
}
159155

160156
AllocateHostMsg msg = this.prepareMsg(spec);
157+
extEmitter.beforeVmAllocateHost(msg, spec);
161158

162159
bus.send(msg, new CloudBusCallBack(chain) {
163160
@Override

compute/src/main/java/org/zstack/compute/vm/VmAllocateHostForStoppedVmFlow.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -92,6 +92,7 @@ public String call(L3NetworkInventory arg) {
9292
msg.setAvoidHostUuids(spec.getAvoidHostUuids());
9393
amsg = msg;
9494

95+
extEmitter.beforeVmAllocateHost(amsg, spec);
9596
bus.send(amsg, new CloudBusCallBack(chain) {
9697
@Override
9798
public void run(MessageReply reply) {

compute/src/main/java/org/zstack/compute/vm/VmInstanceExtensionPointEmitter.java

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
import org.zstack.core.errorcode.ErrorFacade;
77
import org.zstack.core.workflow.FlowChainBuilder;
88
import org.zstack.header.Component;
9+
import org.zstack.header.allocator.AllocateHostMsg;
910
import org.zstack.header.core.Completion;
1011
import org.zstack.header.core.NoErrorCompletion;
1112
import org.zstack.header.core.WhileDoneCompletion;
@@ -51,6 +52,7 @@ public class VmInstanceExtensionPointEmitter implements Component {
5152
private List<CleanUpAfterVmChangeImageExtensionPoint> cleanUpAfterVmChangeImageExtensionPoints;
5253
private List<VmNicChangeStateExtensionPoint> vmNicChangeStateExtensionPoints;
5354
private List<SshKeyPairAssociateExtensionPoint> sshKeyPairAssociateExtensionPoints;
55+
private List<BeforeVmAllocateHostExtensionPoint> beforeVmAllocateHostExtensions;
5456

5557
public List<ErrorCode> handleSystemTag(String vmUuid, List<String> tags){
5658
List<ErrorCode> errorCodes = new ArrayList<>();
@@ -609,6 +611,10 @@ public void cloneSshKeyPairsToVm(String originVmUuid, String destVmUuid) {
609611
});
610612
}
611613

614+
public void beforeVmAllocateHost(AllocateHostMsg msg, VmInstanceSpec spec) {
615+
CollectionUtils.safeForEach(beforeVmAllocateHostExtensions, ext -> ext.beforeVmAllocateHost(msg, spec));
616+
}
617+
612618
private void populateExtensions() {
613619
VmInstanceBeforeStartExtensions = pluginRgty.getExtensionList(VmInstanceBeforeStartExtensionPoint.class);
614620
VmInstanceResumeExtensionPoints = pluginRgty.getExtensionList(VmInstanceResumeExtensionPoint.class);
@@ -626,6 +632,7 @@ private void populateExtensions() {
626632
cleanUpAfterVmChangeImageExtensionPoints = pluginRgty.getExtensionList(CleanUpAfterVmChangeImageExtensionPoint.class);
627633
vmNicChangeStateExtensionPoints = pluginRgty.getExtensionList(VmNicChangeStateExtensionPoint.class);
628634
sshKeyPairAssociateExtensionPoints = pluginRgty.getExtensionList(SshKeyPairAssociateExtensionPoint.class);
635+
beforeVmAllocateHostExtensions = pluginRgty.getExtensionList(BeforeVmAllocateHostExtensionPoint.class);
629636
}
630637

631638
@Override
Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
CREATE TABLE IF NOT EXISTS `VmLocalVolumeCachePoolVO` (
2+
`uuid` VARCHAR(32) NOT NULL,
3+
`hostUuid` VARCHAR(32) NOT NULL,
4+
`name` VARCHAR(255) DEFAULT NULL,
5+
`description` VARCHAR(2048) DEFAULT NULL,
6+
`metadata` VARCHAR(2048) DEFAULT NULL,
7+
`state` VARCHAR(32) NOT NULL,
8+
`status` VARCHAR(32) NOT NULL,
9+
`createDate` TIMESTAMP NOT NULL DEFAULT '0000-00-00 00:00:00',
10+
`lastOpDate` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
11+
PRIMARY KEY (`uuid`),
12+
CONSTRAINT `fkVmLocalVolumeCachePoolVOHostEO`
13+
FOREIGN KEY (`hostUuid`) REFERENCES `HostEO` (`uuid`)
14+
ON DELETE CASCADE
15+
) ENGINE = InnoDB DEFAULT CHARSET = utf8;
16+
17+
CREATE TABLE IF NOT EXISTS `VmLocalVolumeCachePoolCapacityVO` (
18+
`uuid` VARCHAR(32) NOT NULL,
19+
`totalCapacity` BIGINT NOT NULL DEFAULT 0,
20+
`availableCapacity` BIGINT NOT NULL DEFAULT 0,
21+
`allocated` BIGINT NOT NULL DEFAULT 0,
22+
`dirty` BIGINT NOT NULL DEFAULT 0,
23+
PRIMARY KEY (`uuid`),
24+
CONSTRAINT `fkVmLocalVolumeCachePoolCapacityVOVmLocalVolumeCachePoolVO`
25+
FOREIGN KEY (`uuid`) REFERENCES `VmLocalVolumeCachePoolVO` (`uuid`)
26+
ON DELETE CASCADE
27+
) ENGINE = InnoDB DEFAULT CHARSET = utf8;
28+
29+
CREATE TABLE IF NOT EXISTS `VmLocalVolumeCacheVO` (
30+
`uuid` VARCHAR(32) NOT NULL,
31+
`volumeUuid` VARCHAR(32) NOT NULL,
32+
`poolUuid` VARCHAR(32) DEFAULT NULL,
33+
`installPath` VARCHAR(2048) DEFAULT NULL,
34+
`cacheMode` VARCHAR(32) NOT NULL,
35+
`state` VARCHAR(32) NOT NULL,
36+
`createDate` TIMESTAMP NOT NULL DEFAULT '0000-00-00 00:00:00',
37+
`lastOpDate` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
38+
PRIMARY KEY (`uuid`),
39+
UNIQUE KEY `uniVmLocalVolumeCacheVOVolumeUuid` (`volumeUuid`),
40+
CONSTRAINT `fkVmLocalVolumeCacheVOVolumeEO`
41+
FOREIGN KEY (`volumeUuid`) REFERENCES `VolumeEO` (`uuid`)
42+
ON DELETE CASCADE,
43+
CONSTRAINT `fkVmLocalVolumeCacheVOPoolUuid`
44+
FOREIGN KEY (`poolUuid`) REFERENCES `VmLocalVolumeCachePoolVO` (`uuid`)
45+
ON DELETE SET NULL
46+
) ENGINE = InnoDB DEFAULT CHARSET = utf8;
Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
<?xml version="1.0" encoding="UTF-8"?>
2+
<globalConfig xmlns="http://zstack.org/schema/zstack">
3+
<config>
4+
<category>vmLocalVolumeCachePool</category>
5+
<name>capacitySync.interval</name>
6+
<description>Interval in seconds between periodic capacity sync tasks for local volume cache pools.</description>
7+
<defaultValue>300</defaultValue>
8+
<type>java.lang.Long</type>
9+
</config>
10+
11+
<config>
12+
<category>vmLocalVolumeCachePool</category>
13+
<name>healthCheck.interval</name>
14+
<description>Interval in seconds between periodic health check tasks for local volume cache pools.</description>
15+
<defaultValue>60</defaultValue>
16+
<type>java.lang.Long</type>
17+
</config>
18+
19+
<config>
20+
<category>vmLocalVolumeCachePool</category>
21+
<name>gc.interval</name>
22+
<description>Interval in seconds between periodic garbage collection tasks for local volume cache pools.</description>
23+
<defaultValue>3600</defaultValue>
24+
<type>java.lang.Long</type>
25+
</config>
26+
27+
</globalConfig>

conf/persistence.xml

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -217,6 +217,9 @@
217217
<class>org.zstack.network.hostNetworkInterface.lldp.entity.HostNetworkInterfaceLldpRefVO</class>
218218
<class>org.zstack.header.volume.block.BlockVolumeVO</class>
219219
<class>org.zstack.header.host.HostHwMonitorStatusVO</class>
220+
<class>org.zstack.header.localVolumeCache.VmLocalVolumeCachePoolVO</class>
221+
<class>org.zstack.header.localVolumeCache.VmLocalVolumeCachePoolCapacityVO</class>
222+
<class>org.zstack.header.localVolumeCache.VmLocalVolumeCacheVO</class>
220223
<class>org.zstack.kvm.xmlhook.XmlHookVO</class>
221224
<class>org.zstack.kvm.xmlhook.XmlHookVmInstanceRefVO</class>
222225
<class>org.zstack.log.server.LogServerVO</class>

conf/serviceConfig/host.xml

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -61,6 +61,10 @@
6161
<name>org.zstack.header.host.APIGetHostPowerStatusMsg</name>
6262
</message>
6363

64+
<message>
65+
<name>org.zstack.header.host.APIGetBlockDevicesMsg</name>
66+
</message>
67+
6468
<message>
6569
<name>org.zstack.header.host.APICreateHostNetworkServiceTypeMsg</name>
6670
</message>
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
<?xml version="1.0" encoding="UTF-8"?>
2+
<service xmlns="http://zstack.org/schema/zstack">
3+
<id>vmLocalVolumeCache</id>
4+
5+
<message>
6+
<name>org.zstack.header.localVolumeCache.APIEnableVolumeCacheMsg</name>
7+
</message>
8+
9+
<message>
10+
<name>org.zstack.header.localVolumeCache.APIDisableVolumeCacheMsg</name>
11+
</message>
12+
</service>
Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
<?xml version="1.0" encoding="UTF-8"?>
2+
<service xmlns="http://zstack.org/schema/zstack">
3+
<id>vmLocalVolumeCachePool</id>
4+
5+
<message>
6+
<name>org.zstack.header.localVolumeCache.APICreateVmLocalVolumeCachePoolMsg</name>
7+
</message>
8+
9+
<message>
10+
<name>org.zstack.header.localVolumeCache.APIDeleteVmLocalVolumeCachePoolMsg</name>
11+
</message>
12+
13+
<message>
14+
<name>org.zstack.header.localVolumeCache.APIUpdateVmLocalVolumeCachePoolMsg</name>
15+
</message>
16+
17+
<message>
18+
<name>org.zstack.header.localVolumeCache.APIChangeVmLocalVolumeCachePoolStateMsg</name>
19+
</message>
20+
21+
<message>
22+
<name>org.zstack.header.localVolumeCache.APIReconnectVmLocalVolumeCachePoolMsg</name>
23+
</message>
24+
25+
<message>
26+
<name>org.zstack.header.localVolumeCache.APIExtendVmLocalVolumeCachePoolMsg</name>
27+
</message>
28+
29+
<message>
30+
<name>org.zstack.header.localVolumeCache.APISyncVmLocalVolumeCachePoolCapacityMsg</name>
31+
</message>
32+
33+
<message>
34+
<name>org.zstack.header.localVolumeCache.APIQueryVmLocalVolumeCachePoolMsg</name>
35+
<serviceId>query</serviceId>
36+
</message>
37+
</service>

0 commit comments

Comments
 (0)