Skip to content

Commit 7c5b16e

Browse files
willbroadbeltchvck
authored andcommitted
Made add-sample-bucket rest-endpoint, and cleaned up load sample timeout logic.
1 parent 7cd62fd commit 7c5b16e

3 files changed

Lines changed: 77 additions & 19 deletions

File tree

cluster/node.go

Lines changed: 7 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -366,11 +366,6 @@ func (n *Node) ChangeBucketCompression(bucket, mode string) error {
366366
}
367367

368368
func (n *Node) CreateBucket(conf *Bucket) error {
369-
if helper.SampleBucketsCount[conf.Name] != 0 {
370-
glog.Info("Loading sample bucket %s", conf.Name)
371-
return n.LoadSample(conf.Name)
372-
}
373-
374369
body := fmt.Sprintf("bucketType=%s&name=%s&ramQuotaMB=%s&replicaNumber=%d",
375370
conf.Type, conf.Name, conf.RamQuotaMB,
376371
conf.ReplicaCount)
@@ -708,8 +703,7 @@ func (n *Node) PollSampleBucket(s string) error {
708703
Cred: n.RestLogin,
709704
}
710705

711-
info := make(chan map[string]interface{})
712-
loadTimeout := time.NewTimer(5 * time.Minute)
706+
deadline := time.Now().Add(4 * time.Minute)
713707

714708
for {
715709
resp, err := helper.RestRetryer(helper.RestRetry, params, helper.GetResponse)
@@ -722,18 +716,12 @@ func (n *Node) PollSampleBucket(s string) error {
722716
return err
723717
}
724718

725-
go func() {
726-
glog.Infof("parsed=%v", parsed)
727-
info <- parsed
728-
}()
729-
select {
730-
case status := <-info:
731-
basicStats := status["basicStats"].(map[string]interface{})
732-
if basicStats["itemCount"].(float64) == helper.SampleBucketsCount[s] {
733-
glog.Infof("Sample bucket %s is loaded", s)
734-
return nil
735-
}
736-
case <-loadTimeout.C:
719+
basicStats := parsed["basicStats"].(map[string]interface{})
720+
if basicStats["itemCount"].(float64) == helper.SampleBucketsCount[s] {
721+
glog.Infof("Sample bucket %s is loaded", s)
722+
return nil
723+
}
724+
if time.Now().After(deadline) {
737725
return errors.New("Timeout while loading sample bucket.")
738726
}
739727
}

daemon/buckets.go

Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,10 @@ type AddBucketOptions struct {
1616
Conf AddBucketJSON
1717
}
1818

19+
type AddSampleOptions struct {
20+
Conf AddSampleBucketJSON
21+
}
22+
1923
func addBucket(ctx context.Context, clusterID string, opts AddBucketOptions) error {
2024
log.Printf("Adding bucket %s to cluster %s (requested by: %s)", opts.Conf.Name, clusterID, ContextUser(ctx))
2125

@@ -49,3 +53,36 @@ func addBucket(ctx context.Context, clusterID string, opts AddBucketOptions) err
4953
RamQuotaMB: strconv.Itoa(opts.Conf.RamQuota),
5054
})
5155
}
56+
57+
func addSampleBucket(ctx context.Context, clusterID string, opts AddSampleOptions) error {
58+
log.Printf("Loading sample bucket %s to cluster %s (requested by: %s)", opts.Conf.SampleBucket, clusterID, ContextUser(ctx))
59+
60+
if helper.SampleBucketsCount[opts.Conf.SampleBucket] == 0 {
61+
return errors.New("Unknown sample bucket")
62+
}
63+
64+
c, err := getCluster(ctx, clusterID)
65+
if err != nil {
66+
return err
67+
}
68+
69+
if len(c.Nodes) == 0 {
70+
return errors.New("no nodes available")
71+
}
72+
73+
n := c.Nodes[0]
74+
ipv4 := n.IPv4Address
75+
hostname := ipv4
76+
if opts.Conf.UseHostname {
77+
hostname = n.ContainerName[1:] + helper.DomainPostfix
78+
}
79+
80+
node := &cluster.Node{
81+
HostName: hostname,
82+
Port: strconv.Itoa(helper.RestPort),
83+
SshLogin: &helper.Cred{Username: helper.SshUser, Password: helper.SshPass, Hostname: ipv4, Port: helper.SshPort},
84+
RestLogin: &helper.Cred{Username: helper.RestUser, Password: helper.RestPass, Hostname: ipv4, Port: helper.RestPort},
85+
}
86+
87+
return node.LoadSample(opts.Conf.SampleBucket)
88+
}

daemon/restserver.go

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -483,6 +483,38 @@ func HttpAddBucket(w http.ResponseWriter, r *http.Request) {
483483
w.WriteHeader(200)
484484
}
485485

486+
type AddSampleBucketJSON struct {
487+
SampleBucket string `json:"sample_bucket"`
488+
UseHostname bool `json:"use_hostname"`
489+
}
490+
491+
func HttpAddSampleBucket(w http.ResponseWriter, r *http.Request) {
492+
reqCtx, err := getHttpContext(r)
493+
if err != nil {
494+
writeJSONError(w, err)
495+
return
496+
}
497+
498+
clusterID := mux.Vars(r)["cluster_id"]
499+
500+
var reqData AddSampleBucketJSON
501+
err = readJsonRequest(r, &reqData)
502+
if err != nil {
503+
writeJSONError(w, err)
504+
return
505+
}
506+
507+
err = addSampleBucket(reqCtx, clusterID, AddSampleOptions{
508+
Conf: reqData,
509+
})
510+
if err != nil {
511+
writeJSONError(w, err)
512+
return
513+
}
514+
515+
w.WriteHeader(200)
516+
}
517+
486518
type AddCollectionJSON struct {
487519
Name string `json:"name"`
488520
ScopeName string `json:"scope_name"`
@@ -619,6 +651,7 @@ func createRESTRouter() *mux.Router {
619651
r.HandleFunc("/cluster/{cluster_id}/setup", HttpSetupCluster).Methods("POST")
620652
r.HandleFunc("/cluster/{cluster_id}", HttpDeleteCluster).Methods("DELETE")
621653
r.HandleFunc("/cluster/{cluster_id}/add-bucket", HttpAddBucket).Methods("POST")
654+
r.HandleFunc("/cluster/{cluster_id}/add-sample-bucket", HttpAddSampleBucket).Methods("POST")
622655
r.HandleFunc("/cluster/{cluster_id}/add-collection", HttpAddCollection).Methods("POST")
623656
r.HandleFunc("/cluster/{cluster_id}/setup-cert-auth", HttpSetupClientCertAuth).Methods("POST")
624657
r.HandleFunc("/images", HttpBuildImage).Methods("POST")

0 commit comments

Comments
 (0)