Exemple #1
0
        private async ValueTask InitializeNearCache(NearCache nearCache)
        {
            await nearCache.InitializeAsync().CfAwait();

            if (!nearCache.IsInvalidating)
            {
                return;
            }

            var repairingHandler = nearCache.RepairingHandler;

            if (repairingHandler == null)
            {
                return;                           // though that should never happen
            }
            // initialize
            await foreach (var(member, metadata) in FetchMetadataAsync(new[] { nearCache.Name }))
            {
                try
                {
                    repairingHandler.InitializeGuids(metadata.PartitionUuidList);
                    repairingHandler.InitializeSequences(metadata.NamePartitionSequenceList);
                }
                catch (Exception e)
                {
                    _logger.LogWarning(e, $"An exception was thrown while processing invalidation meta data from address {member.Address}.");
                }
            }

            // start repairing task if not started
            if (Interlocked.CompareExchange(ref _running, 1, 0) == 0)
            {
                _repairingCancellation = new CancellationTokenSource();
                _repairing             = Repair(_repairingCancellation.Token).AsTask();

                Interlocked.Exchange(ref _lastAntiEntropyRunMillis, Clock.Milliseconds);
            }
        }