@@ -78,11 +78,6 @@ func Upload(params *UploadParams) (*UploadResp, error) {
78
78
return nil , fmt .Errorf ("%s: %w" , "cannot generate .ota file" , err )
79
79
}
80
80
81
- file , err := os .Open (otaFile )
82
- if err != nil {
83
- return nil , fmt .Errorf ("%s: %w" , "cannot open ota file" , err )
84
- }
85
-
86
81
conf , err := config .Retrieve ()
87
82
if err != nil {
88
83
return nil , err
@@ -110,7 +105,7 @@ func Upload(params *UploadParams) (*UploadResp, error) {
110
105
expiration = otaDeferredExpirationMins
111
106
}
112
107
113
- good , fail , ers := run (iotClient , valid , file , expiration )
108
+ good , fail , ers := run (iotClient , valid , otaFile , expiration )
114
109
if err != nil {
115
110
return nil , err
116
111
}
@@ -167,24 +162,34 @@ func validateDevices(iotClient iot.Client, ids []string, fqbn string) (valid, in
167
162
return valid , invalid , details , nil
168
163
}
169
164
170
- func run (iotClient iot.Client , ids []string , file * os.File , expiration int ) (updated , failed , errors []string ) {
171
- targets := make (chan string , len (ids ))
165
+ func run (iotClient iot.Client , ids []string , otaFile string , expiration int ) (updated , failed , errors []string ) {
166
+ type job struct {
167
+ id string
168
+ file * os.File
169
+ }
170
+ jobs := make (chan job , len (ids ))
171
+
172
172
type result struct {
173
173
id string
174
174
err error
175
175
}
176
176
results := make (chan result , len (ids ))
177
177
178
178
for _ , id := range ids {
179
- targets <- id
179
+ file , err := os .Open (otaFile )
180
+ if err != nil {
181
+ failed = append (failed , id )
182
+ errors = append (errors , fmt .Sprintf ("%s: cannot open ota file" , id ))
183
+ }
184
+ jobs <- job {id : id , file : file }
180
185
}
181
- close (targets )
186
+ close (jobs )
182
187
183
188
for i := 0 ; i < numConcurrentUploads ; i ++ {
184
189
go func () {
185
- for id := range targets {
186
- err := iotClient .DeviceOTA (id , file , expiration )
187
- results <- result {id : id , err : err }
190
+ for job := range jobs {
191
+ err := iotClient .DeviceOTA (job . id , job . file , expiration )
192
+ results <- result {id : job . id , err : err }
188
193
}
189
194
}()
190
195
}
0 commit comments