Skip to content

Commit 72b4135

Browse files
author
Ignacio Bonafonte
authored
Fix file synchronization was being called after closing the filehandle, so it always failed (#82)
Clean up some other code to avoid throwing errors in the normal path
1 parent 044f0fd commit 72b4135

File tree

5 files changed

+19
-17
lines changed

5 files changed

+19
-17
lines changed

Sources/Exporters/DatadogExporter/Files/Directory.swift

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -38,12 +38,13 @@ internal struct Directory {
3838
}
3939

4040
/// Returns file with given name.
41-
func file(named fileName: String) throws -> File {
41+
func file(named fileName: String) -> File? {
4242
let fileURL = url.appendingPathComponent(fileName, isDirectory: false)
43-
guard FileManager.default.fileExists(atPath: fileURL.path) else {
44-
throw ExporterError(description: "File does not exist at path: \(fileURL.path)")
43+
if FileManager.default.fileExists(atPath: fileURL.path) {
44+
return File(url: fileURL)
45+
} else {
46+
return nil
4547
}
46-
return File(url: fileURL)
4748
}
4849

4950
/// Returns all files of this directory.

Sources/Exporters/DatadogExporter/Files/File.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -73,10 +73,10 @@ internal struct File: WritableFile, ReadableFile {
7373
*/
7474
if #available(OSX 10.15.4, iOS 13.4, watchOS 6.0, tvOS 13.4, *) {
7575
defer {
76-
try? fileHandle.close()
7776
if synchronized {
7877
try? fileHandle.synchronize()
7978
}
79+
try? fileHandle.close()
8080
}
8181
try fileHandle.seekToEnd()
8282
try fileHandle.write(contentsOf: data)

Sources/Exporters/DatadogExporter/Persistence/FilesOrchestrator.swift

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -68,7 +68,9 @@ internal class FilesOrchestrator {
6868
private func reuseLastWritableFileIfPossible(writeSize: UInt64) -> WritableFile? {
6969
if let lastFileName = lastWritableFileName {
7070
do {
71-
let lastFile = try directory.file(named: lastFileName)
71+
guard let lastFile = directory.file(named: lastFileName) else {
72+
return nil
73+
}
7274
let lastFileCreationDate = fileCreationDateFrom(fileName: lastFile.name)
7375
let lastFileAge = dateProvider.currentDate().timeIntervalSince(lastFileCreationDate)
7476

@@ -83,7 +85,6 @@ internal class FilesOrchestrator {
8385
print("🔥 Failed to read previously used writable file: \(error)")
8486
}
8587
}
86-
8788
return nil
8889
}
8990

Tests/ExportersTests/DatadogExporter/Files/DirectoryTests.swift

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -68,9 +68,9 @@ class DirectoryTests: XCTestCase {
6868
defer { directory.delete() }
6969
_ = try directory.createFile(named: "abcd")
7070

71-
let file = try directory.file(named: "abcd")
72-
XCTAssertEqual(file.url, directory.url.appendingPathComponent("abcd"))
73-
XCTAssertTrue(fileManager.fileExists(atPath: file.url.path))
71+
let file = directory.file(named: "abcd")
72+
XCTAssertEqual(file?.url, directory.url.appendingPathComponent("abcd"))
73+
XCTAssertTrue(fileManager.fileExists(atPath: file!.url.path))
7474
}
7575

7676
func testItRetrievesAllFiles() throws {

Tests/ExportersTests/DatadogExporter/Persistence/FilesOrchestratorTests.swift

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,7 @@ class FilesOrchestratorTests: XCTestCase {
4646
_ = try orchestrator.getWritableFile(writeSize: 1)
4747

4848
XCTAssertEqual(try temporaryDirectory.files().count, 1)
49-
XCTAssertNotNil(try temporaryDirectory.file(named: dateProvider.currentDate().toFileName))
49+
XCTAssertNotNil(temporaryDirectory.file(named: dateProvider.currentDate().toFileName))
5050
}
5151

5252
func testGivenDefaultWriteConditions_whenUsedNextTime_itReusesWritableFile() throws {
@@ -160,12 +160,12 @@ class FilesOrchestratorTests: XCTestCase {
160160
// Asking for the next file should purge the oldest one.
161161
let file4 = try orchestrator.getWritableFile(writeSize: oneMB)
162162
XCTAssertEqual(try temporaryDirectory.files().count, 3)
163-
XCTAssertNil(try? temporaryDirectory.file(named: file1.name))
163+
XCTAssertNil(temporaryDirectory.file(named: file1.name))
164164
try file4.append(data: .mock(ofSize: oneMB + 1), synchronized: true)
165165

166166
_ = try orchestrator.getWritableFile(writeSize: oneMB)
167167
XCTAssertEqual(try temporaryDirectory.files().count, 3)
168-
XCTAssertNil(try? temporaryDirectory.file(named: file2.name))
168+
XCTAssertNil(temporaryDirectory.file(named: file2.name))
169169
}
170170

171171
// MARK: - Readable file tests
@@ -203,13 +203,13 @@ class FilesOrchestratorTests: XCTestCase {
203203

204204
dateProvider.advance(bySeconds: 1 + performance.minFileAgeForRead)
205205
XCTAssertEqual(orchestrator.getReadableFile()?.name, fileNames[0])
206-
try temporaryDirectory.file(named: fileNames[0]).delete()
206+
try temporaryDirectory.file(named: fileNames[0])?.delete()
207207
XCTAssertEqual(orchestrator.getReadableFile()?.name, fileNames[1])
208-
try temporaryDirectory.file(named: fileNames[1]).delete()
208+
try temporaryDirectory.file(named: fileNames[1])?.delete()
209209
XCTAssertEqual(orchestrator.getReadableFile()?.name, fileNames[2])
210-
try temporaryDirectory.file(named: fileNames[2]).delete()
210+
try temporaryDirectory.file(named: fileNames[2])?.delete()
211211
XCTAssertEqual(orchestrator.getReadableFile()?.name, fileNames[3])
212-
try temporaryDirectory.file(named: fileNames[3]).delete()
212+
try temporaryDirectory.file(named: fileNames[3])?.delete()
213213
XCTAssertNil(orchestrator.getReadableFile())
214214
}
215215

0 commit comments

Comments
 (0)