7
7
using k8s ;
8
8
using k8s . Models ;
9
9
using KubeOps . Operator . Caching ;
10
+ using KubeOps . Operator . Client ;
10
11
using KubeOps . Operator . Errors ;
11
12
using KubeOps . Operator . Watcher ;
12
13
using Microsoft . Extensions . Logging ;
13
14
14
15
namespace KubeOps . Operator . Queue
15
16
{
16
17
internal class ResourceEventQueue < TEntity > : IResourceEventQueue < TEntity >
17
- where TEntity : IKubernetesObject < V1ObjectMeta >
18
+ where TEntity : class , IKubernetesObject < V1ObjectMeta >
18
19
{
19
20
// TODO: Make configurable
20
21
private const int QueueLimit = 512 ;
@@ -24,6 +25,7 @@ internal class ResourceEventQueue<TEntity> : IResourceEventQueue<TEntity>
24
25
25
26
private readonly SemaphoreSlim _semaphore = new SemaphoreSlim ( 1 ) ;
26
27
private readonly ILogger < ResourceEventQueue < TEntity > > _logger ;
28
+ private readonly IKubernetesClient _client ;
27
29
private readonly IResourceCache < TEntity > _cache ;
28
30
private readonly IResourceWatcher < TEntity > _watcher ;
29
31
@@ -39,10 +41,12 @@ internal class ResourceEventQueue<TEntity> : IResourceEventQueue<TEntity>
39
41
40
42
public ResourceEventQueue (
41
43
ILogger < ResourceEventQueue < TEntity > > logger ,
44
+ IKubernetesClient client ,
42
45
IResourceCache < TEntity > cache ,
43
46
IResourceWatcher < TEntity > watcher )
44
47
{
45
48
_logger = logger ;
49
+ _client = client ;
46
50
_cache = cache ;
47
51
_watcher = watcher ;
48
52
}
@@ -131,17 +135,20 @@ public async Task Enqueue(TEntity resource, TimeSpan? enqueueDelay = null)
131
135
_semaphore . Release ( ) ;
132
136
}
133
137
134
- var cachedResource = _cache . Get ( delayedResource . Metadata . Uid ) ;
135
- if ( cachedResource == null )
138
+ var newResource = await _client . Get < TEntity > (
139
+ delayedResource . Metadata . Name ,
140
+ delayedResource . Metadata . NamespaceProperty ) ;
141
+
142
+ if ( newResource == null )
136
143
{
137
144
_logger . LogDebug (
138
- @"Resource ""{kind}/{name}"" was not present in the cache anymore. Don't execute delayed timer ." ,
139
- delayedResource . Kind ,
140
- delayedResource . Metadata . Name ) ;
145
+ @"Resource ""{kind}/{name}"" for enqueued event was not present anymore." ,
146
+ resource . Kind ,
147
+ resource . Metadata . Name ) ;
141
148
return ;
142
149
}
143
150
144
- await Enqueue ( cachedResource ) ;
151
+ await Enqueue ( newResource ) ;
145
152
} ) ;
146
153
_delayedEnqueue . Add ( resource . Metadata . Uid , timer ) ;
147
154
0 commit comments