blob: ab2daa37b4d4c517a563f032dc7881b630605c13 [file] [log] [blame]
/**
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*/
package org.apache.pulsar.common.policies.data;
import static org.apache.pulsar.common.util.FieldParser.value;
import com.fasterxml.jackson.annotation.JsonProperty;
import com.google.common.collect.ImmutableList;
import java.io.Serializable;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
import java.lang.reflect.Field;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Properties;
import java.util.stream.Collectors;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
/**
* Definition of the offload policies.
*/
@Slf4j
@Data
@NoArgsConstructor
public class OffloadPoliciesImpl implements Serializable, OffloadPolicies {
private static final long serialVersionUID = 0L;
public static final List<Field> CONFIGURATION_FIELDS;
static {
List<Field> temp = new ArrayList<>();
Class<OffloadPoliciesImpl> clazz = OffloadPoliciesImpl.class;
Field[] fields = clazz.getDeclaredFields();
for (Field field : fields) {
if (field.isAnnotationPresent(Configuration.class)) {
temp.add(field);
}
}
CONFIGURATION_FIELDS = Collections.unmodifiableList(temp);
}
public static final ImmutableList<String> INTERNAL_SUPPORTED_DRIVER = ImmutableList.of("S3",
"aws-s3", "google-cloud-storage", "filesystem", "azureblob", "aliyun-oss");
public static final ImmutableList<String> DRIVER_NAMES;
static {
String extraDrivers = System.getProperty("pulsar.extra.offload.drivers", "");
if (extraDrivers.trim().isEmpty()) {
DRIVER_NAMES = INTERNAL_SUPPORTED_DRIVER;
} else {
DRIVER_NAMES = ImmutableList.<String>builder()
.addAll(INTERNAL_SUPPORTED_DRIVER)
.addAll(Arrays.stream(StringUtils.split(extraDrivers, ','))
.map(String::trim).collect(Collectors.toSet())).build();
}
}
public static final int DEFAULT_MAX_BLOCK_SIZE_IN_BYTES = 64 * 1024 * 1024; // 64MB
public static final int DEFAULT_READ_BUFFER_SIZE_IN_BYTES = 1024 * 1024; // 1MB
public static final int DEFAULT_OFFLOAD_MAX_THREADS = 2;
public static final int DEFAULT_OFFLOAD_MAX_PREFETCH_ROUNDS = 1;
public static final String DEFAULT_OFFLOADER_DIRECTORY = "./offloaders";
public static final Long DEFAULT_OFFLOAD_THRESHOLD_IN_BYTES = null;
public static final Long DEFAULT_OFFLOAD_DELETION_LAG_IN_MILLIS = null;
public static final String EXTRA_CONFIG_PREFIX = "managedLedgerOffloadExtraConfig";
public static final String OFFLOAD_THRESHOLD_NAME_IN_CONF_FILE =
"managedLedgerOffloadAutoTriggerSizeThresholdBytes";
public static final String DELETION_LAG_NAME_IN_CONF_FILE = "managedLedgerOffloadDeletionLagMs";
public static final OffloadedReadPriority DEFAULT_OFFLOADED_READ_PRIORITY =
OffloadedReadPriority.TIERED_STORAGE_FIRST;
// common config
@Configuration
@JsonProperty(access = JsonProperty.Access.READ_WRITE)
private String offloadersDirectory = DEFAULT_OFFLOADER_DIRECTORY;
@Configuration
@JsonProperty(access = JsonProperty.Access.READ_WRITE)
private String managedLedgerOffloadDriver = null;
@Configuration
@JsonProperty(access = JsonProperty.Access.READ_WRITE)
private Integer managedLedgerOffloadMaxThreads = DEFAULT_OFFLOAD_MAX_THREADS;
@Configuration
@JsonProperty(access = JsonProperty.Access.READ_WRITE)
private Integer managedLedgerOffloadPrefetchRounds = DEFAULT_OFFLOAD_MAX_PREFETCH_ROUNDS;
@Configuration
@JsonProperty(access = JsonProperty.Access.READ_WRITE)
private Long managedLedgerOffloadThresholdInBytes = DEFAULT_OFFLOAD_THRESHOLD_IN_BYTES;
@Configuration
@JsonProperty(access = JsonProperty.Access.READ_WRITE)
private Long managedLedgerOffloadDeletionLagInMillis = DEFAULT_OFFLOAD_DELETION_LAG_IN_MILLIS;
@Configuration
@JsonProperty(access = JsonProperty.Access.READ_WRITE)
private OffloadedReadPriority managedLedgerOffloadedReadPriority = DEFAULT_OFFLOADED_READ_PRIORITY;
@Configuration
@JsonProperty(access = JsonProperty.Access.READ_WRITE)
private Map<String, String> managedLedgerExtraConfigurations = new HashMap<>();
// s3 config, set by service configuration or cli
@Configuration
@JsonProperty(access = JsonProperty.Access.READ_WRITE)
private String s3ManagedLedgerOffloadRegion = null;
@Configuration
@JsonProperty(access = JsonProperty.Access.READ_WRITE)
private String s3ManagedLedgerOffloadBucket = null;
@Configuration
@JsonProperty(access = JsonProperty.Access.READ_WRITE)
private String s3ManagedLedgerOffloadServiceEndpoint = null;
@Configuration
@JsonProperty(access = JsonProperty.Access.READ_WRITE)
private Integer s3ManagedLedgerOffloadMaxBlockSizeInBytes = DEFAULT_MAX_BLOCK_SIZE_IN_BYTES;
@Configuration
@JsonProperty(access = JsonProperty.Access.READ_WRITE)
private Integer s3ManagedLedgerOffloadReadBufferSizeInBytes = DEFAULT_READ_BUFFER_SIZE_IN_BYTES;
// s3 config, set by service configuration
@Configuration
@JsonProperty(access = JsonProperty.Access.READ_WRITE)
private String s3ManagedLedgerOffloadCredentialId = null;
@Configuration
@JsonProperty(access = JsonProperty.Access.READ_WRITE)
private String s3ManagedLedgerOffloadCredentialSecret = null;
@Configuration
@JsonProperty(access = JsonProperty.Access.READ_WRITE)
private String s3ManagedLedgerOffloadRole = null;
@Configuration
@JsonProperty(access = JsonProperty.Access.READ_WRITE)
private String s3ManagedLedgerOffloadRoleSessionName = "pulsar-s3-offload";
// gcs config, set by service configuration or cli
@Configuration
@JsonProperty(access = JsonProperty.Access.READ_WRITE)
private String gcsManagedLedgerOffloadRegion = null;
@Configuration
@JsonProperty(access = JsonProperty.Access.READ_WRITE)
private String gcsManagedLedgerOffloadBucket = null;
@Configuration
@JsonProperty(access = JsonProperty.Access.READ_WRITE)
private Integer gcsManagedLedgerOffloadMaxBlockSizeInBytes = DEFAULT_MAX_BLOCK_SIZE_IN_BYTES;
@Configuration
@JsonProperty(access = JsonProperty.Access.READ_WRITE)
private Integer gcsManagedLedgerOffloadReadBufferSizeInBytes = DEFAULT_READ_BUFFER_SIZE_IN_BYTES;
// gcs config, set by service configuration
@Configuration
@JsonProperty(access = JsonProperty.Access.READ_WRITE)
private String gcsManagedLedgerOffloadServiceAccountKeyFile = null;
// file system config, set by service configuration
@Configuration
@JsonProperty(access = JsonProperty.Access.READ_WRITE)
private String fileSystemProfilePath = null;
@Configuration
@JsonProperty(access = JsonProperty.Access.READ_WRITE)
private String fileSystemURI = null;
// --------- new offload configurations ---------
// they are universal configurations and could be used to `aws-s3`, `google-cloud-storage` or `azureblob`.
@Configuration
@JsonProperty(access = JsonProperty.Access.READ_WRITE)
private String managedLedgerOffloadBucket;
@Configuration
@JsonProperty(access = JsonProperty.Access.READ_WRITE)
private String managedLedgerOffloadRegion;
@Configuration
@JsonProperty(access = JsonProperty.Access.READ_WRITE)
private String managedLedgerOffloadServiceEndpoint;
@Configuration
@JsonProperty(access = JsonProperty.Access.READ_WRITE)
private Integer managedLedgerOffloadMaxBlockSizeInBytes;
@Configuration
@JsonProperty(access = JsonProperty.Access.READ_WRITE)
private Integer managedLedgerOffloadReadBufferSizeInBytes;
public static OffloadPoliciesImpl create(String driver, String region, String bucket, String endpoint,
String role, String roleSessionName,
String credentialId, String credentialSecret,
Integer maxBlockSizeInBytes, Integer readBufferSizeInBytes,
Long offloadThresholdInBytes, Long offloadDeletionLagInMillis,
OffloadedReadPriority readPriority) {
OffloadPoliciesImplBuilder builder = builder()
.managedLedgerOffloadDriver(driver)
.managedLedgerOffloadThresholdInBytes(offloadThresholdInBytes)
.managedLedgerOffloadDeletionLagInMillis(offloadDeletionLagInMillis)
.managedLedgerOffloadBucket(bucket)
.managedLedgerOffloadRegion(region)
.managedLedgerOffloadServiceEndpoint(endpoint)
.managedLedgerOffloadMaxBlockSizeInBytes(maxBlockSizeInBytes)
.managedLedgerOffloadReadBufferSizeInBytes(readBufferSizeInBytes)
.managedLedgerOffloadedReadPriority(readPriority);
if (driver.equalsIgnoreCase(DRIVER_NAMES.get(0)) || driver.equalsIgnoreCase(DRIVER_NAMES.get(1))) {
if (role != null) {
builder.s3ManagedLedgerOffloadRole(role);
}
if (roleSessionName != null) {
builder.s3ManagedLedgerOffloadRoleSessionName(roleSessionName);
}
if (credentialId != null) {
builder.s3ManagedLedgerOffloadCredentialId(credentialId);
}
if (credentialSecret != null) {
builder.s3ManagedLedgerOffloadCredentialSecret(credentialSecret);
}
builder.s3ManagedLedgerOffloadRegion(region)
.s3ManagedLedgerOffloadBucket(bucket)
.s3ManagedLedgerOffloadServiceEndpoint(endpoint)
.s3ManagedLedgerOffloadMaxBlockSizeInBytes(maxBlockSizeInBytes)
.s3ManagedLedgerOffloadReadBufferSizeInBytes(readBufferSizeInBytes);
} else if (driver.equalsIgnoreCase(DRIVER_NAMES.get(2))) {
builder.gcsManagedLedgerOffloadRegion(region)
.gcsManagedLedgerOffloadBucket(bucket)
.gcsManagedLedgerOffloadMaxBlockSizeInBytes(maxBlockSizeInBytes)
.gcsManagedLedgerOffloadReadBufferSizeInBytes(readBufferSizeInBytes);
}
return builder.build();
}
public static OffloadPoliciesImpl create(Properties properties) {
OffloadPoliciesImpl data = new OffloadPoliciesImpl();
for (Field f : CONFIGURATION_FIELDS) {
if (properties.containsKey(f.getName())) {
try {
f.setAccessible(true);
f.set(data, value((String) properties.get(f.getName()), f));
} catch (Exception e) {
throw new IllegalArgumentException(
String.format("failed to initialize %s field while setting value %s",
f.getName(), properties.get(f.getName())), e);
}
}
}
Map<String, String> extraConfigurations = properties.entrySet().stream()
.filter(entry -> entry.getKey().toString().startsWith(EXTRA_CONFIG_PREFIX))
.collect(Collectors.toMap(
entry -> entry.getKey().toString().replaceFirst(EXTRA_CONFIG_PREFIX, ""),
entry -> entry.getValue().toString()));
data.getManagedLedgerExtraConfigurations().putAll(extraConfigurations);
data.compatibleWithBrokerConfigFile(properties);
return data;
}
public static OffloadPoliciesImplBuilder builder() {
return new OffloadPoliciesImplBuilder();
}
public void compatibleWithBrokerConfigFile(Properties properties) {
if (!properties.containsKey("managedLedgerOffloadThresholdInBytes")
&& properties.containsKey(OFFLOAD_THRESHOLD_NAME_IN_CONF_FILE)) {
setManagedLedgerOffloadThresholdInBytes(
Long.parseLong(properties.getProperty(OFFLOAD_THRESHOLD_NAME_IN_CONF_FILE)));
}
if (!properties.containsKey("managedLedgerOffloadDeletionLagInMillis")
&& properties.containsKey(DELETION_LAG_NAME_IN_CONF_FILE)) {
setManagedLedgerOffloadDeletionLagInMillis(
Long.parseLong(properties.getProperty(DELETION_LAG_NAME_IN_CONF_FILE)));
}
if (properties.containsKey("managedLedgerDataReadPriority")) {
setManagedLedgerOffloadedReadPriority(
OffloadedReadPriority.fromString(properties.getProperty("managedLedgerDataReadPriority")));
}
}
public boolean driverSupported() {
return DRIVER_NAMES.stream().anyMatch(d -> d.equalsIgnoreCase(this.managedLedgerOffloadDriver));
}
public static String getSupportedDriverNames() {
return StringUtils.join(DRIVER_NAMES, ",");
}
public boolean isS3Driver() {
if (managedLedgerOffloadDriver == null) {
return false;
}
return managedLedgerOffloadDriver.equalsIgnoreCase(DRIVER_NAMES.get(0))
|| managedLedgerOffloadDriver.equalsIgnoreCase(DRIVER_NAMES.get(1));
}
public boolean isGcsDriver() {
if (managedLedgerOffloadDriver == null) {
return false;
}
return managedLedgerOffloadDriver.equalsIgnoreCase(DRIVER_NAMES.get(2));
}
public boolean isFileSystemDriver() {
if (managedLedgerOffloadDriver == null) {
return false;
}
return managedLedgerOffloadDriver.equalsIgnoreCase(DRIVER_NAMES.get(3));
}
public boolean bucketValid() {
if (managedLedgerOffloadDriver == null) {
return false;
}
if (StringUtils.isNotEmpty(managedLedgerOffloadBucket)) {
return true;
}
if (isS3Driver()) {
return StringUtils.isNotEmpty(s3ManagedLedgerOffloadBucket);
} else if (isGcsDriver()) {
return StringUtils.isNotEmpty(gcsManagedLedgerOffloadBucket);
} else if (isFileSystemDriver()) {
return true;
}
return false;
}
public Properties toProperties() {
Properties properties = new Properties();
for (Field f : CONFIGURATION_FIELDS) {
try {
f.setAccessible(true);
if ("managedLedgerExtraConfigurations".equals(f.getName())) {
Map<String, String> extraConfig = (Map<String, String>) f.get(this);
extraConfig.forEach((key, value) -> {
setProperty(properties, EXTRA_CONFIG_PREFIX + key, value);
});
} else {
setProperty(properties, f.getName(), f.get(this));
}
} catch (Exception e) {
throw new IllegalArgumentException("An error occurred while processing the field: " + f.getName(), e);
}
}
return properties;
}
private static void setProperty(Properties properties, String key, Object value) {
if (value != null) {
properties.setProperty(key, "" + value);
}
}
@Target(ElementType.FIELD)
@Retention(RetentionPolicy.RUNTIME)
private @interface Configuration {
}
/**
* This method is used to make a compatible with old policies.
*
* <p>The filed {@link Policies#offload_threshold} is primitive, so it can't be known whether it had been set.
* In the old logic, if the field value is -1, it could be thought that the field had not been set.
*
* @param nsLevelPolicies namespace level offload policies
* @param policies namespace policies
* @return offload policies
*/
public static OffloadPoliciesImpl oldPoliciesCompatible(OffloadPoliciesImpl nsLevelPolicies, Policies policies) {
if (policies == null || (policies.offload_threshold == -1 && policies.offload_deletion_lag_ms == null)) {
return nsLevelPolicies;
}
if (nsLevelPolicies == null) {
nsLevelPolicies = new OffloadPoliciesImpl();
}
if (nsLevelPolicies.getManagedLedgerOffloadThresholdInBytes() == null
&& policies.offload_threshold != -1) {
nsLevelPolicies.setManagedLedgerOffloadThresholdInBytes(policies.offload_threshold);
}
if (nsLevelPolicies.getManagedLedgerOffloadDeletionLagInMillis() == null
&& policies.offload_deletion_lag_ms != null) {
nsLevelPolicies.setManagedLedgerOffloadDeletionLagInMillis(policies.offload_deletion_lag_ms);
}
return nsLevelPolicies;
}
/**
* Merge different level offload policies.
*
* <p>policies level priority: topic > namespace > broker
*
* @param topicLevelPolicies topic level offload policies
* @param nsLevelPolicies namespace level offload policies
* @param brokerProperties broker level offload configuration
* @return offload policies
*/
public static OffloadPoliciesImpl mergeConfiguration(OffloadPoliciesImpl topicLevelPolicies,
OffloadPoliciesImpl nsLevelPolicies,
Properties brokerProperties) {
try {
boolean allConfigValuesAreNull = true;
OffloadPoliciesImpl offloadPolicies = new OffloadPoliciesImpl();
for (Field field : CONFIGURATION_FIELDS) {
Object object;
if (topicLevelPolicies != null && field.get(topicLevelPolicies) != null) {
object = field.get(topicLevelPolicies);
} else if (nsLevelPolicies != null && field.get(nsLevelPolicies) != null) {
object = field.get(nsLevelPolicies);
} else {
object = getCompatibleValue(brokerProperties, field);
}
if (object != null) {
field.set(offloadPolicies, object);
if (allConfigValuesAreNull) {
allConfigValuesAreNull = false;
}
}
}
if (allConfigValuesAreNull) {
return null;
} else {
return offloadPolicies;
}
} catch (Exception e) {
log.error("Failed to merge configuration.", e);
return null;
}
}
/**
* Make configurations of the OffloadPolicies compatible with the config file.
*
* <p>The names of the fields {@link OffloadPoliciesImpl#managedLedgerOffloadDeletionLagInMillis}
* and {@link OffloadPoliciesImpl#managedLedgerOffloadThresholdInBytes} are not matched with
* config file (broker.conf or standalone.conf).
*
* @param properties broker configuration properties
* @param field filed
* @return field value
*/
private static Object getCompatibleValue(Properties properties, Field field) {
Object object;
if (field.getName().equals("managedLedgerOffloadThresholdInBytes")) {
object = properties.getProperty("managedLedgerOffloadThresholdInBytes",
properties.getProperty(OFFLOAD_THRESHOLD_NAME_IN_CONF_FILE));
} else if (field.getName().equals("managedLedgerOffloadDeletionLagInMillis")) {
object = properties.getProperty("managedLedgerOffloadDeletionLagInMillis",
properties.getProperty(DELETION_LAG_NAME_IN_CONF_FILE));
} else {
object = properties.get(field.getName());
}
return value((String) object, field);
}
public static class OffloadPoliciesImplBuilder implements OffloadPolicies.Builder {
private OffloadPoliciesImpl impl = new OffloadPoliciesImpl();
public OffloadPoliciesImplBuilder offloadersDirectory(String offloadersDirectory) {
impl.offloadersDirectory = offloadersDirectory;
return this;
}
public OffloadPoliciesImplBuilder managedLedgerOffloadDriver(String managedLedgerOffloadDriver) {
impl.managedLedgerOffloadDriver = managedLedgerOffloadDriver;
return this;
}
public OffloadPoliciesImplBuilder managedLedgerOffloadMaxThreads(Integer managedLedgerOffloadMaxThreads) {
impl.managedLedgerOffloadMaxThreads = managedLedgerOffloadMaxThreads;
return this;
}
public OffloadPoliciesImplBuilder managedLedgerOffloadPrefetchRounds(
Integer managedLedgerOffloadPrefetchRounds) {
impl.managedLedgerOffloadPrefetchRounds = managedLedgerOffloadPrefetchRounds;
return this;
}
public OffloadPoliciesImplBuilder managedLedgerOffloadThresholdInBytes(
Long managedLedgerOffloadThresholdInBytes) {
impl.managedLedgerOffloadThresholdInBytes = managedLedgerOffloadThresholdInBytes;
return this;
}
public OffloadPoliciesImplBuilder managedLedgerOffloadDeletionLagInMillis(
Long managedLedgerOffloadDeletionLagInMillis) {
impl.managedLedgerOffloadDeletionLagInMillis = managedLedgerOffloadDeletionLagInMillis;
return this;
}
public OffloadPoliciesImplBuilder managedLedgerOffloadedReadPriority(
OffloadedReadPriority managedLedgerOffloadedReadPriority) {
impl.managedLedgerOffloadedReadPriority = managedLedgerOffloadedReadPriority;
return this;
}
public OffloadPoliciesImplBuilder s3ManagedLedgerOffloadRegion(String s3ManagedLedgerOffloadRegion) {
impl.s3ManagedLedgerOffloadRegion = s3ManagedLedgerOffloadRegion;
return this;
}
public OffloadPoliciesImplBuilder s3ManagedLedgerOffloadBucket(String s3ManagedLedgerOffloadBucket) {
impl.s3ManagedLedgerOffloadBucket = s3ManagedLedgerOffloadBucket;
return this;
}
public OffloadPoliciesImplBuilder s3ManagedLedgerOffloadServiceEndpoint(
String s3ManagedLedgerOffloadServiceEndpoint) {
impl.s3ManagedLedgerOffloadServiceEndpoint = s3ManagedLedgerOffloadServiceEndpoint;
return this;
}
public OffloadPoliciesImplBuilder s3ManagedLedgerOffloadMaxBlockSizeInBytes(
Integer s3ManagedLedgerOffloadMaxBlockSizeInBytes) {
impl.s3ManagedLedgerOffloadMaxBlockSizeInBytes = s3ManagedLedgerOffloadMaxBlockSizeInBytes;
return this;
}
public OffloadPoliciesImplBuilder s3ManagedLedgerOffloadReadBufferSizeInBytes(
Integer s3ManagedLedgerOffloadReadBufferSizeInBytes) {
impl.s3ManagedLedgerOffloadReadBufferSizeInBytes = s3ManagedLedgerOffloadReadBufferSizeInBytes;
return this;
}
public OffloadPoliciesImplBuilder s3ManagedLedgerOffloadCredentialId(
String s3ManagedLedgerOffloadCredentialId) {
impl.s3ManagedLedgerOffloadCredentialId = s3ManagedLedgerOffloadCredentialId;
return this;
}
public OffloadPoliciesImplBuilder s3ManagedLedgerOffloadCredentialSecret(
String s3ManagedLedgerOffloadCredentialSecret) {
impl.s3ManagedLedgerOffloadCredentialSecret = s3ManagedLedgerOffloadCredentialSecret;
return this;
}
public OffloadPoliciesImplBuilder s3ManagedLedgerOffloadRole(String s3ManagedLedgerOffloadRole) {
impl.s3ManagedLedgerOffloadRole = s3ManagedLedgerOffloadRole;
return this;
}
@Override
public Builder setS3ManagedLedgerOffloadRoleSessionName(String s3ManagedLedgerOffloadRoleSessionName) {
impl.s3ManagedLedgerOffloadRoleSessionName = s3ManagedLedgerOffloadRoleSessionName;
return this;
}
public OffloadPoliciesImplBuilder s3ManagedLedgerOffloadRoleSessionName(
String s3ManagedLedgerOffloadRoleSessionName) {
impl.s3ManagedLedgerOffloadRoleSessionName = s3ManagedLedgerOffloadRoleSessionName;
return this;
}
public OffloadPoliciesImplBuilder gcsManagedLedgerOffloadRegion(String gcsManagedLedgerOffloadRegion) {
impl.gcsManagedLedgerOffloadRegion = gcsManagedLedgerOffloadRegion;
return this;
}
public OffloadPoliciesImplBuilder gcsManagedLedgerOffloadBucket(String gcsManagedLedgerOffloadBucket) {
impl.gcsManagedLedgerOffloadBucket = gcsManagedLedgerOffloadBucket;
return this;
}
public OffloadPoliciesImplBuilder gcsManagedLedgerOffloadMaxBlockSizeInBytes(
Integer gcsManagedLedgerOffloadMaxBlockSizeInBytes) {
impl.gcsManagedLedgerOffloadMaxBlockSizeInBytes = gcsManagedLedgerOffloadMaxBlockSizeInBytes;
return this;
}
public OffloadPoliciesImplBuilder gcsManagedLedgerOffloadReadBufferSizeInBytes(
Integer gcsManagedLedgerOffloadReadBufferSizeInBytes) {
impl.gcsManagedLedgerOffloadReadBufferSizeInBytes = gcsManagedLedgerOffloadReadBufferSizeInBytes;
return this;
}
public OffloadPoliciesImplBuilder gcsManagedLedgerOffloadServiceAccountKeyFile(
String gcsManagedLedgerOffloadServiceAccountKeyFile) {
impl.gcsManagedLedgerOffloadServiceAccountKeyFile = gcsManagedLedgerOffloadServiceAccountKeyFile;
return this;
}
public OffloadPoliciesImplBuilder fileSystemProfilePath(String fileSystemProfilePath) {
impl.fileSystemProfilePath = fileSystemProfilePath;
return this;
}
public OffloadPoliciesImplBuilder fileSystemURI(String fileSystemURI) {
impl.fileSystemURI = fileSystemURI;
return this;
}
public OffloadPoliciesImplBuilder managedLedgerOffloadBucket(String managedLedgerOffloadBucket) {
impl.managedLedgerOffloadBucket = managedLedgerOffloadBucket;
return this;
}
public OffloadPoliciesImplBuilder managedLedgerOffloadRegion(String managedLedgerOffloadRegion) {
impl.managedLedgerOffloadRegion = managedLedgerOffloadRegion;
return this;
}
public OffloadPoliciesImplBuilder managedLedgerOffloadServiceEndpoint(
String managedLedgerOffloadServiceEndpoint) {
impl.managedLedgerOffloadServiceEndpoint = managedLedgerOffloadServiceEndpoint;
return this;
}
public OffloadPoliciesImplBuilder managedLedgerOffloadMaxBlockSizeInBytes(
Integer managedLedgerOffloadMaxBlockSizeInBytes) {
impl.managedLedgerOffloadMaxBlockSizeInBytes = managedLedgerOffloadMaxBlockSizeInBytes;
return this;
}
public OffloadPoliciesImplBuilder managedLedgerOffloadReadBufferSizeInBytes(
Integer managedLedgerOffloadReadBufferSizeInBytes) {
impl.managedLedgerOffloadReadBufferSizeInBytes = managedLedgerOffloadReadBufferSizeInBytes;
return this;
}
public OffloadPoliciesImpl build() {
return impl;
}
}
}