Skip to content

Commit fc8e3af

Browse files
dankinsoidbednar
andauthored
fix: memory leaks (#64)
* fix: Change classes to structs in order to avoid reference cycle * fix: arguments alignment * fix: remove Sendable conformances to support old swift versions * fix: remove colon * doc: add doc comment to Point init * fix changelog --------- Co-authored-by: Jakub Bednář <[email protected]>
1 parent 2f00fcd commit fc8e3af

27 files changed

+67
-58
lines changed

.gitignore

+2-1
Original file line numberDiff line numberDiff line change
@@ -105,4 +105,5 @@ junit.xml
105105
tests.xml
106106

107107
Scripts/*.yml
108-
Scripts/influxdb-clients-apigen/
108+
Scripts/influxdb-clients-apigen/
109+
.DS_Store

CHANGELOG.md

+3
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,8 @@
11
## 1.7.0 [unreleased]
22

3+
### Bug Fixes
4+
1. [#63](https://github.com/influxdata/influxdb-client-swift/pull/64): Remove reference cycle
5+
36
### CI
47
1. [#55](https://github.com/influxdata/influxdb-client-swift/pull/55): Use Swift 5.8, 5.9 and 5.10 in CI and update XCode to 15.3.0
58

Scripts/templates/api.mustache

+1-1
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ extension {{projectName}}API {
1717

1818
{{#description}}
1919
/** {{description}} */{{/description}}
20-
{{#objcCompatible}}@objc {{/objcCompatible}}{{#nonPublicApi}}internal{{/nonPublicApi}}{{^nonPublicApi}}public{{/nonPublicApi}} class {{classname}}{{#objcCompatible}} : NSObject{{/objcCompatible}} {
20+
{{#objcCompatible}}@objc {{/objcCompatible}}{{#nonPublicApi}}internal{{/nonPublicApi}}{{^nonPublicApi}}public{{/nonPublicApi}} {{^objcCompatible}}struct {{classname}}{{/objcCompatible}}{{#objcCompatible}}class {{classname}} : NSObject{{/objcCompatible}} {
2121
private let influxDB2API: InfluxDB2API
2222
2323
public init(influxDB2API: InfluxDB2API) {

Scripts/templates/libraries/urlsession/URLSessionImplementations.mustache

+1-1
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ import MobileCoreServices
1313
#endif
1414
import InfluxDBSwift
1515

16-
class URLSessionRequestBuilderFactory: RequestBuilderFactory {
16+
final class URLSessionRequestBuilderFactory: RequestBuilderFactory {
1717
func getRequestNonDecodableBuilder<T>(method: String, URLString: String, parameters: [String:Any]?, isBody: Bool, headers: [String:String] = [:], influxDB2API: InfluxDB2API) -> RequestBuilder<T> {
1818
URLSessionRequestBuilder<T>(method: method, URLString: URLString, parameters: parameters, isBody: isBody, influxDB2API: influxDB2API)
1919
}

Sources/InfluxDBSwift/DeleteAPI.swift

+1-1
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ import FoundationNetworking
2323
///
2424
/// print("Successfully data data by:\n\n\(predicateRequest)")
2525
/// ````
26-
public class DeleteAPI {
26+
public struct DeleteAPI {
2727
/// Shared client.
2828
private let client: InfluxDBClient
2929

Sources/InfluxDBSwift/InfluxDBClient.swift

+17-17
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ import FoundationNetworking
2222
///
2323
/// client.close()
2424
/// ````
25-
public class InfluxDBClient {
25+
public struct InfluxDBClient {
2626
/// Version of client.
2727
public static var version: String = "1.7.0dev"
2828
/// InfluxDB host and port.
@@ -36,20 +36,20 @@ public class InfluxDBClient {
3636
/// Shared URLSession across the client.
3737
public let session: URLSession
3838

39-
/// Lazy initialized `QueryAPI`.
40-
public lazy var queryAPI: QueryAPI = {
39+
/// `QueryAPI`.
40+
public var queryAPI: QueryAPI {
4141
QueryAPI(client: self)
42-
}()
42+
}
4343

44-
/// Lazy initialized `DeleteAPI`.
45-
public lazy var deleteAPI: DeleteAPI = {
44+
/// `DeleteAPI`.
45+
public var deleteAPI: DeleteAPI {
4646
DeleteAPI(client: self)
47-
}()
47+
}
4848

49-
/// Lazy initialized `InvokableScriptsApi`.
50-
public lazy var invokableScriptsApi: InvokableScriptsAPI = {
49+
/// `InvokableScriptsApi`.
50+
public var invokableScriptsApi: InvokableScriptsAPI {
5151
InvokableScriptsAPI(client: self)
52-
}()
52+
}
5353

5454
/// Create a new client for a InfluxDB.
5555
///
@@ -102,13 +102,13 @@ public class InfluxDBClient {
102102
/// - protocolClasses: optional array of extra protocol subclasses that handle requests.
103103
///
104104
/// - SeeAlso: https://docs.influxdata.com/influxdb/v1.8/tools/api/#influxdb-2-0-api-compatibility-endpoints
105-
public convenience init(url: String,
106-
username: String,
107-
password: String,
108-
database: String,
109-
retentionPolicy: String,
110-
precision: TimestampPrecision = TimestampPrecision.ns,
111-
protocolClasses: [AnyClass]? = nil) {
105+
public init(url: String,
106+
username: String,
107+
password: String,
108+
database: String,
109+
retentionPolicy: String,
110+
precision: TimestampPrecision = TimestampPrecision.ns,
111+
protocolClasses: [AnyClass]? = nil) {
112112
let options = InfluxDBOptions(bucket: "\(database)/\(retentionPolicy)", precision: precision)
113113

114114
self.init(url: url, token: "\(username):\(password)", options: options, protocolClasses: protocolClasses)

Sources/InfluxDBSwift/InvokableScriptsAPI.swift

+1-1
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ import Foundation
88
///
99
/// API invokable scripts let you assign scripts to API endpoints and then execute them
1010
/// as standard REST operations in InfluxDB Cloud.
11-
public class InvokableScriptsAPI {
11+
public struct InvokableScriptsAPI {
1212
/// Shared client.
1313
private let client: InfluxDBClient
1414

Sources/InfluxDBSwift/Point.swift

+7-2
Original file line numberDiff line numberDiff line change
@@ -95,10 +95,13 @@ extension InfluxDBClient {
9595
/// .addDefaultTag(key: "customer", value: "California Miner")
9696
/// .addDefaultTag(key: "data_center", value: "${env.DATA_CENTER_LOCATION}")
9797
/// ````
98-
public class PointSettings {
98+
public struct PointSettings {
9999
// Default tags which will be added to each point written by api.
100100
var tags: [String: String?] = [:]
101101

102+
/// Create a new PointSettings.
103+
public init() {}
104+
102105
/// Add new default tag with key and value.
103106
///
104107
/// - Parameters:
@@ -107,7 +110,9 @@ extension InfluxDBClient {
107110
/// - Returns: Self
108111
public func addDefaultTag(key: String?, value: String?) -> PointSettings {
109112
if let key = key {
110-
tags[key] = value
113+
var result = self
114+
result.tags[key] = value
115+
return result
111116
}
112117
return self
113118
}

Sources/InfluxDBSwift/QueryAPI.swift

+1-1
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,7 @@ import Gzip
4141
///
4242
/// client.close()
4343
/// ````
44-
public class QueryAPI {
44+
public struct QueryAPI {
4545
/// The default Query Dialect with annotation = ["datatype", "group", "default"]
4646
public static let defaultDialect = Dialect(annotations:
4747
[

Sources/InfluxDBSwift/WriteAPI.swift

+1-1
Original file line numberDiff line numberDiff line change
@@ -58,7 +58,7 @@ import Gzip
5858
/// print("Successfully written data:\n\n\(recordTuple)")
5959
///
6060
/// ````
61-
public class WriteAPI {
61+
public struct WriteAPI {
6262
/// Shared client.
6363
private let client: InfluxDBClient
6464
/// Settings for DataPoint.

Sources/InfluxDBSwiftApis/Generated/APIs/AuthorizationsAPI.swift

+1-1
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ import InfluxDBSwift
1111
extension InfluxDB2API {
1212

1313

14-
public class AuthorizationsAPI {
14+
public struct AuthorizationsAPI {
1515
private let influxDB2API: InfluxDB2API
1616

1717
public init(influxDB2API: InfluxDB2API) {

Sources/InfluxDBSwiftApis/Generated/APIs/BucketsAPI.swift

+1-1
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ import InfluxDBSwift
1111
extension InfluxDB2API {
1212

1313

14-
public class BucketsAPI {
14+
public struct BucketsAPI {
1515
private let influxDB2API: InfluxDB2API
1616

1717
public init(influxDB2API: InfluxDB2API) {

Sources/InfluxDBSwiftApis/Generated/APIs/DBRPsAPI.swift

+1-1
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ import InfluxDBSwift
1111
extension InfluxDB2API {
1212

1313

14-
public class DBRPsAPI {
14+
public struct DBRPsAPI {
1515
private let influxDB2API: InfluxDB2API
1616

1717
public init(influxDB2API: InfluxDB2API) {

Sources/InfluxDBSwiftApis/Generated/APIs/HealthAPI.swift

+1-1
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ import InfluxDBSwift
1111
extension InfluxDB2API {
1212

1313

14-
public class HealthAPI {
14+
public struct HealthAPI {
1515
private let influxDB2API: InfluxDB2API
1616

1717
public init(influxDB2API: InfluxDB2API) {

Sources/InfluxDBSwiftApis/Generated/APIs/LabelsAPI.swift

+1-1
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ import InfluxDBSwift
1111
extension InfluxDB2API {
1212

1313

14-
public class LabelsAPI {
14+
public struct LabelsAPI {
1515
private let influxDB2API: InfluxDB2API
1616

1717
public init(influxDB2API: InfluxDB2API) {

Sources/InfluxDBSwiftApis/Generated/APIs/OrganizationsAPI.swift

+1-1
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ import InfluxDBSwift
1111
extension InfluxDB2API {
1212

1313

14-
public class OrganizationsAPI {
14+
public struct OrganizationsAPI {
1515
private let influxDB2API: InfluxDB2API
1616

1717
public init(influxDB2API: InfluxDB2API) {

Sources/InfluxDBSwiftApis/Generated/APIs/PingAPI.swift

+1-1
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ import InfluxDBSwift
1111
extension InfluxDB2API {
1212

1313

14-
public class PingAPI {
14+
public struct PingAPI {
1515
private let influxDB2API: InfluxDB2API
1616

1717
public init(influxDB2API: InfluxDB2API) {

Sources/InfluxDBSwiftApis/Generated/APIs/ReadyAPI.swift

+1-1
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ import InfluxDBSwift
1111
extension InfluxDB2API {
1212

1313

14-
public class ReadyAPI {
14+
public struct ReadyAPI {
1515
private let influxDB2API: InfluxDB2API
1616

1717
public init(influxDB2API: InfluxDB2API) {

Sources/InfluxDBSwiftApis/Generated/APIs/ScraperTargetsAPI.swift

+1-1
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ import InfluxDBSwift
1111
extension InfluxDB2API {
1212

1313

14-
public class ScraperTargetsAPI {
14+
public struct ScraperTargetsAPI {
1515
private let influxDB2API: InfluxDB2API
1616

1717
public init(influxDB2API: InfluxDB2API) {

Sources/InfluxDBSwiftApis/Generated/APIs/SecretsAPI.swift

+1-1
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ import InfluxDBSwift
1111
extension InfluxDB2API {
1212

1313

14-
public class SecretsAPI {
14+
public struct SecretsAPI {
1515
private let influxDB2API: InfluxDB2API
1616

1717
public init(influxDB2API: InfluxDB2API) {

Sources/InfluxDBSwiftApis/Generated/APIs/SetupAPI.swift

+1-1
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ import InfluxDBSwift
1111
extension InfluxDB2API {
1212

1313

14-
public class SetupAPI {
14+
public struct SetupAPI {
1515
private let influxDB2API: InfluxDB2API
1616

1717
public init(influxDB2API: InfluxDB2API) {

Sources/InfluxDBSwiftApis/Generated/APIs/SourcesAPI.swift

+1-1
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ import InfluxDBSwift
1111
extension InfluxDB2API {
1212

1313

14-
public class SourcesAPI {
14+
public struct SourcesAPI {
1515
private let influxDB2API: InfluxDB2API
1616

1717
public init(influxDB2API: InfluxDB2API) {

Sources/InfluxDBSwiftApis/Generated/APIs/TasksAPI.swift

+1-1
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ import InfluxDBSwift
1111
extension InfluxDB2API {
1212

1313

14-
public class TasksAPI {
14+
public struct TasksAPI {
1515
private let influxDB2API: InfluxDB2API
1616

1717
public init(influxDB2API: InfluxDB2API) {

Sources/InfluxDBSwiftApis/Generated/APIs/UsersAPI.swift

+1-1
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ import InfluxDBSwift
1111
extension InfluxDB2API {
1212

1313

14-
public class UsersAPI {
14+
public struct UsersAPI {
1515
private let influxDB2API: InfluxDB2API
1616

1717
public init(influxDB2API: InfluxDB2API) {

Sources/InfluxDBSwiftApis/Generated/APIs/VariablesAPI.swift

+1-1
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ import InfluxDBSwift
1111
extension InfluxDB2API {
1212

1313

14-
public class VariablesAPI {
14+
public struct VariablesAPI {
1515
private let influxDB2API: InfluxDB2API
1616

1717
public init(influxDB2API: InfluxDB2API) {

Sources/InfluxDBSwiftApis/Generated/URLSessionImplementations.swift

+1-1
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ import MobileCoreServices
1313
#endif
1414
import InfluxDBSwift
1515

16-
class URLSessionRequestBuilderFactory: RequestBuilderFactory {
16+
final class URLSessionRequestBuilderFactory: RequestBuilderFactory {
1717
func getRequestNonDecodableBuilder<T>(method: String, URLString: String, parameters: [String:Any]?, isBody: Bool, headers: [String:String] = [:], influxDB2API: InfluxDB2API) -> RequestBuilder<T> {
1818
URLSessionRequestBuilder<T>(method: method, URLString: URLString, parameters: parameters, isBody: isBody, influxDB2API: influxDB2API)
1919
}

Sources/InfluxDBSwiftApis/InfluxDB2API.swift

+16-16
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ import InfluxDBSwift
2828
///
2929
/// client.close()
3030
/// ````
31-
public class InfluxDB2API {
31+
public struct InfluxDB2API {
3232
internal let client: InfluxDBClient
3333
internal let basePath: String
3434
internal let requestBuilderFactory: RequestBuilderFactory
@@ -39,49 +39,49 @@ public class InfluxDB2API {
3939
}
4040

4141
/// Lazy initialized `AuthorizationsAPI`.
42-
public lazy var authorizationsAPI: AuthorizationsAPI = { AuthorizationsAPI(influxDB2API: self) }()
42+
public var authorizationsAPI: AuthorizationsAPI { AuthorizationsAPI(influxDB2API: self) }
4343

4444
/// Lazy initialized `BucketsAPI`.
45-
public lazy var bucketsAPI: BucketsAPI = { BucketsAPI(influxDB2API: self) }()
45+
public var bucketsAPI: BucketsAPI { BucketsAPI(influxDB2API: self) }
4646

4747
/// Lazy initialized `DBRPsAPI`.
48-
public lazy var dbrpsAPI: DBRPsAPI = { DBRPsAPI(influxDB2API: self) }()
48+
public var dbrpsAPI: DBRPsAPI { DBRPsAPI(influxDB2API: self) }
4949

5050
/// Lazy initialized `HealthAPI`.
51-
public lazy var healthAPI: HealthAPI = { HealthAPI(influxDB2API: self) }()
51+
public var healthAPI: HealthAPI { HealthAPI(influxDB2API: self) }
5252

5353
/// Lazy initialized `PingAPI`.
54-
public lazy var pingAPI: PingAPI = { PingAPI(influxDB2API: self) }()
54+
public var pingAPI: PingAPI { PingAPI(influxDB2API: self) }
5555

5656
/// Lazy initialized `LabelsAPI`.
57-
public lazy var labelsAPI: LabelsAPI = { LabelsAPI(influxDB2API: self) }()
57+
public var labelsAPI: LabelsAPI { LabelsAPI(influxDB2API: self) }
5858

5959
/// Lazy initialized `OrganizationsAPI`.
60-
public lazy var organizationsAPI: OrganizationsAPI = { OrganizationsAPI(influxDB2API: self) }()
60+
public var organizationsAPI: OrganizationsAPI { OrganizationsAPI(influxDB2API: self) }
6161

6262
/// Lazy initialized `ReadyAPI`.
63-
public lazy var readyAPI: ReadyAPI = { ReadyAPI(influxDB2API: self) }()
63+
public var readyAPI: ReadyAPI { ReadyAPI(influxDB2API: self) }
6464

6565
/// Lazy initialized `ScraperTargetsAPI`.
66-
public lazy var scraperTargetsAPI: ScraperTargetsAPI = { ScraperTargetsAPI(influxDB2API: self) }()
66+
public var scraperTargetsAPI: ScraperTargetsAPI { ScraperTargetsAPI(influxDB2API: self) }
6767

6868
/// Lazy initialized `SecretsAPI`.
69-
public lazy var secretsAPI: SecretsAPI = { SecretsAPI(influxDB2API: self) }()
69+
public var secretsAPI: SecretsAPI { SecretsAPI(influxDB2API: self) }
7070

7171
/// Lazy initialized `SetupAPI`.
72-
public lazy var setupAPI: SetupAPI = { SetupAPI(influxDB2API: self) }()
72+
public var setupAPI: SetupAPI { SetupAPI(influxDB2API: self) }
7373

7474
/// Lazy initialized `SourcesAPI`.
75-
public lazy var sourcesAPI: SourcesAPI = { SourcesAPI(influxDB2API: self) }()
75+
public var sourcesAPI: SourcesAPI { SourcesAPI(influxDB2API: self) }
7676

7777
/// Lazy initialized `TasksAPI`.
78-
public lazy var tasksAPI: TasksAPI = { TasksAPI(influxDB2API: self) }()
78+
public var tasksAPI: TasksAPI { TasksAPI(influxDB2API: self) }
7979

8080
/// Lazy initialized `UsersAPI`.
81-
public lazy var usersAPI: UsersAPI = { UsersAPI(influxDB2API: self) }()
81+
public var usersAPI: UsersAPI { UsersAPI(influxDB2API: self) }
8282

8383
/// Lazy initialized `VariablesAPI`.
84-
public lazy var variablesAPI: VariablesAPI = { VariablesAPI(influxDB2API: self) }()
84+
public var variablesAPI: VariablesAPI { VariablesAPI(influxDB2API: self) }
8585

8686
/// Create a new managements client for a InfluxDB.
8787
///

0 commit comments

Comments
 (0)