Package-level declarations

Types

Link copied to clipboard
data class ObjectKey(val stream: DestinationStream.Descriptor, val objectKey: String, val uploadId: String? = null) : WithStream
Link copied to clipboard

Distribute the parts randomly across loaders. (Testing shows this is the most efficient pattern.)

Link copied to clipboard

The technically correct partitioning is round-robin, but since we use io.airbyte.cdk.load.message.SinglePartitionQueueWithMultiPartitionBroadcast, the partition is immaterial, so it's simpler just to return 0 here.

Link copied to clipboard
@Singleton
@Requires(bean = ObjectLoader::class)
class ObjectLoaderOneShotUploader<O : OutputStream, T : RemoteObject<*>>(partFormatter: ObjectLoaderPartFormatter<O>, partLoader: ObjectLoaderPartLoader<T>, uploadCompleter: ObjectLoaderUploadCompleter<T>, @Named(value = "uploadParallelismForSocket") uploadParallelism: Int) : BatchAccumulator<ObjectLoaderOneShotUploader.State<O, T>, StreamKey, DestinationRecordRaw, ObjectLoaderUploadCompleter.UploadResult<T>>

Wraps the PartFormatter, PartLoader, and UploadCompleter in a single BatchAccumulator.

Link copied to clipboard
Link copied to clipboard
@Singleton
@Requires(bean = ObjectLoader::class)
class ObjectLoaderPartFormatter<T : OutputStream>(pathFactory: PathFactory, catalog: DestinationCatalog, writerFactory: BufferedFormattingWriterFactory<T>, loader: ObjectLoader, stateManager: DestinationStateManager<ObjectStorageDestinationState>, @Value(value = "${airbyte.destination.core.record-batch-size-override:null}") val batchSizeOverride: Long? = null, @Named(value = "objectLoaderClampedPartSizeBytes") val clampedPartSizeBytes: Long) : BatchAccumulator<ObjectLoaderPartFormatter.State<T>, StreamKey, DestinationRecordRaw, ObjectLoaderPartFormatter.FormattedPart>
Link copied to clipboard
@Singleton
@Requires(bean = ObjectLoader::class)
class ObjectLoaderPipeline<K : WithStream, T : RemoteObject<*>>(routeEventStep: RouteEventStep?, fileChunkStep: FileChunkStep<T>?, @Named(value = "filePartLoaderStep") fileChunkUploader: ObjectLoaderPartLoaderStep<T>?, @Named(value = "fileUploadCompleterStep") fileCompleterStep: ObjectLoaderUploadCompleterStep<K, T>?, forwardFileRecordStep: ForwardFileRecordStep<T>?, @Named(value = "fileRecordPartFormatterStep") fileRecordFormatStep: ObjectLoaderPartFormatterStep?, @Named(value = "recordPartFormatterStep") recordFormatStep: ObjectLoaderPartFormatterStep, @Named(value = "recordPartLoaderStep") recordUploadStep: ObjectLoaderPartLoaderStep<T>, @Named(value = "recordUploadCompleterStep") recordCompleterStep: ObjectLoaderUploadCompleterStep<K, T>, @Value(value = "${airbyte.destination.core.file-transfer.enabled}") isLegacyFileTransfer: Boolean, processFileTaskLegacyStep: ProcessFileTaskLegacyStep, @Named(value = "isFileTransfer") isFileTransfer: Boolean, @Named(value = "oneShotObjectLoaderStep") oneShotObjectLoaderStep: ObjectLoaderOneShotUploaderStep<K, T>, @Named(value = "dataChannelMedium") dataChannelMedium: DataChannelMedium) : LoadPipeline

Three steps for default record flow:

Link copied to clipboard
@Singleton
@Requires(bean = ObjectLoader::class)
class UploadsInProgress<T : RemoteObject<*>>

In order to allow streaming uploads on the same key to be parallelized, upload state needs to be shared across workers.