// Only used with MembershipTableGrain to wait for primary to start. private async Task WaitForTableGrainToInit(IMembershipTableGrain membershipTableGrain) { var timespan = Debugger.IsAttached ? TimeSpan.FromMinutes(5) : TimeSpan.FromSeconds(5); // This is a quick temporary solution to enable primary node to start fully before secondaries. // Secondary silos waits untill GrainBasedMembershipTable is created. for (int i = 0; i < 100; i++) { try { await membershipTableGrain.ReadAll().WithTimeout(timespan); logger.Info(ErrorCode.MembershipTableGrainInit2, "-Connected to membership table provider."); return; } catch (Exception exc) { var type = exc.GetBaseException().GetType(); if (type == typeof(TimeoutException) || type == typeof(OrleansException)) { logger.Info( ErrorCode.MembershipTableGrainInit3, "-Waiting for membership table provider to initialize. Going to sleep for {0} and re-try to reconnect.", timespan); } else { logger.Info(ErrorCode.MembershipTableGrainInit4, "-Membership table provider failed to initialize. Giving up."); throw; } } await Task.Delay(timespan); } }
public async Task InitializeMembershipTable(bool tryInitTableVersion) { this.grain = await GetMembershipTableGrain(); }