Skip to content

Commit

Permalink
<fix>[xinfini]: support xinfini
Browse files Browse the repository at this point in the history
Resolves: ZSTAC-65399

Change-Id: I6b61796c6c6d786274627a726768776d6f696c67
  • Loading branch information
PandaWuu committed Sep 24, 2024
1 parent 346a5a5 commit 796be69
Show file tree
Hide file tree
Showing 204 changed files with 8,664 additions and 270 deletions.
10 changes: 10 additions & 0 deletions build/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -202,6 +202,11 @@
<artifactId>expon</artifactId>
<version>${project.version}</version>
</dependency>
<dependency>
<groupId>org.zstack</groupId>
<artifactId>xinfini</artifactId>
<version>${project.version}</version>
</dependency>
<dependency>
<groupId>org.zstack</groupId>
<artifactId>vhost</artifactId>
Expand Down Expand Up @@ -782,6 +787,11 @@
<artifactId>expon</artifactId>
<version>${project.version}</version>
</dependency>
<dependency>
<groupId>org.zstack</groupId>
<artifactId>xinfini</artifactId>
<version>${project.version}</version>
</dependency>
<dependency>
<groupId>org.zstack</groupId>
<artifactId>vhost</artifactId>
Expand Down
1 change: 1 addition & 0 deletions conf/db/upgrade/V5.2.1__schema.sql
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
ALTER TABLE `zstack`.`ExternalPrimaryStorageVO` modify column config varchar(2048) DEFAULT NULL;
28 changes: 28 additions & 0 deletions conf/springConfigXml/xinfini.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:aop="http://www.springframework.org/schema/aop"
xmlns:tx="http://www.springframework.org/schema/tx" xmlns:zstack="http://zstack.org/schema/zstack"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop-3.0.xsd
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx-3.0.xsd
http://zstack.org/schema/zstack
http://zstack.org/schema/zstack/plugin.xsd"
default-init-method="init" default-destroy-method="destroy">

<bean id="XInfiniStorageFactory" class = "org.zstack.xinfini.XInfiniStorageFactory">
<property name="preferBackupStorageTypes">
<list>
<value>ImageStoreBackupStorage</value>
</list>
</property>
<zstack:plugin>
<zstack:extension interface="org.zstack.header.storage.addon.primary.ExternalPrimaryStorageSvcBuilder" />
<zstack:extension interface="org.zstack.header.storage.addon.primary.BackupStorageSelector" />
<zstack:extension interface="org.zstack.header.volume.VolumeAfterExpungeExtensionPoint" />
</zstack:plugin>
</bean>

</beans>
1 change: 1 addition & 0 deletions conf/zstack.xml
Original file line number Diff line number Diff line change
Expand Up @@ -47,6 +47,7 @@
<import resource="springConfigXml/expon.xml"/>
<import resource="springConfigXml/zbs.xml"/>
<import resource="springConfigXml/cbd.xml"/>
<import resource="springConfigXml/xinfini.xml"/>
<import resource="springConfigXml/ExternalPrimaryStorage.xml"/>
<import resource="springConfigXml/ExternalBackupStorage.xml"/>
<import resource="springConfigXml/CloudBus.xml"/>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,16 @@ public class IscsiRemoteTarget extends BlockRemoteTarget {

private String diskId;

private String diskIdType;

public String getDiskIdType() {
return diskIdType;
}

public void setDiskIdType(String diskIdType) {
this.diskIdType = diskIdType;
}

public String getTransport() {
return transport;
}
Expand All @@ -37,7 +47,7 @@ public void setPort(int port) {

@Override
public String getResourceURI() {
return String.format("iscsi://%s:%s/%s/%s", ip, port, iqn, diskId);
return String.format("iscsi://%s:%s/%s/%s_%s", ip, port, iqn, diskIdType, diskId);
}

public String getDiskId() {
Expand All @@ -55,4 +65,9 @@ public String getIqn() {
public void setIqn(String iqn) {
this.iqn = iqn;
}

public enum DiskIdType {
wwn,
serial
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@ public class StorageCapabilities {
private boolean supportStorageQos;

private boolean supportLiveExpandVolume;
private boolean supportExportVolumeSnapshot;
public List<String> supportedImageFormats;
private VolumeProtocol defaultIsoActiveProtocol;
private VolumeProtocol defaultImageExportProtocol;
Expand Down Expand Up @@ -41,6 +42,14 @@ public void setSnapshotCapability(VolumeSnapshotCapability snapshotCapability) {
this.snapshotCapability = snapshotCapability;
}

public boolean isSupportExportVolumeSnapshot() {
return supportExportVolumeSnapshot;
}

public void setSupportExportVolumeSnapshot(boolean supportExportVolumeSnapshot) {
this.supportExportVolumeSnapshot = supportExportVolumeSnapshot;
}

public boolean isSupportCloneFromVolume() {
return supportCloneFromVolume;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -100,6 +100,7 @@ public class ExponStorageController implements PrimaryStorageControllerSvc, Prim
capabilities.setSupportStorageQos(true);
capabilities.setSupportLiveExpandVolume(false);
capabilities.setSupportedImageFormats(Collections.singletonList(ImageConstant.RAW_FORMAT_STRING));
capabilities.setSupportExportVolumeSnapshot(true);
}

enum LunType {
Expand Down Expand Up @@ -290,6 +291,7 @@ public synchronized ActiveVolumeTO activeIscsiVolume(String clientIqn, BaseVolum
target.setIqn(iscsi.getIqn());
target.setIp(nodes.stream().map(IscsiSeverNode::getGatewayIp).collect(Collectors.joining(",")));
target.setDiskId(getDiskId(lunId, lunType));
target.setDiskIdType(IscsiRemoteTarget.DiskIdType.wwn.toString());
to.setInstallPath(target.getResourceURI());
return to;
}
Expand Down Expand Up @@ -416,6 +418,8 @@ synchronized IscsiRemoteTarget exportIscsi(ExportSpec espec) {
target.setIqn(iscsi.getIqn());
target.setIp(nodes.stream().map(IscsiSeverNode::getGatewayIp).collect(Collectors.joining(",")));
target.setDiskId(getDiskId(lunId, lunType));
target.setDiskIdType(IscsiRemoteTarget.DiskIdType.wwn.toString());

return target;
}

Expand Down Expand Up @@ -452,6 +456,7 @@ public String getActivePath(BaseVolumeInfo v, HostInventory h, boolean shareable
target.setIqn(iscsi.getIqn());
target.setIp(nodes.stream().map(IscsiSeverNode::getGatewayIp).collect(Collectors.joining(",")));
target.setDiskId((getDiskId(lunId, lunType)));
target.setDiskIdType(IscsiRemoteTarget.DiskIdType.wwn.toString());
return target.getResourceURI();
}

Expand Down Expand Up @@ -641,6 +646,7 @@ public synchronized void activateHeartbeatVolume(HostInventory h, ReturnValueCom
target.setIqn(iscsi.getIqn());
target.setIp(nodes.stream().map(IscsiSeverNode::getGatewayIp).collect(Collectors.joining(",")));
target.setDiskId(heartbeatVol.getWwn());
target.setDiskIdType(IscsiRemoteTarget.DiskIdType.wwn.toString());
to.setInstallPath(target.getResourceURI());
to.setHostId(getHostId(h));
to.setHeartbeatRequiredSpace(SizeUnit.MEGABYTE.toByte(1));
Expand Down Expand Up @@ -708,6 +714,7 @@ public HeartbeatVolumeTO getHeartbeatVolumeActiveInfo(HostInventory h) {
target.setIqn(iscsi.getIqn());
target.setIp(nodes.stream().map(IscsiSeverNode::getGatewayIp).collect(Collectors.joining(",")));
target.setDiskId(heartbeatVol.getWwn());
target.setDiskIdType(IscsiRemoteTarget.DiskIdType.wwn.toString());
to.setInstallPath(target.getResourceURI());
to.setHostId(getHostId(h));
to.setHeartbeatRequiredSpace(SizeUnit.MEGABYTE.toByte(1));
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,14 +12,14 @@
import static java.util.Arrays.asList;

public class ApiResult {
public ErrorCode error;
public ExponErrorCode error;
private String resultString;

public ErrorCode getError() {
public ExponErrorCode getError() {
return error;
}

void setError(ErrorCode error) {
void setError(ExponErrorCode error) {
this.error = error;
}

Expand Down
33 changes: 7 additions & 26 deletions plugin/expon/src/main/java/org/zstack/expon/sdk/ExponClient.java
Original file line number Diff line number Diff line change
@@ -1,9 +1,6 @@
package org.zstack.expon.sdk;

import com.google.common.base.CaseFormat;
import com.google.gson.FieldNamingPolicy;
import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
import okhttp3.*;
import org.apache.commons.lang.StringEscapeUtils;
import org.apache.commons.lang.math.NumberUtils;
Expand All @@ -12,6 +9,7 @@
import org.zstack.core.Platform;
import org.zstack.expon.sdk.volume.GetVolumeTaskProgressRequest;
import org.zstack.expon.sdk.volume.GetVolumeTaskProgressResponse;
import org.zstack.externalStorage.sdk.ExternalStorageApiClient;
import org.zstack.header.expon.Constants;
import org.zstack.header.rest.DefaultSSLVerifier;
import org.zstack.utils.Utils;
Expand All @@ -21,31 +19,14 @@
import javax.net.ssl.SSLSocketFactory;
import javax.net.ssl.X509TrustManager;
import java.io.IOException;
import java.time.format.DateTimeFormatter;
import java.time.format.DateTimeFormatterBuilder;
import java.util.*;
import java.util.concurrent.TimeUnit;
import java.util.function.Supplier;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class ExponClient {
public class ExponClient extends ExternalStorageApiClient {
private static final CLogger logger = Utils.getLogger(ExponClient.class);
private static OkHttpClient http = new OkHttpClient();

static final Gson gson;
private static final DateTimeFormatter formatter;

private static final long ACTION_DEFAULT_TIMEOUT = -1;
private static final long ACTION_DEFAULT_POLLINGINTERVAL = -1;

static {
gson = new GsonBuilder().setFieldNamingPolicy(FieldNamingPolicy.LOWER_CASE_WITH_UNDERSCORES).create();
formatter = new DateTimeFormatterBuilder()
.parseCaseInsensitive()
.appendPattern("EEE, dd MMM yyyy HH:mm:ss VV")
.toFormatter(Locale.ENGLISH);
}

private ExponConnectConfig config;

Expand Down Expand Up @@ -340,8 +321,8 @@ private void fillNonQueryApiRequestBuilder(Request.Builder reqBuilder) throws Ex
reqBuilder.addHeader(Constants.HEADER_AUTHORIZATION, String.format("%s %s", Constants.BEARER, action.sessionId));
}

private ErrorCode errorCode(String id, String s) {
ErrorCode err = new ErrorCode();
private ExponErrorCode errorCode(String id, String s) {
ExponErrorCode err = new ExponErrorCode();
err.retCode = id;
err.message = s;
return err;
Expand Down Expand Up @@ -504,7 +485,7 @@ private ApiResult writeApiResult(Response response) throws IOException {
if (rsp.isSuccess()) {
res.setResultString(body);
} else {
res.error = errorCode(rsp.retCode, StringEscapeUtils.unescapeJava(rsp.message));
res.error = errorCode(rsp.getRetCode(), StringEscapeUtils.unescapeJava(rsp.getMessage()));
}
} else {
throw new ExponApiException(String.format("unknown status code: %s", response.code()));
Expand Down Expand Up @@ -553,11 +534,11 @@ void call(InternalCompletion completion) {
}

private long getTimeout(){
return action.timeout == ACTION_DEFAULT_TIMEOUT ? config.defaultPollingTimeout: action.timeout;
return action.timeout == ACTION_DEFAULT_TIMEOUT ? config.getDefaultPollingTimeout(): action.timeout;
}

private long getInterval(){
return config.defaultPollingInterval;
return config.getDefaultPollingInterval();
}
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

import org.zstack.header.expon.ExponError;

public class ErrorCode {
public class ExponErrorCode {
String retCode;
String message;

Expand Down
Loading

0 comments on commit 796be69

Please sign in to comment.