diff --git a/Sources/Core/Emitter/Emitter.swift b/Sources/Core/Emitter/Emitter.swift index 35fe2598e..60b2aa556 100644 --- a/Sources/Core/Emitter/Emitter.swift +++ b/Sources/Core/Emitter/Emitter.swift @@ -340,12 +340,17 @@ class Emitter: NSObject, EmitterEventProcessing { } /// Insert a Payload object into the buffer to be sent to collector. - /// This method will add the payload to the database and flush (send all events). + /// This method will add the payload to the database and flush (send all events) when the buffer is full. /// - Parameter eventPayload: A Payload containing a completed event to be added into the buffer. func addPayload(toBuffer eventPayload: Payload) { DispatchQueue.global(qos: .default).async { [weak self] in - self?.eventStore?.addEvent(eventPayload) - self?.flush() + guard let self = self else { return } + self.eventStore?.addEvent(eventPayload) + if let eventsCount = self.eventStore?.count() { + if eventsCount >= self.bufferOption.rawValue { + self.flush() + } + } } } @@ -379,6 +384,9 @@ class Emitter: NSObject, EmitterEventProcessing { } let events = eventStore.emittableEvents(withQueryLimit: UInt(emitRange)) + if !retryFailedRequests { + let _ = eventStore.removeEvents(withIds: events.map { $0.storeId }) + } let requests = buildRequests(fromEvents: events) let sendResults = networkConnection?.sendRequests(requests) @@ -426,7 +434,11 @@ class Emitter: NSObject, EmitterEventProcessing { Thread.sleep(forTimeInterval: 5) return } else { - self.attemptEmit() + if let eventsCount = self.eventStore?.count() { + if eventsCount >= self.bufferOption.rawValue { + self.attemptEmit() + } + } } }