Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(229)

Side by Side Diff: go/src/infra/tools/cipd/remote.go

Issue 1145423002: cipd: Client can resolve tags to instance IDs. (Closed) Base URL: https://chromium.googlesource.com/infra/infra.git@master
Patch Set: cipd-resolve-version Created 5 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 // Copyright 2014 The Chromium Authors. All rights reserved. 1 // Copyright 2014 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 package cipd 5 package cipd
6 6
7 import ( 7 import (
8 "bytes" 8 "bytes"
9 "encoding/json" 9 "encoding/json"
10 "errors" 10 "errors"
(...skipping 164 matching lines...) Expand 10 before | Expand all | Expand 10 after
175 case "PUBLISHED": 175 case "PUBLISHED":
176 finished = true 176 finished = true
177 case "ERROR": 177 case "ERROR":
178 err = errors.New(reply.ErrorMessage) 178 err = errors.New(reply.ErrorMessage)
179 default: 179 default:
180 err = fmt.Errorf("Unexpected upload session status: %s", reply.S tatus) 180 err = fmt.Errorf("Unexpected upload session status: %s", reply.S tatus)
181 } 181 }
182 return 182 return
183 } 183 }
184 184
185 func (r *remoteImpl) resolveVersion(packageName, version string) (pin common.Pin , err error) {
186 if err = common.ValidatePackageName(packageName); err != nil {
187 return
188 }
189 if err = common.ValidateInstanceVersion(version); err != nil {
190 return
191 }
192 var reply struct {
193 Status string `json:"status"`
194 ErrorMessage string `json:"error_message"`
195 InstanceID string `json:"instance_id"`
nodir 2015/05/21 17:07:48 I wish I warned you earlier, but from my small exp
Vadim Sh. 2015/05/21 18:00:37 1) CIPD is not latency critical, thus I do not opt
196 }
197 params := url.Values{}
198 params.Add("package_name", packageName)
199 params.Add("version", version)
200 err = r.makeRequest("repo/v1/instance/resolve?"+params.Encode(), "GET", nil, &reply)
201 if err != nil {
202 return
203 }
204 switch reply.Status {
205 case "SUCCESS":
206 if common.ValidateInstanceID(reply.InstanceID) != nil {
207 err = fmt.Errorf("Backend returned invalid instance ID: %s", reply.InstanceID)
208 } else {
209 pin = common.Pin{PackageName: packageName, InstanceID: r eply.InstanceID}
210 }
211 case "PACKAGE_NOT_FOUND":
212 err = fmt.Errorf("Package '%s' is not registered", packageName)
213 case "INSTANCE_NOT_FOUND":
214 err = fmt.Errorf("Package '%s' doesn't have instance with versio n '%s'", packageName, version)
215 case "AMBIGUOUS_VERSION":
216 err = fmt.Errorf("More than one instance of package '%s' match v ersion '%s'", packageName, version)
nodir 2015/05/21 17:07:48 What one is supposed to do in this case? Neither a
Vadim Sh. 2015/05/21 18:00:37 The answer I was planning for is: 1) Add ACLs to t
nodir 2015/05/21 18:15:06 Acknowledged.
217 case "ERROR":
218 err = errors.New(reply.ErrorMessage)
219 default:
220 err = fmt.Errorf("Unexpected backend response: %s", reply.Status )
221 }
222 return
223 }
224
185 func (r *remoteImpl) registerInstance(pin common.Pin) (*registerInstanceResponse , error) { 225 func (r *remoteImpl) registerInstance(pin common.Pin) (*registerInstanceResponse , error) {
186 endpoint, err := instanceEndpoint(pin) 226 endpoint, err := instanceEndpoint(pin)
187 if err != nil { 227 if err != nil {
188 return nil, err 228 return nil, err
189 } 229 }
190 var reply struct { 230 var reply struct {
191 Status string `json:"status"` 231 Status string `json:"status"`
192 Instance packageInstanceMsg `json:"instance"` 232 Instance packageInstanceMsg `json:"instance"`
193 UploadSessionID string `json:"upload_session_id"` 233 UploadSessionID string `json:"upload_session_id"`
194 UploadURL string `json:"upload_url"` 234 UploadURL string `json:"upload_url"`
(...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after
242 ts, err := convertTimestamp(reply.Instance.RegisteredTs) 282 ts, err := convertTimestamp(reply.Instance.RegisteredTs)
243 if err != nil { 283 if err != nil {
244 return nil, err 284 return nil, err
245 } 285 }
246 return &fetchInstanceResponse{ 286 return &fetchInstanceResponse{
247 fetchURL: reply.FetchURL, 287 fetchURL: reply.FetchURL,
248 registeredBy: reply.Instance.RegisteredBy, 288 registeredBy: reply.Instance.RegisteredBy,
249 registeredTs: ts, 289 registeredTs: ts,
250 }, nil 290 }, nil
251 case "PACKAGE_NOT_FOUND": 291 case "PACKAGE_NOT_FOUND":
252 » » return nil, fmt.Errorf("Package '%s' is not registered or you do not have permission to fetch it", pin.PackageName) 292 » » return nil, fmt.Errorf("Package '%s' is not registered", pin.Pac kageName)
253 case "INSTANCE_NOT_FOUND": 293 case "INSTANCE_NOT_FOUND":
254 return nil, fmt.Errorf("Package '%s' doesn't have instance '%s'" , pin.PackageName, pin.InstanceID) 294 return nil, fmt.Errorf("Package '%s' doesn't have instance '%s'" , pin.PackageName, pin.InstanceID)
255 case "ERROR": 295 case "ERROR":
256 return nil, errors.New(reply.ErrorMessage) 296 return nil, errors.New(reply.ErrorMessage)
257 } 297 }
258 return nil, fmt.Errorf("Unexpected reply status: %s", reply.Status) 298 return nil, fmt.Errorf("Unexpected reply status: %s", reply.Status)
259 } 299 }
260 300
261 func (r *remoteImpl) fetchACL(packagePath string) ([]PackageACL, error) { 301 func (r *remoteImpl) fetchACL(packagePath string) ([]PackageACL, error) {
262 endpoint, err := aclEndpoint(packagePath) 302 endpoint, err := aclEndpoint(packagePath)
(...skipping 162 matching lines...) Expand 10 before | Expand all | Expand 10 after
425 465
426 // convertTimestamp coverts string with int64 timestamp in microseconds since 466 // convertTimestamp coverts string with int64 timestamp in microseconds since
427 // to time.Time 467 // to time.Time
428 func convertTimestamp(ts string) (time.Time, error) { 468 func convertTimestamp(ts string) (time.Time, error) {
429 i, err := strconv.ParseInt(ts, 10, 64) 469 i, err := strconv.ParseInt(ts, 10, 64)
430 if err != nil { 470 if err != nil {
431 return time.Time{}, fmt.Errorf("Unexpected timestamp value '%s' in the server response", ts) 471 return time.Time{}, fmt.Errorf("Unexpected timestamp value '%s' in the server response", ts)
432 } 472 }
433 return time.Unix(0, i*1000), nil 473 return time.Unix(0, i*1000), nil
434 } 474 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698