默认服务描述不能作为升级的一部分进行修改,将 EnableDefaultServicesUpgrade 设置为 true
Default service descriptions can not be modified as part of upgrade set EnableDefaultServicesUpgrade to true
我正在尝试通过 Visual Studio 升级我的 Service Fabric 应用程序。
我最终不得不使用 diff 包方法来确保只有我更改的服务在升级中。
我是通过删除不需要的文件的命令文件完成的。
现在我遇到了另一个错误,该错误因缺乏细节而令人恼火:
Start-ServiceFabricApplicationUpgrade : Default service descriptions can not be modified as part of upgrade. Modified
2>default service: fabric:/MYAPPLICATION/MYSERVICE. To allow it, set
2>EnableDefaultServicesUpgrade to true.
我应该把它放在哪里?
请注意,这是来自 Visual Studio。
我很少从使用 PowerShell 中获得乐趣。
我看到了对 Update-ServiceFabricService CmdLet 的引用,但没有关于我需要做什么的更多信息。
我已经在应用程序清单中尝试过但没有成功:
<?xml version="1.0" encoding="utf-8"?>
<ApplicationManifest xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" ApplicationTypeName="MyServiceFabricApplication.ServiceFabricType" ApplicationTypeVersion="7.0.0" xmlns="http://schemas.microsoft.com/2011/01/fabric">
<Parameters>
<Parameter Name="EnableDefaultServicesUpgrade" DefaultValue="true" />
<Parameter Name="MyParameter" DefaultValue="value" />
Parameters>
<ServiceManifestImport>
<ServiceManifestRef ServiceManifestName="MyServiceFabricApplication.Service1.ServiceFabricPkg" ServiceManifestVersion="4.0.0" />
<ConfigOverrides>
<ConfigOverride Name="Config">
<Settings>
<Section Name="appSettings">
<Parameter Name="MyParameter" Value="[MyParameter]" />
</Section>
</Settings>
</ConfigOverride>
</ConfigOverrides>
</ServiceManifestImport>
<ServiceManifestImport>
<ServiceManifestRef ServiceManifestName="MyServiceFabricApplication.Service2.ServiceFabricPkg" ServiceManifestVersion="2.0.0" />
<ConfigOverrides>
<ConfigOverride Name="Config">
<Settings>
<Section Name="appSettings">
<Parameter Name="MyParameter" Value="[MyParameter]" />
</Section>
</Settings>
</ConfigOverride>
</ConfigOverrides>
</ServiceManifestImport>
<ServiceManifestImport>
<ServiceManifestRef ServiceManifestName="MyServiceFabricApplication.Service3.ServiceFabricPkg" ServiceManifestVersion="3.0.0" />
<ConfigOverrides>
<ConfigOverride Name="Config">
<Settings>
<Section Name="appSettings">
<Parameter Name="MyParameter" Value="[MyParameter]" />
</Section>
</Settings>
</ConfigOverride>
</ConfigOverrides>
</ServiceManifestImport>
<ServiceManifestImport>
<ServiceManifestRef ServiceManifestName="MyServiceFabricApplication.Service4.ServiceFabricPkg" ServiceManifestVersion="2.0.0" />
<ConfigOverrides>
<ConfigOverride Name="Config">
<Settings>
<Section Name="appSettings">
<Parameter Name="MyParameter" Value="[MyParameter]" />
</Section>
</Settings>
</ConfigOverride>
</ConfigOverrides>
</ServiceManifestImport>
<ServiceManifestImport>
<ServiceManifestRef ServiceManifestName="MyServiceFabricApplication.PlatformApi.ServiceFabricPkg" ServiceManifestVersion="2.0.0" />
<ConfigOverrides>
<ConfigOverride Name="Config">
<Settings>
<Section Name="appSettings">
<Parameter Name="MyParameter" Value="[MyParameter]" />
</Section>
</Settings>
</ConfigOverride>
</ConfigOverrides>
</ServiceManifestImport>
<ServiceManifestImport>
<ServiceManifestRef ServiceManifestName="MyServiceFabricApplication.LivePriceManager.ServiceFabricPkg" ServiceManifestVersion="3.0.0" />
<ConfigOverrides>
<ConfigOverride Name="Config">
<Settings>
<Section Name="appSettings">
<Parameter Name="MyParameter" Value="[MyParameter]" />
</Section>
</Settings>
</ConfigOverride>
</ConfigOverrides>
</ServiceManifestImport>
<ServiceManifestImport>
<ServiceManifestRef ServiceManifestName="MyServiceFabricApplication.Service5.ServiceFabricPkg" ServiceManifestVersion="3.0.0" />
<ConfigOverrides>
<ConfigOverride Name="Config">
<Settings>
<Section Name="appSettings">
<Parameter Name="MyParameter" Value="[MyParameter]" />
</Section>
</Settings>
</ConfigOverride>
</ConfigOverrides>
</ServiceManifestImport>
<DefaultServices>
<Service Name="Service1" ServicePackageActivationMode="ExclusiveProcess">
<StatelessService ServiceTypeName="MyServiceFabricApplication.Service1.ServiceFabricType">
<SingletonPartition />
</StatelessService>
</Service>
<Service Name="Service2" ServicePackageActivationMode="ExclusiveProcess">
<StatelessService ServiceTypeName="MyServiceFabricApplication.Service2.ServiceFabricType">
<SingletonPartition />
</StatelessService>
</Service>
<Service Name="Service3" ServicePackageActivationMode="ExclusiveProcess">
<StatelessService ServiceTypeName="MyServiceFabricApplication.Service3.ServiceFabricType">
<SingletonPartition />
</StatelessService>
</Service>
<Service Name="Service7" ServicePackageActivationMode="ExclusiveProcess">
<StatelessService ServiceTypeName="MyServiceFabricApplication.Service7.ServiceFabricType">
<SingletonPartition />
</StatelessService>
</Service>
<Service Name="Service5" ServicePackageActivationMode="ExclusiveProcess">
<StatelessService ServiceTypeName="MyServiceFabricApplication.Service5.ServiceFabricType">
<SingletonPartition />
</StatelessService>
</Service>
<Service Name="Service6" ServicePackageActivationMode="ExclusiveProcess">
<StatelessService ServiceTypeName="MyServiceFabricApplication.Service6.ServiceFabricType">
<SingletonPartition />
</StatelessService>
</Service>
<Service Name="Service4" ServicePackageActivationMode="ExclusiveProcess">
<StatelessService ServiceTypeName="MyServiceFabricApplication.Service4.ServiceFabricType">
<SingletonPartition />
</StatelessService>
</Service>
</DefaultServices>
</ApplicationManifest>
保罗
首先,在我给你解决方案之前,我会给出一个理由...
EnableDefaultServicesUpgrade
是允许在应用程序升级期间升级默认服务描述的标志。当设置为 true 时,默认服务描述将被新值覆盖,这是为了防止意外更改描述而导致可能的故障或数据丢失。
- 当设置为false(默认)时,它会进行检查以防止故障发生,
- 当设置为 true 时,您承担这些更改是安全的风险
例如,当您更改服务中的分区数时,SF 预测这将导致数据丢失或其他故障。
修复:
EnableDefaultServicesUpgrade
是集群定义中的标志,而不是服务中的标志。您必须在集群清单中进行设置。
您的集群清单将包含如下所示的部分:
...some stuff above...
{
"name": "ClusterManager",
"parameters": [
{
"name": "EnableDefaultServicesUpgrade",
"value": true
}]
... some more stuf below
}
要在 Azure 上更改它:
您可以使用传送门'http://resources.azure.com' as described in this link
在本地集群上:
您从集群安装文件夹复制 clusterconfig.json
,使用以下命令应用更改触发集群升级 Start-ServiceFabricClusterConfigurationUpgrade -ClusterConfigPath .\clusterconfig.json
顺便说一句...
你正在使用 DefaultServices,你应该避免它,关于 SO 为什么的问题有很多。
我正在尝试通过 Visual Studio 升级我的 Service Fabric 应用程序。
我最终不得不使用 diff 包方法来确保只有我更改的服务在升级中。
我是通过删除不需要的文件的命令文件完成的。
现在我遇到了另一个错误,该错误因缺乏细节而令人恼火:
Start-ServiceFabricApplicationUpgrade : Default service descriptions can not be modified as part of upgrade. Modified
2>default service: fabric:/MYAPPLICATION/MYSERVICE. To allow it, set
2>EnableDefaultServicesUpgrade to true.
我应该把它放在哪里?
请注意,这是来自 Visual Studio。
我很少从使用 PowerShell 中获得乐趣。
我看到了对 Update-ServiceFabricService CmdLet 的引用,但没有关于我需要做什么的更多信息。
我已经在应用程序清单中尝试过但没有成功:
<?xml version="1.0" encoding="utf-8"?>
<ApplicationManifest xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" ApplicationTypeName="MyServiceFabricApplication.ServiceFabricType" ApplicationTypeVersion="7.0.0" xmlns="http://schemas.microsoft.com/2011/01/fabric">
<Parameters>
<Parameter Name="EnableDefaultServicesUpgrade" DefaultValue="true" />
<Parameter Name="MyParameter" DefaultValue="value" />
Parameters>
<ServiceManifestImport>
<ServiceManifestRef ServiceManifestName="MyServiceFabricApplication.Service1.ServiceFabricPkg" ServiceManifestVersion="4.0.0" />
<ConfigOverrides>
<ConfigOverride Name="Config">
<Settings>
<Section Name="appSettings">
<Parameter Name="MyParameter" Value="[MyParameter]" />
</Section>
</Settings>
</ConfigOverride>
</ConfigOverrides>
</ServiceManifestImport>
<ServiceManifestImport>
<ServiceManifestRef ServiceManifestName="MyServiceFabricApplication.Service2.ServiceFabricPkg" ServiceManifestVersion="2.0.0" />
<ConfigOverrides>
<ConfigOverride Name="Config">
<Settings>
<Section Name="appSettings">
<Parameter Name="MyParameter" Value="[MyParameter]" />
</Section>
</Settings>
</ConfigOverride>
</ConfigOverrides>
</ServiceManifestImport>
<ServiceManifestImport>
<ServiceManifestRef ServiceManifestName="MyServiceFabricApplication.Service3.ServiceFabricPkg" ServiceManifestVersion="3.0.0" />
<ConfigOverrides>
<ConfigOverride Name="Config">
<Settings>
<Section Name="appSettings">
<Parameter Name="MyParameter" Value="[MyParameter]" />
</Section>
</Settings>
</ConfigOverride>
</ConfigOverrides>
</ServiceManifestImport>
<ServiceManifestImport>
<ServiceManifestRef ServiceManifestName="MyServiceFabricApplication.Service4.ServiceFabricPkg" ServiceManifestVersion="2.0.0" />
<ConfigOverrides>
<ConfigOverride Name="Config">
<Settings>
<Section Name="appSettings">
<Parameter Name="MyParameter" Value="[MyParameter]" />
</Section>
</Settings>
</ConfigOverride>
</ConfigOverrides>
</ServiceManifestImport>
<ServiceManifestImport>
<ServiceManifestRef ServiceManifestName="MyServiceFabricApplication.PlatformApi.ServiceFabricPkg" ServiceManifestVersion="2.0.0" />
<ConfigOverrides>
<ConfigOverride Name="Config">
<Settings>
<Section Name="appSettings">
<Parameter Name="MyParameter" Value="[MyParameter]" />
</Section>
</Settings>
</ConfigOverride>
</ConfigOverrides>
</ServiceManifestImport>
<ServiceManifestImport>
<ServiceManifestRef ServiceManifestName="MyServiceFabricApplication.LivePriceManager.ServiceFabricPkg" ServiceManifestVersion="3.0.0" />
<ConfigOverrides>
<ConfigOverride Name="Config">
<Settings>
<Section Name="appSettings">
<Parameter Name="MyParameter" Value="[MyParameter]" />
</Section>
</Settings>
</ConfigOverride>
</ConfigOverrides>
</ServiceManifestImport>
<ServiceManifestImport>
<ServiceManifestRef ServiceManifestName="MyServiceFabricApplication.Service5.ServiceFabricPkg" ServiceManifestVersion="3.0.0" />
<ConfigOverrides>
<ConfigOverride Name="Config">
<Settings>
<Section Name="appSettings">
<Parameter Name="MyParameter" Value="[MyParameter]" />
</Section>
</Settings>
</ConfigOverride>
</ConfigOverrides>
</ServiceManifestImport>
<DefaultServices>
<Service Name="Service1" ServicePackageActivationMode="ExclusiveProcess">
<StatelessService ServiceTypeName="MyServiceFabricApplication.Service1.ServiceFabricType">
<SingletonPartition />
</StatelessService>
</Service>
<Service Name="Service2" ServicePackageActivationMode="ExclusiveProcess">
<StatelessService ServiceTypeName="MyServiceFabricApplication.Service2.ServiceFabricType">
<SingletonPartition />
</StatelessService>
</Service>
<Service Name="Service3" ServicePackageActivationMode="ExclusiveProcess">
<StatelessService ServiceTypeName="MyServiceFabricApplication.Service3.ServiceFabricType">
<SingletonPartition />
</StatelessService>
</Service>
<Service Name="Service7" ServicePackageActivationMode="ExclusiveProcess">
<StatelessService ServiceTypeName="MyServiceFabricApplication.Service7.ServiceFabricType">
<SingletonPartition />
</StatelessService>
</Service>
<Service Name="Service5" ServicePackageActivationMode="ExclusiveProcess">
<StatelessService ServiceTypeName="MyServiceFabricApplication.Service5.ServiceFabricType">
<SingletonPartition />
</StatelessService>
</Service>
<Service Name="Service6" ServicePackageActivationMode="ExclusiveProcess">
<StatelessService ServiceTypeName="MyServiceFabricApplication.Service6.ServiceFabricType">
<SingletonPartition />
</StatelessService>
</Service>
<Service Name="Service4" ServicePackageActivationMode="ExclusiveProcess">
<StatelessService ServiceTypeName="MyServiceFabricApplication.Service4.ServiceFabricType">
<SingletonPartition />
</StatelessService>
</Service>
</DefaultServices>
</ApplicationManifest>
保罗
首先,在我给你解决方案之前,我会给出一个理由...
EnableDefaultServicesUpgrade
是允许在应用程序升级期间升级默认服务描述的标志。当设置为 true 时,默认服务描述将被新值覆盖,这是为了防止意外更改描述而导致可能的故障或数据丢失。
- 当设置为false(默认)时,它会进行检查以防止故障发生,
- 当设置为 true 时,您承担这些更改是安全的风险
例如,当您更改服务中的分区数时,SF 预测这将导致数据丢失或其他故障。
修复:
EnableDefaultServicesUpgrade
是集群定义中的标志,而不是服务中的标志。您必须在集群清单中进行设置。
您的集群清单将包含如下所示的部分:
...some stuff above...
{
"name": "ClusterManager",
"parameters": [
{
"name": "EnableDefaultServicesUpgrade",
"value": true
}]
... some more stuf below
}
要在 Azure 上更改它:
您可以使用传送门'http://resources.azure.com' as described in this link
在本地集群上:
您从集群安装文件夹复制 clusterconfig.json
,使用以下命令应用更改触发集群升级 Start-ServiceFabricClusterConfigurationUpgrade -ClusterConfigPath .\clusterconfig.json
顺便说一句...
你正在使用 DefaultServices,你应该避免它,关于 SO 为什么的问题有很多。