func (e *etcdV3) DeleteRange(ctx context.Context, r *etcdserverpb.DeleteRangeRequest) (*etcdserverpb.DeleteRangeResponse, error) {
	e.logger.Warnw("DeleteRange received, which is not supported yet")
	return nil, rpctypes.ErrNotCapable
}
DeleteRange implements etcdserverpb.KVServer.DeleteRange method.
package etcdv3
import (
	"context"
	"encoding/json"
	"strings"
	"go.etcd.io/etcd/api/v3/etcdserverpb"
	"go.etcd.io/etcd/api/v3/mvccpb"
	"go.etcd.io/etcd/api/v3/v3rpc/rpctypes"
	"go.uber.org/zap"
	"google.golang.org/grpc/codes"
	"google.golang.org/grpc/status"
	"github.com/api7/apisix-mesh-agent/pkg/cache"
)
var (
	_errInternalError   = status.New(codes.Internal, "internal error").Err()
	_emptyRangeResponse = &etcdserverpb.RangeResponse{
		Header: &etcdserverpb.ResponseHeader{},
	}
)
func (e *etcdV3) Range(ctx context.Context, r *etcdserverpb.RangeRequest) (*etcdserverpb.RangeResponse, error) {
	e.logger.Debugw("received RangeRequest",
		zap.Any("range_request", r),
	)
	if err := e.checkRangeRequestConformance(r); err != nil {
		if err == rpctypes.ErrKeyNotFound {
			_emptyRangeResponse.Header.Revision = e.revisioner.Revision()
			return _emptyRangeResponse, nil
		}
		return nil, err
	}
	var (
		resp *etcdserverpb.RangeResponse
		err  error
	)
	if r.RangeEnd == nil {
		resp, err = e.findExactKey(r.Key)
	} else {
		resp, err = e.findAllKeys(r.Key)
	}
	if err != nil {
		if err != rpctypes.ErrKeyNotFound {
			return nil, err
		}
		_emptyRangeResponse.Header.Revision = e.revisioner.Revision()
		return _emptyRangeResponse, nil
	}
	if r.KeysOnly {
		for _, kv := range resp.Kvs {
			kv.Value = nil
		}
	}
	e.logger.Debugw("RangeRequest response",
		zap.Any("response", resp),
	)
	return resp, nil
}
func (e *etcdV3) Put(ctx context.Context, r *etcdserverpb.PutRequest) (*etcdserverpb.PutResponse, error) {
	e.logger.Warnw("PutRequest received",
		zap.Any("put_request", r),
	)
	return &etcdserverpb.PutResponse{
		Header: &etcdserverpb.ResponseHeader{
			Revision: e.revisioner.Revision(),
		},
	}, nil
}