Skip to content

Swarm.CreateServiceAsync doesn't return "Version" which means unable to do an UpdateServiceAsync afterwards #675

Open
@dazinator

Description

When creating a swarm service

        var createService = new ServiceCreateParameters
        {
            Service = serviceSpec
        };

        var response = await client.Swarm.CreateServiceAsync(createService);

The response does not contain the "Version.Index".
The version index (this is sometimes represented as a long and other times a ulong in this library) is required in order to call UpdateServiceAsync - if you don't specify it you can get exceptions back about the update being out of sequence.

To workaround this, after creating the service, I have to do an intermediary ListServicesAsync to fetch it again, because that API does return a Version.

 var listServiceResult = await client.Swarm.ListServicesAsync(new ServicesListParameters()
        {
            Filters = new ServiceFilter()
            {
                Name = new string[]
                {
                    testServiceName
                }
            }
        });
var results = listServiceResult.ToList();
var service = results.Single();

Then I can do

        
  var updatePlacementConstraintResponse = await client.Swarm.UpdateServiceAsync(testServiceName, new ServiceUpdateParameters()
                {
                    Version = (long)service.Version.Index,
                    Service = serviceSpec,
                });

Note: I have to cast from ulong to long - ideally these types could be aligned?

You may wonder why I am doing a create then an immediate update. I am writing a test to check that I can update a service and it has the intended behaviour. At the start of the test I need to create the service first as a test subject. In normal application usage I don't envisage I'd want to create then immediately update a service.

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions