示例#1
0
文件: localComm.go 项目: Netflix/rend
func getMetadata(rw *bufio.ReadWriter, key []byte) ([]byte, metadata, error) {
	metaKey := metaKey(key)
	if err := binprot.WriteGetCmd(rw, metaKey); err != nil {
		return nil, emptyMeta, err
	}
	metaData, err := getMetadataCommon(rw)
	return metaKey, metaData, err
}
示例#2
0
文件: handler.go 项目: Netflix/rend
func realHandleGet(cmd common.GetRequest, dataOut chan common.GetResponse, errorOut chan error, rw *bufio.ReadWriter) {
	defer close(errorOut)
	defer close(dataOut)

	for idx, key := range cmd.Keys {
		if err := binprot.WriteGetCmd(rw.Writer, key); err != nil {
			errorOut <- err
			return
		}

		data, flags, _, err := getLocal(rw, false)
		if err != nil {
			if err == common.ErrKeyNotFound {
				dataOut <- common.GetResponse{
					Miss:   true,
					Quiet:  cmd.Quiet[idx],
					Opaque: cmd.Opaques[idx],
					Flags:  flags,
					Key:    key,
					Data:   nil,
				}

				continue
			}

			errorOut <- err
			return
		}

		dataOut <- common.GetResponse{
			Miss:   false,
			Quiet:  cmd.Quiet[idx],
			Opaque: cmd.Opaques[idx],
			Flags:  flags,
			Key:    key,
			Data:   data,
		}
	}
}