This is an automated email from the ASF dual-hosted git repository.

nvazquez pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/cloudstack.git

commit db564b12b693a8b88c7111f269d33e8a9d713791
Merge: e87c6cfcb1d f25d35c5d6b
Author: nvazquez <nicovazque...@gmail.com>
AuthorDate: Thu Mar 14 22:46:48 2024 -0300

    Merge branch '4.19'

 api/src/main/java/com/cloud/event/EventTypes.java  |  11 ++
 .../cloudstack/api/ApiCommandResourceType.java     |   3 +-
 .../org/apache/cloudstack/quota/QuotaTariff.java   |  25 +++++
 .../security/dao/SecurityGroupVMMapDaoImpl.java    |   2 +-
 .../com/cloud/upgrade/dao/Upgrade41900to41910.java |  66 +++++++++++
 .../META-INF/db/schema-41900to41910-cleanup.sql    |  20 ++++
 .../resources/META-INF/db/schema-41900to41910.sql  |  32 ++++++
 .../java/com/cloud/utils/db/GenericDaoBase.java    |   4 +-
 .../cloudstack/quota/dao/QuotaTariffDaoImpl.java   |  10 ++
 .../apache/cloudstack/quota/vo/QuotaTariffVO.java  |   5 +-
 .../api/command/QuotaTariffCreateCmd.java          |   7 ++
 .../api/command/QuotaTariffDeleteCmd.java          |   7 ++
 .../api/command/QuotaTariffUpdateCmd.java          |   7 ++
 .../api/response/QuotaResponseBuilderImpl.java     |  18 ++-
 .../kvm/resource/LibvirtDomainXMLParser.java       |  11 +-
 .../kvm/resource/LibvirtDomainXMLParserTest.java   | 122 +++++++++++++++++++++
 .../driver/LinstorPrimaryDataStoreDriverImpl.java  |  27 +++--
 .../storage/datastore/util/LinstorUtil.java        |  38 ++++---
 .../cloudstack/vm/UnmanagedVMsManagerImpl.java     |   3 +-
 ui/src/components/view/SearchView.vue              |   3 +-
 ui/src/components/widgets/ResourceLabel.vue        |   4 +-
 ui/src/config/section/compute.js                   |   4 +-
 ui/src/utils/plugins.js                            |   1 +
 23 files changed, 388 insertions(+), 42 deletions(-)

diff --cc 
framework/quota/src/main/java/org/apache/cloudstack/quota/vo/QuotaTariffVO.java
index 5b07cadb94a,d7721d88cbb..40a751c6200
--- 
a/framework/quota/src/main/java/org/apache/cloudstack/quota/vo/QuotaTariffVO.java
+++ 
b/framework/quota/src/main/java/org/apache/cloudstack/quota/vo/QuotaTariffVO.java
@@@ -16,8 -16,7 +16,8 @@@
  //under the License.
  package org.apache.cloudstack.quota.vo;
  
 +import com.cloud.utils.DateUtil;
- import org.apache.cloudstack.api.InternalIdentity;
+ import org.apache.cloudstack.quota.QuotaTariff;
  import org.apache.cloudstack.quota.constant.QuotaTypes;
  import 
org.apache.cloudstack.utils.reflectiontostringbuilderutils.ReflectionToStringBuilderUtils;
  
diff --cc 
plugins/database/quota/src/main/java/org/apache/cloudstack/api/command/QuotaTariffCreateCmd.java
index 8e5de241064,ea2edc3506d..ef9ffc23d13
--- 
a/plugins/database/quota/src/main/java/org/apache/cloudstack/api/command/QuotaTariffCreateCmd.java
+++ 
b/plugins/database/quota/src/main/java/org/apache/cloudstack/api/command/QuotaTariffCreateCmd.java
@@@ -27,7 -28,9 +28,8 @@@ import org.apache.cloudstack.api.Parame
  import org.apache.cloudstack.api.ServerApiException;
  import org.apache.cloudstack.api.response.QuotaResponseBuilder;
  import org.apache.cloudstack.api.response.QuotaTariffResponse;
+ import org.apache.cloudstack.context.CallContext;
  import org.apache.cloudstack.quota.vo.QuotaTariffVO;
 -import org.apache.log4j.Logger;
  
  import javax.inject.Inject;
  
diff --cc 
plugins/database/quota/src/main/java/org/apache/cloudstack/api/command/QuotaTariffDeleteCmd.java
index 699854ebac3,6c2aa5866d7..7810760c56e
--- 
a/plugins/database/quota/src/main/java/org/apache/cloudstack/api/command/QuotaTariffDeleteCmd.java
+++ 
b/plugins/database/quota/src/main/java/org/apache/cloudstack/api/command/QuotaTariffDeleteCmd.java
@@@ -27,6 -28,8 +28,7 @@@ import org.apache.cloudstack.api.Parame
  import org.apache.cloudstack.api.response.QuotaResponseBuilder;
  import org.apache.cloudstack.api.response.QuotaTariffResponse;
  import org.apache.cloudstack.api.response.SuccessResponse;
+ import org.apache.cloudstack.context.CallContext;
 -import org.apache.log4j.Logger;
  
  import javax.inject.Inject;
  
diff --cc 
plugins/database/quota/src/main/java/org/apache/cloudstack/api/command/QuotaTariffUpdateCmd.java
index d5c5ca198b8,0bec1a63dcb..175500604d6
--- 
a/plugins/database/quota/src/main/java/org/apache/cloudstack/api/command/QuotaTariffUpdateCmd.java
+++ 
b/plugins/database/quota/src/main/java/org/apache/cloudstack/api/command/QuotaTariffUpdateCmd.java
@@@ -27,7 -28,9 +28,8 @@@ import org.apache.cloudstack.api.Parame
  import org.apache.cloudstack.api.ServerApiException;
  import org.apache.cloudstack.api.response.QuotaResponseBuilder;
  import org.apache.cloudstack.api.response.QuotaTariffResponse;
+ import org.apache.cloudstack.context.CallContext;
  import org.apache.cloudstack.quota.vo.QuotaTariffVO;
 -import org.apache.log4j.Logger;
  
  import javax.inject.Inject;
  
diff --cc 
plugins/database/quota/src/main/java/org/apache/cloudstack/api/response/QuotaResponseBuilderImpl.java
index d7f2832831a,d7171499b7c..d4996887a40
--- 
a/plugins/database/quota/src/main/java/org/apache/cloudstack/api/response/QuotaResponseBuilderImpl.java
+++ 
b/plugins/database/quota/src/main/java/org/apache/cloudstack/api/response/QuotaResponseBuilderImpl.java
@@@ -44,8 -43,8 +44,9 @@@ import org.apache.cloudstack.api.comman
  import org.apache.cloudstack.api.command.QuotaTariffCreateCmd;
  import org.apache.cloudstack.api.command.QuotaTariffListCmd;
  import org.apache.cloudstack.api.command.QuotaTariffUpdateCmd;
+ import org.apache.cloudstack.context.CallContext;
  import org.apache.cloudstack.quota.QuotaManager;
 +import org.apache.cloudstack.quota.QuotaManagerImpl;
  import org.apache.cloudstack.quota.QuotaService;
  import org.apache.cloudstack.quota.QuotaStatement;
  import org.apache.cloudstack.quota.constant.QuotaConfig;
@@@ -643,13 -645,17 +651,18 @@@ public class QuotaResponseBuilderImpl i
          }
  
          if (startDate.compareTo(now) < 0) {
 -            throw new InvalidParameterValueException(String.format("The quota 
tariff's start date [%s] cannot be less than now [%s]", startDate, now));
 +            throw new InvalidParameterValueException(String.format("The value 
passed as Quota tariff's start date is in the past: [%s]. " +
 +                    "Please, inform a date in the future or do not pass the 
parameter to use the current date and time.", startDate));
          }
  
-         return persistNewQuotaTariff(null, name, usageType, startDate, 
cmd.getEntityOwnerId(), endDate, value, description, activationRule);
+         QuotaTariffVO newQuotaTariff = persistNewQuotaTariff(null, name, 
usageType, startDate, cmd.getEntityOwnerId(), endDate, value, description, 
activationRule);
+ 
+         CallContext.current().setEventResourceId(newQuotaTariff.getId());
+ 
+         return newQuotaTariff;
      }
  
+     @ActionEvent(eventType = EventTypes.EVENT_QUOTA_TARIFF_DELETE, 
eventDescription = "removing Quota Tariff")
      public boolean deleteQuotaTariff(String quotaTariffUuid) {
          QuotaTariffVO quotaTariff = 
_quotaTariffDao.findByUuid(quotaTariffUuid);
  
diff --cc 
plugins/storage/volume/linstor/src/main/java/org/apache/cloudstack/storage/datastore/driver/LinstorPrimaryDataStoreDriverImpl.java
index 407e7e766c0,328b3d21d0a..016ab0e993f
--- 
a/plugins/storage/volume/linstor/src/main/java/org/apache/cloudstack/storage/datastore/driver/LinstorPrimaryDataStoreDriverImpl.java
+++ 
b/plugins/storage/volume/linstor/src/main/java/org/apache/cloudstack/storage/datastore/driver/LinstorPrimaryDataStoreDriverImpl.java
@@@ -215,9 -215,10 +216,10 @@@ public class LinstorPrimaryDataStoreDri
                  }
                  throw new CloudRuntimeException("Linstor: Unable to delete 
resource definition: " + rscDefName);
              }
 -            s_logger.info(String.format("Linstor: Deleted resource %s", 
rscDefName));
++            logger.info(String.format("Linstor: Deleted resource %s", 
rscDefName));
          } catch (ApiException apiEx)
          {
 -            s_logger.error("Linstor: ApiEx - " + apiEx.getMessage());
 +            logger.error("Linstor: ApiEx - " + apiEx.getMessage());
              throw new CloudRuntimeException(apiEx.getBestMessage(), apiEx);
          }
      }
@@@ -865,8 -867,8 +867,8 @@@
          Host host = null;
          for (String nodeName : linstorNodeNames) {
              host = _hostDao.findByName(nodeName);
-             if (host != null) {
+             if (host != null && host.getResourceState() == 
ResourceState.Enabled) {
 -                s_logger.info(String.format("Linstor: Make resource %s 
available on node %s ...", rscName, nodeName));
 +                logger.info(String.format("Linstor: Make resource %s 
available on node %s ...", rscName, nodeName));
                  ApiCallRcList answers = 
api.resourceMakeAvailableOnNode(rscName, nodeName, new ResourceMakeAvailable());
                  if (!answers.hasError()) {
                      break; // found working host
@@@ -892,21 -894,16 +894,16 @@@
      }
  
      private Optional<RemoteHostEndPoint> getDiskfullEP(DevelopersApi api, 
String rscName) throws ApiException {
-         com.linbit.linstor.api.model.StoragePool linSP =
-             LinstorUtil.getDiskfulStoragePool(api, rscName);
-         if (linSP != null)
-         {
-             Host host = _hostDao.findByName(linSP.getNodeName());
-             if (host == null)
-             {
-                 logger.error("Linstor: Host '" + linSP.getNodeName() + "' not 
found.");
-                 return Optional.empty();
-             }
-             else
-             {
-                 return 
Optional.of(RemoteHostEndPoint.getHypervisorHostEndPoint(host));
+         List<com.linbit.linstor.api.model.StoragePool> linSPs = 
LinstorUtil.getDiskfulStoragePools(api, rscName);
+         if (linSPs != null) {
+             for (com.linbit.linstor.api.model.StoragePool sp : linSPs) {
+                 Host host = _hostDao.findByName(sp.getNodeName());
+                 if (host != null && host.getResourceState() == 
ResourceState.Enabled) {
+                     return 
Optional.of(RemoteHostEndPoint.getHypervisorHostEndPoint(host));
+                 }
              }
          }
 -        s_logger.error("Linstor: No diskfull host found.");
++        logger.error("Linstor: No diskfull host found.");
          return Optional.empty();
      }
  
@@@ -958,9 -955,11 +955,11 @@@
              }
              else {
                  answer = new Answer(cmd, false, "Unable to get matching 
Linstor endpoint.");
+                 deleteResourceDefinition(pool, rscName);
              }
          } catch (ApiException exc) {
 -            s_logger.error("copy template failed: ", exc);
 +            logger.error("copy template failed: ", exc);
+             deleteResourceDefinition(pool, rscName);
              throw new CloudRuntimeException(exc.getBestMessage());
          }
          return answer;

Reply via email to