Esempio n. 1
0
func (h Handler) GAT(cmd common.GATRequest) (common.GetResponse, error) {
	if err := binprot.WriteGATCmd(h.rw.Writer, cmd.Key, cmd.Exptime); err != nil {
		return common.GetResponse{}, err
	}

	data, flags, _, err := getLocal(h.rw, false)
	if err != nil {
		if err == common.ErrKeyNotFound {
			return common.GetResponse{
				Miss:   true,
				Quiet:  false,
				Opaque: cmd.Opaque,
				Flags:  flags,
				Key:    cmd.Key,
				Data:   nil,
			}, nil
		}

		return common.GetResponse{}, err
	}

	return common.GetResponse{
		Miss:   false,
		Quiet:  false,
		Opaque: cmd.Opaque,
		Flags:  flags,
		Key:    cmd.Key,
		Data:   data,
	}, nil
}
Esempio n. 2
0
func (h Handler) GAT(cmd common.GATRequest) (common.GetResponse, error) {
	if err := binprot.WriteGATCmd(h.rw.Writer, cmd.Key, cmd.Exptime); err != nil {
		return common.GetResponse{}, err
	}

	data, flags, err := getLocal(h.rw)
	if err != nil {
		if err == common.ErrKeyNotFound {
			//fmt.Println("GAT miss because of missing metadata. Key:", key)
			return common.GetResponse{
				Miss:   true,
				Quiet:  false,
				Opaque: cmd.Opaque,
				Flags:  flags,
				Key:    cmd.Key,
				Data:   nil,
			}, nil
		}

		return common.GetResponse{}, err
	}

	return common.GetResponse{
		Miss:   false,
		Quiet:  false,
		Opaque: cmd.Opaque,
		Flags:  flags,
		Key:    cmd.Key,
		Data:   data,
	}, nil
}
Esempio n. 3
0
func getAndTouchMetadata(rw *bufio.ReadWriter, key []byte, exptime uint32) ([]byte, metadata, error) {
	metaKey := metaKey(key)
	if err := binprot.WriteGATCmd(rw, metaKey, exptime); err != nil {
		return nil, emptyMeta, err
	}
	metaData, err := getMetadataCommon(rw)
	return metaKey, metaData, err
}