microsoft / service-fabric

Service Fabric is a distributed systems platform for packaging, deploying, and managing stateless and stateful distributed applications and containers at large scale.
https://docs.microsoft.com/en-us/azure/service-fabric/
MIT License
3.03k stars 399 forks source link

[BUG] - Unable to publish actor service on Linux - v6.0.1028.9590 #1403

Open Conan-OryxSystems opened 1 year ago

Conan-OryxSystems commented 1 year ago

Describe the bug It appears that a person cannot publish an Actor Service to a Linux cluster. When publishing to a Linux cluster, the deploy script looks for an Exe, regardless of removing the text ".exe" from the ServiceManifest.xml The publish fails with the following error message: Test-ServiceFabricApplicationPackage : The EntryPoint Oryx.Jobs.Mobility.DbTaskScheduler.exe is not found. 2>FileName: C:\Users\Conan\AppData\Local\Temp\TestApplicationPackage_4270823135060\rgqoyz3a.o5w\Debug\Oryx.Jobs.Mobility. 2>DbTaskSchedulerPkg\ServiceManifest.xml 2>At C:\Program Files\Microsoft SDKs\Service 2>Fabric\Tools\PSModule\ServiceFabricSDK\Publish-NewServiceFabricApplication.ps1:273 char:38 2>+ ... tionSuccess = (Test-ServiceFabricApplicationPackage $AppPkgPathToUse)

Area/Component: Actors, Publishing

To Reproduce Steps to reproduce the behavior:

  1. Create a new Service Fabric Application with a .NETCore stateful or stateless service
  2. Add a .NETCore Actor Service
  3. Open each service's project file.
  4. Replace the lines 'win7-x64' with 'linux-x64'
  5. Open each service's ServiceManfest.xml file.
  6. Find and remove the text ".exe"
  7. Right click on the Service Fabric project and click on publish
  8. Pick a publish profile that deploys to a Linux cluster.
  9. See error in description

Expected behavior I expect the Actor service to deploy same as the Stateful and Stateless Services

Observed behavior: The deploy script is looking for a file that should not exist. eg: ServiceName.exe

Screenshots If applicable, add screenshots to help explain your problem.

Service Fabric Runtime Version: 9.0.1028.*

Environment: Operating System: Ubuntu 20.04.5 LTS Kernel: Linux 5.15.0-1022-azure Architecture: x86-64

If this is a regression, which version did it regress from?

Additional context Add any other context about the problem here.


Assignees: /cc @microsoft/service-fabric-triage

sunil-indoria commented 1 year ago

Actor service supports three different type of entry points - Exe, NoExtension and ExternalExecutable. Exe is the default one. To enable NoExtension or ExternalExecutable, csproj file of the actor service should be added with a property ServiceManifestEntryPointType with NoExtension or ExternalExecutable.

Steps for successfully publish actor service to Linux cluster are -

  1. Create a new Service Fabric Application with a .NETCore Actor Service
  2. Open service's project file.
  3. Replace the lines 'win7-x64' with 'linux-x64'
  4. Add property <ServiceManifestEntryPointType>NoExtension</ServiceManifestEntryPointType> under PropertyGroup
  5. Open service's ServiceManfest.xml file.
  6. Find and remove the text ".exe"
  7. Right click on the Service Fabric project and click on publish
  8. Pick a publish profile that deploys to a Linux cluster.
  9. Application should be published successfully on cluster.