写入缓存
(message *pb.NodeStreamMessage)
| 163 | |
| 164 | // 写入缓存 |
| 165 | func (this *APIStream) handleWriteCache(message *pb.NodeStreamMessage) error { |
| 166 | msg := &messageconfigs.WriteCacheMessage{} |
| 167 | err := json.Unmarshal(message.DataJSON, msg) |
| 168 | if err != nil { |
| 169 | this.replyFail(message.RequestId, "decode message data failed: "+err.Error()) |
| 170 | return err |
| 171 | } |
| 172 | |
| 173 | storage, shouldStop, err := this.cacheStorage(message, msg.CachePolicyJSON) |
| 174 | if err != nil { |
| 175 | return err |
| 176 | } |
| 177 | if shouldStop { |
| 178 | defer func() { |
| 179 | storage.Stop() |
| 180 | }() |
| 181 | } |
| 182 | |
| 183 | expiredAt := time.Now().Unix() + msg.LifeSeconds |
| 184 | writer, err := storage.OpenWriter(msg.Key, expiredAt, 200, -1, int64(len(msg.Value)), -1, false) |
| 185 | if err != nil { |
| 186 | this.replyFail(message.RequestId, "prepare writing failed: "+err.Error()) |
| 187 | return err |
| 188 | } |
| 189 | |
| 190 | // 写入一个空的Header |
| 191 | _, err = writer.WriteHeader([]byte(":")) |
| 192 | if err != nil { |
| 193 | this.replyFail(message.RequestId, "write failed: "+err.Error()) |
| 194 | return err |
| 195 | } |
| 196 | |
| 197 | // 写入数据 |
| 198 | _, err = writer.Write(msg.Value) |
| 199 | if err != nil { |
| 200 | this.replyFail(message.RequestId, "write failed: "+err.Error()) |
| 201 | return err |
| 202 | } |
| 203 | |
| 204 | err = writer.Close() |
| 205 | if err != nil { |
| 206 | this.replyFail(message.RequestId, "write failed: "+err.Error()) |
| 207 | return err |
| 208 | } |
| 209 | storage.AddToList(&caches.Item{ |
| 210 | Type: writer.ItemType(), |
| 211 | Key: msg.Key, |
| 212 | ExpiresAt: expiredAt, |
| 213 | HeaderSize: writer.HeaderSize(), |
| 214 | BodySize: writer.BodySize(), |
| 215 | }) |
| 216 | |
| 217 | this.replyOk(message.RequestId, "write ok") |
| 218 | |
| 219 | return nil |
| 220 | } |
| 221 | |
| 222 | // 读取缓存 |
no test coverage detected