@Role(RoleType.Target) @Option(orderIndex = 140, valueHint = "size-in-MB", advanced = true, description = "Sets the part size to use when multipart upload is required (objects over 5GB). Default is " + DEFAULT_MPU_PART_SIZE_MB + "MB, minimum is " + MIN_PART_SIZE_MB + "MB") public int getMpuPartSizeMb() { return mpuPartSizeMb; }
public ConfigPropertyWrapper(PropertyDescriptor descriptor) { if (!descriptor.getReadMethod().isAnnotationPresent(Option.class)) throw new IllegalArgumentException(descriptor.getName() + " is not an @Option"); this.descriptor = descriptor; this.option = descriptor.getReadMethod().getAnnotation(Option.class); if (descriptor.getReadMethod().isAnnotationPresent(Role.class)) this.role = descriptor.getReadMethod().getAnnotation(Role.class).value(); this.locations = new HashSet<>(Arrays.asList(this.option.locations())); this.cliOption = ConfigUtil.cliOptionFromAnnotation(descriptor, getAnnotation(), null); }
this.documentation = targetClass.getAnnotation(Documentation.class).value(); if (targetClass.isAnnotationPresent(Role.class)) this.role = targetClass.getAnnotation(Role.class).value(); BeanInfo beanInfo = Introspector.getBeanInfo(targetClass); for (PropertyDescriptor descriptor : beanInfo.getPropertyDescriptors()) {
@Role(RoleType.Source) @Option(orderIndex = 20, advanced = true, description = "uses the absolute path to the file when storing it instead of the relative path from the source dir") public boolean isUseAbsolutePath() { return useAbsolutePath; }
@Role(RoleType.Target) @Option(orderIndex = 40, advanced = true, description = "when used as a target, stores source metadata in a json file, since filesystems have no concept of user metadata") public boolean isStoreMetadata() { return storeMetadata; }
@Role(RoleType.Source) @Option(orderIndex = 30, advanced = true, description = "When used as a source, the maximum directory depth for children. Default is " + DEFAULT_MAX_DEPTH) public int getMaxDepth() { return maxDepth; }
@Role(RoleType.Source) @Option(orderIndex = 70, advanced = true, description = "When used as a source, specifies the owner of every object (in the ACL)") public String getObjectOwner() { return objectOwner; }
@Role(RoleType.Source) @Option(orderIndex = 80, advanced = true, description = "When used as a source, specifies valid users for which to generate random grants in the ACL") public String[] getValidUsers() { return validUsers; }
@Role(RoleType.Source) @Option(orderIndex = 140, description = "(only applies to namespace) By default, only the children of the specified namespace folder will be synced. Enable this to include the top folder when syncing. Useful when there is metadata on that folder (i.e. GeoDrive)") public boolean isIncludeTopFolder() { return includeTopFolder; }
@Role(RoleType.Target) @Option(orderIndex = 150, advanced = true, description = "The number of threads to use for multipart upload (only applicable for file sources)") public int getMpuThreadCount() { return mpuThreadCount; }
@Role(RoleType.Source) @Option(orderIndex = 80, valueHint = "regex-pattern", description = "A list of regular expressions to search against the full file path. If the path matches, the file will be skipped. Since this is a regular expression, take care to escape special characters. For example, to exclude all .snapshot directories, the pattern would be .*/\\.snapshot. Specify multiple entries by repeating the CLI option or using multiple lines in the UI form") public String[] getExcludedPaths() { return excludedPaths; }
@Role(RoleType.Source) @Option(orderIndex = 20, advanced = true, description = "When used as a source, the maximum size of objects (actual size is random). Default is " + DEFAULT_MAX_SIZE) public long getMaxSize() { return maxSize; }
@Role(RoleType.Source) @Option(orderIndex = 20, valueHint = "yyyy-MM-ddThh:mm:ssZ", advanced = true, description = "When used as a source with CAS query (no clip list is provided), specifies the start time of the query (only clips created after this time will be synced). If no start time is provided, all clips created before the specified end time are synced. Note the start time must not be in the future, according to the CAS server clock. Date/time should be provided in ISO-8601 UTC format (i.e. 2015-01-01T04:30:00Z)") public String getQueryStartTime() { return queryStartTime; }
@Role(RoleType.Source) @Option(orderIndex = 80, cliInverted = true, advanced = true, description = "May provide more stability when errors occur while writing a blob to the target. Disable this for clips with very large blobs.") public boolean isDrainBlobsOnError() { return drainBlobsOnError; }
@Role(RoleType.Source) @Option(orderIndex = 90, advanced = true, description = "Enable this option for clips with more than 100 blobs. It will reduce the memory footprint.") public boolean isLargeBlobCountEnabled() { return largeBlobCountEnabled; }
@Role(RoleType.Target) @Option(orderIndex = 170, valueHint = "size-in-MB", advanced = true, description = "Sets the part size to use when multipart upload is required (objects over 5GB). Default is " + DEFAULT_MPU_PART_SIZE_MB + "MB, minimum is " + MIN_PART_SIZE_MB + "MB") public int getMpuPartSizeMb() { return mpuPartSizeMb; }
@Role(RoleType.Target) @Option(orderIndex = 100, advanced = true, description = "Atmos does not have a call to replace metadata; only to set or remove it. By default, set is used, which means removed metadata will not be reflected when updating objects. Use this flag if your sync operation might remove metadata from an existing object") public boolean isReplaceMetadata() { return replaceMetadata; }
@Role(RoleType.Target) @Option(orderIndex = 170, advanced = true, description = "If enabled, directories are stored in S3 as empty objects to preserve empty dirs and metadata from the source") public boolean isPreserveDirectories() { return preserveDirectories; }
@Role(RoleType.Source) @Option(orderIndex = 40, advanced = true, description = "Instead of preserving symbolic links, follow them and sync the actual files") public boolean isFollowLinks() { return followLinks; }
@Role(RoleType.Target) @Option(orderIndex = 50, advanced = true, description = "When used as a target, stores source metadata in a json file, since NFS filesystems have no concept of user metadata") public boolean isStoreMetadata() { return storeMetadata; }