code: public final Product updateProduct(Product product, FieldMask updateMask) {
  
      UpdateProductRequest request =
          UpdateProductRequest.newBuilder().setProduct(product).setUpdateMask(updateMask).build();
      return updateProduct(request);
    }
docs: Makes changes to a Product resource. Only the `display_name`, `description`, and `labels`
  fields can be updated right now.
  
  <p>If labels are updated, the change will not be reflected in queries until the next index
  time.
  
  <p>Possible errors:
  
  <p>&#42; Returns NOT_FOUND if the Product does not exist. &#42; Returns INVALID_ARGUMENT if
  display_name is present in update_mask but is missing from the request or longer than 4096
  characters. &#42; Returns INVALID_ARGUMENT if description is present in update_mask but is
  longer than 4096 characters. &#42; Returns INVALID_ARGUMENT if product_category is present in
  update_mask.
  
  <p>Sample code:
  
  <pre><code>
  try (ProductSearchClient productSearchClient = ProductSearchClient.create()) {
  Product product = Product.newBuilder().build();
  FieldMask updateMask = FieldMask.newBuilder().build();
  Product response = productSearchClient.updateProduct(product, updateMask);
  }
  </code></pre>
  
  @param product The Product resource which replaces the one on the server. product.name is
  immutable.
  @param updateMask The [FieldMask][google.protobuf.FieldMask] that specifies which fields to
  update. If update_mask isn't specified, all mutable fields are to be updated. Valid mask
  paths include `product_labels`, `display_name`, and `description`.
  @throws com.google.api.gax.rpc.ApiException if the remote call fails