@@ -154,7 +154,8 @@ public int messageSizeInBytes(Message message) {
154154 private Boolean isBackPressuredAfterSize (int incomingSize ) {
155155 int POISON_BYTE_SIZE = messageSizeInBytes (FlushMessage .POISON );
156156 int sizeAfterAdd = this .currentQueueSizeInBytes + incomingSize + POISON_BYTE_SIZE ;
157- return sizeAfterAdd >= Math .min (this .maximumQueueByteSize , BATCH_MAX_SIZE );
157+ // Leave a 10% buffer since the unsynchronized enqueue could add multiple at a time
158+ return sizeAfterAdd >= Math .min (this .maximumQueueByteSize , BATCH_MAX_SIZE ) * 0.9 ;
158159 }
159160
160161 public boolean offer (Message message ) {
@@ -176,8 +177,6 @@ public void enqueue(Message message) {
176177 // @jorgen25 check if message is below 32kb limit for individual messages, no need to check
177178 // for extra characters
178179 if (messageByteSize <= MSG_MAX_SIZE ) {
179- // messageQueue.put(message);
180-
181180 if (isBackPressuredAfterSize (messageByteSize )) {
182181 this .currentQueueSizeInBytes = messageByteSize ;
183182 messageQueue .put (FlushMessage .POISON );
@@ -443,13 +442,13 @@ public static class BatchUtility {
443442 * "userId":"jorgen25","integrations":{"someKey":{"data":"aaaaa"}},"previousId":"foo"},{"type":"alias",
444443 * "messageId":"57b0ceb4-a1cf-4599-9fba-0a44c7041004","timestamp":"Nov 18, 2021, 2:45:07 PM",
445444 * "userId":"jorgen25","integrations":{"someKey":{"data":"aaaaa"}},"previousId":"foo"}],
446- * "sentAt":"Nov 18, 2021, 2:45:07
447- * PM","context":{"library":{"name":"analytics-java"," version":"3.1.3"}},"sequence":1}
445+ * "sentAt":"Nov 18, 2021, 2:45:07 PM","context":{"library":{"name":"analytics-java",
446+ * " version":"3.1.3"}},"sequence":1,"writeKey":"XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX" }
448447 *
449- * <p>total size of batch : 886
448+ * <p>total size of batch : 932
450449 *
451450 * <p>BREAKDOWN: {"batch":[MESSAGE1,MESSAGE2,MESSAGE3,MESSAGE4],"sentAt":"MMM dd, yyyy, HH:mm:ss
452- * tt","context":CONTEXT,"sequence":1}
451+ * tt","context":CONTEXT,"sequence":1,"writeKey":"XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX" }
453452 *
454453 * <p>so we need to account for: 1 -message size: 189 * 4 = 756 2 -context object size = 55 in
455454 * this sample -> 756 + 55 = 811 3 -Metadata (This has the sent data/sequence characters) +
@@ -463,12 +462,14 @@ public static class BatchUtility {
463462 * <p>so formulae to determine the expected default size of the batch is
464463 *
465464 * @return: defaultSize = messages size + context size + metadata size + comma number + sequence
466- * digits
465+ * digits + writekey + buffer
467466 * @return
468467 */
469468 private static int getBatchDefaultSize (int contextSize , int currentMessageNumber ) {
470- // sample data: {"batch":[],"sentAt":"MMM dd, yyyy, HH:mm:ss tt","context":,"sequence":1} - 73
471- int metadataExtraCharsSize = 73 ;
469+ // sample data: {"batch":[],"sentAt":"MMM dd, yyyy, HH:mm:ss tt","context":,"sequence":1,
470+ // "writeKey":"XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"} - 119
471+ // Don't need to squeeze everything possible into a batch, adding a buffer
472+ int metadataExtraCharsSize = 119 + 1024 ;
472473 int commaNumber = currentMessageNumber - 1 ;
473474
474475 return contextSize
0 commit comments