projects
/
arvados.git
/ blobdiff
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
7491: Manual merge with 7491-keepclient-bugs
[arvados.git]
/
sdk
/
go
/
keepclient
/
support.go
diff --git
a/sdk/go/keepclient/support.go
b/sdk/go/keepclient/support.go
index df02d221be29f6b7b7c0e35a41766c0ceb41a07e..51e3e082b683e01ca153d352e54b8e53db9a9893 100644
(file)
--- a/
sdk/go/keepclient/support.go
+++ b/
sdk/go/keepclient/support.go
@@
-85,12
+85,8
@@
func (this *KeepClient) DiscoverKeepServers() error {
// Get keep services from api server
err := this.Arvados.Call("GET", "keep_services", "", "accessible", nil, &m)
// Get keep services from api server
err := this.Arvados.Call("GET", "keep_services", "", "accessible", nil, &m)
-
- // If there is error getting keep services, get list of keep disks
if err != nil {
if err != nil {
- if err := this.Arvados.List("keep_disks", nil, &m); err != nil {
- return err
- }
+ return err
}
listed := make(map[string]bool)
}
listed := make(map[string]bool)
@@
-98,7
+94,8
@@
func (this *KeepClient) DiscoverKeepServers() error {
gatewayRoots := make(map[string]string)
writableLocalRoots := make(map[string]string)
gatewayRoots := make(map[string]string)
writableLocalRoots := make(map[string]string)
- this.replicasPerService = 1 // set to 1 until writable non-disk services are found
+ // replicasPerService is 1 for disks; unknown or unlimited otherwise
+ this.replicasPerService = 1
this.Using_proxy = false
for _, service := range m.Items {
this.Using_proxy = false
for _, service := range m.Items {
@@
-231,7
+228,17
@@
func (this KeepClient) putReplicas(
// Used to communicate status from the upload goroutines
upload_status := make(chan uploadStatus)
// Used to communicate status from the upload goroutines
upload_status := make(chan uploadStatus)
- defer close(upload_status)
+ defer func() {
+ // Wait for any abandoned uploads (e.g., we started
+ // two uploads and the first replied with replicas=2)
+ // to finish before closing the status channel.
+ go func() {
+ for active > 0 {
+ <-upload_status
+ }
+ close(upload_status)
+ }()
+ }()
// Desired number of replicas
remaining_replicas := this.Want_replicas
// Desired number of replicas
remaining_replicas := this.Want_replicas