Projekt

Obecné

Profil

« Předchozí | Další » 

Revize eda1e8c7

Přidáno uživatelem Pultak před asi 2 roky(ů)

re #9441 Added core of cache manager

Zobrazit rozdíly:

ld_client/LDClient/network/ApiClient.cs
94 94
                                 $"Request body: {json},\n" +
95 95
                                 $"Response: {JsonConvert.SerializeObject(responseToLog)}");
96 96

  
97
        private async Task ResendPayloadsAsync() {
98
            var numberOfPayloadsToResend = Math.Min(_maxRetries, _cache.EstimatedCountOfItemsInQueue);
99
            var payloads = new List<Payload>();
100

  
101
            using (var session = _cache.OpenSession()) {
102
                for (var i = 0; i < numberOfPayloadsToResend; i++) {
103
                    var rawBytes = session.Dequeue();
104
                    var payload = JsonSerializer.Deserialize<Payload>(rawBytes);
105
                    if (payload is not null) {
106
                        payloads.Add(payload);
107
                    }
108
                }
109
                session.Flush();
110
            }
111

  
112
            if (payloads.Count > 0) {
113
                Program.DefaultLogger.Debug($"ResendPayloadAsync -> {payloads.Count} unsent payloads");
114
                var tasks = new List<Task>();
115
                foreach (var payload in payloads) {
116
                    Program.DefaultLogger.Info($"Resending {payload}.");
117
                    tasks.Add(SendPayloadAsync(payload));
118
                }
119
                await Task.WhenAll(tasks);
120
            }
121
        }
122

  
123

  
124
        private void CachePayload(Payload payload) {
125
            Program.DefaultLogger.Info($"Storing {payload} into the cache.");
126
            var numberOfCachedPayloads = _cache.EstimatedCountOfItemsInQueue;
127
            using var session = _cache.OpenSession();
128
            if (numberOfCachedPayloads >= _maxEntries) {
129
                session.Dequeue();
130
            }
131
            var payloadJson = JsonSerializer.Serialize(payload);
132
            session.Enqueue(Encoding.UTF8.GetBytes(payloadJson));
133
            session.Flush();
134
        }
135

  
97 136
        public async void Run() {
98 137
            Program.DefaultLogger.Info("Api Client thread has started");
99 138
            _running = true;

Také k dispozici: Unified diff