Skip to content

Commit a71b903

Browse files
author
Ignacio Bonafonte
authored
Merge pull request #288 from nachoBonafonte/Persistence-And-Datadog-Simplify-queue-handling
Simplifies Persistence and Datadog exporter queue logic Updated README for Persistence exporter.
2 parents 0b39168 + dab10fe commit a71b903

28 files changed

+104
-222
lines changed

Sources/Exporters/DatadogExporter/Logs/LogEncoder.swift

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ internal struct LogAttributes {
1616

1717
/// `Encodable` representation of log. It gets sanitized before encoding.
1818
internal struct DDLog: Encodable {
19-
internal struct TracingAttributes {
19+
internal enum TracingAttributes {
2020
static let traceID = "dd.trace_id"
2121
static let spanID = "dd.span_id"
2222
}
@@ -80,7 +80,7 @@ internal struct DDLog: Encodable {
8080
self.threadName = attributes.removeValue(forKey: "threadName")?.description ?? "unkown"
8181
self.applicationVersion = configuration.version
8282

83-
let userAttributes: [String: Encodable] = attributes.mapValues{
83+
let userAttributes: [String: Encodable] = attributes.mapValues {
8484
switch $0 {
8585
case let .string(value):
8686
return value

Sources/Exporters/DatadogExporter/Logs/LogSanitizer.swift

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ import Foundation
77

88
/// Sanitizes `Log` representation received from the user, so it can match Datadog log constraints.
99
internal struct LogSanitizer {
10-
struct Constraints {
10+
enum Constraints {
1111
/// Attribute names reserved for Datadog.
1212
/// If any of those is used by the user, the attribute will be ignored.
1313
static let reservedAttributeNames: Set<String> = [
@@ -23,7 +23,7 @@ internal struct LogSanitizer {
2323
static let maxNumberOfAttributes: Int = 256
2424
/// Allowed first character of a tag name (given as ASCII values ranging from lowercased `a` to `z`) .
2525
/// Tags with name starting with different character will be dropped.
26-
static let allowedTagNameFirstCharacterASCIIRange: [UInt8] = Array(97...122)
26+
static let allowedTagNameFirstCharacterASCIIRange: [UInt8] = Array(97 ... 122)
2727
/// Maximum lenght of the tag.
2828
/// Tags exceeting this lenght will be trunkated.
2929
static let maxTagLength: Int = 200

Sources/Exporters/DatadogExporter/Logs/LogsExporter.swift

Lines changed: 2 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -17,14 +17,9 @@ internal enum LogLevel: Int, Codable {
1717

1818
internal class LogsExporter {
1919
let logsDirectory = "com.otel.datadog.logs/v1"
20-
2120
let configuration: ExporterConfiguration
22-
2321
let logsStorage: FeatureStorage
24-
let logsStorageQueue = DispatchQueue(label: "com.otel.datadog.logswriter", target: .global(qos: .userInteractive))
25-
2622
let logsUpload: FeatureUpload
27-
let logsUploadQueue = DispatchQueue(label: "com.otel.datadog.logsupload", target: .global(qos: .userInteractive))
2823

2924
init(config: ExporterConfiguration) throws {
3025
self.configuration = config
@@ -39,14 +34,12 @@ internal class LogsExporter {
3934

4035
let logsFileWriter = FileWriter(
4136
dataFormat: dataFormat,
42-
orchestrator: filesOrchestrator,
43-
queue: logsStorageQueue
37+
orchestrator: filesOrchestrator
4438
)
4539

4640
let logsFileReader = FileReader(
4741
dataFormat: dataFormat,
48-
orchestrator: filesOrchestrator,
49-
queue: logsUploadQueue
42+
orchestrator: filesOrchestrator
5043
)
5144

5245
logsStorage = FeatureStorage(writer: logsFileWriter, reader: logsFileReader)
@@ -68,7 +61,6 @@ internal class LogsExporter {
6861
.ddEVPOriginVersionHeader(version: configuration.version),
6962
.ddRequestIDHeader()
7063
] + (configuration.payloadCompression ? [RequestBuilder.HTTPHeader.contentEncodingHeader(contentEncoding: .deflate)] : [])
71-
7264
)
7365

7466
logsUpload = FeatureUpload(featureName: "logsUpload",

Sources/Exporters/DatadogExporter/Metrics/MetricsExporter.swift

Lines changed: 2 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -8,14 +8,9 @@ import OpenTelemetrySdk
88

99
internal class MetricsExporter {
1010
let metricsDirectory = "com.otel.datadog.metrics/v1"
11-
1211
let configuration: ExporterConfiguration
13-
1412
let metricsStorage: FeatureStorage
15-
let metricsStorageQueue = DispatchQueue(label: "com.otel.datadog.metricswriter", target: .global(qos: .userInteractive))
16-
1713
let metricsUpload: FeatureUpload
18-
let metricsUploadQueue = DispatchQueue(label: "com.otel.datadog.metricsupload", target: .global(qos: .userInteractive))
1914

2015
init(config: ExporterConfiguration) throws {
2116
configuration = config
@@ -30,14 +25,12 @@ internal class MetricsExporter {
3025

3126
let spanFileWriter = FileWriter(
3227
dataFormat: dataFormat,
33-
orchestrator: filesOrchestrator,
34-
queue: metricsStorageQueue
28+
orchestrator: filesOrchestrator
3529
)
3630

3731
let spanFileReader = FileReader(
3832
dataFormat: dataFormat,
39-
orchestrator: filesOrchestrator,
40-
queue: metricsUploadQueue
33+
orchestrator: filesOrchestrator
4134
)
4235

4336
metricsStorage = FeatureStorage(writer: spanFileWriter, reader: spanFileReader)

Sources/Exporters/DatadogExporter/Persistence/FileReader.swift

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -17,16 +17,12 @@ internal final class FileReader {
1717
private let dataFormat: DataFormat
1818
/// Orchestrator producing reference to readable file.
1919
private let orchestrator: FilesOrchestrator
20-
/// Queue used to synchronize files access (read / write).
21-
private let queue: DispatchQueue
22-
2320
/// Files marked as read.
2421
private var filesRead: [ReadableFile] = []
2522

26-
init(dataFormat: DataFormat, orchestrator: FilesOrchestrator, queue: DispatchQueue) {
23+
init(dataFormat: DataFormat, orchestrator: FilesOrchestrator) {
2724
self.dataFormat = dataFormat
2825
self.orchestrator = orchestrator
29-
self.queue = queue
3026
}
3127

3228
// MARK: - Reading batches

Sources/Exporters/DatadogExporter/Persistence/FileWriter.swift

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -13,17 +13,16 @@ internal final class FileWriter {
1313
/// JSON encoder used to encode data.
1414
private let jsonEncoder: JSONEncoder
1515
/// Queue used to synchronize files access (read / write) and perform decoding on background thread.
16-
// Temporarily internal so tests can wait for the writer to finish before exiting
17-
internal let queue: DispatchQueue
16+
internal let queue = DispatchQueue(label: "com.otel.datadog.filewriter", target: .global(qos: .userInteractive))
1817

19-
init(dataFormat: DataFormat, orchestrator: FilesOrchestrator, queue: DispatchQueue) {
18+
init(dataFormat: DataFormat, orchestrator: FilesOrchestrator) {
2019
self.dataFormat = dataFormat
2120
self.orchestrator = orchestrator
22-
self.queue = queue
2321
self.jsonEncoder = JSONEncoder.default()
2422
}
2523

2624
// MARK: - Writing data
25+
2726
/// Encodes given value to JSON data and writes it to file.
2827
/// Comma is used to separate consecutive values in the file.
2928

Sources/Exporters/DatadogExporter/Spans/SpansExporter.swift

Lines changed: 2 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -8,14 +8,9 @@ import OpenTelemetrySdk
88

99
internal class SpansExporter {
1010
let tracesDirectory = "com.otel.datadog.traces/v1"
11-
1211
let configuration: ExporterConfiguration
13-
1412
let tracesStorage: FeatureStorage
15-
let tracesStorageQueue = DispatchQueue(label: "com.otel.datadog.traceswriter", target: .global(qos: .userInteractive))
16-
1713
let tracesUpload: FeatureUpload
18-
let tracesUploadQueue = DispatchQueue(label: "com.otel.datadog.tracesupload", target: .global(qos: .userInteractive))
1914

2015
init(config: ExporterConfiguration) throws {
2116
self.configuration = config
@@ -30,14 +25,12 @@ internal class SpansExporter {
3025

3126
let spanFileWriter = FileWriter(
3227
dataFormat: dataFormat,
33-
orchestrator: filesOrchestrator,
34-
queue: tracesStorageQueue
28+
orchestrator: filesOrchestrator
3529
)
3630

3731
let spanFileReader = FileReader(
3832
dataFormat: dataFormat,
39-
orchestrator: filesOrchestrator,
40-
queue: tracesUploadQueue
33+
orchestrator: filesOrchestrator
4134
)
4235

4336
tracesStorage = FeatureStorage(writer: spanFileWriter, reader: spanFileReader)

Sources/Exporters/DatadogExporter/Upload/DataUploadWorker.swift

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ internal protocol DataUploadWorkerType {
1313

1414
internal class DataUploadWorker: DataUploadWorkerType {
1515
/// Queue to execute uploads.
16-
private let queue: DispatchQueue
16+
internal let queue = DispatchQueue(label: "com.otel.datadog.datauploadworker", target: .global(qos: .utility))
1717
/// File reader providing data to upload.
1818
private let fileReader: FileReader
1919
/// Data uploader sending data to server.
@@ -31,14 +31,12 @@ internal class DataUploadWorker: DataUploadWorkerType {
3131
private var uploadWork: DispatchWorkItem?
3232

3333
init(
34-
queue: DispatchQueue,
3534
fileReader: FileReader,
3635
dataUploader: DataUploaderType,
3736
uploadCondition: @escaping () -> Bool,
3837
delay: Delay,
3938
featureName: String
4039
) {
41-
self.queue = queue
4240
self.fileReader = fileReader
4341
self.uploadCondition = uploadCondition
4442
self.dataUploader = dataUploader

Sources/Exporters/DatadogExporter/Utils/Feature.swift

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -36,19 +36,13 @@ internal struct FeatureUpload {
3636
performance: PerformancePreset,
3737
uploadCondition: @escaping () -> Bool
3838
) {
39-
let uploadQueue = DispatchQueue(
40-
label: "com.datadoghq.ios-sdk-\(featureName)-upload",
41-
target: .global(qos: .utility)
42-
)
43-
4439
let dataUploader = DataUploader(
4540
httpClient: HTTPClient(),
4641
requestBuilder: requestBuilder
4742
)
4843

4944
self.init(
5045
uploader: DataUploadWorker(
51-
queue: uploadQueue,
5246
fileReader: storage.reader,
5347
dataUploader: dataUploader,
5448
uploadCondition: uploadCondition,

Sources/Exporters/Persistence/Export/DataExportWorker.swift

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ internal protocol DataExportWorkerProtocol {
1818

1919
internal class DataExportWorker: DataExportWorkerProtocol {
2020
/// Queue to execute exports.
21-
private let queue: DispatchQueue
21+
internal let queue = DispatchQueue(label: "com.otel.datadog.dataExportWorker", target: .global(qos: .utility))
2222
/// File reader providing data to export.
2323
private let fileReader: FileReader
2424
/// Data exporter sending data to server.
@@ -33,13 +33,11 @@ internal class DataExportWorker: DataExportWorkerProtocol {
3333
private var exportWork: DispatchWorkItem?
3434

3535
init(
36-
queue: DispatchQueue,
3736
fileReader: FileReader,
3837
dataExporter: DataExporter,
3938
exportCondition: @escaping () -> Bool,
4039
delay: Delay
4140
) {
42-
self.queue = queue
4341
self.fileReader = fileReader
4442
self.exportCondition = exportCondition
4543
self.dataExporter = dataExporter
@@ -52,7 +50,7 @@ internal class DataExportWorker: DataExportWorkerProtocol {
5250

5351
let isSystemReady = self.exportCondition()
5452
let nextBatch = isSystemReady ? self.fileReader.readNextBatch() : nil
55-
if let batch = nextBatch {
53+
if let batch = nextBatch {
5654
// Export batch
5755
let exportStatus = self.dataExporter.export(data: batch.data)
5856

0 commit comments

Comments
 (0)