refactor(master): remove useless code. #22890822

eliminate security vulnerabilities in the code.

Signed-off-by: Victor1319 <zengxuewei@oppo.com>
This commit is contained in:
Victor1319 2024-12-13 11:35:07 +08:00
parent 6121ffd009
commit 54c357ddc1
10 changed files with 219 additions and 265 deletions

View File

@ -183,7 +183,6 @@ func (m *Server) loadMetadata() {
if err = m.cluster.loadZoneValue(); err != nil {
panic(err)
}
// autoUpdatedZones = m.cluster.checkSetMediaTypeForLegacyZones()
if err = m.cluster.loadVols(); err != nil {
panic(err)

View File

@ -1191,39 +1191,6 @@ func (c *Cluster) loadZoneValue() (err error) {
return
}
func (c *Cluster) checkSetMediaTypeForLegacyZones() (updatedZones []*Zone) {
updatedZones = make([]*Zone, 0)
zonesHasDatanode := map[string]struct{}{}
c.dataNodes.Range(func(addr, node interface{}) bool {
dn := node.(*DataNode)
zonesHasDatanode[dn.ZoneName] = struct{}{}
return true
})
log.LogDebugf("[checkSetMediaTypeForLegacyZones] zone num: %v", c.t.getZoneLen())
c.t.zoneMap.Range(func(key, value interface{}) bool {
zone := value.(*Zone)
log.LogDebugf("[checkSetMediaTypeForLegacyZones] zone(%v) mediaType(%v)",
zone.name, proto.MediaTypeString(zone.dataMediaType))
if zone.dataMediaType != proto.MediaType_Unspecified {
return true
}
if _, exists := zonesHasDatanode[zone.name]; exists {
zone.SetDataMediaType(c.legacyDataMediaType)
log.LogWarnf("[checkSetMediaTypeForLegacyZones] set mediaType(%v) by config LegacyDataMediaType for legacy zone(%v)",
proto.MediaTypeString(zone.dataMediaType), zone.name)
updatedZones = append(updatedZones, zone)
}
return true
})
return
}
func (c *Cluster) updateMaxConcurrentLcNodes(val uint64) {
atomic.StoreUint64(&c.cfg.MaxConcurrentLcNodes, val)
}

View File

@ -280,7 +280,7 @@ func (m *warningMetrics) deleteMissingDp(missingDpAddrSet addrSet, clusterName,
log.LogDebugf("action[deleteMissingDp] delete: dpId(%v), addr(%v)", dpId, addr)
}
// leader only
// leader only, TODO: remove
func (m *warningMetrics) WarnMissingDp(clusterName, addr string, partitionID uint64, report bool) {
if clusterName != m.cluster.Name {
return

View File

@ -19,7 +19,6 @@ import (
"encoding/json"
"fmt"
"io"
"io/ioutil"
"math"
"net/http"
"os"
@ -80,9 +79,9 @@ func (m *MetaNode) registerAPIHandler() (err error) {
http.HandleFunc("/getInodeAccessTime", m.getInodeAccessTimeHandler)
// for hybrid cloud debug
http.HandleFunc("/getInodeWithExtentKey", m.getInodeWithExtentKeyHandler)
http.HandleFunc("/setInodeCreateTime", m.setInodeCreateTimeHandler)
http.HandleFunc("/deleteMigrateExtentKey", m.deleteMigrateExtentKeyHandler)
http.HandleFunc("/updateExtentKeyAfterMigration", m.updateExtentKeyAfterMigrationHandler)
// http.HandleFunc("/setInodeCreateTime", m.setInodeCreateTimeHandler)
// http.HandleFunc("/deleteMigrateExtentKey", m.deleteMigrateExtentKeyHandler)
// http.HandleFunc("/updateExtentKeyAfterMigration", m.updateExtentKeyAfterMigrationHandler)
return
}
@ -1023,229 +1022,230 @@ func (m *MetaNode) getInodeWithExtentKeyHandler(w http.ResponseWriter, r *http.R
return
}
func (m *MetaNode) setInodeCreateTimeHandler(w http.ResponseWriter, r *http.Request) {
var err error
// used for debug api
// func (m *MetaNode) setInodeCreateTimeHandler(w http.ResponseWriter, r *http.Request) {
// var err error
r.ParseForm()
resp := NewAPIResponse(http.StatusBadRequest, "")
defer func() {
data, _ := resp.Marshal()
if _, err := w.Write(data); err != nil {
log.LogErrorf("[setInodeCreateTimeHandler] response %s", err.Error())
}
}()
// r.ParseForm()
// resp := NewAPIResponse(http.StatusBadRequest, "")
// defer func() {
// data, _ := resp.Marshal()
// if _, err := w.Write(data); err != nil {
// log.LogErrorf("[setInodeCreateTimeHandler] response %s", err.Error())
// }
// }()
pid, err := strconv.ParseUint(r.FormValue("pid"), 10, 64)
if err != nil {
resp.Msg = err.Error()
return
}
// pid, err := strconv.ParseUint(r.FormValue("pid"), 10, 64)
// if err != nil {
// resp.Msg = err.Error()
// return
// }
id, err := strconv.ParseUint(r.FormValue("ino"), 10, 64)
if err != nil {
resp.Msg = err.Error()
return
}
// id, err := strconv.ParseUint(r.FormValue("ino"), 10, 64)
// if err != nil {
// resp.Msg = err.Error()
// return
// }
dateTimeStr := r.FormValue("createTime")
// dateTimeStr := r.FormValue("createTime")
log.LogInfof("[setInodeCreateTimeHandler] mpId(%v) ino(%v), to set createTime: %v",
pid, id, dateTimeStr)
// log.LogInfof("[setInodeCreateTimeHandler] mpId(%v) ino(%v), to set createTime: %v",
// pid, id, dateTimeStr)
formatStr := "2006-01-02 15:04:05 -0700 MST"
datetime, err := time.Parse(formatStr, dateTimeStr)
if err != nil {
err = fmt.Errorf("failed to parse createTime: %v", err.Error())
resp.Msg = err.Error()
return
}
createTime := datetime.Unix()
// formatStr := "2006-01-02 15:04:05 -0700 MST"
// datetime, err := time.Parse(formatStr, dateTimeStr)
// if err != nil {
// err = fmt.Errorf("failed to parse createTime: %v", err.Error())
// resp.Msg = err.Error()
// return
// }
// createTime := datetime.Unix()
mp, err := m.metadataManager.GetPartition(pid)
if err != nil {
resp.Code = http.StatusNotFound
resp.Msg = err.Error()
return
}
// mp, err := m.metadataManager.GetPartition(pid)
// if err != nil {
// resp.Code = http.StatusNotFound
// resp.Msg = err.Error()
// return
// }
if leaderAddr, ok := mp.IsLeader(); !ok {
resp.Code = http.StatusSeeOther
err = fmt.Errorf("not mp leader, leader is %v", leaderAddr)
resp.Msg = err.Error()
return
}
// if leaderAddr, ok := mp.IsLeader(); !ok {
// resp.Code = http.StatusSeeOther
// err = fmt.Errorf("not mp leader, leader is %v", leaderAddr)
// resp.Msg = err.Error()
// return
// }
req := &SetCreateTimeRequest{
Inode: id,
CreateTime: createTime,
}
// req := &SetCreateTimeRequest{
// Inode: id,
// CreateTime: createTime,
// }
p := &Packet{}
err = p.MarshalData(req)
if err != nil {
resp.Msg = err.Error()
return
}
// p := &Packet{}
// err = p.MarshalData(req)
// if err != nil {
// resp.Msg = err.Error()
// return
// }
if err = mp.SetCreateTime(req, p.Data, p); err != nil {
log.LogErrorf("[setInodeCreateTimeHandler] req: %v, error: %s", req, err.Error())
resp.Msg = err.Error()
return
}
// if err = mp.SetCreateTime(req, p.Data, p); err != nil {
// log.LogErrorf("[setInodeCreateTimeHandler] req: %v, error: %s", req, err.Error())
// resp.Msg = err.Error()
// return
// }
resp.Code = http.StatusOK
resp.Msg = p.GetResultMsg()
// resp.Code = http.StatusOK
// resp.Msg = p.GetResultMsg()
log.LogInfof("[setInodeCreateTimeHandler] mpId(%v) ino(%v), to set createTime: %v(%v)",
pid, id, dateTimeStr, createTime)
return
}
// log.LogInfof("[setInodeCreateTimeHandler] mpId(%v) ino(%v), to set createTime: %v(%v)",
// pid, id, dateTimeStr, createTime)
// return
// }
func (m *MetaNode) deleteMigrateExtentKeyHandler(w http.ResponseWriter, r *http.Request) {
var err error
// func (m *MetaNode) deleteMigrateExtentKeyHandler(w http.ResponseWriter, r *http.Request) {
// var err error
r.ParseForm()
resp := NewAPIResponse(http.StatusBadRequest, "")
defer func() {
data, _ := resp.Marshal()
if _, err := w.Write(data); err != nil {
log.LogErrorf("[deleteMigrateExtentKeyHandler] response %s", err.Error())
}
}()
// r.ParseForm()
// resp := NewAPIResponse(http.StatusBadRequest, "")
// defer func() {
// data, _ := resp.Marshal()
// if _, err := w.Write(data); err != nil {
// log.LogErrorf("[deleteMigrateExtentKeyHandler] response %s", err.Error())
// }
// }()
mpId, err := strconv.ParseUint(r.FormValue("pid"), 10, 64)
if err != nil {
resp.Msg = err.Error()
return
}
// mpId, err := strconv.ParseUint(r.FormValue("pid"), 10, 64)
// if err != nil {
// resp.Msg = err.Error()
// return
// }
inoId, err := strconv.ParseUint(r.FormValue("ino"), 10, 64)
if err != nil {
resp.Msg = err.Error()
return
}
// inoId, err := strconv.ParseUint(r.FormValue("ino"), 10, 64)
// if err != nil {
// resp.Msg = err.Error()
// return
// }
log.LogInfof("[deleteMigrateExtentKeyHandler] mpId(%v) ino(%v) run", mpId, inoId)
// log.LogInfof("[deleteMigrateExtentKeyHandler] mpId(%v) ino(%v) run", mpId, inoId)
mp, err := m.metadataManager.GetPartition(mpId)
if err != nil {
log.LogErrorf("[deleteMigrateExtentKeyHandler] mpId(%v) ino(%v), get mp err: %v", mpId, inoId, err.Error())
resp.Code = http.StatusNotFound
resp.Msg = err.Error()
return
}
// mp, err := m.metadataManager.GetPartition(mpId)
// if err != nil {
// log.LogErrorf("[deleteMigrateExtentKeyHandler] mpId(%v) ino(%v), get mp err: %v", mpId, inoId, err.Error())
// resp.Code = http.StatusNotFound
// resp.Msg = err.Error()
// return
// }
if leaderAddr, ok := mp.IsLeader(); !ok {
resp.Code = http.StatusSeeOther
err = fmt.Errorf("not mp leader, leader is %v", leaderAddr)
log.LogErrorf("[deleteMigrateExtentKeyHandler] mpId(%v) ino(%v), err: %v", mpId, inoId, err.Error())
resp.Msg = err.Error()
return
}
// if leaderAddr, ok := mp.IsLeader(); !ok {
// resp.Code = http.StatusSeeOther
// err = fmt.Errorf("not mp leader, leader is %v", leaderAddr)
// log.LogErrorf("[deleteMigrateExtentKeyHandler] mpId(%v) ino(%v), err: %v", mpId, inoId, err.Error())
// resp.Msg = err.Error()
// return
// }
req := &DeleteMigrationExtentKeyRequest{
PartitionID: mpId,
Inode: inoId,
}
// req := &DeleteMigrationExtentKeyRequest{
// PartitionID: mpId,
// Inode: inoId,
// }
p := &Packet{}
p.Opcode = proto.OpDeleteMigrationExtentKey
req.FullPaths = []string{"N/A"}
err = p.MarshalData(req)
if err != nil {
resp.Msg = err.Error()
return
}
// p := &Packet{}
// p.Opcode = proto.OpDeleteMigrationExtentKey
// req.FullPaths = []string{"N/A"}
// err = p.MarshalData(req)
// if err != nil {
// resp.Msg = err.Error()
// return
// }
remoteInfo := "httpFrom" + r.RemoteAddr
if err = mp.DeleteMigrationExtentKey(req, p, remoteInfo); err != nil {
log.LogErrorf("[deleteMigrateExtentKeyHandler] req: %v, error: %s", req, err.Error())
resp.Msg = err.Error()
return
}
// remoteInfo := "httpFrom" + r.RemoteAddr
// if err = mp.DeleteMigrationExtentKey(req, p, remoteInfo); err != nil {
// log.LogErrorf("[deleteMigrateExtentKeyHandler] req: %v, error: %s", req, err.Error())
// resp.Msg = err.Error()
// return
// }
resp.Code = http.StatusOK
resp.Msg = p.GetResultMsg()
// resp.Code = http.StatusOK
// resp.Msg = p.GetResultMsg()
log.LogInfof("[deleteMigrateExtentKeyHandler] mpId(%v) ino(%v) success", mpId, inoId)
return
}
// log.LogInfof("[deleteMigrateExtentKeyHandler] mpId(%v) ino(%v) success", mpId, inoId)
// return
// }
func (m *MetaNode) updateExtentKeyAfterMigrationHandler(w http.ResponseWriter, r *http.Request) {
var err error
var bytes []byte
// func (m *MetaNode) updateExtentKeyAfterMigrationHandler(w http.ResponseWriter, r *http.Request) {
// var err error
// var bytes []byte
resp := NewAPIResponse(http.StatusBadRequest, "")
defer func() {
data, _ := resp.Marshal()
if _, err := w.Write(data); err != nil {
log.LogErrorf("[updateExtentKeyAfterMigrationHandler] response %s", err.Error())
}
}()
// resp := NewAPIResponse(http.StatusBadRequest, "")
// defer func() {
// data, _ := resp.Marshal()
// if _, err := w.Write(data); err != nil {
// log.LogErrorf("[updateExtentKeyAfterMigrationHandler] response %s", err.Error())
// }
// }()
if bytes, err = ioutil.ReadAll(r.Body); err != nil {
resp.Code = http.StatusBadRequest
resp.Msg = err.Error()
log.LogErrorf("[updateExtentKeyAfterMigrationHandler] read request data body err:%s", err)
return
}
req := &proto.UpdateExtentKeyAfterMigrationRequest{}
if err = json.Unmarshal(bytes, req); err != nil {
resp.Code = http.StatusBadRequest
resp.Msg = err.Error()
log.LogErrorf("[updateExtentKeyAfterMigrationHandler] Unmarshal request data body err:%s", err)
return
}
log.LogInfof("[updateExtentKeyAfterMigrationHandler] req: %v", req)
// if bytes, err = ioutil.ReadAll(r.Body); err != nil {
// resp.Code = http.StatusBadRequest
// resp.Msg = err.Error()
// log.LogErrorf("[updateExtentKeyAfterMigrationHandler] read request data body err:%s", err)
// return
// }
// req := &proto.UpdateExtentKeyAfterMigrationRequest{}
// if err = json.Unmarshal(bytes, req); err != nil {
// resp.Code = http.StatusBadRequest
// resp.Msg = err.Error()
// log.LogErrorf("[updateExtentKeyAfterMigrationHandler] Unmarshal request data body err:%s", err)
// return
// }
// log.LogInfof("[updateExtentKeyAfterMigrationHandler] req: %v", req)
mp, err := m.metadataManager.GetPartition(req.PartitionID)
if err != nil {
log.LogErrorf("[updateExtentKeyAfterMigrationHandler] mpId(%v) ino(%v), get mp err: %v",
req.PartitionID, req.Inode, err.Error())
resp.Code = http.StatusNotFound
resp.Msg = err.Error()
return
}
// mp, err := m.metadataManager.GetPartition(req.PartitionID)
// if err != nil {
// log.LogErrorf("[updateExtentKeyAfterMigrationHandler] mpId(%v) ino(%v), get mp err: %v",
// req.PartitionID, req.Inode, err.Error())
// resp.Code = http.StatusNotFound
// resp.Msg = err.Error()
// return
// }
leaderAddr, isLeader := mp.IsLeader()
if leaderAddr == "" {
resp.Code = http.StatusSeeOther
err = fmt.Errorf("mp(%v) no leader", req.PartitionID)
log.LogErrorf("[updateExtentKeyAfterMigrationHandler] mpId(%v) ino(%v) err: %v",
req.PartitionID, req.Inode, err.Error())
resp.Msg = err.Error()
return
} else if !isLeader {
resp.Code = http.StatusSeeOther
err = fmt.Errorf("not leader, mp(%v) leader is %v", req.PartitionID, leaderAddr)
log.LogErrorf("[updateExtentKeyAfterMigrationHandler] mpId(%v) ino(%v) err: %v",
req.PartitionID, req.Inode, err.Error())
resp.Msg = err.Error()
return
}
// leaderAddr, isLeader := mp.IsLeader()
// if leaderAddr == "" {
// resp.Code = http.StatusSeeOther
// err = fmt.Errorf("mp(%v) no leader", req.PartitionID)
// log.LogErrorf("[updateExtentKeyAfterMigrationHandler] mpId(%v) ino(%v) err: %v",
// req.PartitionID, req.Inode, err.Error())
// resp.Msg = err.Error()
// return
// } else if !isLeader {
// resp.Code = http.StatusSeeOther
// err = fmt.Errorf("not leader, mp(%v) leader is %v", req.PartitionID, leaderAddr)
// log.LogErrorf("[updateExtentKeyAfterMigrationHandler] mpId(%v) ino(%v) err: %v",
// req.PartitionID, req.Inode, err.Error())
// resp.Msg = err.Error()
// return
// }
p := &Packet{}
p.Opcode = proto.OpMetaUpdateExtentKeyAfterMigration
req.FullPaths = []string{"N/A"}
err = p.MarshalData(req)
if err != nil {
log.LogErrorf("[updateExtentKeyAfterMigrationHandler] mpId(%v) ino(%v) MarshalData err: %v",
req.PartitionID, req.Inode, err.Error())
resp.Code = http.StatusSeeOther
resp.Msg = "inner error"
return
}
// p := &Packet{}
// p.Opcode = proto.OpMetaUpdateExtentKeyAfterMigration
// req.FullPaths = []string{"N/A"}
// err = p.MarshalData(req)
// if err != nil {
// log.LogErrorf("[updateExtentKeyAfterMigrationHandler] mpId(%v) ino(%v) MarshalData err: %v",
// req.PartitionID, req.Inode, err.Error())
// resp.Code = http.StatusSeeOther
// resp.Msg = "inner error"
// return
// }
remoteInfo := "httpFrom" + r.RemoteAddr
if err = mp.UpdateExtentKeyAfterMigration(req, p, remoteInfo); err != nil {
log.LogErrorf("[updateExtentKeyAfterMigrationHandler] req: %v, error: %s", req, err.Error())
resp.Msg = err.Error()
return
}
// remoteInfo := "httpFrom" + r.RemoteAddr
// if err = mp.UpdateExtentKeyAfterMigration(req, p, remoteInfo); err != nil {
// log.LogErrorf("[updateExtentKeyAfterMigrationHandler] req: %v, error: %s", req, err.Error())
// resp.Msg = err.Error()
// return
// }
resp.Code = http.StatusOK
resp.Msg = p.GetResultMsg()
// resp.Code = http.StatusOK
// resp.Msg = p.GetResultMsg()
log.LogInfof("[updateExtentKeyAfterMigrationHandler] mpId(%v) ino(%v) success", req.PartitionID, req.Inode)
return
}
// log.LogInfof("[updateExtentKeyAfterMigrationHandler] mpId(%v) ino(%v) success", req.PartitionID, req.Inode)
// return
// }

View File

@ -200,7 +200,6 @@ const (
opFSMSentToChanWithVer = 76
// hybrid cloud
opFSMInternalFreeForbiddenMigrationInode = 85
opFSMForbiddenMigrationInode = 86
opFSMRenewalForbiddenMigration = 87
opFSMUpdateExtentKeyAfterMigration = 88

View File

@ -948,22 +948,21 @@ func (i *Inode) MarshalValue() (val []byte) {
i.RLock()
i.MarshalInodeValue(buff)
if i.getLayerLen() > 0 || i.getVer() > 0 {
// TODO:tangjingyu log for debug only
log.LogWarnf("##### [MarshalValue] verCnt(%v) verSeq(%v) inode[%v] stack(%v)",
i.getLayerLen(), i.getVer(), i, string(debug.Stack()))
}
if i.getLayerLen() > 0 && i.getVer() == 0 {
log.LogFatalf("#### [MarshalValue] inode %v current verSeq %v, hist len (%v) stack(%v)",
i.Inode, i.getVer(), i.getLayerLen(), string(debug.Stack()))
}
if err = binary.Write(buff, binary.BigEndian, int32(i.getLayerLen())); err != nil {
i.RUnlock()
panic(err)
}
if i.multiSnap != nil {
if i.getLayerLen() > 0 || i.getVer() > 0 {
// TODO:tangjingyu log for debug only
log.LogWarnf("##### [MarshalValue] verCnt(%v) verSeq(%v) inode[%v] stack(%v)",
i.getLayerLen(), i.getVer(), i, string(debug.Stack()))
}
if i.getLayerLen() > 0 && i.getVer() == 0 {
log.LogFatalf("#### [MarshalValue] inode %v current verSeq %v, hist len (%v) stack(%v)",
i.Inode, i.getVer(), i.getLayerLen(), string(debug.Stack()))
}
if err = binary.Write(buff, binary.BigEndian, int32(i.getLayerLen())); err != nil {
i.RUnlock()
panic(err)
}
for idx, ino := range i.multiSnap.multiVersions {
// TODO:tangjingyu log for debug only
log.LogWarnf("##### [MarshalValue] handle multiVersions idx(%v) inode[%v] ", idx, i)
@ -2257,10 +2256,6 @@ func (i *Inode) NeedDeleteMigrationExtentKey() bool {
func (i *Inode) ShouldDelete() (ok bool) {
i.RLock()
ok = i.Flag&DeleteMarkFlag == DeleteMarkFlag
// TODO:tangjingyu: need this?
// i.NLink == 0 && time.Now().Unix()-i.AccessTime InodeNLink0DelayDeleteSeconds
i.RUnlock()
return
}

View File

@ -1292,7 +1292,7 @@ func (m *metadataManager) opMetaExtentAddWithCheck(conn net.Conn, p *Packet,
if err != nil {
p.PacketErrorWithBody(proto.OpErr, ([]byte)(err.Error()))
m.respondToClientWithVer(conn, p)
err = errors.NewErrorf("[%vhun] req: %v, resp: %v", p.GetOpMsgWithReqAndResult(), req, err.Error())
err = errors.NewErrorf("[%v] req: %v, resp: %v", p.GetOpMsgWithReqAndResult(), req, err.Error())
return
}
if !m.serveProxy(conn, mp, p) {
@ -2970,7 +2970,7 @@ func (m *metadataManager) opMetaUpdateExtentKeyAfterMigration(conn net.Conn, p *
err = errors.NewErrorf("[%v],req[%v],err[%v]", p.GetOpMsgWithReqAndResult(), req, string(p.Data))
return
}
mp.UpdateExtentKeyAfterMigration(req, p, remoteAddr)
err = mp.UpdateExtentKeyAfterMigration(req, p, remoteAddr)
m.updatePackRspSeq(mp, p)
m.respondToClientWithVer(conn, p)
log.LogDebugf("%s [opMetaUpdateExtentKeyAfterMigration] req: %d - %v, resp body: %v, "+
@ -3002,7 +3002,7 @@ func (m *metadataManager) opDeleteMigrationExtentKey(conn net.Conn, p *Packet,
err = errors.NewErrorf("[%v],req[%v],err[%v]", p.GetOpMsgWithReqAndResult(), req, string(p.Data))
return
}
mp.DeleteMigrationExtentKey(req, p, remoteAddr)
err = mp.DeleteMigrationExtentKey(req, p, remoteAddr)
m.updatePackRspSeq(mp, p)
m.respondToClientWithVer(conn, p)
log.LogDebugf("%s [opDeleteMigrationExtentKey] req: %d - %v, resp body: %v, "+

View File

@ -64,7 +64,6 @@ func (mp *metaPartition) startFreeList() (err error) {
return
}
// go mp.updateVolWorker()
go mp.deleteWorker()
go mp.startRecycleInodeDelFile()
mp.startToDeleteExtents()
@ -872,12 +871,3 @@ func (mp *metaPartition) persistDeletedInodes(inos []uint64) {
mp.persistDeletedInode(ino, &currSize)
}
}
func (mp *metaPartition) syncToRaftFollowersFreeForbiddenMigrationInode(hasDeleteInodes []byte) (err error) {
if len(hasDeleteInodes) == 0 {
return
}
_, err = mp.submit(opFSMInternalFreeForbiddenMigrationInode, hasDeleteInodes)
return
}

View File

@ -660,6 +660,12 @@ func (mp *metaPartition) BatchExtentAppend(req *proto.AppendExtentKeysRequest, p
log.LogErrorf("BatchExtentAppend fail err [%v]", err)
return
}
// maybe from old version
if req.StorageClass == proto.MediaType_Unspecified {
req.StorageClass = ino.StorageClass
}
ino.StorageClass = req.StorageClass
if !proto.IsStorageClassReplica(ino.StorageClass) {
err = fmt.Errorf("ino %v storage type %v donot support BatchExtentAppend", ino.Inode, ino.StorageClass)

View File

@ -1077,8 +1077,6 @@ func (v *Volume) WritePart(path string, multipartId string, partId uint16, reade
}
} else {
// Write data to data node
log.LogErrorf("chihe: streamWrite volume(%v) inode(%v)StorageClass (%v)",
v.name, tempInodeInfo.Inode, tempInodeInfo.StorageClass)
if size, err = v.streamWrite(tempInodeInfo.Inode, reader, md5Hash, tempInodeInfo.StorageClass); err != nil {
log.LogErrorf("WritePart: stream write fail: volume(%v) inode(%v) multipartID(%v) partID(%v) err(%v)",
v.name, tempInodeInfo.Inode, multipartId, partId, err)