public static final class Kvrpcpb.PessimisticLockResponse.Builder extends com.google.protobuf.GeneratedMessageV3.Builder<Kvrpcpb.PessimisticLockResponse.Builder> implements Kvrpcpb.PessimisticLockResponseOrBuilder
kvrpcpb.PessimisticLockResponse| Modifier and Type | Method and Description |
|---|---|
Kvrpcpb.PessimisticLockResponse.Builder |
addAllErrors(Iterable<? extends Kvrpcpb.KeyError> values)
repeated .kvrpcpb.KeyError errors = 2; |
Kvrpcpb.PessimisticLockResponse.Builder |
addAllNotFounds(Iterable<? extends Boolean> values)
Indicates whether the values at the same index is correspond to an existing key.
|
Kvrpcpb.PessimisticLockResponse.Builder |
addAllValues(Iterable<? extends com.google.protobuf.ByteString> values)
The values is set if 'return_values' is true in the request and no error.
|
Kvrpcpb.PessimisticLockResponse.Builder |
addErrors(int index,
Kvrpcpb.KeyError.Builder builderForValue)
repeated .kvrpcpb.KeyError errors = 2; |
Kvrpcpb.PessimisticLockResponse.Builder |
addErrors(int index,
Kvrpcpb.KeyError value)
repeated .kvrpcpb.KeyError errors = 2; |
Kvrpcpb.PessimisticLockResponse.Builder |
addErrors(Kvrpcpb.KeyError.Builder builderForValue)
repeated .kvrpcpb.KeyError errors = 2; |
Kvrpcpb.PessimisticLockResponse.Builder |
addErrors(Kvrpcpb.KeyError value)
repeated .kvrpcpb.KeyError errors = 2; |
Kvrpcpb.KeyError.Builder |
addErrorsBuilder()
repeated .kvrpcpb.KeyError errors = 2; |
Kvrpcpb.KeyError.Builder |
addErrorsBuilder(int index)
repeated .kvrpcpb.KeyError errors = 2; |
Kvrpcpb.PessimisticLockResponse.Builder |
addNotFounds(boolean value)
Indicates whether the values at the same index is correspond to an existing key.
|
Kvrpcpb.PessimisticLockResponse.Builder |
addRepeatedField(com.google.protobuf.Descriptors.FieldDescriptor field,
Object value) |
Kvrpcpb.PessimisticLockResponse.Builder |
addValues(com.google.protobuf.ByteString value)
The values is set if 'return_values' is true in the request and no error.
|
Kvrpcpb.PessimisticLockResponse |
build() |
Kvrpcpb.PessimisticLockResponse |
buildPartial() |
Kvrpcpb.PessimisticLockResponse.Builder |
clear() |
Kvrpcpb.PessimisticLockResponse.Builder |
clearCommitTs()
Deprecated.
|
Kvrpcpb.PessimisticLockResponse.Builder |
clearErrors()
repeated .kvrpcpb.KeyError errors = 2; |
Kvrpcpb.PessimisticLockResponse.Builder |
clearField(com.google.protobuf.Descriptors.FieldDescriptor field) |
Kvrpcpb.PessimisticLockResponse.Builder |
clearNotFounds()
Indicates whether the values at the same index is correspond to an existing key.
|
Kvrpcpb.PessimisticLockResponse.Builder |
clearOneof(com.google.protobuf.Descriptors.OneofDescriptor oneof) |
Kvrpcpb.PessimisticLockResponse.Builder |
clearRegionError()
.errorpb.Error region_error = 1; |
Kvrpcpb.PessimisticLockResponse.Builder |
clearValue()
Deprecated.
|
Kvrpcpb.PessimisticLockResponse.Builder |
clearValues()
The values is set if 'return_values' is true in the request and no error.
|
Kvrpcpb.PessimisticLockResponse.Builder |
clone() |
long |
getCommitTs()
Deprecated.
|
Kvrpcpb.PessimisticLockResponse |
getDefaultInstanceForType() |
static com.google.protobuf.Descriptors.Descriptor |
getDescriptor() |
com.google.protobuf.Descriptors.Descriptor |
getDescriptorForType() |
Kvrpcpb.KeyError |
getErrors(int index)
repeated .kvrpcpb.KeyError errors = 2; |
Kvrpcpb.KeyError.Builder |
getErrorsBuilder(int index)
repeated .kvrpcpb.KeyError errors = 2; |
List<Kvrpcpb.KeyError.Builder> |
getErrorsBuilderList()
repeated .kvrpcpb.KeyError errors = 2; |
int |
getErrorsCount()
repeated .kvrpcpb.KeyError errors = 2; |
List<Kvrpcpb.KeyError> |
getErrorsList()
repeated .kvrpcpb.KeyError errors = 2; |
Kvrpcpb.KeyErrorOrBuilder |
getErrorsOrBuilder(int index)
repeated .kvrpcpb.KeyError errors = 2; |
List<? extends Kvrpcpb.KeyErrorOrBuilder> |
getErrorsOrBuilderList()
repeated .kvrpcpb.KeyError errors = 2; |
boolean |
getNotFounds(int index)
Indicates whether the values at the same index is correspond to an existing key.
|
int |
getNotFoundsCount()
Indicates whether the values at the same index is correspond to an existing key.
|
List<Boolean> |
getNotFoundsList()
Indicates whether the values at the same index is correspond to an existing key.
|
Errorpb.Error |
getRegionError()
.errorpb.Error region_error = 1; |
Errorpb.Error.Builder |
getRegionErrorBuilder()
.errorpb.Error region_error = 1; |
Errorpb.ErrorOrBuilder |
getRegionErrorOrBuilder()
.errorpb.Error region_error = 1; |
com.google.protobuf.ByteString |
getValue()
Deprecated.
|
com.google.protobuf.ByteString |
getValues(int index)
The values is set if 'return_values' is true in the request and no error.
|
int |
getValuesCount()
The values is set if 'return_values' is true in the request and no error.
|
List<com.google.protobuf.ByteString> |
getValuesList()
The values is set if 'return_values' is true in the request and no error.
|
boolean |
hasRegionError()
.errorpb.Error region_error = 1; |
protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable |
internalGetFieldAccessorTable() |
boolean |
isInitialized() |
Kvrpcpb.PessimisticLockResponse.Builder |
mergeFrom(com.google.protobuf.CodedInputStream input,
com.google.protobuf.ExtensionRegistryLite extensionRegistry) |
Kvrpcpb.PessimisticLockResponse.Builder |
mergeFrom(Kvrpcpb.PessimisticLockResponse other) |
Kvrpcpb.PessimisticLockResponse.Builder |
mergeFrom(com.google.protobuf.Message other) |
Kvrpcpb.PessimisticLockResponse.Builder |
mergeRegionError(Errorpb.Error value)
.errorpb.Error region_error = 1; |
Kvrpcpb.PessimisticLockResponse.Builder |
mergeUnknownFields(com.google.protobuf.UnknownFieldSet unknownFields) |
Kvrpcpb.PessimisticLockResponse.Builder |
removeErrors(int index)
repeated .kvrpcpb.KeyError errors = 2; |
Kvrpcpb.PessimisticLockResponse.Builder |
setCommitTs(long value)
Deprecated.
|
Kvrpcpb.PessimisticLockResponse.Builder |
setErrors(int index,
Kvrpcpb.KeyError.Builder builderForValue)
repeated .kvrpcpb.KeyError errors = 2; |
Kvrpcpb.PessimisticLockResponse.Builder |
setErrors(int index,
Kvrpcpb.KeyError value)
repeated .kvrpcpb.KeyError errors = 2; |
Kvrpcpb.PessimisticLockResponse.Builder |
setField(com.google.protobuf.Descriptors.FieldDescriptor field,
Object value) |
Kvrpcpb.PessimisticLockResponse.Builder |
setNotFounds(int index,
boolean value)
Indicates whether the values at the same index is correspond to an existing key.
|
Kvrpcpb.PessimisticLockResponse.Builder |
setRegionError(Errorpb.Error.Builder builderForValue)
.errorpb.Error region_error = 1; |
Kvrpcpb.PessimisticLockResponse.Builder |
setRegionError(Errorpb.Error value)
.errorpb.Error region_error = 1; |
Kvrpcpb.PessimisticLockResponse.Builder |
setRepeatedField(com.google.protobuf.Descriptors.FieldDescriptor field,
int index,
Object value) |
Kvrpcpb.PessimisticLockResponse.Builder |
setUnknownFields(com.google.protobuf.UnknownFieldSet unknownFields) |
Kvrpcpb.PessimisticLockResponse.Builder |
setValue(com.google.protobuf.ByteString value)
Deprecated.
|
Kvrpcpb.PessimisticLockResponse.Builder |
setValues(int index,
com.google.protobuf.ByteString value)
The values is set if 'return_values' is true in the request and no error.
|
getAllFields, getField, getFieldBuilder, getOneofFieldDescriptor, getParentForChildren, getRepeatedField, getRepeatedFieldBuilder, getRepeatedFieldCount, getUnknownFields, getUnknownFieldSetBuilder, hasField, hasOneof, internalGetMapField, internalGetMutableMapField, isClean, markClean, mergeUnknownLengthDelimitedField, mergeUnknownVarintField, newBuilderForField, onBuilt, onChanged, parseUnknownField, setUnknownFieldSetBuilder, setUnknownFieldsProto3findInitializationErrors, getInitializationErrorString, internalMergeFrom, mergeDelimitedFrom, mergeDelimitedFrom, mergeFrom, mergeFrom, mergeFrom, mergeFrom, mergeFrom, mergeFrom, mergeFrom, mergeFrom, mergeFrom, newUninitializedMessageException, toStringaddAll, addAll, mergeFrom, newUninitializedMessageExceptionequals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, waitpublic static final com.google.protobuf.Descriptors.Descriptor getDescriptor()
protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable internalGetFieldAccessorTable()
internalGetFieldAccessorTable in class com.google.protobuf.GeneratedMessageV3.Builder<Kvrpcpb.PessimisticLockResponse.Builder>public Kvrpcpb.PessimisticLockResponse.Builder clear()
clear in interface com.google.protobuf.Message.Builderclear in interface com.google.protobuf.MessageLite.Builderclear in class com.google.protobuf.GeneratedMessageV3.Builder<Kvrpcpb.PessimisticLockResponse.Builder>public com.google.protobuf.Descriptors.Descriptor getDescriptorForType()
getDescriptorForType in interface com.google.protobuf.Message.BuildergetDescriptorForType in interface com.google.protobuf.MessageOrBuildergetDescriptorForType in class com.google.protobuf.GeneratedMessageV3.Builder<Kvrpcpb.PessimisticLockResponse.Builder>public Kvrpcpb.PessimisticLockResponse getDefaultInstanceForType()
getDefaultInstanceForType in interface com.google.protobuf.MessageLiteOrBuildergetDefaultInstanceForType in interface com.google.protobuf.MessageOrBuilderpublic Kvrpcpb.PessimisticLockResponse build()
build in interface com.google.protobuf.Message.Builderbuild in interface com.google.protobuf.MessageLite.Builderpublic Kvrpcpb.PessimisticLockResponse buildPartial()
buildPartial in interface com.google.protobuf.Message.BuilderbuildPartial in interface com.google.protobuf.MessageLite.Builderpublic Kvrpcpb.PessimisticLockResponse.Builder clone()
clone in interface com.google.protobuf.Message.Builderclone in interface com.google.protobuf.MessageLite.Builderclone in class com.google.protobuf.GeneratedMessageV3.Builder<Kvrpcpb.PessimisticLockResponse.Builder>public Kvrpcpb.PessimisticLockResponse.Builder setField(com.google.protobuf.Descriptors.FieldDescriptor field, Object value)
setField in interface com.google.protobuf.Message.BuildersetField in class com.google.protobuf.GeneratedMessageV3.Builder<Kvrpcpb.PessimisticLockResponse.Builder>public Kvrpcpb.PessimisticLockResponse.Builder clearField(com.google.protobuf.Descriptors.FieldDescriptor field)
clearField in interface com.google.protobuf.Message.BuilderclearField in class com.google.protobuf.GeneratedMessageV3.Builder<Kvrpcpb.PessimisticLockResponse.Builder>public Kvrpcpb.PessimisticLockResponse.Builder clearOneof(com.google.protobuf.Descriptors.OneofDescriptor oneof)
clearOneof in interface com.google.protobuf.Message.BuilderclearOneof in class com.google.protobuf.GeneratedMessageV3.Builder<Kvrpcpb.PessimisticLockResponse.Builder>public Kvrpcpb.PessimisticLockResponse.Builder setRepeatedField(com.google.protobuf.Descriptors.FieldDescriptor field, int index, Object value)
setRepeatedField in interface com.google.protobuf.Message.BuildersetRepeatedField in class com.google.protobuf.GeneratedMessageV3.Builder<Kvrpcpb.PessimisticLockResponse.Builder>public Kvrpcpb.PessimisticLockResponse.Builder addRepeatedField(com.google.protobuf.Descriptors.FieldDescriptor field, Object value)
addRepeatedField in interface com.google.protobuf.Message.BuilderaddRepeatedField in class com.google.protobuf.GeneratedMessageV3.Builder<Kvrpcpb.PessimisticLockResponse.Builder>public Kvrpcpb.PessimisticLockResponse.Builder mergeFrom(com.google.protobuf.Message other)
mergeFrom in interface com.google.protobuf.Message.BuildermergeFrom in class com.google.protobuf.AbstractMessage.Builder<Kvrpcpb.PessimisticLockResponse.Builder>public Kvrpcpb.PessimisticLockResponse.Builder mergeFrom(Kvrpcpb.PessimisticLockResponse other)
public final boolean isInitialized()
isInitialized in interface com.google.protobuf.MessageLiteOrBuilderisInitialized in class com.google.protobuf.GeneratedMessageV3.Builder<Kvrpcpb.PessimisticLockResponse.Builder>public Kvrpcpb.PessimisticLockResponse.Builder mergeFrom(com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws IOException
mergeFrom in interface com.google.protobuf.Message.BuildermergeFrom in interface com.google.protobuf.MessageLite.BuildermergeFrom in class com.google.protobuf.AbstractMessage.Builder<Kvrpcpb.PessimisticLockResponse.Builder>IOExceptionpublic boolean hasRegionError()
.errorpb.Error region_error = 1;hasRegionError in interface Kvrpcpb.PessimisticLockResponseOrBuilderpublic Errorpb.Error getRegionError()
.errorpb.Error region_error = 1;getRegionError in interface Kvrpcpb.PessimisticLockResponseOrBuilderpublic Kvrpcpb.PessimisticLockResponse.Builder setRegionError(Errorpb.Error value)
.errorpb.Error region_error = 1;public Kvrpcpb.PessimisticLockResponse.Builder setRegionError(Errorpb.Error.Builder builderForValue)
.errorpb.Error region_error = 1;public Kvrpcpb.PessimisticLockResponse.Builder mergeRegionError(Errorpb.Error value)
.errorpb.Error region_error = 1;public Kvrpcpb.PessimisticLockResponse.Builder clearRegionError()
.errorpb.Error region_error = 1;public Errorpb.Error.Builder getRegionErrorBuilder()
.errorpb.Error region_error = 1;public Errorpb.ErrorOrBuilder getRegionErrorOrBuilder()
.errorpb.Error region_error = 1;getRegionErrorOrBuilder in interface Kvrpcpb.PessimisticLockResponseOrBuilderpublic List<Kvrpcpb.KeyError> getErrorsList()
repeated .kvrpcpb.KeyError errors = 2;getErrorsList in interface Kvrpcpb.PessimisticLockResponseOrBuilderpublic int getErrorsCount()
repeated .kvrpcpb.KeyError errors = 2;getErrorsCount in interface Kvrpcpb.PessimisticLockResponseOrBuilderpublic Kvrpcpb.KeyError getErrors(int index)
repeated .kvrpcpb.KeyError errors = 2;getErrors in interface Kvrpcpb.PessimisticLockResponseOrBuilderpublic Kvrpcpb.PessimisticLockResponse.Builder setErrors(int index, Kvrpcpb.KeyError value)
repeated .kvrpcpb.KeyError errors = 2;public Kvrpcpb.PessimisticLockResponse.Builder setErrors(int index, Kvrpcpb.KeyError.Builder builderForValue)
repeated .kvrpcpb.KeyError errors = 2;public Kvrpcpb.PessimisticLockResponse.Builder addErrors(Kvrpcpb.KeyError value)
repeated .kvrpcpb.KeyError errors = 2;public Kvrpcpb.PessimisticLockResponse.Builder addErrors(int index, Kvrpcpb.KeyError value)
repeated .kvrpcpb.KeyError errors = 2;public Kvrpcpb.PessimisticLockResponse.Builder addErrors(Kvrpcpb.KeyError.Builder builderForValue)
repeated .kvrpcpb.KeyError errors = 2;public Kvrpcpb.PessimisticLockResponse.Builder addErrors(int index, Kvrpcpb.KeyError.Builder builderForValue)
repeated .kvrpcpb.KeyError errors = 2;public Kvrpcpb.PessimisticLockResponse.Builder addAllErrors(Iterable<? extends Kvrpcpb.KeyError> values)
repeated .kvrpcpb.KeyError errors = 2;public Kvrpcpb.PessimisticLockResponse.Builder clearErrors()
repeated .kvrpcpb.KeyError errors = 2;public Kvrpcpb.PessimisticLockResponse.Builder removeErrors(int index)
repeated .kvrpcpb.KeyError errors = 2;public Kvrpcpb.KeyError.Builder getErrorsBuilder(int index)
repeated .kvrpcpb.KeyError errors = 2;public Kvrpcpb.KeyErrorOrBuilder getErrorsOrBuilder(int index)
repeated .kvrpcpb.KeyError errors = 2;getErrorsOrBuilder in interface Kvrpcpb.PessimisticLockResponseOrBuilderpublic List<? extends Kvrpcpb.KeyErrorOrBuilder> getErrorsOrBuilderList()
repeated .kvrpcpb.KeyError errors = 2;getErrorsOrBuilderList in interface Kvrpcpb.PessimisticLockResponseOrBuilderpublic Kvrpcpb.KeyError.Builder addErrorsBuilder()
repeated .kvrpcpb.KeyError errors = 2;public Kvrpcpb.KeyError.Builder addErrorsBuilder(int index)
repeated .kvrpcpb.KeyError errors = 2;public List<Kvrpcpb.KeyError.Builder> getErrorsBuilderList()
repeated .kvrpcpb.KeyError errors = 2;@Deprecated public long getCommitTs()
It carries the latest value and its commit ts if force in PessimisticLockRequest is true.
uint64 commit_ts = 3 [deprecated = true];getCommitTs in interface Kvrpcpb.PessimisticLockResponseOrBuilder@Deprecated public Kvrpcpb.PessimisticLockResponse.Builder setCommitTs(long value)
It carries the latest value and its commit ts if force in PessimisticLockRequest is true.
uint64 commit_ts = 3 [deprecated = true];value - The commitTs to set.@Deprecated public Kvrpcpb.PessimisticLockResponse.Builder clearCommitTs()
It carries the latest value and its commit ts if force in PessimisticLockRequest is true.
uint64 commit_ts = 3 [deprecated = true];@Deprecated public com.google.protobuf.ByteString getValue()
bytes value = 4 [deprecated = true];getValue in interface Kvrpcpb.PessimisticLockResponseOrBuilder@Deprecated public Kvrpcpb.PessimisticLockResponse.Builder setValue(com.google.protobuf.ByteString value)
bytes value = 4 [deprecated = true];value - The value to set.@Deprecated public Kvrpcpb.PessimisticLockResponse.Builder clearValue()
bytes value = 4 [deprecated = true];public List<com.google.protobuf.ByteString> getValuesList()
The values is set if 'return_values' is true in the request and no error. If 'force' is true, this field is not used.
repeated bytes values = 5;getValuesList in interface Kvrpcpb.PessimisticLockResponseOrBuilderpublic int getValuesCount()
The values is set if 'return_values' is true in the request and no error. If 'force' is true, this field is not used.
repeated bytes values = 5;getValuesCount in interface Kvrpcpb.PessimisticLockResponseOrBuilderpublic com.google.protobuf.ByteString getValues(int index)
The values is set if 'return_values' is true in the request and no error. If 'force' is true, this field is not used.
repeated bytes values = 5;getValues in interface Kvrpcpb.PessimisticLockResponseOrBuilderindex - The index of the element to return.public Kvrpcpb.PessimisticLockResponse.Builder setValues(int index, com.google.protobuf.ByteString value)
The values is set if 'return_values' is true in the request and no error. If 'force' is true, this field is not used.
repeated bytes values = 5;index - The index to set the value at.value - The values to set.public Kvrpcpb.PessimisticLockResponse.Builder addValues(com.google.protobuf.ByteString value)
The values is set if 'return_values' is true in the request and no error. If 'force' is true, this field is not used.
repeated bytes values = 5;value - The values to add.public Kvrpcpb.PessimisticLockResponse.Builder addAllValues(Iterable<? extends com.google.protobuf.ByteString> values)
The values is set if 'return_values' is true in the request and no error. If 'force' is true, this field is not used.
repeated bytes values = 5;values - The values to add.public Kvrpcpb.PessimisticLockResponse.Builder clearValues()
The values is set if 'return_values' is true in the request and no error. If 'force' is true, this field is not used.
repeated bytes values = 5;public List<Boolean> getNotFoundsList()
Indicates whether the values at the same index is correspond to an existing key. In legacy TiKV, this field is not used even 'force' is false. In that case, an empty value indicates two possible situations: (1) the key does not exist. (2) the key exists but the value is empty.
repeated bool not_founds = 6;getNotFoundsList in interface Kvrpcpb.PessimisticLockResponseOrBuilderpublic int getNotFoundsCount()
Indicates whether the values at the same index is correspond to an existing key. In legacy TiKV, this field is not used even 'force' is false. In that case, an empty value indicates two possible situations: (1) the key does not exist. (2) the key exists but the value is empty.
repeated bool not_founds = 6;getNotFoundsCount in interface Kvrpcpb.PessimisticLockResponseOrBuilderpublic boolean getNotFounds(int index)
Indicates whether the values at the same index is correspond to an existing key. In legacy TiKV, this field is not used even 'force' is false. In that case, an empty value indicates two possible situations: (1) the key does not exist. (2) the key exists but the value is empty.
repeated bool not_founds = 6;getNotFounds in interface Kvrpcpb.PessimisticLockResponseOrBuilderindex - The index of the element to return.public Kvrpcpb.PessimisticLockResponse.Builder setNotFounds(int index, boolean value)
Indicates whether the values at the same index is correspond to an existing key. In legacy TiKV, this field is not used even 'force' is false. In that case, an empty value indicates two possible situations: (1) the key does not exist. (2) the key exists but the value is empty.
repeated bool not_founds = 6;index - The index to set the value at.value - The notFounds to set.public Kvrpcpb.PessimisticLockResponse.Builder addNotFounds(boolean value)
Indicates whether the values at the same index is correspond to an existing key. In legacy TiKV, this field is not used even 'force' is false. In that case, an empty value indicates two possible situations: (1) the key does not exist. (2) the key exists but the value is empty.
repeated bool not_founds = 6;value - The notFounds to add.public Kvrpcpb.PessimisticLockResponse.Builder addAllNotFounds(Iterable<? extends Boolean> values)
Indicates whether the values at the same index is correspond to an existing key. In legacy TiKV, this field is not used even 'force' is false. In that case, an empty value indicates two possible situations: (1) the key does not exist. (2) the key exists but the value is empty.
repeated bool not_founds = 6;values - The notFounds to add.public Kvrpcpb.PessimisticLockResponse.Builder clearNotFounds()
Indicates whether the values at the same index is correspond to an existing key. In legacy TiKV, this field is not used even 'force' is false. In that case, an empty value indicates two possible situations: (1) the key does not exist. (2) the key exists but the value is empty.
repeated bool not_founds = 6;public final Kvrpcpb.PessimisticLockResponse.Builder setUnknownFields(com.google.protobuf.UnknownFieldSet unknownFields)
setUnknownFields in interface com.google.protobuf.Message.BuildersetUnknownFields in class com.google.protobuf.GeneratedMessageV3.Builder<Kvrpcpb.PessimisticLockResponse.Builder>public final Kvrpcpb.PessimisticLockResponse.Builder mergeUnknownFields(com.google.protobuf.UnknownFieldSet unknownFields)
mergeUnknownFields in interface com.google.protobuf.Message.BuildermergeUnknownFields in class com.google.protobuf.GeneratedMessageV3.Builder<Kvrpcpb.PessimisticLockResponse.Builder>Copyright © 2025 PingCAP. All rights reserved.