4
4
"context"
5
5
6
6
"github.com/pkg/errors"
7
+ "github.com/projecteru2/core/engine"
7
8
enginetypes "github.com/projecteru2/core/engine/types"
8
9
"github.com/projecteru2/core/resources"
9
10
resourcetypes "github.com/projecteru2/core/resources/types"
@@ -46,38 +47,60 @@ func (c *Calcium) doReallocOnNode(ctx context.Context, nodename string, containe
46
47
return errors .WithStack (types .ErrInsufficientRes )
47
48
}
48
49
50
+ originalContainer := * container
51
+ resourceMeta := & types.ResourceMeta {}
49
52
return utils .Txn (
50
53
ctx ,
51
54
52
55
// if update workload resources
53
56
func (ctx context.Context ) (err error ) {
54
- return c .doReallocContainersOnInstance (ctx , node , plans , container )
57
+ resourceMeta := & types.ResourceMeta {}
58
+ for _ , plan := range plans {
59
+ if resourceMeta , err = plan .Dispense (resourcetypes.DispenseOptions {
60
+ Node : node ,
61
+ ExistingInstance : container ,
62
+ }, resourceMeta ); err != nil {
63
+ return
64
+ }
65
+ }
66
+ return errors .WithStack (c .doReallocContainersOnInstance (ctx , node .Engine , resourceMeta , container ))
55
67
},
56
68
// then commit changes
57
69
func (ctx context.Context ) error {
58
70
for _ , plan := range plans {
59
71
plan .ApplyChangesOnNode (node , 1 )
60
72
}
61
- return c .store .UpdateNodes (ctx , node )
73
+ return errors . WithStack ( c .store .UpdateNodes (ctx , node ) )
62
74
},
63
75
// no need rollback
64
- nil ,
76
+ func (ctx context.Context , failureByCond bool ) (err error ) {
77
+ if failureByCond {
78
+ return
79
+ }
80
+ r := & types.ResourceMeta {
81
+ CPUQuotaRequest : originalContainer .CPUQuotaRequest ,
82
+ CPUQuotaLimit : originalContainer .CPUQuotaLimit ,
83
+ CPU : originalContainer .CPU ,
84
+ NUMANode : originalContainer .NUMANode ,
85
+ MemoryRequest : originalContainer .MemoryRequest ,
86
+ MemoryLimit : originalContainer .MemoryLimit ,
87
+ VolumeRequest : originalContainer .VolumeRequest ,
88
+ VolumeLimit : originalContainer .VolumeLimit ,
89
+ VolumePlanRequest : originalContainer .VolumePlanRequest ,
90
+ VolumePlanLimit : originalContainer .VolumePlanLimit ,
91
+ VolumeChanged : resourceMeta .VolumeChanged ,
92
+ StorageRequest : originalContainer .StorageRequest ,
93
+ StorageLimit : originalContainer .StorageLimit ,
94
+ }
95
+ return errors .WithStack (c .doReallocContainersOnInstance (ctx , node .Engine , r , container ))
96
+ },
65
97
66
98
c .config .GlobalTimeout ,
67
99
)
68
100
})
69
101
}
70
102
71
- func (c * Calcium ) doReallocContainersOnInstance (ctx context.Context , node * types.Node , plans []resourcetypes.ResourcePlans , container * types.Container ) (err error ) {
72
- r := & types.ResourceMeta {}
73
- for _ , plan := range plans {
74
- if r , err = plan .Dispense (resourcetypes.DispenseOptions {
75
- Node : node ,
76
- ExistingInstance : container ,
77
- }, r ); err != nil {
78
- return
79
- }
80
- }
103
+ func (c * Calcium ) doReallocContainersOnInstance (ctx context.Context , engine engine.API , resourceMeta * types.ResourceMeta , container * types.Container ) (err error ) {
81
104
82
105
originalContainer := * container
83
106
return utils .Txn (
@@ -86,31 +109,32 @@ func (c *Calcium) doReallocContainersOnInstance(ctx context.Context, node *types
86
109
// if: update container resources
87
110
func (ctx context.Context ) error {
88
111
r := & enginetypes.VirtualizationResource {
89
- CPU : r .CPU ,
90
- Quota : r .CPUQuotaLimit ,
91
- NUMANode : r .NUMANode ,
92
- Memory : r .MemoryLimit ,
93
- Volumes : r .VolumeLimit .ToStringSlice (false , false ),
94
- VolumePlan : r .VolumePlanLimit .ToLiteral (),
95
- VolumeChanged : r .VolumeChanged ,
96
- Storage : r .StorageLimit ,
112
+ CPU : resourceMeta .CPU ,
113
+ Quota : resourceMeta .CPUQuotaLimit ,
114
+ NUMANode : resourceMeta .NUMANode ,
115
+ Memory : resourceMeta .MemoryLimit ,
116
+ Volumes : resourceMeta .VolumeLimit .ToStringSlice (false , false ),
117
+ VolumePlan : resourceMeta .VolumePlanLimit .ToLiteral (),
118
+ VolumeChanged : resourceMeta .VolumeChanged ,
119
+ Storage : resourceMeta .StorageLimit ,
97
120
}
98
- return errors .WithStack (node . Engine .VirtualizationUpdateResource (ctx , container .ID , r ))
121
+ return errors .WithStack (engine .VirtualizationUpdateResource (ctx , container .ID , r ))
99
122
},
100
123
101
124
// then: update container meta
102
125
func (ctx context.Context ) error {
103
- container .CPUQuotaRequest = r .CPUQuotaRequest
104
- container .CPUQuotaLimit = r .CPUQuotaLimit
105
- container .CPU = r .CPU
106
- container .MemoryRequest = r .MemoryRequest
107
- container .MemoryLimit = r .MemoryLimit
108
- container .VolumeRequest = r .VolumeRequest
109
- container .VolumePlanRequest = r .VolumePlanRequest
110
- container .VolumeLimit = r .VolumeLimit
111
- container .VolumePlanLimit = r .VolumePlanLimit
112
- container .StorageRequest = r .StorageRequest
113
- container .StorageLimit = r .StorageLimit
126
+ container .CPUQuotaRequest = resourceMeta .CPUQuotaRequest
127
+ container .CPUQuotaLimit = resourceMeta .CPUQuotaLimit
128
+ container .CPU = resourceMeta .CPU
129
+ container .NUMANode = resourceMeta .NUMANode
130
+ container .MemoryRequest = resourceMeta .MemoryRequest
131
+ container .MemoryLimit = resourceMeta .MemoryLimit
132
+ container .VolumeRequest = resourceMeta .VolumeRequest
133
+ container .VolumePlanRequest = resourceMeta .VolumePlanRequest
134
+ container .VolumeLimit = resourceMeta .VolumeLimit
135
+ container .VolumePlanLimit = resourceMeta .VolumePlanLimit
136
+ container .StorageRequest = resourceMeta .StorageRequest
137
+ container .StorageLimit = resourceMeta .StorageLimit
114
138
return errors .WithStack (c .store .UpdateContainer (ctx , container ))
115
139
},
116
140
@@ -126,10 +150,10 @@ func (c *Calcium) doReallocContainersOnInstance(ctx context.Context, node *types
126
150
Memory : originalContainer .MemoryLimit ,
127
151
Volumes : originalContainer .VolumeLimit .ToStringSlice (false , false ),
128
152
VolumePlan : originalContainer .VolumePlanLimit .ToLiteral (),
129
- VolumeChanged : r .VolumeChanged ,
153
+ VolumeChanged : resourceMeta .VolumeChanged ,
130
154
Storage : originalContainer .StorageLimit ,
131
155
}
132
- return errors .WithStack (node . Engine .VirtualizationUpdateResource (ctx , container .ID , r ))
156
+ return errors .WithStack (engine .VirtualizationUpdateResource (ctx , container .ID , r ))
133
157
},
134
158
135
159
c .config .GlobalTimeout ,
0 commit comments