@@ -11,6 +11,7 @@ import (
11
11
"k8s.io/apimachinery/pkg/api/meta"
12
12
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
13
13
"k8s.io/apimachinery/pkg/runtime"
14
+ "k8s.io/apimachinery/pkg/runtime/schema"
14
15
"k8s.io/apiserver/pkg/registry/rest"
15
16
"k8s.io/klog/v2"
16
17
)
25
26
_ rest.SingularNameProvider = (DualWriter )(nil )
26
27
)
27
28
29
+ // Function that will create a dual writer
30
+ type DualWriteBuilder func (gr schema.GroupResource , legacy LegacyStorage , storage Storage ) (Storage , error )
31
+
28
32
// Storage is a storage implementation that satisfies the same interfaces as genericregistry.Store.
29
33
type Storage interface {
30
34
rest.Storage
@@ -152,7 +156,12 @@ func SetDualWritingMode(
152
156
entity string ,
153
157
desiredMode DualWriterMode ,
154
158
reg prometheus.Registerer ,
155
- ) (DualWriter , error ) {
159
+ ) (DualWriterMode , error ) {
160
+ // Mode0 means no DualWriter
161
+ if desiredMode == Mode0 {
162
+ return Mode0 , nil
163
+ }
164
+
156
165
toMode := map [string ]DualWriterMode {
157
166
// It is not possible to initialize a mode 0 dual writer. Mode 0 represents
158
167
// writing to legacy storage without `unifiedStorage` enabled.
@@ -166,7 +175,7 @@ func SetDualWritingMode(
166
175
// Use entity name as key
167
176
m , ok , err := kvs .Get (ctx , entity )
168
177
if err != nil {
169
- return nil , errors .New ("failed to fetch current dual writing mode" )
178
+ return Mode0 , errors .New ("failed to fetch current dual writing mode" )
170
179
}
171
180
172
181
currentMode , valid := toMode [m ]
@@ -182,7 +191,7 @@ func SetDualWritingMode(
182
191
183
192
err := kvs .Set (ctx , entity , fmt .Sprint (currentMode ))
184
193
if err != nil {
185
- return nil , errDualWriterSetCurrentMode
194
+ return Mode0 , errDualWriterSetCurrentMode
186
195
}
187
196
}
188
197
@@ -194,7 +203,7 @@ func SetDualWritingMode(
194
203
195
204
err := kvs .Set (ctx , entity , fmt .Sprint (currentMode ))
196
205
if err != nil {
197
- return nil , errDualWriterSetCurrentMode
206
+ return Mode0 , errDualWriterSetCurrentMode
198
207
}
199
208
}
200
209
if (desiredMode == Mode1 ) && (currentMode == Mode2 ) {
@@ -204,13 +213,13 @@ func SetDualWritingMode(
204
213
205
214
err := kvs .Set (ctx , entity , fmt .Sprint (currentMode ))
206
215
if err != nil {
207
- return nil , errDualWriterSetCurrentMode
216
+ return Mode0 , errDualWriterSetCurrentMode
208
217
}
209
218
}
210
219
211
220
// #TODO add support for other combinations of desired and current modes
212
221
213
- return NewDualWriter ( currentMode , legacy , storage , reg ) , nil
222
+ return currentMode , nil
214
223
}
215
224
216
225
var defaultConverter = runtime .UnstructuredConverter (runtime .DefaultUnstructuredConverter )
0 commit comments