MCPcopy
hub / github.com/cubefs/cubefs / Get

Method Get

client/blockcache/bcache/client.go:56–149  ·  view source on GitHub ↗
(vol, key string, buf []byte, offset uint64, size uint32)

Source from the content-addressed store, hash-verified

54}
55
56func (c *BcacheClient) Get(vol, key string, buf []byte, offset uint64, size uint32) (int, error) {
57 var err error
58 bgTime := stat.BeginStat()
59 defer func() {
60 stat.EndStat("bcache-get", err, bgTime, 1)
61 }()
62 req := &GetCacheRequest{
63 CacheKey: key,
64 Offset: offset,
65 Size: size,
66 }
67 packet := NewBlockCachePacket()
68 packet.Opcode = OpBlockCacheGet
69 data, err := req.Marshal()
70 if err != nil {
71 log.LogDebugf("get block cache: req(%v) err(%v)", req.CacheKey, err)
72 return 0, err
73 }
74 defer func() {
75 bytespool.Free(data)
76 }()
77 packet.Data = data
78 packet.Size = uint32(len(packet.Data))
79 stat.EndStat("bcache-get-marshal", err, bgTime, 1)
80 conn, err := c.connPool.Get()
81 if err != nil {
82 log.LogDebugf("get block cache: get Conn failed, req(%v) err(%v)", req.CacheKey, err)
83 return 0, err
84 }
85 defer func() {
86 c.connPool.Put(conn)
87 }()
88 stat.EndStat("bcache-get-conn", err, bgTime, 1)
89 getCachePathMetric := exporter.NewTPCnt("bcache-get-cachepath")
90 err = packet.WriteToConn(*conn)
91 if err != nil {
92 log.LogDebugf("Failed to write to conn, req(%v) err(%v)", req.CacheKey, err)
93 getCachePathMetric.SetWithLabels(err, map[string]string{exporter.Vol: vol})
94 return 0, errors.NewErrorf("Failed to write to conn, req(%v) err(%v)", req.CacheKey, err)
95 }
96 stat.EndStat("bcache-get-writeconn", err, bgTime, 1)
97 err = packet.ReadFromConn(*conn, 1)
98 if err != nil {
99 log.LogDebugf("Failed to read from conn, req(%v), err(%v)", req.CacheKey, err)
100 getCachePathMetric.SetWithLabels(err, map[string]string{exporter.Vol: vol})
101 return 0, errors.NewErrorf("Failed to read from conn, req(%v), err(%v)", req.CacheKey, err)
102 }
103 stat.EndStat("bcache-get-readconn", err, bgTime, 1)
104
105 status := parseStatus(packet.ResultCode)
106 if status != statusOK {
107 err = errors.New(packet.GetResultMsg())
108 log.LogDebugf("get block cache: req(%v) err(%v) result(%v)", req.CacheKey, err, packet.GetResultMsg())
109 getCachePathMetric.SetWithLabels(err, map[string]string{exporter.Vol: vol})
110 return 0, err
111 }
112
113 resp := new(GetCachePathResponse)

Callers

nothing calls this directly

Calls 15

MarshalMethod · 0.95
WriteToConnMethod · 0.95
ReadFromConnMethod · 0.95
GetResultMsgMethod · 0.95
BeginStatFunction · 0.92
EndStatFunction · 0.92
LogDebugfFunction · 0.92
FreeFunction · 0.92
NewTPCntFunction · 0.92
NewErrorfFunction · 0.92
NewFunction · 0.92
NewBlockCachePacketFunction · 0.85

Tested by

no test coverage detected