Class WeightedCluster.Builder

java.lang.Object
com.google.protobuf.AbstractMessageLite.Builder
com.google.protobuf.AbstractMessage.Builder<WeightedCluster.Builder>
com.google.protobuf.GeneratedMessage.Builder<WeightedCluster.Builder>
io.envoyproxy.envoy.config.route.v3.WeightedCluster.Builder
All Implemented Interfaces:
com.google.protobuf.Message.Builder, com.google.protobuf.MessageLite.Builder, com.google.protobuf.MessageLiteOrBuilder, com.google.protobuf.MessageOrBuilder, WeightedClusterOrBuilder, Cloneable
Enclosing class:
WeightedCluster

public static final class WeightedCluster.Builder extends com.google.protobuf.GeneratedMessage.Builder<WeightedCluster.Builder> implements WeightedClusterOrBuilder
 Compared to the :ref:`cluster <envoy_v3_api_field_config.route.v3.RouteAction.cluster>` field that specifies a
 single upstream cluster as the target of a request, the :ref:`weighted_clusters
 <envoy_v3_api_field_config.route.v3.RouteAction.weighted_clusters>` option allows for specification of
 multiple upstream clusters along with weights that indicate the percentage of
 traffic to be forwarded to each cluster. The router selects an upstream cluster based on the
 weights.
 
Protobuf type envoy.config.route.v3.WeightedCluster
  • Field Details

    • randomValueSpecifierCase_

      private int randomValueSpecifierCase_
    • randomValueSpecifier_

      private Object randomValueSpecifier_
    • bitField0_

      private int bitField0_
    • clusters_

      private List<WeightedCluster.ClusterWeight> clusters_
    • clustersBuilder_

      private com.google.protobuf.RepeatedFieldBuilder<WeightedCluster.ClusterWeight,WeightedCluster.ClusterWeight.Builder,WeightedCluster.ClusterWeightOrBuilder> clustersBuilder_
    • totalWeight_

      private com.google.protobuf.UInt32Value totalWeight_
    • totalWeightBuilder_

      private com.google.protobuf.SingleFieldBuilder<com.google.protobuf.UInt32Value,com.google.protobuf.UInt32Value.Builder,com.google.protobuf.UInt32ValueOrBuilder> totalWeightBuilder_
    • runtimeKeyPrefix_

      private Object runtimeKeyPrefix_
  • Constructor Details

    • Builder

      private Builder()
    • Builder

      private Builder(com.google.protobuf.AbstractMessage.BuilderParent parent)
  • Method Details

    • getDescriptor

      public static final com.google.protobuf.Descriptors.Descriptor getDescriptor()
    • internalGetFieldAccessorTable

      protected com.google.protobuf.GeneratedMessage.FieldAccessorTable internalGetFieldAccessorTable()
      Specified by:
      internalGetFieldAccessorTable in class com.google.protobuf.GeneratedMessage.Builder<WeightedCluster.Builder>
    • maybeForceBuilderInitialization

      private void maybeForceBuilderInitialization()
    • clear

      public WeightedCluster.Builder clear()
      Specified by:
      clear in interface com.google.protobuf.Message.Builder
      Specified by:
      clear in interface com.google.protobuf.MessageLite.Builder
      Overrides:
      clear in class com.google.protobuf.GeneratedMessage.Builder<WeightedCluster.Builder>
    • getDescriptorForType

      public com.google.protobuf.Descriptors.Descriptor getDescriptorForType()
      Specified by:
      getDescriptorForType in interface com.google.protobuf.Message.Builder
      Specified by:
      getDescriptorForType in interface com.google.protobuf.MessageOrBuilder
      Overrides:
      getDescriptorForType in class com.google.protobuf.GeneratedMessage.Builder<WeightedCluster.Builder>
    • getDefaultInstanceForType

      public WeightedCluster getDefaultInstanceForType()
      Specified by:
      getDefaultInstanceForType in interface com.google.protobuf.MessageLiteOrBuilder
      Specified by:
      getDefaultInstanceForType in interface com.google.protobuf.MessageOrBuilder
    • build

      public WeightedCluster build()
      Specified by:
      build in interface com.google.protobuf.Message.Builder
      Specified by:
      build in interface com.google.protobuf.MessageLite.Builder
    • buildPartial

      public WeightedCluster buildPartial()
      Specified by:
      buildPartial in interface com.google.protobuf.Message.Builder
      Specified by:
      buildPartial in interface com.google.protobuf.MessageLite.Builder
    • buildPartialRepeatedFields

      private void buildPartialRepeatedFields(WeightedCluster result)
    • buildPartial0

      private void buildPartial0(WeightedCluster result)
    • buildPartialOneofs

      private void buildPartialOneofs(WeightedCluster result)
    • mergeFrom

      public WeightedCluster.Builder mergeFrom(com.google.protobuf.Message other)
      Specified by:
      mergeFrom in interface com.google.protobuf.Message.Builder
      Overrides:
      mergeFrom in class com.google.protobuf.AbstractMessage.Builder<WeightedCluster.Builder>
    • mergeFrom

      public WeightedCluster.Builder mergeFrom(WeightedCluster other)
    • isInitialized

      public final boolean isInitialized()
      Specified by:
      isInitialized in interface com.google.protobuf.MessageLiteOrBuilder
      Overrides:
      isInitialized in class com.google.protobuf.GeneratedMessage.Builder<WeightedCluster.Builder>
    • mergeFrom

      public WeightedCluster.Builder mergeFrom(com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws IOException
      Specified by:
      mergeFrom in interface com.google.protobuf.Message.Builder
      Specified by:
      mergeFrom in interface com.google.protobuf.MessageLite.Builder
      Overrides:
      mergeFrom in class com.google.protobuf.AbstractMessage.Builder<WeightedCluster.Builder>
      Throws:
      IOException
    • getRandomValueSpecifierCase

      public WeightedCluster.RandomValueSpecifierCase getRandomValueSpecifierCase()
      Specified by:
      getRandomValueSpecifierCase in interface WeightedClusterOrBuilder
    • clearRandomValueSpecifier

      public WeightedCluster.Builder clearRandomValueSpecifier()
    • ensureClustersIsMutable

      private void ensureClustersIsMutable()
    • getClustersList

      public List<WeightedCluster.ClusterWeight> getClustersList()
       Specifies one or more upstream clusters associated with the route.
       
      repeated .envoy.config.route.v3.WeightedCluster.ClusterWeight clusters = 1 [(.validate.rules) = { ... }
      Specified by:
      getClustersList in interface WeightedClusterOrBuilder
    • getClustersCount

      public int getClustersCount()
       Specifies one or more upstream clusters associated with the route.
       
      repeated .envoy.config.route.v3.WeightedCluster.ClusterWeight clusters = 1 [(.validate.rules) = { ... }
      Specified by:
      getClustersCount in interface WeightedClusterOrBuilder
    • getClusters

      public WeightedCluster.ClusterWeight getClusters(int index)
       Specifies one or more upstream clusters associated with the route.
       
      repeated .envoy.config.route.v3.WeightedCluster.ClusterWeight clusters = 1 [(.validate.rules) = { ... }
      Specified by:
      getClusters in interface WeightedClusterOrBuilder
    • setClusters

      public WeightedCluster.Builder setClusters(int index, WeightedCluster.ClusterWeight value)
       Specifies one or more upstream clusters associated with the route.
       
      repeated .envoy.config.route.v3.WeightedCluster.ClusterWeight clusters = 1 [(.validate.rules) = { ... }
    • setClusters

      public WeightedCluster.Builder setClusters(int index, WeightedCluster.ClusterWeight.Builder builderForValue)
       Specifies one or more upstream clusters associated with the route.
       
      repeated .envoy.config.route.v3.WeightedCluster.ClusterWeight clusters = 1 [(.validate.rules) = { ... }
    • addClusters

       Specifies one or more upstream clusters associated with the route.
       
      repeated .envoy.config.route.v3.WeightedCluster.ClusterWeight clusters = 1 [(.validate.rules) = { ... }
    • addClusters

      public WeightedCluster.Builder addClusters(int index, WeightedCluster.ClusterWeight value)
       Specifies one or more upstream clusters associated with the route.
       
      repeated .envoy.config.route.v3.WeightedCluster.ClusterWeight clusters = 1 [(.validate.rules) = { ... }
    • addClusters

      public WeightedCluster.Builder addClusters(WeightedCluster.ClusterWeight.Builder builderForValue)
       Specifies one or more upstream clusters associated with the route.
       
      repeated .envoy.config.route.v3.WeightedCluster.ClusterWeight clusters = 1 [(.validate.rules) = { ... }
    • addClusters

      public WeightedCluster.Builder addClusters(int index, WeightedCluster.ClusterWeight.Builder builderForValue)
       Specifies one or more upstream clusters associated with the route.
       
      repeated .envoy.config.route.v3.WeightedCluster.ClusterWeight clusters = 1 [(.validate.rules) = { ... }
    • addAllClusters

      public WeightedCluster.Builder addAllClusters(Iterable<? extends WeightedCluster.ClusterWeight> values)
       Specifies one or more upstream clusters associated with the route.
       
      repeated .envoy.config.route.v3.WeightedCluster.ClusterWeight clusters = 1 [(.validate.rules) = { ... }
    • clearClusters

      public WeightedCluster.Builder clearClusters()
       Specifies one or more upstream clusters associated with the route.
       
      repeated .envoy.config.route.v3.WeightedCluster.ClusterWeight clusters = 1 [(.validate.rules) = { ... }
    • removeClusters

      public WeightedCluster.Builder removeClusters(int index)
       Specifies one or more upstream clusters associated with the route.
       
      repeated .envoy.config.route.v3.WeightedCluster.ClusterWeight clusters = 1 [(.validate.rules) = { ... }
    • getClustersBuilder

      public WeightedCluster.ClusterWeight.Builder getClustersBuilder(int index)
       Specifies one or more upstream clusters associated with the route.
       
      repeated .envoy.config.route.v3.WeightedCluster.ClusterWeight clusters = 1 [(.validate.rules) = { ... }
    • getClustersOrBuilder

      public WeightedCluster.ClusterWeightOrBuilder getClustersOrBuilder(int index)
       Specifies one or more upstream clusters associated with the route.
       
      repeated .envoy.config.route.v3.WeightedCluster.ClusterWeight clusters = 1 [(.validate.rules) = { ... }
      Specified by:
      getClustersOrBuilder in interface WeightedClusterOrBuilder
    • getClustersOrBuilderList

      public List<? extends WeightedCluster.ClusterWeightOrBuilder> getClustersOrBuilderList()
       Specifies one or more upstream clusters associated with the route.
       
      repeated .envoy.config.route.v3.WeightedCluster.ClusterWeight clusters = 1 [(.validate.rules) = { ... }
      Specified by:
      getClustersOrBuilderList in interface WeightedClusterOrBuilder
    • addClustersBuilder

      public WeightedCluster.ClusterWeight.Builder addClustersBuilder()
       Specifies one or more upstream clusters associated with the route.
       
      repeated .envoy.config.route.v3.WeightedCluster.ClusterWeight clusters = 1 [(.validate.rules) = { ... }
    • addClustersBuilder

      public WeightedCluster.ClusterWeight.Builder addClustersBuilder(int index)
       Specifies one or more upstream clusters associated with the route.
       
      repeated .envoy.config.route.v3.WeightedCluster.ClusterWeight clusters = 1 [(.validate.rules) = { ... }
    • getClustersBuilderList

      public List<WeightedCluster.ClusterWeight.Builder> getClustersBuilderList()
       Specifies one or more upstream clusters associated with the route.
       
      repeated .envoy.config.route.v3.WeightedCluster.ClusterWeight clusters = 1 [(.validate.rules) = { ... }
    • internalGetClustersFieldBuilder

      private com.google.protobuf.RepeatedFieldBuilder<WeightedCluster.ClusterWeight,WeightedCluster.ClusterWeight.Builder,WeightedCluster.ClusterWeightOrBuilder> internalGetClustersFieldBuilder()
    • hasTotalWeight

      @Deprecated public boolean hasTotalWeight()
      Deprecated.
      envoy.config.route.v3.WeightedCluster.total_weight is deprecated. See envoy/config/route/v3/route_components.proto;l=477
       Specifies the total weight across all clusters. The sum of all cluster weights must equal this
       value, if this is greater than 0.
       This field is now deprecated, and the client will use the sum of all
       cluster weights. It is up to the management server to supply the correct weights.
       
      .google.protobuf.UInt32Value total_weight = 3 [deprecated = true, (.envoy.annotations.deprecated_at_minor_version) = "3.0"];
      Specified by:
      hasTotalWeight in interface WeightedClusterOrBuilder
      Returns:
      Whether the totalWeight field is set.
    • getTotalWeight

      @Deprecated public com.google.protobuf.UInt32Value getTotalWeight()
      Deprecated.
      envoy.config.route.v3.WeightedCluster.total_weight is deprecated. See envoy/config/route/v3/route_components.proto;l=477
       Specifies the total weight across all clusters. The sum of all cluster weights must equal this
       value, if this is greater than 0.
       This field is now deprecated, and the client will use the sum of all
       cluster weights. It is up to the management server to supply the correct weights.
       
      .google.protobuf.UInt32Value total_weight = 3 [deprecated = true, (.envoy.annotations.deprecated_at_minor_version) = "3.0"];
      Specified by:
      getTotalWeight in interface WeightedClusterOrBuilder
      Returns:
      The totalWeight.
    • setTotalWeight

      @Deprecated public WeightedCluster.Builder setTotalWeight(com.google.protobuf.UInt32Value value)
      Deprecated.
       Specifies the total weight across all clusters. The sum of all cluster weights must equal this
       value, if this is greater than 0.
       This field is now deprecated, and the client will use the sum of all
       cluster weights. It is up to the management server to supply the correct weights.
       
      .google.protobuf.UInt32Value total_weight = 3 [deprecated = true, (.envoy.annotations.deprecated_at_minor_version) = "3.0"];
    • setTotalWeight

      @Deprecated public WeightedCluster.Builder setTotalWeight(com.google.protobuf.UInt32Value.Builder builderForValue)
      Deprecated.
       Specifies the total weight across all clusters. The sum of all cluster weights must equal this
       value, if this is greater than 0.
       This field is now deprecated, and the client will use the sum of all
       cluster weights. It is up to the management server to supply the correct weights.
       
      .google.protobuf.UInt32Value total_weight = 3 [deprecated = true, (.envoy.annotations.deprecated_at_minor_version) = "3.0"];
    • mergeTotalWeight

      @Deprecated public WeightedCluster.Builder mergeTotalWeight(com.google.protobuf.UInt32Value value)
      Deprecated.
       Specifies the total weight across all clusters. The sum of all cluster weights must equal this
       value, if this is greater than 0.
       This field is now deprecated, and the client will use the sum of all
       cluster weights. It is up to the management server to supply the correct weights.
       
      .google.protobuf.UInt32Value total_weight = 3 [deprecated = true, (.envoy.annotations.deprecated_at_minor_version) = "3.0"];
    • clearTotalWeight

      @Deprecated public WeightedCluster.Builder clearTotalWeight()
      Deprecated.
       Specifies the total weight across all clusters. The sum of all cluster weights must equal this
       value, if this is greater than 0.
       This field is now deprecated, and the client will use the sum of all
       cluster weights. It is up to the management server to supply the correct weights.
       
      .google.protobuf.UInt32Value total_weight = 3 [deprecated = true, (.envoy.annotations.deprecated_at_minor_version) = "3.0"];
    • getTotalWeightBuilder

      @Deprecated public com.google.protobuf.UInt32Value.Builder getTotalWeightBuilder()
      Deprecated.
       Specifies the total weight across all clusters. The sum of all cluster weights must equal this
       value, if this is greater than 0.
       This field is now deprecated, and the client will use the sum of all
       cluster weights. It is up to the management server to supply the correct weights.
       
      .google.protobuf.UInt32Value total_weight = 3 [deprecated = true, (.envoy.annotations.deprecated_at_minor_version) = "3.0"];
    • getTotalWeightOrBuilder

      @Deprecated public com.google.protobuf.UInt32ValueOrBuilder getTotalWeightOrBuilder()
      Deprecated.
       Specifies the total weight across all clusters. The sum of all cluster weights must equal this
       value, if this is greater than 0.
       This field is now deprecated, and the client will use the sum of all
       cluster weights. It is up to the management server to supply the correct weights.
       
      .google.protobuf.UInt32Value total_weight = 3 [deprecated = true, (.envoy.annotations.deprecated_at_minor_version) = "3.0"];
      Specified by:
      getTotalWeightOrBuilder in interface WeightedClusterOrBuilder
    • internalGetTotalWeightFieldBuilder

      private com.google.protobuf.SingleFieldBuilder<com.google.protobuf.UInt32Value,com.google.protobuf.UInt32Value.Builder,com.google.protobuf.UInt32ValueOrBuilder> internalGetTotalWeightFieldBuilder()
       Specifies the total weight across all clusters. The sum of all cluster weights must equal this
       value, if this is greater than 0.
       This field is now deprecated, and the client will use the sum of all
       cluster weights. It is up to the management server to supply the correct weights.
       
      .google.protobuf.UInt32Value total_weight = 3 [deprecated = true, (.envoy.annotations.deprecated_at_minor_version) = "3.0"];
    • getRuntimeKeyPrefix

      public String getRuntimeKeyPrefix()
       Specifies the runtime key prefix that should be used to construct the
       runtime keys associated with each cluster. When the ``runtime_key_prefix`` is
       specified, the router will look for weights associated with each upstream
       cluster under the key ``runtime_key_prefix`` + ``.`` + ``cluster[i].name`` where
       ``cluster[i]`` denotes an entry in the clusters array field. If the runtime
       key for the cluster does not exist, the value specified in the
       configuration file will be used as the default weight. See the :ref:`runtime documentation
       <operations_runtime>` for how key names map to the underlying implementation.
       
      string runtime_key_prefix = 2;
      Specified by:
      getRuntimeKeyPrefix in interface WeightedClusterOrBuilder
      Returns:
      The runtimeKeyPrefix.
    • getRuntimeKeyPrefixBytes

      public com.google.protobuf.ByteString getRuntimeKeyPrefixBytes()
       Specifies the runtime key prefix that should be used to construct the
       runtime keys associated with each cluster. When the ``runtime_key_prefix`` is
       specified, the router will look for weights associated with each upstream
       cluster under the key ``runtime_key_prefix`` + ``.`` + ``cluster[i].name`` where
       ``cluster[i]`` denotes an entry in the clusters array field. If the runtime
       key for the cluster does not exist, the value specified in the
       configuration file will be used as the default weight. See the :ref:`runtime documentation
       <operations_runtime>` for how key names map to the underlying implementation.
       
      string runtime_key_prefix = 2;
      Specified by:
      getRuntimeKeyPrefixBytes in interface WeightedClusterOrBuilder
      Returns:
      The bytes for runtimeKeyPrefix.
    • setRuntimeKeyPrefix

      public WeightedCluster.Builder setRuntimeKeyPrefix(String value)
       Specifies the runtime key prefix that should be used to construct the
       runtime keys associated with each cluster. When the ``runtime_key_prefix`` is
       specified, the router will look for weights associated with each upstream
       cluster under the key ``runtime_key_prefix`` + ``.`` + ``cluster[i].name`` where
       ``cluster[i]`` denotes an entry in the clusters array field. If the runtime
       key for the cluster does not exist, the value specified in the
       configuration file will be used as the default weight. See the :ref:`runtime documentation
       <operations_runtime>` for how key names map to the underlying implementation.
       
      string runtime_key_prefix = 2;
      Parameters:
      value - The runtimeKeyPrefix to set.
      Returns:
      This builder for chaining.
    • clearRuntimeKeyPrefix

      public WeightedCluster.Builder clearRuntimeKeyPrefix()
       Specifies the runtime key prefix that should be used to construct the
       runtime keys associated with each cluster. When the ``runtime_key_prefix`` is
       specified, the router will look for weights associated with each upstream
       cluster under the key ``runtime_key_prefix`` + ``.`` + ``cluster[i].name`` where
       ``cluster[i]`` denotes an entry in the clusters array field. If the runtime
       key for the cluster does not exist, the value specified in the
       configuration file will be used as the default weight. See the :ref:`runtime documentation
       <operations_runtime>` for how key names map to the underlying implementation.
       
      string runtime_key_prefix = 2;
      Returns:
      This builder for chaining.
    • setRuntimeKeyPrefixBytes

      public WeightedCluster.Builder setRuntimeKeyPrefixBytes(com.google.protobuf.ByteString value)
       Specifies the runtime key prefix that should be used to construct the
       runtime keys associated with each cluster. When the ``runtime_key_prefix`` is
       specified, the router will look for weights associated with each upstream
       cluster under the key ``runtime_key_prefix`` + ``.`` + ``cluster[i].name`` where
       ``cluster[i]`` denotes an entry in the clusters array field. If the runtime
       key for the cluster does not exist, the value specified in the
       configuration file will be used as the default weight. See the :ref:`runtime documentation
       <operations_runtime>` for how key names map to the underlying implementation.
       
      string runtime_key_prefix = 2;
      Parameters:
      value - The bytes for runtimeKeyPrefix to set.
      Returns:
      This builder for chaining.
    • hasHeaderName

      public boolean hasHeaderName()
       Specifies the header name that is used to look up the random value passed in the request header.
       This is used to ensure consistent cluster picking across multiple proxy levels for weighted traffic.
       If header is not present or invalid, Envoy will fall back to use the internally generated random value.
       This header is expected to be single-valued header as we only want to have one selected value throughout
       the process for the consistency. And the value is a unsigned number between 0 and UINT64_MAX.
       
      string header_name = 4 [(.validate.rules) = { ... }
      Specified by:
      hasHeaderName in interface WeightedClusterOrBuilder
      Returns:
      Whether the headerName field is set.
    • getHeaderName

      public String getHeaderName()
       Specifies the header name that is used to look up the random value passed in the request header.
       This is used to ensure consistent cluster picking across multiple proxy levels for weighted traffic.
       If header is not present or invalid, Envoy will fall back to use the internally generated random value.
       This header is expected to be single-valued header as we only want to have one selected value throughout
       the process for the consistency. And the value is a unsigned number between 0 and UINT64_MAX.
       
      string header_name = 4 [(.validate.rules) = { ... }
      Specified by:
      getHeaderName in interface WeightedClusterOrBuilder
      Returns:
      The headerName.
    • getHeaderNameBytes

      public com.google.protobuf.ByteString getHeaderNameBytes()
       Specifies the header name that is used to look up the random value passed in the request header.
       This is used to ensure consistent cluster picking across multiple proxy levels for weighted traffic.
       If header is not present or invalid, Envoy will fall back to use the internally generated random value.
       This header is expected to be single-valued header as we only want to have one selected value throughout
       the process for the consistency. And the value is a unsigned number between 0 and UINT64_MAX.
       
      string header_name = 4 [(.validate.rules) = { ... }
      Specified by:
      getHeaderNameBytes in interface WeightedClusterOrBuilder
      Returns:
      The bytes for headerName.
    • setHeaderName

      public WeightedCluster.Builder setHeaderName(String value)
       Specifies the header name that is used to look up the random value passed in the request header.
       This is used to ensure consistent cluster picking across multiple proxy levels for weighted traffic.
       If header is not present or invalid, Envoy will fall back to use the internally generated random value.
       This header is expected to be single-valued header as we only want to have one selected value throughout
       the process for the consistency. And the value is a unsigned number between 0 and UINT64_MAX.
       
      string header_name = 4 [(.validate.rules) = { ... }
      Parameters:
      value - The headerName to set.
      Returns:
      This builder for chaining.
    • clearHeaderName

      public WeightedCluster.Builder clearHeaderName()
       Specifies the header name that is used to look up the random value passed in the request header.
       This is used to ensure consistent cluster picking across multiple proxy levels for weighted traffic.
       If header is not present or invalid, Envoy will fall back to use the internally generated random value.
       This header is expected to be single-valued header as we only want to have one selected value throughout
       the process for the consistency. And the value is a unsigned number between 0 and UINT64_MAX.
       
      string header_name = 4 [(.validate.rules) = { ... }
      Returns:
      This builder for chaining.
    • setHeaderNameBytes

      public WeightedCluster.Builder setHeaderNameBytes(com.google.protobuf.ByteString value)
       Specifies the header name that is used to look up the random value passed in the request header.
       This is used to ensure consistent cluster picking across multiple proxy levels for weighted traffic.
       If header is not present or invalid, Envoy will fall back to use the internally generated random value.
       This header is expected to be single-valued header as we only want to have one selected value throughout
       the process for the consistency. And the value is a unsigned number between 0 and UINT64_MAX.
       
      string header_name = 4 [(.validate.rules) = { ... }
      Parameters:
      value - The bytes for headerName to set.
      Returns:
      This builder for chaining.