DaanHoogland commented on code in PR #8790:
URL: https://github.com/apache/cloudstack/pull/8790#discussion_r1537322738
##########
plugins/storage/volume/linstor/src/main/java/com/cloud/hypervisor/kvm/storage/LinstorStorageAdaptor.java:
##########
@@ -302,26 +308,89 @@ public boolean connectPhysicalDisk(String volumePath,
KVMStoragePool pool, Map<S
return true;
}
+ private Optional<ResourceWithVolumes> getResourceByPath(final
List<ResourceWithVolumes> resources, String path) {
+ return resources.stream()
+ .filter(rsc -> rsc.getVolumes().stream()
+ .anyMatch(v -> v.getDevicePath().equals(path)))
+ .findFirst();
+ }
+
+ private boolean tryDisconnectLinstor(String volumePath, KVMStoragePool
pool)
+ {
+ s_logger.debug("Linstor: Using storpool: " + pool.getUuid());
+ final DevelopersApi api = getLinstorAPI(pool);
+
+ Optional<ResourceWithVolumes> optRsc;
+ try
+ {
+ List<ResourceWithVolumes> resources = api.viewResources(
+ Collections.singletonList(localNodeName),
+ null,
+ null,
+ null,
+ null,
+ null);
+
+ optRsc = getResourceByPath(resources, volumePath);
+ } catch (ApiException apiEx) {
+ // couldn't query linstor controller
+ s_logger.error(apiEx.getBestMessage());
+ return false;
+ }
+
+
+ if (optRsc.isPresent()) {
+ try {
+ Resource rsc = optRsc.get();
+
+ // if diskless resource remove it, in the worst case it will
be transformed to a tiebreaker
+ if (rsc.getFlags() != null &&
+ rsc.getFlags().contains(ApiConsts.FLAG_DRBD_DISKLESS)
&&
+ !rsc.getFlags().contains(ApiConsts.FLAG_TIE_BREAKER)) {
+ ApiCallRcList delAnswers =
api.resourceDelete(rsc.getName(), localNodeName);
+ logLinstorAnswers(delAnswers);
+ }
+
+ // remove allow-two-primaries
+ ResourceDefinitionModify rdm = new ResourceDefinitionModify();
+
rdm.deleteProps(Collections.singletonList("DrbdOptions/Net/allow-two-primaries"));
+ ApiCallRcList answers =
api.resourceDefinitionModify(rsc.getName(), rdm);
+ if (answers.hasError()) {
+ s_logger.error(
+ String.format("Failed to remove
'allow-two-primaries' on %s: %s",
+ rsc.getName(),
LinstorUtil.getBestErrorMessage(answers)));
+ // do not fail here as removing allow-two-primaries
property isn't fatal
+ }
+ } catch (ApiException apiEx) {
+ s_logger.error(apiEx.getBestMessage());
+ // do not fail here as removing allow-two-primaries property
or deleting diskless isn't fatal
+ }
+
+ return true;
+ }
+
+ s_logger.warn("Linstor: Couldn't find resource for this path: " +
volumePath);
+ return false;
+ }
+
@Override
public boolean disconnectPhysicalDisk(String volumePath, KVMStoragePool
pool)
{
s_logger.debug("Linstor: disconnectPhysicalDisk " + pool.getUuid() +
":" + volumePath);
- return true;
+ if (MapStorageUuidToStoragePool.containsValue(pool)) {
+ return tryDisconnectLinstor(volumePath, pool);
+ }
+ return false;
}
@Override
public boolean disconnectPhysicalDisk(Map<String, String>
volumeToDisconnect)
{
+ // as of now this is only relevant for iscsi targets
+ s_logger.warn("Linstor: disconnectPhysicalDisk(Map<String, String>
volumeToDisconnect) called?");
Review Comment:
ok, I would make it INFO , but change at your discretion.
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
To unsubscribe, e-mail: [email protected]
For queries about this service, please contact Infrastructure at:
[email protected]