Skip to content

Commit 1dc6efe

Browse files
committed
Added nfs minor version support on SSVM
1 parent 2e3390f commit 1dc6efe

30 files changed

Lines changed: 437 additions & 251 deletions

File tree

api/src/main/java/com/cloud/agent/api/to/NfsTO.java

Lines changed: 14 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,8 @@ public class NfsTO implements DataStoreTO {
2424
private DataStoreRole _role;
2525
private String uuid;
2626
private static final String pathSeparator = "/";
27-
private Integer nfsVersion;
27+
private Integer nfsMajorVersion;
28+
private Integer nfsMinorVersion;
2829

2930
public NfsTO() {
3031

@@ -73,11 +74,19 @@ public String getPathSeparator() {
7374
return pathSeparator;
7475
}
7576

76-
public Integer getNfsVersion() {
77-
return nfsVersion;
77+
public Integer getNfsMajorVersion() {
78+
return nfsMajorVersion;
7879
}
7980

80-
public void setNfsVersion(Integer nfsVersion) {
81-
this.nfsVersion = nfsVersion;
81+
public void setNfsMajorVersion(Integer nfsMajorVersion) {
82+
this.nfsMajorVersion = nfsMajorVersion;
83+
}
84+
85+
public Integer getNfsMinorVersion() {
86+
return nfsMinorVersion;
87+
}
88+
89+
public void setNfsMinorVersion(Integer nfsMinorVersion) {
90+
this.nfsMinorVersion = nfsMinorVersion;
8291
}
8392
}

core/src/main/java/com/cloud/agent/api/GetStorageStatsCommand.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -55,8 +55,8 @@ public GetStorageStatsCommand(DataStoreTO store) {
5555
this.store = store;
5656
}
5757

58-
public GetStorageStatsCommand(DataStoreTO store, Integer nfsVersion) {
59-
super(nfsVersion);
58+
public GetStorageStatsCommand(DataStoreTO store, Integer nfsMajorVersion, Integer nfsMinorVersion) {
59+
super(nfsMajorVersion, nfsMinorVersion);
6060
this.store = store;
6161
}
6262

core/src/main/java/com/cloud/agent/api/storage/ListTemplateCommand.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -31,8 +31,8 @@ public ListTemplateCommand(DataStoreTO store) {
3131
this.store = store;
3232
}
3333

34-
public ListTemplateCommand(DataStoreTO store, Integer nfsVersion) {
35-
super(nfsVersion);
34+
public ListTemplateCommand(DataStoreTO store, Integer nfsMajorVersion, Integer nfsMinorVersion) {
35+
super(nfsMajorVersion, nfsMinorVersion);
3636
this.store = store;
3737
}
3838

core/src/main/java/com/cloud/agent/api/storage/StorageCommand.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -24,8 +24,8 @@ protected StorageCommand() {
2424
super();
2525
}
2626

27-
protected StorageCommand(Integer nfsVersion){
28-
super(nfsVersion);
27+
protected StorageCommand(Integer nfsMajorVersion, Integer nfsMinorVersion){
28+
super(nfsMajorVersion, nfsMinorVersion);
2929
}
3030

3131
}

core/src/main/java/com/cloud/agent/api/storage/StorageNfsVersionCommand.java

Lines changed: 17 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -26,19 +26,29 @@ protected StorageNfsVersionCommand(){
2626
super();
2727
}
2828

29-
protected StorageNfsVersionCommand(Integer nfsVersion){
29+
protected StorageNfsVersionCommand(Integer nfsMajorVersion, Integer nfsMinorVersion){
3030
super();
31-
this.nfsVersion = nfsVersion;
31+
this.nfsMajorVersion = nfsMajorVersion;
32+
this.nfsMinorVersion = nfsMinorVersion;
3233
}
3334

34-
private Integer nfsVersion;
35+
private Integer nfsMajorVersion;
3536

36-
public Integer getNfsVersion() {
37-
return nfsVersion;
37+
private Integer nfsMinorVersion;
38+
39+
public Integer getNfsMajorVersion() {
40+
return nfsMajorVersion;
41+
}
42+
43+
public void setNfsMajorVersion(Integer nfsMajorVersion) {
44+
this.nfsMajorVersion = nfsMajorVersion;
3845
}
3946

40-
public void setNfsVersion(Integer nfsVersion) {
41-
this.nfsVersion = nfsVersion;
47+
public Integer getNfsMinorVersion() {
48+
return nfsMinorVersion;
4249
}
4350

51+
public void setNfsMinorVersion(Integer nfsMinorVersion) {
52+
this.nfsMinorVersion = nfsMinorVersion;
53+
}
4454
}

core/src/main/java/org/apache/cloudstack/storage/command/TemplateOrVolumePostUploadCommand.java

Lines changed: 15 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -55,7 +55,9 @@ public class TemplateOrVolumePostUploadCommand {
5555

5656
private long accountId;
5757

58-
private Integer nfsVersion;
58+
private Integer nfsMajorVersion;
59+
60+
private Integer nfsMinorVersion;
5961

6062
public TemplateOrVolumePostUploadCommand(long entityId, String entityUUID, String absolutePath, String checksum, String type, String name, String imageFormat, String dataTo,
6163
String dataToRole) {
@@ -201,12 +203,20 @@ public long getAccountId() {
201203
return accountId;
202204
}
203205

204-
public Integer getNfsVersion() {
205-
return nfsVersion;
206+
public Integer getNfsMajorVersion() {
207+
return nfsMajorVersion;
208+
}
209+
210+
public void setNfsMajorVersion(Integer nfsMajorVersion) {
211+
this.nfsMajorVersion = nfsMajorVersion;
212+
}
213+
214+
public Integer getNfsMinorVersion() {
215+
return nfsMinorVersion;
206216
}
207217

208-
public void setNfsVersion(Integer nfsVersion) {
209-
this.nfsVersion = nfsVersion;
218+
public void setNfsMinorVersion(Integer nfsMinorVersion) {
219+
this.nfsMinorVersion = nfsMinorVersion;
210220
}
211221

212222
public void setProcessTimeout(long processTimeout) {

engine/components-api/src/main/java/com/cloud/capacity/CapacityManager.java

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -73,16 +73,26 @@ public interface CapacityManager {
7373
"If set to true, creates VMs as full clones on ESX hypervisor",
7474
true,
7575
ConfigKey.Scope.StoragePool);
76-
static final ConfigKey<Integer> ImageStoreNFSVersion =
76+
static final ConfigKey<Integer> ImageStoreNFSMajorVersion =
7777
new ConfigKey<Integer>(
7878
Integer.class,
79-
"secstorage.nfs.version",
79+
"secstorage.nfs.major.version",
8080
"Advanced",
8181
null,
8282
"Enforces specific NFS version when mounting Secondary Storage. If NULL default selection is performed",
8383
true,
8484
ConfigKey.Scope.ImageStore,
8585
null);
86+
static final ConfigKey<Integer> ImageStoreNFSMinorVersion =
87+
new ConfigKey<Integer>(
88+
Integer.class,
89+
"secstorage.nfs.minor.version",
90+
"Advanced",
91+
null,
92+
"Enforces specific NFS minor version when mounting Secondary Storage. If NULL default selection is performed",
93+
true,
94+
ConfigKey.Scope.ImageStore,
95+
null);
8696

8797
public boolean releaseVmCapacity(VirtualMachine vm, boolean moveFromReserved, boolean moveToReservered, Long hostId);
8898

engine/storage/image/src/main/java/org/apache/cloudstack/storage/image/TemplateServiceImpl.java

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -671,8 +671,9 @@ protected Void createTemplateAsyncCallBack(AsyncCallbackDispatcher<TemplateServi
671671
}
672672

673673
private Map<String, TemplateProp> listTemplate(DataStore ssStore) {
674-
Integer nfsVersion = imageStoreDetailsUtil.getNfsVersion(ssStore.getId());
675-
ListTemplateCommand cmd = new ListTemplateCommand(ssStore.getTO(), nfsVersion);
674+
Integer nfsMajorVersion = imageStoreDetailsUtil.getNfsMajorVersion(ssStore.getId());
675+
Integer nfsMinorVersion = imageStoreDetailsUtil.getNfsMinorVersion(ssStore.getId());
676+
ListTemplateCommand cmd = new ListTemplateCommand(ssStore.getTO(), nfsMajorVersion, nfsMinorVersion);
676677
EndPoint ep = _epSelector.select(ssStore);
677678
Answer answer = null;
678679
if (ep == null) {

engine/storage/src/main/java/org/apache/cloudstack/storage/image/NfsImageStoreDriverImpl.java

Lines changed: 19 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -32,13 +32,28 @@ public abstract class NfsImageStoreDriverImpl extends BaseImageStoreDriverImpl {
3232
ImageStoreDetailsDao _imageStoreDetailsDao;
3333

3434
/**
35-
* Retrieve NFS version to be used for imgStoreId store, if provided in image_store_details table
35+
* Retrieve NFS major version to be used for imgStoreId store, if provided in image_store_details table
3636
* @param imgStoreId store id
37-
* @return "secstorage.nfs.version" associated value for imgStoreId in image_store_details table if exists, null if not
37+
* @return "secstorage.nfs.major.version" associated value for imgStoreId in image_store_details table if exists, null if not
3838
*/
39-
protected Integer getNfsVersion(long imgStoreId){
39+
protected Integer getNfsMajorVersion(long imgStoreId){
4040
Map<String, String> imgStoreDetails = _imageStoreDetailsDao.getDetails(imgStoreId);
41-
String nfsVersionKey = CapacityManager.ImageStoreNFSVersion.key();
41+
String nfsVersionKey = CapacityManager.ImageStoreNFSMajorVersion.key();
42+
if (imgStoreDetails != null && imgStoreDetails.containsKey(nfsVersionKey)){
43+
String nfsVersionParam = imgStoreDetails.get(nfsVersionKey);
44+
return (nfsVersionParam != null ? Integer.valueOf(nfsVersionParam) : null);
45+
}
46+
return null;
47+
}
48+
49+
/**
50+
* Retrieve NFS minor version to be used for imgStoreId store, if provided in image_store_details table
51+
* @param imgStoreId store id
52+
* @return "secstorage.nfs.minor.version" associated value for imgStoreId in image_store_details table if exists, null if not
53+
*/
54+
protected Integer getNfsMinorVersion(long imgStoreId){
55+
Map<String, String> imgStoreDetails = _imageStoreDetailsDao.getDetails(imgStoreId);
56+
String nfsVersionKey = CapacityManager.ImageStoreNFSMinorVersion.key();
4257
if (imgStoreDetails != null && imgStoreDetails.containsKey(nfsVersionKey)){
4358
String nfsVersionParam = imgStoreDetails.get(nfsVersionKey);
4459
return (nfsVersionParam != null ? Integer.valueOf(nfsVersionParam) : null);

plugins/hypervisors/vmware/src/main/java/com/cloud/hypervisor/vmware/manager/VmwareManagerImpl.java

Lines changed: 13 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -633,8 +633,9 @@ public boolean needRecycle(String workerTag) {
633633

634634
@Override
635635
public void prepareSecondaryStorageStore(String storageUrl, Long storeId) {
636-
Integer nfsVersion = imageStoreDetailsUtil.getNfsVersion(storeId);
637-
String mountPoint = getMountPoint(storageUrl, nfsVersion);
636+
Integer nfsMajorVersion = imageStoreDetailsUtil.getNfsMajorVersion(storeId);
637+
Integer nfsMinorVersion = imageStoreDetailsUtil.getNfsMinorVersion(storeId);
638+
String mountPoint = getMountPoint(storageUrl, nfsMajorVersion, nfsMinorVersion);
638639

639640
GlobalLock lock = GlobalLock.getInternLock("prepare.systemvm");
640641
try {
@@ -729,7 +730,7 @@ public File getSystemVMKeyFile() {
729730
}
730731

731732
@Override
732-
public String getMountPoint(String storageUrl, Integer nfsVersion) {
733+
public String getMountPoint(String storageUrl, Integer nfsMajorVersion, Integer nfsMinorVersion) {
733734
String mountPoint = null;
734735
synchronized (_storageMounts) {
735736
mountPoint = _storageMounts.get(storageUrl);
@@ -745,7 +746,7 @@ public String getMountPoint(String storageUrl, Integer nfsVersion) {
745746
throw new CloudRuntimeException("Unable to create mount point due to invalid storage URL format " + storageUrl);
746747
}
747748

748-
mountPoint = mount(uri.getHost() + ":" + uri.getPath(), _mountParent, nfsVersion);
749+
mountPoint = mount(uri.getHost() + ":" + uri.getPath(), _mountParent, nfsMajorVersion, nfsMinorVersion);
749750
if (mountPoint == null) {
750751
s_logger.error("Unable to create mount point for " + storageUrl);
751752
return "/mnt/sec"; // throw new CloudRuntimeException("Unable to create mount point for " + storageUrl);
@@ -820,7 +821,7 @@ private void shutdownCleanup() {
820821
}
821822
}
822823

823-
protected String mount(String path, String parent, Integer nfsVersion) {
824+
protected String mount(String path, String parent, Integer nfsMajorVersion, Integer nfsMinorVersion) {
824825
String mountPoint = setupMountPoint(parent);
825826
if (mountPoint == null) {
826827
s_logger.warn("Unable to create a mount point");
@@ -831,8 +832,12 @@ protected String mount(String path, String parent, Integer nfsVersion) {
831832
String result = null;
832833
Script command = new Script(true, "mount", _timeout, s_logger);
833834
command.add("-t", "nfs");
834-
if (nfsVersion != null){
835-
command.add("-o", "vers=" + nfsVersion);
835+
if (nfsMajorVersion != null){
836+
String nfsVersion = "vers=" + nfsMajorVersion;
837+
if (nfsMinorVersion != null && nfsMajorVersion >= 4) {
838+
nfsVersion += "." + nfsMinorVersion;
839+
}
840+
command.add("-o", nfsVersion);
836841
}
837842
// command.add("-o", "soft,timeo=133,retrans=2147483647,tcp,acdirmax=0,acdirmin=0");
838843
if ("Mac OS X".equalsIgnoreCase(System.getProperty("os.name"))) {
@@ -1435,7 +1440,7 @@ private void startTemplateCleanJobSchedule() {
14351440
}
14361441

14371442
/**
1438-
* This task is to cleanup templates from primary storage that are otherwise not cleaned by the {@link com.cloud.storage.StorageManagerImpl.StorageGarbageCollector}.
1443+
* This task is to cleanup templates from primary storage that are otherwise not cleaned by the com.cloud.storage.StorageManagerImpl.StorageGarbageCollector.
14391444
* it is called at regular intervals when storage.template.cleanup.enabled == true
14401445
* It collect all templates that
14411446
* - are deleted from cloudstack

0 commit comments

Comments
 (0)