@@ -151,6 +151,9 @@ func (self *HttpServer) Serve(listener net.Listener) {
151151 self .registerEndpoint (p , "post" , "/cluster/shards" , self .createShard )
152152 self .registerEndpoint (p , "get" , "/cluster/shards" , self .getShards )
153153 self .registerEndpoint (p , "del" , "/cluster/shards/:id" , self .dropShard )
154+ self .registerEndpoint (p , "get" , "/cluster/shard_spaces" , self .getShardSpaces )
155+ self .registerEndpoint (p , "post" , "/cluster/shard_spaces" , self .createShardSpace )
156+ self .registerEndpoint (p , "del" , "/cluster/shard_spaces/:db/:name" , self .dropShardSpace )
154157
155158 // return whether the cluster is in sync or not
156159 self .registerEndpoint (p , "get" , "/sync" , self .isInSync )
@@ -1018,7 +1021,8 @@ type newShardInfo struct {
10181021 StartTime int64 `json:"startTime"`
10191022 EndTime int64 `json:"endTime"`
10201023 Shards []newShardServerIds `json:"shards"`
1021- LongTerm bool `json:"longTerm"`
1024+ SpaceName string `json:"spaceName"`
1025+ Database string `json:"database"`
10221026}
10231027
10241028type newShardServerIds struct {
@@ -1038,16 +1042,13 @@ func (self *HttpServer) createShard(w libhttp.ResponseWriter, r *libhttp.Request
10381042 }
10391043 shards := make ([]* cluster.NewShardData , 0 )
10401044
1041- shardType := cluster .SHORT_TERM
1042- if newShards .LongTerm {
1043- shardType = cluster .LONG_TERM
1044- }
10451045 for _ , s := range newShards .Shards {
10461046 newShardData := & cluster.NewShardData {
10471047 StartTime : time .Unix (newShards .StartTime , 0 ),
10481048 EndTime : time .Unix (newShards .EndTime , 0 ),
10491049 ServerIds : s .ServerIds ,
1050- Type : shardType ,
1050+ SpaceName : newShards .SpaceName ,
1051+ Database : newShards .Database ,
10511052 }
10521053 shards = append (shards , newShardData )
10531054 }
@@ -1061,10 +1062,18 @@ func (self *HttpServer) createShard(w libhttp.ResponseWriter, r *libhttp.Request
10611062
10621063func (self * HttpServer ) getShards (w libhttp.ResponseWriter , r * libhttp.Request ) {
10631064 self .tryAsClusterAdmin (w , r , func (u User ) (int , interface {}) {
1064- result := make (map [string ]interface {})
1065- result ["shortTerm" ] = self .convertShardsToMap (self .clusterConfig .GetShortTermShards ())
1066- result ["longTerm" ] = self .convertShardsToMap (self .clusterConfig .GetLongTermShards ())
1067- return libhttp .StatusOK , result
1065+ shards := self .clusterConfig .GetShards ()
1066+ shardMaps := make ([]map [string ]interface {}, 0 , len (shards ))
1067+ for _ , s := range shards {
1068+ shardMaps = append (shardMaps , map [string ]interface {}{
1069+ "id" : s .Id (),
1070+ "endTime" : s .EndTime ().Unix (),
1071+ "startTime" : s .StartTime ().Unix (),
1072+ "serverIds" : s .ServerIds (),
1073+ "spaceName" : s .SpaceName ,
1074+ "database" : s .Database })
1075+ }
1076+ return libhttp .StatusOK , shardMaps
10681077 })
10691078}
10701079
@@ -1123,3 +1132,43 @@ func (self *HttpServer) convertShardsToMap(shards []*cluster.ShardData) []interf
11231132 }
11241133 return result
11251134}
1135+
1136+ func (self * HttpServer ) getShardSpaces (w libhttp.ResponseWriter , r * libhttp.Request ) {
1137+ self .tryAsClusterAdmin (w , r , func (u User ) (int , interface {}) {
1138+ return libhttp .StatusOK , self .clusterConfig .GetShardSpaces ()
1139+ })
1140+ }
1141+
1142+ func (self * HttpServer ) createShardSpace (w libhttp.ResponseWriter , r * libhttp.Request ) {
1143+ self .tryAsClusterAdmin (w , r , func (u User ) (int , interface {}) {
1144+ space := & cluster.ShardSpace {}
1145+ body , err := ioutil .ReadAll (r .Body )
1146+ if err != nil {
1147+ return libhttp .StatusInternalServerError , err .Error ()
1148+ }
1149+ err = json .Unmarshal (body , space )
1150+ if err != nil {
1151+ return libhttp .StatusInternalServerError , err .Error ()
1152+ }
1153+ err = space .Validate (self .clusterConfig )
1154+ if err != nil {
1155+ return libhttp .StatusBadRequest , err .Error ()
1156+ }
1157+ err = self .raftServer .CreateShardSpace (space )
1158+ if err != nil {
1159+ return libhttp .StatusInternalServerError , err .Error ()
1160+ }
1161+ return libhttp .StatusOK , nil
1162+ })
1163+ }
1164+
1165+ func (self * HttpServer ) dropShardSpace (w libhttp.ResponseWriter , r * libhttp.Request ) {
1166+ self .tryAsClusterAdmin (w , r , func (u User ) (int , interface {}) {
1167+ name := r .URL .Query ().Get (":name" )
1168+ db := r .URL .Query ().Get (":db" )
1169+ if err := self .raftServer .DropShardSpace (db , name ); err != nil {
1170+ return libhttp .StatusInternalServerError , err .Error ()
1171+ }
1172+ return libhttp .StatusOK , nil
1173+ })
1174+ }
0 commit comments