prooph / event-store-client

PHP Event Store Client Implementation
BSD 3-Clause "New" or "Revised" License
113 stars 31 forks source link

performOnMasterOnly property doesn't seem to work #167

Open tomtimmerman opened 2 years ago

tomtimmerman commented 2 years ago

Hi

I'am trying to create a persistent subscription to a eventstore cluster version 21.10.5. I've set the performOnMasterOnly property but it only tries to connect to follower nodes not to the leader node. The ClusterDnsEndPointDiscoverer always returns the first node it encounters and not the master node. Below is my client config.

$userCredentials = new UserCredentials($username, $password);
$connectionSettings = ConnectionSettings::create()
    ->setDefaultUserCredentials($userCredentials)
    ->useSslConnection($host, $useSsl)
    ->enableVerboseLogging()
    ->performOnMasterOnly()
    ->build();

$connection = EventStoreConnectionFactory::createFromConnectionString($connectionString, $connectionSettings);

Loop::run( function () use ($connection) {
    yield $connection->connectAsync();
    yield $connection->connectToPersistentSubscriptionAsync(
        'stream-id',
        'subscription-name',
        Closure::fromCallable(static function (EventStorePersistentSubscription $subscription, ResolvedEvent $resolvedEvent): Promise {
            echo 'received event!';
            return new Success();
        }),
        Closure::fromCallable(static function (EventStorePersistentSubscription $subscription, SubscriptionDropReason $reason, Throwable $throwable = null): void {
            echo 'subscription dropped.';
        }),
        1,
        true 
    );
} );

Thanks

prolic commented 2 years ago

Please paste your connection string

tomtimmerman commented 2 years ago

This is my connection string: GossipSeeds=<clusterId>-0.mesdb.eventstore.cloud:2113,<clusterId>-1.mesdb.eventstore.cloud:2113,<clusterId>-2.mesdb.eventstore.cloud:2113;UseSslConnection=true

Is also tried with the RequireMaster=true but have the same problem.

prolic commented 2 years ago

I try to get to it this weekend.

prolic commented 3 months ago

RequireMaster=true only has an effect upon appending events to a stream, not upon connecting. Try using preferRandomNode on the ClusterSettings and you should be able to connect to a random node.