Skip to content

RegisterEndpointHandler assumes single match for Endpoint.Name and Endpoint.Host #331

@SimonCropp

Description

@SimonCropp

So in RegisterEndpointHandler we have

knownEndpoint = session.Query<KnownEndpoint, KnownEndpointIndex>()
.SingleOrDefault(e => 
    e.EndpointDetails.Name == message.Endpoint.Name && 
    e.EndpointDetails.Host == message.Endpoint.Host);

But because multiple endpoints can be deployed to the same host there could be multiple KnownEndpoint with the same Endpoint.Name and EndpointDetails.Host. So the session.Query returns more than 1 and SingleOrDefault blows up

message content

???[{
    "$type":"ServiceControl.EndpointControl.InternalMessages.RegisterEndpoint, ServiceControl",
    "EndpointInstanceId":"00000000-0000-0000-0000-000000000000",
    "Endpoint":{
        "Name":"XXX","HostId":"83078d7e-38ca-37ca-d3d3-98d5d836a3d6",
        "Host":"YYY"},
    "DetectedAt":"2014-05-26T03:30:48.3247685Z"
}]

exception

System.InvalidOperationException: Sequence contains more than one element
   at System.Linq.Enumerable.SingleOrDefault[TSource](IEnumerable`1 source)
   at Raven.Client.Linq.RavenQueryProviderProcessor`1.GetQueryResult[TProjection](IDocumentQuery`1 finalQuery) in c:\Builds\RavenDB-Unstable-v2.5-New\Raven.Client.Lightweight\Linq\RavenQueryProviderProcessor.cs:line 1604
   at Raven.Client.Linq.RavenQueryProviderProcessor`1.ExecuteQuery[TProjection]() in c:\Builds\RavenDB-Unstable-v2.5-New\Raven.Client.Lightweight\Linq\RavenQueryProviderProcessor.cs:line 1532
   at Raven.Client.Linq.RavenQueryProvider`1.System.Linq.IQueryProvider.Execute[S](Expression expression) in c:\Builds\RavenDB-Unstable-v2.5-New\Raven.Client.Lightweight\Linq\RavenQueryProvider.cs:line 198
   at System.Linq.Queryable.SingleOrDefault[TSource](IQueryable`1 source, Expression`1 predicate)
   at ServiceControl.EndpointControl.Handlers.RegisterEndpointHandler.Handle(RegisterEndpoint message) in c:\BuildAgent\work\b7f882efc2cd360b\src\ServiceControl\EndpointControl\Handlers\RegisterEndpointHandler.cs:line 31
   at NServiceBus.Unicast.HandlerInvocationCache.Invoke(Object handler, Object message, Dictionary`2 dictionary) in c:\BuildAgent\work\31f8c64a6e8a2d7c\src\NServiceBus.Core\Unicast\HandlerInvocationCache.cs:line 63
   at NServiceBus.Unicast.Behaviors.InvokeHandlersBehavior.Invoke(HandlerInvocationContext context, Action next) in c:\BuildAgent\work\31f8c64a6e8a2d7c\src\NServiceBus.Core\Unicast\Behaviors\InvokeHandlersBehavior.cs:line 29
   at NServiceBus.Sagas.SagaPersistenceBehavior.Invoke(HandlerInvocationContext context, Action next) in c:\BuildAgent\work\31f8c64a6e8a2d7c\src\NServiceBus.Core\Sagas\SagaPersistenceBehavior.cs:line 32
   at NServiceBus.Sagas.AuditInvokedSagaBehavior.Invoke(HandlerInvocationContext context, Action next) in c:\BuildAgent\work\31f8c64a6e8a2d7c\src\NServiceBus.Core\Sagas\AuditInvokedSagaBehavior.cs:line 18
   at NServiceBus.Unicast.Behaviors.SetCurrentMessageBeingHandledBehavior.Invoke(HandlerInvocationContext context, Action next) in c:\BuildAgent\work\31f8c64a6e8a2d7c\src\NServiceBus.Core\Unicast\Behaviors\SetCurrentMessageBeingHandledBehavior.cs:line 21
   at NServiceBus.Pipeline.PipelineExecutor.Execute[T](BehaviorChain`1 pipelineAction, T context) in c:\BuildAgent\work\31f8c64a6e8a2d7c\src\NServiceBus.Core\Pipeline\PipelineExecutor.cs:line 135
   at NServiceBus.Unicast.Behaviors.LoadHandlersBehavior.Invoke(ReceiveLogicalMessageContext context, Action next) in c:\BuildAgent\work\31f8c64a6e8a2d7c\src\NServiceBus.Core\Unicast\Behaviors\LoadHandlersBehavior.cs:line 37
   at NServiceBus.DataBus.DataBusReceiveBehavior.Invoke(ReceiveLogicalMessageContext context, Action next) in c:\BuildAgent\work\31f8c64a6e8a2d7c\src\NServiceBus.Core\DataBus\DataBusReceiveBehavior.cs:line 68
   at NServiceBus.Pipeline.MessageMutator.ApplyIncomingMessageMutatorsBehavior.Invoke(ReceiveLogicalMessageContext context, Action next) in c:\BuildAgent\work\31f8c64a6e8a2d7c\src\NServiceBus.Core\MessageMutator\ApplyIncomingMessageMutatorsBehavior.cs:line 25
   at ServiceControl.Infrastructure.RavenDB.RavenUnitOfWorkBehavior.Invoke(ReceiveLogicalMessageContext context, Action next) in c:\BuildAgent\work\b7f882efc2cd360b\src\ServiceControl\Infrastructure\RavenDB\RavenUnitOfWorkBehavior.cs:line 26
   at NServiceBus.Pipeline.PipelineExecutor.Execute[T](BehaviorChain`1 pipelineAction, T context) in c:\BuildAgent\work\31f8c64a6e8a2d7c\src\NServiceBus.Core\Pipeline\PipelineExecutor.cs:line 135
   at NServiceBus.Unicast.Messages.ExecuteLogicalMessagesBehavior.Invoke(ReceivePhysicalMessageContext context, Action next) in c:\BuildAgent\work\31f8c64a6e8a2d7c\src\NServiceBus.Core\Unicast\Messages\ExecuteLogicalMessagesBehavior.cs:line 28
   at NServiceBus.Unicast.Behaviors.CallbackInvocationBehavior.Invoke(ReceivePhysicalMessageContext context, Action next) in c:\BuildAgent\work\31f8c64a6e8a2d7c\src\NServiceBus.Core\Unicast\Behaviors\CallbackInvocationBehavior.cs:line 26
   at NServiceBus.Unicast.Messages.ExtractLogicalMessagesBehavior.Invoke(ReceivePhysicalMessageContext context, Action next) in c:\BuildAgent\work\31f8c64a6e8a2d7c\src\NServiceBus.Core\Unicast\Messages\ExtractLogicalMessagesBehavior.cs:line 58
   at NServiceBus.Sagas.RemoveIncomingHeadersBehavior.Invoke(ReceivePhysicalMessageContext context, Action next) in c:\BuildAgent\work\31f8c64a6e8a2d7c\src\NServiceBus.Core\Sagas\RemoveIncomingHeadersBehavior.cs:line 23
   at NServiceBus.MessageMutator.ApplyIncomingTransportMessageMutatorsBehavior.Invoke(ReceivePhysicalMessageContext context, Action next) in c:\BuildAgent\work\31f8c64a6e8a2d7c\src\NServiceBus.Core\MessageMutator\ApplyIncomingTransportMessageMutatorsBehavior.cs:line 22
   at NServiceBus.UnitOfWork.UnitOfWorkBehavior.Invoke(ReceivePhysicalMessageContext context, Action next) in c:\BuildAgent\work\31f8c64a6e8a2d7c\src\NServiceBus.Core\UnitOfWork\UnitOfWorkBehavior.cs:line 24

Metadata

Metadata

Assignees

Labels

Type

No type

Projects

No projects

Milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions