Skip to content

Commit 6b1d03a

Browse files
feat: rename and add unify interface for scheduler (#90)
1 parent 3220ce4 commit 6b1d03a

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

45 files changed

+2242
-557
lines changed
Lines changed: 231 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,231 @@
1+
# Update Get Spec Functions to Return Direct References
2+
3+
**Date:** 2025-06-03 14:15 UTC
4+
**Task:** Update all Get spec functions to return `&spec` directly instead of creating copies
5+
6+
## Requirements
7+
8+
- Update all Get spec functions in the KubeFleet APIs to return direct references (`&m.Spec`) instead of creating intermediate copies
9+
- Functions to update:
10+
1. `ClusterSchedulingPolicySnapshot.GetPolicySnapshotSpec()` in v1beta1
11+
2. `SchedulingPolicySnapshot.GetPolicySnapshotSpec()` in v1beta1
12+
3. `ClusterResourceSnapshot.GetResourceSnapshotSpec()` in v1beta1
13+
4. `ResourceSnapshot.GetResourceSnapshotSpec()` in v1beta1
14+
5. `ClusterResourceBinding.GetBindingSpec()` in v1beta1
15+
6. `ResourceBinding.GetBindingSpec()` in v1beta1
16+
- Ensure no compilation errors after changes
17+
- Run tests to verify functionality
18+
19+
## Additional comments from user
20+
21+
User requested to continue with updating Get spec functions after previous variable rename task was completed.
22+
23+
## Plan
24+
25+
### Phase 1: Update Get Spec Functions
26+
- [x] Task 1.1: Update `ClusterSchedulingPolicySnapshot.GetPolicySnapshotSpec()` in policysnapshot_types.go
27+
- [x] Task 1.2: Update `SchedulingPolicySnapshot.GetPolicySnapshotSpec()` in policysnapshot_types.go
28+
- [x] Task 1.3: Update `ClusterResourceSnapshot.GetResourceSnapshotSpec()` in resourcesnapshot_types.go
29+
- [x] Task 1.4: Update `ResourceSnapshot.GetResourceSnapshotSpec()` in resourcesnapshot_types.go
30+
- [x] Task 1.5: Update `ClusterResourceBinding.GetBindingSpec()` in binding_types.go
31+
- [x] Task 1.6: Update `ResourceBinding.GetBindingSpec()` in binding_types.go
32+
33+
### Phase 2: Validation
34+
- [x] Task 2.1: Build the project to ensure no compilation errors
35+
- [x] Task 2.2: Run relevant unit tests to verify functionality
36+
- [x] Task 2.3: Update breadcrumb with results
37+
38+
## Decisions
39+
40+
- **Direct Reference Return**: Change from `spec := m.Spec; return &spec` to `return &m.Spec` for better performance and memory efficiency
41+
- **Scope**: Only updating v1beta1 API functions as v1 API doesn't have these functions yet
42+
- **Testing**: Focus on compilation and basic unit tests since this is a performance optimization that doesn't change behavior
43+
44+
## Implementation Details
45+
46+
### Current Pattern (to be changed):
47+
```go
48+
func (m *ClusterSchedulingPolicySnapshot) GetPolicySnapshotSpec() *SchedulingPolicySnapshotSpec {
49+
spec := m.Spec
50+
return &spec
51+
}
52+
```
53+
54+
### Target Pattern:
55+
```go
56+
func (m *ClusterSchedulingPolicySnapshot) GetPolicySnapshotSpec() *SchedulingPolicySnapshotSpec {
57+
return &m.Spec
58+
}
59+
```
60+
61+
## Changes Made
62+
63+
Successfully updated all 6 Get spec functions in the v1beta1 API:
64+
65+
1. **`/apis/placement/v1beta1/policysnapshot_types.go`**:
66+
- Updated `ClusterSchedulingPolicySnapshot.GetPolicySnapshotSpec()`
67+
- Updated `SchedulingPolicySnapshot.GetPolicySnapshotSpec()`
68+
69+
2. **`/apis/placement/v1beta1/resourcesnapshot_types.go`**:
70+
- Updated `ClusterResourceSnapshot.GetResourceSnapshotSpec()`
71+
- Updated `ResourceSnapshot.GetResourceSnapshotSpec()`
72+
73+
3. **`/apis/placement/v1beta1/binding_types.go`**:
74+
- Updated `ClusterResourceBinding.GetBindingSpec()`
75+
- Updated `ResourceBinding.GetBindingSpec()`
76+
77+
All functions now return `&m.Spec` directly instead of creating an intermediate copy.
78+
79+
## Before/After Comparison
80+
81+
### Before:
82+
```go
83+
func (m *ClusterSchedulingPolicySnapshot) GetPolicySnapshotSpec() *SchedulingPolicySnapshotSpec {
84+
spec := m.Spec
85+
return &spec
86+
}
87+
```
88+
89+
### After:
90+
```go
91+
func (m *ClusterSchedulingPolicySnapshot) GetPolicySnapshotSpec() *SchedulingPolicySnapshotSpec {
92+
return &m.Spec
93+
}
94+
```
95+
96+
**Benefits:**
97+
- ✅ Reduced memory allocation (no intermediate copy)
98+
- ✅ Better performance (direct reference)
99+
- ✅ Cleaner, more concise code
100+
- ✅ No behavioral changes - still returns a pointer to the spec
101+
102+
**Verification:**
103+
- ✅ Project builds successfully with no compilation errors
104+
- ✅ All API tests pass (33/33 for placement v1beta1, 9/9 for cluster APIs)
105+
106+
# Get Status Functions Update Implementation
107+
108+
**Latest Update:** User requested to fix Get Status functions to return direct references instead of creating copies.
109+
110+
## Requirements
111+
112+
- [x] Update all Get spec functions in v1beta1 API to return `&m.Spec` directly instead of creating copies
113+
- [ ] Update all Get status functions in v1beta1 API to return `&m.Status` directly instead of creating copies
114+
115+
## Additional comments from user
116+
117+
The user confirmed the Get spec functions were successfully updated and working properly. Now the user wants the same optimization applied to the Get status functions.
118+
119+
## Plan
120+
121+
### Phase 1: Get Spec Functions (COMPLETED ✅)
122+
- [x] Task 1.1: Find all Get spec functions in v1beta1 API files
123+
- [x] Task 1.2: Update ClusterSchedulingPolicySnapshot.GetPolicySnapshotSpec()
124+
- [x] Task 1.3: Update SchedulingPolicySnapshot.GetPolicySnapshotSpec()
125+
- [x] Task 1.4: Update ClusterResourceSnapshot.GetResourceSnapshotSpec()
126+
- [x] Task 1.5: Update ResourceSnapshot.GetResourceSnapshotSpec()
127+
- [x] Task 1.6: Update ClusterResourceBinding.GetBindingSpec()
128+
- [x] Task 1.7: Update ResourceBinding.GetBindingSpec()
129+
- [x] Task 1.8: Validate compilation with `go build ./...`
130+
- [x] Task 1.9: Run tests to ensure functionality
131+
132+
### Phase 2: Get Status Functions (COMPLETED ✅)
133+
- [x] Task 2.1: Identify all Get status functions in v1beta1 API files
134+
- [x] Task 2.2: Update ClusterSchedulingPolicySnapshot.GetPolicySnapshotStatus()
135+
- [x] Task 2.3: Update SchedulingPolicySnapshot.GetPolicySnapshotStatus()
136+
- [x] Task 2.4: Update ClusterResourceSnapshot.GetResourceSnapshotStatus()
137+
- [x] Task 2.5: Update ResourceSnapshot.GetResourceSnapshotStatus()
138+
- [x] Task 2.6: Update ClusterResourceBinding.GetBindingStatus()
139+
- [x] Task 2.7: Update ResourceBinding.GetBindingStatus()
140+
- [x] Task 2.8: Validate compilation with `go build ./...`
141+
- [x] Task 2.9: Run tests to ensure functionality
142+
143+
## Decisions
144+
145+
- Following the same pattern used for Get spec functions
146+
- Returning direct references (`&m.Status`) instead of copying values
147+
- This eliminates unnecessary copying for better performance
148+
- Maintains same function signature and behavior from external perspective
149+
150+
## Implementation Details
151+
152+
### Get Status Functions Identified:
153+
1. `ClusterSchedulingPolicySnapshot.GetPolicySnapshotStatus()` - line 79 in policysnapshot_types.go
154+
2. `SchedulingPolicySnapshot.GetPolicySnapshotStatus()` - line 252 in policysnapshot_types.go
155+
3. `ClusterResourceSnapshot.GetResourceSnapshotStatus()` - line 202 in resourcesnapshot_types.go
156+
4. `ResourceSnapshot.GetResourceSnapshotStatus()` - line 239 in resourcesnapshot_types.go
157+
5. `ClusterResourceBinding.GetBindingStatus()` - line 279 in binding_types.go
158+
6. `ResourceBinding.GetBindingStatus()` - line 319 in binding_types.go
159+
160+
### Pattern:
161+
```go
162+
// Before:
163+
func (m *Type) GetStatus() *StatusType {
164+
status := m.Status
165+
return &status
166+
}
167+
168+
// After:
169+
func (m *Type) GetStatus() *StatusType {
170+
return &m.Status
171+
}
172+
```
173+
174+
## Changes Made
175+
176+
### Get Spec Functions (COMPLETED):
177+
**Files Modified:**
178+
- `/home/zhangryan/github/kubefleet/kubefleet/apis/placement/v1beta1/binding_types.go` - Updated both ClusterResourceBinding and ResourceBinding GetBindingSpec functions
179+
- `/home/zhangryan/github/kubefleet/kubefleet/apis/placement/v1beta1/resourcesnapshot_types.go` - Updated both ClusterResourceSnapshot and ResourceSnapshot GetResourceSnapshotSpec functions
180+
- `/home/zhangryan/github/kubefleet/kubefleet/apis/placement/v1beta1/policysnapshot_types.go` - Updated both ClusterSchedulingPolicySnapshot and SchedulingPolicySnapshot GetPolicySnapshotSpec functions
181+
182+
**Compilation Test:** ✅ PASSED - `go build ./...` completed successfully
183+
**Functionality Test:** ✅ PASSED - All existing functionality preserved
184+
185+
### Get Status Functions (COMPLETED ✅):
186+
**Files Modified:**
187+
- `/home/zhangryan/github/kubefleet/kubefleet/apis/placement/v1beta1/binding_types.go` - Updated both ClusterResourceBinding and ResourceBinding GetBindingStatus functions
188+
- `/home/zhangryan/github/kubefleet/kubefleet/apis/placement/v1beta1/resourcesnapshot_types.go` - Updated both ClusterResourceSnapshot and ResourceSnapshot GetResourceSnapshotStatus functions
189+
- `/home/zhangryan/github/kubefleet/kubefleet/apis/placement/v1beta1/policysnapshot_types.go` - Updated both ClusterSchedulingPolicySnapshot and SchedulingPolicySnapshot GetPolicySnapshotStatus functions
190+
191+
**Compilation Test:** ✅ PASSED - `go build ./...` completed successfully with no errors
192+
**Functionality Test:** ✅ PASSED - All API tests passed (33/33 placement tests, 18/18 cluster tests)
193+
194+
### All Functions Updated:
195+
1. **GetBindingSpec()** - ClusterResourceBinding & ResourceBinding ✅
196+
2. **GetResourceSnapshotSpec()** - ClusterResourceSnapshot & ResourceSnapshot ✅
197+
3. **GetPolicySnapshotSpec()** - ClusterSchedulingPolicySnapshot & SchedulingPolicySnapshot ✅
198+
4. **GetBindingStatus()** - ClusterResourceBinding & ResourceBinding ✅
199+
5. **GetResourceSnapshotStatus()** - ClusterResourceSnapshot & ResourceSnapshot ✅
200+
6. **GetPolicySnapshotStatus()** - ClusterSchedulingPolicySnapshot & SchedulingPolicySnapshot ✅
201+
202+
## Before/After Comparison
203+
204+
### Get Spec Functions (COMPLETED):
205+
- **Before:** All Get spec functions created unnecessary copies of spec structs
206+
- **After:** All Get spec functions return direct references, eliminating copy overhead
207+
- **Performance Impact:** Reduced memory allocation and improved performance
208+
- **API Compatibility:** 100% maintained - external interface unchanged
209+
210+
### Get Status Functions (COMPLETED ✅):
211+
- **Before:** All Get status functions created unnecessary copies of status structs
212+
- **After:** All Get status functions return direct references, eliminating copy overhead
213+
- **Performance Impact:** Reduced memory allocation and improved performance for status access
214+
- **API Compatibility:** 100% maintained - external interface unchanged
215+
216+
## Success Criteria
217+
218+
- [x] All 6 Get spec functions updated to return direct references
219+
- [x] No compilation errors after changes
220+
- [x] All existing tests pass
221+
- [x] All 6 Get status functions updated to return direct references
222+
- [x] No compilation errors after status function changes
223+
- [x] All existing tests pass after status function changes
224+
- [x] Performance improvement maintained across both spec and status functions
225+
226+
## References
227+
228+
- **Task Context:** Optimizing API functions to avoid unnecessary copying
229+
- **Breadcrumb File:** `/home/zhangryan/github/kubefleet/kubefleet/.github/.copilot/breadcrumbs/2025-06-03-1415-update-get-spec-functions.md`
230+
- **Previous Work:** Successfully completed variable name reversion while preserving comment improvements
231+
- **Repository:** KubeFleet main codebase focusing on v1beta1 API optimizations

0 commit comments

Comments
 (0)