Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
package org.zstack.header.storage.addon.primary;

import java.util.Collection;
import java.util.Collections;

public class BatchStatsSpec {
private Collection<String> installPaths = Collections.emptyList();
private Collection<String> snapshotInstallPaths = Collections.emptyList();

public Collection<String> getInstallPaths() {
return installPaths;
}

public void setInstallPaths(Collection<String> installPaths) {
this.installPaths = installPaths == null ? Collections.emptyList() : installPaths;
}

public Collection<String> getSnapshotInstallPaths() {
return snapshotInstallPaths;
}

public void setSnapshotInstallPaths(Collection<String> snapshotInstallPaths) {
this.snapshotInstallPaths = snapshotInstallPaths == null ? Collections.emptyList() : snapshotInstallPaths;
}

public boolean isWithSnapshot() {
return !snapshotInstallPaths.isEmpty();
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@
import org.zstack.header.core.ReturnValueCompletion;
import org.zstack.header.host.HostInventory;
import org.zstack.header.storage.addon.*;
import org.zstack.header.storage.primary.StorageResourceStats;
import org.zstack.header.storage.snapshot.VolumeSnapshotStats;
import org.zstack.header.volume.VolumeProtocol;
import org.zstack.header.volume.VolumeStats;
Expand Down Expand Up @@ -64,7 +65,7 @@ public interface PrimaryStorageControllerSvc {
// support uri or path
void stats(String installPath, ReturnValueCompletion<VolumeStats> comp);

void batchStats(Collection<String> installPath, ReturnValueCompletion<List<VolumeStats>> comp);
void batchStats(BatchStatsSpec spec, ReturnValueCompletion<List<StorageResourceStats>> comp);

void expandVolume(String installPath, long size, ReturnValueCompletion<VolumeStats> comp);
void setVolumeQos(BaseVolumeInfo v, Completion comp);
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
package org.zstack.header.storage.primary;

public class StorageResourceStats {
protected String installPath;
protected Long actualSize;
protected Long size;

public String getInstallPath() {
return installPath;
}

public void setInstallPath(String installPath) {
this.installPath = installPath;
}

public Long getActualSize() {
return actualSize;
}

public void setActualSize(Long actualSize) {
this.actualSize = actualSize;
}

public Long getSize() {
return size;
}

public void setSize(long size) {
this.size = size;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,11 @@ public static enum VolumeSnapshotPlacementType {
EXTERNAL,
}

public static enum VolumeSnapshotMode {
REDIRECT_ON_WRITE,
COPY_ON_WRITE,
}

private boolean support;

/***
Expand All @@ -34,6 +39,8 @@ public static enum VolumeSnapshotPlacementType {
private VolumeSnapshotArrangementType arrangementType;

private VolumeSnapshotPlacementType placementType;

private VolumeSnapshotMode mode;

/***
* If volume snapshot is inner snapshot on volume, it must be set.
Expand Down Expand Up @@ -66,6 +73,14 @@ public void setPlacementType(VolumeSnapshotPlacementType placementType) {
this.placementType = placementType;
}

public VolumeSnapshotMode getMode() {
return mode;
}

public void setMode(VolumeSnapshotMode mode) {
this.mode = mode;
}

public boolean isSupportCreateOnHypervisor() {
return supportCreateOnHypervisor;
}
Expand Down
Original file line number Diff line number Diff line change
@@ -1,22 +1,6 @@
package org.zstack.header.storage.snapshot;

public class VolumeSnapshotStats {
private String installPath;
private long actualSize;
import org.zstack.header.storage.primary.StorageResourceStats;

public String getInstallPath() {
return installPath;
}

public void setInstallPath(String installPath) {
this.installPath = installPath;
}

public long getActualSize() {
return actualSize;
}

public void setActualSize(long actualSize) {
this.actualSize = actualSize;
}
public class VolumeSnapshotStats extends StorageResourceStats {
}
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,10 @@ public class BatchSyncVolumeSizeOnPrimaryStorageMsg extends NeedReplyMessage imp

private Map<String, String> volumeUuidInstallPaths;

private Map<String, String> snapshotUuidInstallPaths;

private boolean withSnapshot;

public void setHostUuid(String hostUuid) {
this.hostUuid = hostUuid;
}
Expand All @@ -35,4 +39,20 @@ public void setVolumeUuidInstallPaths(Map<String, String> volumeUuidInstallPaths
public Map<String, String> getVolumeUuidInstallPaths() {
return volumeUuidInstallPaths;
}

public Map<String, String> getSnapshotUuidInstallPaths() {
return snapshotUuidInstallPaths;
}

public void setSnapshotUuidInstallPaths(Map<String, String> snapshotUuidInstallPaths) {
this.snapshotUuidInstallPaths = snapshotUuidInstallPaths;
}

public boolean isWithSnapshot() {
return withSnapshot;
}

public void setWithSnapshot(boolean withSnapshot) {
this.withSnapshot = withSnapshot;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -8,11 +8,21 @@
public class BatchSyncVolumeSizeOnPrimaryStorageReply extends MessageReply {
private Map<String, Long> actualSizes = new HashMap<>();

private Map<String, Long> snapshotActualSizes = new HashMap<>();

public void setActualSizes(Map<String, Long> actualSizes) {
this.actualSizes = actualSizes;
}

public Map<String, Long> getActualSizes() {
return actualSizes;
}

public Map<String, Long> getSnapshotActualSizes() {
return snapshotActualSizes;
}

public void setSnapshotActualSizes(Map<String, Long> snapshotActualSizes) {
this.snapshotActualSizes = snapshotActualSizes;
}
}
31 changes: 3 additions & 28 deletions header/src/main/java/org/zstack/header/volume/VolumeStats.java
Original file line number Diff line number Diff line change
@@ -1,10 +1,9 @@
package org.zstack.header.volume;

public class VolumeStats {
protected String installPath;
import org.zstack.header.storage.primary.StorageResourceStats;

public class VolumeStats extends StorageResourceStats {
protected String format;
protected Long actualSize;
protected Long size;
/**
* The parent uri of the volume, vendor://pool/path@snapshot or snapshot://uuid
*/
Expand All @@ -29,30 +28,6 @@ public VolumeStats(String installPath, Long actualSize, Long size) {
public VolumeStats() {
}

public String getInstallPath() {
return installPath;
}

public void setInstallPath(String installPath) {
this.installPath = installPath;
}

public Long getActualSize() {
return actualSize;
}

public void setActualSize(Long actualSize) {
this.actualSize = actualSize;
}

public Long getSize() {
return size;
}

public void setSize(long size) {
this.size = size;
}

public void setFormat(String format) {
this.format = format;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3330,6 +3330,7 @@ protected void handle(AskVolumeSnapshotCapabilityMsg msg) {
cap.setSupport(true);
cap.setArrangementType(VolumeSnapshotArrangementType.INDIVIDUAL);
cap.setPlacementType(VolumeSnapshotCapability.VolumeSnapshotPlacementType.INTERNAL);
cap.setMode(VolumeSnapshotCapability.VolumeSnapshotMode.REDIRECT_ON_WRITE);
cap.setVolumePathFromInternalSnapshotRegex("^[^@]+");
} else if (VolumeType.Memory.toString().equals(volumeType)) {
cap.setSupport(false);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,7 @@
import org.zstack.header.storage.addon.*;
import org.zstack.header.storage.addon.primary.*;
import org.zstack.header.storage.primary.ImageCacheInventory;
import org.zstack.header.storage.primary.StorageResourceStats;
import org.zstack.header.storage.primary.VolumeSnapshotCapability;
import org.zstack.header.storage.snapshot.VolumeSnapshotStats;
import org.zstack.header.volume.*;
Expand Down Expand Up @@ -93,6 +94,7 @@ public class ExponStorageController implements PrimaryStorageControllerSvc, Prim
scap.setSupport(true);
scap.setArrangementType(VolumeSnapshotCapability.VolumeSnapshotArrangementType.INDIVIDUAL);
scap.setPlacementType(VolumeSnapshotCapability.VolumeSnapshotPlacementType.INTERNAL);
scap.setMode(VolumeSnapshotCapability.VolumeSnapshotMode.REDIRECT_ON_WRITE);
scap.setSupportCreateOnHypervisor(false);
scap.setSupportLazyDelete(true);
scap.setVolumePathFromInternalSnapshotRegex("^[^@]+");
Expand Down Expand Up @@ -1158,15 +1160,15 @@ public void stats(String installPath, ReturnValueCompletion<VolumeStats> comp) {
}

@Override
public void batchStats(Collection<String> installPath, ReturnValueCompletion<List<VolumeStats>> comp) {
List<VolumeStats> stats = installPath.stream().map(it -> {
public void batchStats(BatchStatsSpec spec, ReturnValueCompletion<List<StorageResourceStats>> comp) {
List<StorageResourceStats> stats = spec.getInstallPaths().stream().map(it -> {
VolumeModule vol = apiHelper.getVolume(getVolIdFromPath(it));
VolumeStats s = new VolumeStats();
s.setInstallPath(it);
s.setSize(vol.getVolumeSize());
s.setActualSize(vol.getDataSize());
s.setFormat(VolumeConstant.VOLUME_FORMAT_RAW);
return s;
return (StorageResourceStats) s;
}).collect(Collectors.toList());
comp.success(stats);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2681,6 +2681,7 @@ protected void handle(AskVolumeSnapshotCapabilityMsg msg) {
if (VolumeType.Data.toString().equals(volumeType) || VolumeType.Root.toString().equals(volumeType)) {
capability.setArrangementType(VolumeSnapshotArrangementType.CHAIN);
capability.setPlacementType(VolumeSnapshotCapability.VolumeSnapshotPlacementType.EXTERNAL);
capability.setMode(VolumeSnapshotCapability.VolumeSnapshotMode.REDIRECT_ON_WRITE);
} else if (VolumeType.Memory.toString().equals(volumeType)) {
capability.setArrangementType(VolumeSnapshotArrangementType.INDIVIDUAL);
} else {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -1345,6 +1345,7 @@ protected void handle(AskVolumeSnapshotCapabilityMsg msg) {
if (VolumeType.Data.toString().equals(volumeType) || VolumeType.Root.toString().equals(volumeType)) {
capability.setArrangementType(VolumeSnapshotArrangementType.CHAIN);
capability.setPlacementType(VolumeSnapshotCapability.VolumeSnapshotPlacementType.EXTERNAL);
capability.setMode(VolumeSnapshotCapability.VolumeSnapshotMode.REDIRECT_ON_WRITE);
} else if (VolumeType.Memory.toString().equals(volumeType)) {
capability.setArrangementType(VolumeSnapshotArrangementType.INDIVIDUAL);
} else {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -399,6 +399,7 @@ protected void handle(AskVolumeSnapshotCapabilityMsg msg) {
if (VolumeType.Data.toString().equals(volumeType) || VolumeType.Root.toString().equals(volumeType)) {
capability.setArrangementType(VolumeSnapshotArrangementType.CHAIN);
capability.setPlacementType(VolumeSnapshotCapability.VolumeSnapshotPlacementType.EXTERNAL);
capability.setMode(VolumeSnapshotCapability.VolumeSnapshotMode.REDIRECT_ON_WRITE);
} else if (VolumeType.Memory.toString().equals(volumeType)) {
capability.setArrangementType(VolumeSnapshotArrangementType.INDIVIDUAL);
} else {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@
import org.zstack.header.host.HostVO_;
import org.zstack.header.storage.addon.*;
import org.zstack.header.storage.addon.primary.*;
import org.zstack.header.storage.primary.StorageResourceStats;
import org.zstack.header.storage.primary.VolumeSnapshotCapability;
import org.zstack.header.storage.snapshot.VolumeSnapshotStats;
import org.zstack.header.volume.*;
Expand Down Expand Up @@ -93,6 +94,7 @@ private String getVhostSocketDir() {
scap.setSupport(true);
scap.setArrangementType(VolumeSnapshotCapability.VolumeSnapshotArrangementType.INDIVIDUAL);
scap.setPlacementType(VolumeSnapshotCapability.VolumeSnapshotPlacementType.INTERNAL);
scap.setMode(VolumeSnapshotCapability.VolumeSnapshotMode.REDIRECT_ON_WRITE);
scap.setSupportCreateOnHypervisor(false);
scap.setSupportLazyDelete(false);
scap.setVolumePathFromInternalSnapshotRegex("^[^@]+");
Expand Down Expand Up @@ -872,15 +874,15 @@ private String getParentUri(VolumeModule vol) {
}

@Override
public void batchStats(Collection<String> installPath, ReturnValueCompletion<List<VolumeStats>> comp) {
List<VolumeStats> stats = installPath.stream().map(it -> {
public void batchStats(BatchStatsSpec spec, ReturnValueCompletion<List<StorageResourceStats>> comp) {
List<StorageResourceStats> stats = spec.getInstallPaths().stream().map(it -> {
VolumeModule vol = apiHelper.getVolume(getVolIdFromPath(it));
VolumeStats s = new VolumeStats();
s.setInstallPath(it);
s.setSize(SizeUnit.MEGABYTE.toByte(vol.getSpec().getSizeMb()));
s.setActualSize(vol.getStatus().getAllocatedSizeByte());
s.setFormat(VolumeConstant.VOLUME_FORMAT_RAW);
return s;
return (StorageResourceStats) s;
}).collect(Collectors.toList());
comp.success(stats);
}
Expand Down
Loading