Skip to content

Commit 6ba221d

Browse files
authored
Remove config item labels support from local client (#1900)
Due to limitations of cn-infra library config labels were never working properly for local client. User should use remote client for this functionality. Signed-off-by: Peter Motičák <[email protected]> Signed-off-by: Peter Motičák <[email protected]>
1 parent ee3433b commit 6ba221d

File tree

3 files changed

+11
-139
lines changed

3 files changed

+11
-139
lines changed

client/local_client.go

+4-75
Original file line numberDiff line numberDiff line change
@@ -146,84 +146,13 @@ func (c *client) GetItems(ctx context.Context) ([]*ConfigItem, error) {
146146
}
147147

148148
func (c *client) UpdateItems(ctx context.Context, items []UpdateItem, resync bool) ([]*UpdateResult, error) {
149-
txn := c.txnFactory.NewTxn(resync)
150-
for _, ui := range items {
151-
key, err := models.GetKey(ui.Message)
152-
if err != nil {
153-
return nil, err
154-
}
155-
txn.Put(key, ui.Message)
156-
_, withDataSrc := contextdecorator.DataSrcFromContext(ctx)
157-
if !withDataSrc {
158-
ctx = contextdecorator.DataSrcContext(ctx, "localclient")
159-
}
160-
ctx = contextdecorator.LabelsContext(ctx, ui.Labels)
161-
}
162-
if err := txn.Commit(ctx); err != nil {
163-
return nil, err
164-
}
165-
var updateResults []*UpdateResult
166-
r, _ := contextdecorator.PushDataResultFromContext(ctx)
167-
resWrapper, ok := r.(orchestrator.ResultWrapper)
168-
if !ok {
169-
return nil, fmt.Errorf("cannot retrieve update results!")
170-
}
171-
for _, res := range resWrapper.Results {
172-
var msg string
173-
if details := res.Status.GetDetails(); len(details) > 0 {
174-
msg = strings.Join(res.Status.GetDetails(), ", ")
175-
} else {
176-
msg = res.Status.GetError()
177-
}
178-
updateResults = append(updateResults, &UpdateResult{
179-
Key: res.Key,
180-
Status: &generic.ItemStatus{
181-
Status: res.Status.State.String(),
182-
Message: msg,
183-
},
184-
})
185-
}
186-
return updateResults, nil
149+
// TODO: use grpc client to update items with labels
150+
return nil, nil
187151
}
188152

189153
func (c *client) DeleteItems(ctx context.Context, items []UpdateItem) ([]*UpdateResult, error) {
190-
txn := c.txnFactory.NewTxn(false)
191-
for _, ui := range items {
192-
key, err := models.GetKey(ui.Message)
193-
if err != nil {
194-
return nil, err
195-
}
196-
txn.Delete(key)
197-
_, withDataSrc := contextdecorator.DataSrcFromContext(ctx)
198-
if !withDataSrc {
199-
ctx = contextdecorator.DataSrcContext(ctx, "localclient")
200-
}
201-
}
202-
if err := txn.Commit(ctx); err != nil {
203-
return nil, err
204-
}
205-
var updateResults []*UpdateResult
206-
r, _ := contextdecorator.PushDataResultFromContext(ctx)
207-
resWrapper, ok := r.(orchestrator.ResultWrapper)
208-
if !ok {
209-
return nil, fmt.Errorf("cannot retrieve update results!")
210-
}
211-
for _, res := range resWrapper.Results {
212-
var msg string
213-
if details := res.Status.GetDetails(); len(details) > 0 {
214-
msg = strings.Join(res.Status.GetDetails(), ", ")
215-
} else {
216-
msg = res.Status.GetError()
217-
}
218-
updateResults = append(updateResults, &UpdateResult{
219-
Key: res.Key,
220-
Status: &generic.ItemStatus{
221-
Status: res.Status.State.String(),
222-
Message: msg,
223-
},
224-
})
225-
}
226-
return updateResults, nil
154+
// TODO: use grpc client to delete items with labels
155+
return nil, nil
227156
}
228157

229158
func (c *client) DumpState() ([]*generic.StateItem, error) {

plugins/orchestrator/contextdecorator/context.go

-33
Original file line numberDiff line numberDiff line change
@@ -29,36 +29,3 @@ func DataSrcFromContext(ctx context.Context) (dataSrc string, ok bool) {
2929
dataSrc, ok = ctx.Value(dataSrcKey).(string)
3030
return
3131
}
32-
33-
type labelsKeyT string
34-
35-
var labelsKey = labelsKeyT("labels")
36-
37-
func LabelsContext(ctx context.Context, labels map[string]string) context.Context {
38-
return context.WithValue(ctx, labelsKey, labels)
39-
}
40-
41-
func LabelsFromContext(ctx context.Context) (labels map[string]string, ok bool) {
42-
labels, ok = ctx.Value(labelsKey).(map[string]string)
43-
return
44-
}
45-
46-
// TODO: This is hack to avoid import cycle between orchestrator and contextdecorator package.
47-
// Figure out a way to pass result into local client without using interface implemented by
48-
// a wrapper type defined inside orchestrator package.
49-
type resulter interface {
50-
IsPushDataResult()
51-
}
52-
53-
type pushDataResultKeyT string
54-
55-
var pushDataResultKey = pushDataResultKeyT("pushDataResult")
56-
57-
func PushDataResultContext(ctx context.Context, pushDataResult resulter) context.Context {
58-
return context.WithValue(ctx, pushDataResultKey, pushDataResult)
59-
}
60-
61-
func PushDataResultFromContext(ctx context.Context) (pushDataResult resulter, ok bool) {
62-
pushDataResult, ok = ctx.Value(pushDataResultKey).(resulter)
63-
return
64-
}

plugins/orchestrator/orchestrator.go

+7-31
Original file line numberDiff line numberDiff line change
@@ -184,21 +184,10 @@ func (p *Plugin) watchEvents() {
184184

185185
var err error
186186
var kvPairs []KeyVal
187-
keyLabels := make(map[string]Labels)
188-
189-
ctx := e.GetContext()
190-
if ctx == nil {
191-
ctx = context.Background()
192-
}
193-
labels, ok := contextdecorator.LabelsFromContext(ctx)
194-
if !ok {
195-
labels = Labels{}
196-
}
197187

198188
for _, x := range e.GetChanges() {
199-
key := x.GetKey()
200189
kv := KeyVal{
201-
Key: key,
190+
Key: x.GetKey(),
202191
}
203192
if x.GetChangeType() != datasync.Delete {
204193
kv.Val, err = UnmarshalLazyValue(kv.Key, x)
@@ -208,7 +197,6 @@ func (p *Plugin) watchEvents() {
208197
}
209198
}
210199
kvPairs = append(kvPairs, kv)
211-
keyLabels[key] = labels
212200
}
213201

214202
if len(kvPairs) == 0 {
@@ -219,15 +207,16 @@ func (p *Plugin) watchEvents() {
219207

220208
p.log.Debugf("Change with %d items", len(kvPairs))
221209

210+
ctx := e.GetContext()
211+
if ctx == nil {
212+
ctx = context.Background()
213+
}
222214
_, withDataSrc := contextdecorator.DataSrcFromContext(ctx)
223215
if !withDataSrc {
224216
ctx = contextdecorator.DataSrcContext(ctx, "datasync")
225217
}
226218
ctx = kvs.WithRetryDefault(ctx)
227-
res, err := p.PushData(ctx, kvPairs, keyLabels)
228-
if err == nil {
229-
ctx = contextdecorator.PushDataResultContext(ctx, ResultWrapper{Results: res})
230-
}
219+
_, err = p.PushData(ctx, kvPairs, nil)
231220
e.Done(err)
232221

233222
case e := <-p.resyncChan:
@@ -274,10 +263,7 @@ func (p *Plugin) watchEvents() {
274263
ctx = kvs.WithResync(ctx, kvs.FullResync, true)
275264
ctx = kvs.WithRetryDefault(ctx)
276265

277-
res, err := p.PushData(ctx, kvPairs, nil)
278-
if err == nil {
279-
ctx = contextdecorator.PushDataResultContext(ctx, ResultWrapper{Results: res})
280-
}
266+
_, err := p.PushData(ctx, kvPairs, nil)
281267
e.Done(err)
282268

283269
case <-p.quit:
@@ -386,13 +372,3 @@ func ContainsItemID(want []*generic.Item_ID, have *generic.Item_ID) bool {
386372
}
387373
return false
388374
}
389-
390-
// TODO: This is hack to avoid import cycle between orchestrator and contextdecorator package.
391-
// Figure out a way to pass result into local client without using wrapper type that implements
392-
// a dummy interface defined inside contextdecorator package.
393-
type ResultWrapper struct {
394-
Results []Result
395-
}
396-
397-
// implement the dummy interface (see comment above ResultWrapper struct definition)
398-
func (r ResultWrapper) IsPushDataResult() {}

0 commit comments

Comments
 (0)