func reportChunkserverInfo(key string, chunkserver *metadata.Chunkserver, oldChunkserver *metadata.Chunkserver) error { if oldChunkserver.Status == INIT_STATUS { err := mdDriver.UpdateChunkserverInfo(chunkserver, INIT_STATUS, RW_STATUS) if err != nil { return err } chunkserver.Status = RW_STATUS } if RW_STATUS == oldChunkserver.Status { err := mdDriver.UpdateChunkserverInfo(chunkserver, RW_STATUS, RW_STATUS) if err != nil { return err } chunkserver.Status = RW_STATUS } if RO_STATUS == oldChunkserver.Status { err := mdDriver.UpdateChunkserverInfo(chunkserver, RO_STATUS, RW_STATUS) if err != nil { return err } log.Infof("[reportChunkserverInfo] update RO_STATUS to RW_STATUS chunkserver: %v", key) chunkserver.Status = RW_STATUS } chunkserver.UpdateTime = time.Now() lock.Lock() _, ok := serverInfo[key] if !ok { lock.Unlock() return fmt.Errorf("do not exist: %v", chunkserver) } serverInfo[key] = chunkserver lock.Unlock() return nil }
func addChunkserver(chunkserver *metadata.Chunkserver) error { chunkserver.Status = INIT_STATUS chunkserver.TotalFreeSpace = 0 chunkserver.MaxFreeSpace = 0 chunkserver.PendingWrites = 0 chunkserver.WritingCount = 0 chunkserver.DataDir = "" chunkserver.ReadingCount = 0 chunkserver.TotalChunks = 0 chunkserver.ConnectionsCount = 0 err := mdDriver.AddChunkserver(chunkserver) if err != nil { return err } lock.Lock() defer lock.Unlock() key := fmt.Sprintf("%d:%s:%d", chunkserver.GroupId, chunkserver.Ip, chunkserver.Port) chunkserver.UpdateTime = time.Now() serverInfo[key] = chunkserver return nil }
func TestUpdateChunkserver(t *testing.T) { conn, err := getConn() chunkserver := new(metadata.Chunkserver) chunkserver.GroupId = uint16(1) chunkserver.Ip = "127.0.0.1" chunkserver.Port = 5444 chunkserver.Status = 0 chunkserver.TotalFreeSpace = int64(65) chunkserver.MaxFreeSpace = int64(1231231231231234534) err = conn.UpdateChunkserver(chunkserver) if err != nil { t.Fatal(err) } }
func TestNotExistChunkserver(t *testing.T) { conn, err := getConn() chunkserver := new(metadata.Chunkserver) chunkserver.GroupId = uint16(3) chunkserver.Ip = "127.0.0.1" chunkserver.Port = 5444 chunkserver.Status = 0 chunkserver.TotalFreeSpace = int64(45465465) chunkserver.MaxFreeSpace = int64(123123123123123) exist, err := conn.IsExistChunkserver(chunkserver) if err != nil { t.Fatal(err) } t.Log("exist:", exist) }
func TestAddChunkserver(t *testing.T) { conn, err := getConn() chunkserver := new(metadata.Chunkserver) chunkserver.GroupId = uint16(65535) chunkserver.Ip = "127.0.0.1" chunkserver.Port = 5444 chunkserver.Status = 0 chunkserver.TotalFreeSpace = int64(45465465) chunkserver.MaxFreeSpace = int64(123123123123123) chunkserver.PendingWrites = 1 chunkserver.WritingCount = 1 chunkserver.DataDir = "/export/" chunkserver.ReadingCount = 1 chunkserver.TotalChunks = 1 chunkserver.ConnectionsCount = 1 err = conn.AddChunkserver(chunkserver) if err != nil { t.Fatal(err) } }
func initChunkserverHandler(resp http.ResponseWriter, req *http.Request) { reqData, err := ioutil.ReadAll(req.Body) defer req.Body.Close() if err != nil { util.HandleError(resp, "", err, http.StatusBadRequest) return } log.Infof("[initserverHandler] read reqData %v", string(reqData)) var jsonMap map[string]interface{} err = json.Unmarshal(reqData, &jsonMap) if err != nil { util.HandleError(resp, "", err, http.StatusBadRequest) return } log.Infof("[initserverHandler] change json to map %v", jsonMap) groupId := uint16((jsonMap["GroupId"]).(float64)) ip := jsonMap["Ip"].(string) port := int((jsonMap["Port"]).(float64)) chunkserver := new(metadata.Chunkserver) chunkserver.GroupId = groupId chunkserver.Ip = ip chunkserver.Port = port chunkserver.Status = INIT_STATUS chunkserver.TotalFreeSpace = 0 chunkserver.MaxFreeSpace = 0 chunkserver.PendingWrites = 0 chunkserver.WritingCount = 0 chunkserver.DataDir = "" chunkserver.ReadingCount = 0 chunkserver.TotalChunks = 0 chunkserver.ConnectionsCount = 0 err = addChunkserver(chunkserver) if err != nil { util.HandleError(resp, "", err, http.StatusInternalServerError) return } util.Response(nil, http.StatusOK, resp) }