Skip to content

Commit 826b472

Browse files
author
shenjin
committed
<fix>[storage]: refactor expon bm2
Resolves: ZSTAC-77315 Change-Id: I6670626f746f6e617466737965776f756a766774
1 parent 79e3f0c commit 826b472

File tree

2 files changed

+57
-4
lines changed

2 files changed

+57
-4
lines changed

header/src/main/java/org/zstack/header/storage/addon/IscsiRemoteTarget.java

Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,12 @@
11
package org.zstack.header.storage.addon;
22

3+
import org.zstack.utils.Utils;
4+
import org.zstack.utils.logging.CLogger;
5+
6+
import java.net.URI;
7+
38
public class IscsiRemoteTarget extends BlockRemoteTarget {
9+
private final static CLogger logger = Utils.getLogger(IscsiRemoteTarget.class);
410
private String transport = "tcp";
511

612
private String iqn;
@@ -70,4 +76,44 @@ public enum DiskIdType {
7076
wwn,
7177
serial
7278
}
79+
80+
public static IscsiRemoteTarget fromUri(String uriString) {
81+
try {
82+
URI uri = URI.create(uriString);
83+
84+
if (!"iscsi".equals(uri.getScheme())) {
85+
logger.info("Invalid URI scheme. Expected 'iscsi', got: " + uri.getScheme());
86+
return null;
87+
}
88+
89+
IscsiRemoteTarget target = new IscsiRemoteTarget();
90+
target.setIp(uri.getHost());
91+
target.setPort(uri.getPort());
92+
93+
// parse: /{iqn}/{diskIdType}_{diskId}
94+
String path = uri.getPath();
95+
if (path != null && path.startsWith("/")) {
96+
String[] pathParts = path.substring(1).split("/");
97+
if (pathParts.length >= 2) {
98+
target.setIqn(pathParts[0]);
99+
String[] diskParts = pathParts[1].split("_", 2);
100+
if (diskParts.length == 2) {
101+
target.setDiskIdType(diskParts[0]);
102+
target.setDiskId(diskParts[1]);
103+
} else {
104+
logger.info("Invalid diskId format in URI path: " + pathParts[1]);
105+
return null;
106+
}
107+
} else {
108+
logger.info("Invalid URI path format: " + path);
109+
return null;
110+
}
111+
}
112+
113+
return target;
114+
} catch (Exception e) {
115+
logger.error("Failed to parse URI: " + uriString, e);
116+
return null;
117+
}
118+
}
73119
}

plugin/expon/src/main/java/org/zstack/expon/ExponStorageController.java

Lines changed: 11 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -37,10 +37,7 @@
3737
import org.zstack.header.storage.primary.ImageCacheInventory;
3838
import org.zstack.header.storage.primary.VolumeSnapshotCapability;
3939
import org.zstack.header.storage.snapshot.VolumeSnapshotStats;
40-
import org.zstack.header.volume.VolumeConstant;
41-
import org.zstack.header.volume.VolumeInventory;
42-
import org.zstack.header.volume.VolumeProtocol;
43-
import org.zstack.header.volume.VolumeStats;
40+
import org.zstack.header.volume.*;
4441
import org.zstack.iscsi.IscsiUtils;
4542
import org.zstack.iscsi.kvm.IscsiHeartbeatVolumeTO;
4643
import org.zstack.iscsi.kvm.IscsiVolumeTO;
@@ -239,6 +236,10 @@ public List<IscsiSeverNode> getIscsiServers(String tianshuId) {
239236

240237
private synchronized ActiveVolumeTO activeIscsiVolume(HostInventory h, BaseVolumeInfo vol, boolean shareable) {
241238
String clientIqn = IscsiUtils.getHostInitiatorName(h.getUuid());
239+
if (h.getHypervisorType().equals("baremetal2")) {
240+
VolumeVO volume = dbf.findByUuid(vol.getUuid(), VolumeVO.class);
241+
clientIqn = String.format("iqn.2015-01.io.zstack:initiator.instance.%s", volume.getVmInstanceUuid());
242+
}
242243
if (clientIqn == null) {
243244
throw new RuntimeException(String.format("cannot get host[uuid:%s] initiator name", h.getUuid()));
244245
}
@@ -751,6 +752,12 @@ private void deactivateVhost(String installPath, HostInventory h) {
751752

752753
private void deactivateIscsi(String installPath, HostInventory h) {
753754
String iqn = IscsiUtils.getHostInitiatorName(h.getUuid());
755+
if (h.getHypervisorType().equals("baremetal2")) {
756+
String[] parts = installPath.split("/");
757+
String volumeUuid = parts[parts.length - 1];
758+
VolumeVO volume = dbf.findByUuid(volumeUuid, VolumeVO.class);
759+
iqn = String.format("iqn.2015-01.io.zstack:initiator.instance.%s", volume.getVmInstanceUuid());
760+
}
754761
if (iqn == null) {
755762
throw new RuntimeException(String.format("cannot get host[uuid:%s] initiator name", h.getUuid()));
756763
}

0 commit comments

Comments
 (0)