Skip to content

Commit 047a8a2

Browse files
authored
[#103]: hotfix(init): preserve initial order
## Description of Changes - Preserve initial order to prevent passing to the `Init` function arguments with reflect.Zero.
2 parents 4ab88e3 + 2de0ae8 commit 047a8a2

File tree

1 file changed

+24
-4
lines changed

1 file changed

+24
-4
lines changed

pkg/container/endure.go

Lines changed: 24 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -66,7 +66,8 @@ type Endure struct {
6666
stopTimeout time.Duration
6767

6868
// deps is a map with all saved deps
69-
deps map[string]interface{}
69+
deps map[string]interface{}
70+
depsOrd []string
7071
// disabled is a map with disabled deps
7172
disabled map[string]bool
7273
// initialized vertices map
@@ -121,7 +122,8 @@ func NewContainer(logger *zap.Logger, options ...Options) (*Endure, error) {
121122
output: Empty,
122123
disabled: make(map[string]bool),
123124
initialized: make(map[string]bool),
124-
deps: make(map[string]interface{}),
125+
deps: make(map[string]interface{}, 5),
126+
depsOrd: make([]string, 0, 2),
125127
}
126128

127129
// Transition map
@@ -266,6 +268,7 @@ func (e *Endure) Register(vertex interface{}) error {
266268

267269
// save all vertices on the initial stage
268270
e.deps[vertexID] = vertex
271+
e.depsOrd = append(e.depsOrd, vertexID)
269272

270273
return nil
271274
}
@@ -414,6 +417,9 @@ START:
414417
head = head.Next
415418
}
416419

420+
// we don't need startup helpers anymore
421+
e.depsOrd = nil
422+
e.deps = nil
417423
return nil
418424
}
419425

@@ -459,6 +465,8 @@ func (e *Endure) Shutdown() error {
459465
return e.shutdown(e.runList.Head, true)
460466
}
461467

468+
// I don't like this part, this should be rewritten
469+
// We should compute whole subgraph after we found disabled vertex and remove it with 1 operation.
462470
func (e *Endure) removeVertex(head *ll.DllNode) error {
463471
const op = errors.Op("endure_disable")
464472
e.logger.Debug("found disabled vertex", zap.String("id", head.Vertex.ID))
@@ -467,6 +475,12 @@ func (e *Endure) removeVertex(head *ll.DllNode) error {
467475
// disable all types which vertex provides as a root
468476
e.disabled[providesID] = true
469477
delete(e.deps, providesID)
478+
for i := 0; i < len(e.depsOrd); i++ {
479+
if e.depsOrd[i] == head.Vertex.ID {
480+
e.depsOrd = append(e.depsOrd[:i], e.depsOrd[i+1:]...)
481+
break
482+
}
483+
}
470484
}
471485

472486
e.disabled[head.Vertex.ID] = true
@@ -478,11 +492,17 @@ func (e *Endure) removeVertex(head *ll.DllNode) error {
478492
e.graph = nil
479493
e.graph = graph.NewGraph()
480494

495+
for i := 0; i < len(e.depsOrd); i++ {
496+
if e.depsOrd[i] == head.Vertex.ID {
497+
e.depsOrd = append(e.depsOrd[:i], e.depsOrd[i+1:]...)
498+
break
499+
}
500+
}
481501
delete(e.deps, head.Vertex.ID)
482502

483503
// re-register all deps, excluding disabled
484-
for k := range e.deps {
485-
err := e.reRegister(e.deps[k])
504+
for i := 0; i < len(e.depsOrd); i++ {
505+
err := e.reRegister(e.deps[e.depsOrd[i]])
486506
if err != nil {
487507
return errors.E(op, err)
488508
}

0 commit comments

Comments
 (0)