예제 #1
0
        public Task<Result<MachineMapping>> RegisterMachineAsync(OperationContext context, MachineLocation machineLocation)
        {
            return context.PerformOperationAsync(Tracer, async () =>
            {
                if (Configuration.DistributedContentConsumerOnly)
                {
                    return Result.Success(new MachineMapping(machineLocation, new MachineId(0)));
                }

                // Get the local machine id
                var machineIdAndIsAdded = await _clusterStateKey.UseNonConcurrentReplicatedHashAsync(
                    context,
                    Configuration.RetryWindow,
                    RedisOperation.StartupGetOrAddLocalMachine,
                    (batch, key) => batch.GetOrAddMachineAsync(key, machineLocation.ToString(), _clock.UtcNow),
                    timeout: Configuration.ClusterRedisOperationTimeout)
                    .ThrowIfFailureAsync();

                Tracer.Debug(context, $"Assigned machine id={machineIdAndIsAdded.machineId}, location={machineLocation}, isAdded={machineIdAndIsAdded.isAdded}.");

                return Result.Success(new MachineMapping(machineLocation, new MachineId(machineIdAndIsAdded.machineId)));
            },
            traceOperationStarted: false,
            extraEndMessage: r =>
            {
                if (r.Succeeded)
                {
                    return $"MachineLocation=[{r.Value.Location}] MachineId=[{r.Value.Id}]";
                }
                else
                {
                    return $"MachineLocation=[{machineLocation}]";
                }
            });
        }
예제 #2
0
        internal async Task <int> RegisterMachineAsync(OperationContext context, MachineLocation machineLocation)
        {
            // Get the local machine id
            var machineIdAndIsAdded = await _clusterStateKey.UseReplicatedHashAsync(
                context,
                RedisOperation.StartupGetOrAddLocalMachine,
                (batch, key) => batch.GetOrAddMachineAsync(key, machineLocation.ToString(), _clock.UtcNow))
                                      .ThrowIfFailureAsync();

            Tracer.Debug(context, $"Assigned machine id={machineIdAndIsAdded.machineId}, location={machineLocation}, isAdded={machineIdAndIsAdded.isAdded}.");

            return(machineIdAndIsAdded.machineId);
        }
예제 #3
0
        public async Task <MachineMapping> RegisterMachineAsync(OperationContext context, MachineLocation machineLocation)
        {
            // Get the local machine id
            var machineIdAndIsAdded = await _clusterStateKey.UseNonConcurrentReplicatedHashAsync(
                context,
                _configuration.RetryWindow,
                RedisOperation.StartupGetOrAddLocalMachine,
                (batch, key) => batch.GetOrAddMachineAsync(key, machineLocation.ToString(), _clock.UtcNow),
                timeout : _configuration.ClusterRedisOperationTimeout)
                                      .ThrowIfFailureAsync();

            Tracer.Debug(context, $"Assigned machine id={machineIdAndIsAdded.machineId}, location={machineLocation}, isAdded={machineIdAndIsAdded.isAdded}.");

            return(new MachineMapping(machineLocation, new MachineId(machineIdAndIsAdded.machineId)));
        }
예제 #4
0
        internal async Task <int> RegisterMachineAsync(OperationContext context, MachineLocation machineLocation)
        {
            // Get the local machine id
            return(await ExecuteRedisFallbackAsync(context, redisDb => redisDb.ExecuteBatchAsync(context, async batch =>
            {
                var machineIdAndIsAdded = await batch.GetOrAddMachineAsync(_clusterStateKey, machineLocation.ToString(), _clock.UtcNow);

                Tracer.Debug(context, $"Assigned machine id={machineIdAndIsAdded.machineId}, location={machineLocation}, isAdded={machineIdAndIsAdded.isAdded}.");

                return Result.Success(machineIdAndIsAdded.machineId);
            },
                                                                                                 RedisOperation.StartupGetOrAddLocalMachine)).ThrowIfFailureAsync());
        }