From c22844d432923095895fecbb8d21913159919a80 Mon Sep 17 00:00:00 2001 From: Andrii Kulminskyi Date: Tue, 14 Jan 2025 10:21:23 +0200 Subject: [PATCH] FINERACT-1971: Event sequence id int overflow --- .../src/main/avro/BulkMessageItemV1.avsc | 2 +- fineract-avro-schemas/src/main/avro/MessageV1.avsc | 2 +- .../event/external/service/ExternalEventService.java | 2 +- .../external/service/message/BulkMessageItemFactory.java | 2 +- .../event/external/service/message/domain/MessageId.java | 2 +- .../external/jobs/SendAsynchronousEventsTaskletTest.java | 8 ++++---- .../event/external/service/ExternalEventServiceTest.java | 2 +- 7 files changed, 10 insertions(+), 10 deletions(-) diff --git a/fineract-avro-schemas/src/main/avro/BulkMessageItemV1.avsc b/fineract-avro-schemas/src/main/avro/BulkMessageItemV1.avsc index e094fe8b4..8c26b080b 100644 --- a/fineract-avro-schemas/src/main/avro/BulkMessageItemV1.avsc +++ b/fineract-avro-schemas/src/main/avro/BulkMessageItemV1.avsc @@ -6,7 +6,7 @@ { "name": "id", "doc": "The ID of the message to be sent", - "type": "int" + "type": "long" }, { "name": "type", diff --git a/fineract-avro-schemas/src/main/avro/MessageV1.avsc b/fineract-avro-schemas/src/main/avro/MessageV1.avsc index 7dfe5b2c3..e1c9908f9 100644 --- a/fineract-avro-schemas/src/main/avro/MessageV1.avsc +++ b/fineract-avro-schemas/src/main/avro/MessageV1.avsc @@ -6,7 +6,7 @@ { "name": "id", "doc": "The ID of the message to be sent", - "type": "int" + "type": "long" }, { "name": "source", diff --git a/fineract-core/src/main/java/org/apache/fineract/infrastructure/event/external/service/ExternalEventService.java b/fineract-core/src/main/java/org/apache/fineract/infrastructure/event/external/service/ExternalEventService.java index 0f1aa1715..cd8a62086 100644 --- a/fineract-core/src/main/java/org/apache/fineract/infrastructure/event/external/service/ExternalEventService.java +++ b/fineract-core/src/main/java/org/apache/fineract/infrastructure/event/external/service/ExternalEventService.java @@ -84,7 +84,7 @@ public class ExternalEventService { List> events = bulkBusinessEvent.get(); for (int i = 0; i < events.size(); i++) { BusinessEvent event = events.get(i); - int id = i + 1; + long id = (long) i + 1; BulkMessageItemV1 message = bulkMessageItemFactory.createBulkMessageItem(id, event); messages.add(message); } diff --git a/fineract-core/src/main/java/org/apache/fineract/infrastructure/event/external/service/message/BulkMessageItemFactory.java b/fineract-core/src/main/java/org/apache/fineract/infrastructure/event/external/service/message/BulkMessageItemFactory.java index d94514f53..b2fbd68f9 100644 --- a/fineract-core/src/main/java/org/apache/fineract/infrastructure/event/external/service/message/BulkMessageItemFactory.java +++ b/fineract-core/src/main/java/org/apache/fineract/infrastructure/event/external/service/message/BulkMessageItemFactory.java @@ -38,7 +38,7 @@ public class BulkMessageItemFactory { private final ByteBufferConverter byteBufferConverter; private final DataEnricherProcessor dataEnricherProcessor; - public BulkMessageItemV1 createBulkMessageItem(int id, BusinessEvent event) throws IOException { + public BulkMessageItemV1 createBulkMessageItem(long id, BusinessEvent event) throws IOException { BusinessEventSerializer eventSerializer = serializerFactory.create(event); ByteBufferSerializable avroDto = dataEnricherProcessor.enrich(eventSerializer.toAvroDTO(event)); ByteBuffer buffer = avroDto.toByteBuffer(); diff --git a/fineract-core/src/main/java/org/apache/fineract/infrastructure/event/external/service/message/domain/MessageId.java b/fineract-core/src/main/java/org/apache/fineract/infrastructure/event/external/service/message/domain/MessageId.java index 63a593c72..230815d89 100644 --- a/fineract-core/src/main/java/org/apache/fineract/infrastructure/event/external/service/message/domain/MessageId.java +++ b/fineract-core/src/main/java/org/apache/fineract/infrastructure/event/external/service/message/domain/MessageId.java @@ -25,5 +25,5 @@ import lombok.RequiredArgsConstructor; @Getter public class MessageId { - private final int id; + private final long id; } diff --git a/fineract-provider/src/test/java/org/apache/fineract/infrastructure/event/external/jobs/SendAsynchronousEventsTaskletTest.java b/fineract-provider/src/test/java/org/apache/fineract/infrastructure/event/external/jobs/SendAsynchronousEventsTaskletTest.java index 0c71e34b4..803a11fa6 100644 --- a/fineract-provider/src/test/java/org/apache/fineract/infrastructure/event/external/jobs/SendAsynchronousEventsTaskletTest.java +++ b/fineract-provider/src/test/java/org/apache/fineract/infrastructure/event/external/jobs/SendAsynchronousEventsTaskletTest.java @@ -144,7 +144,7 @@ class SendAsynchronousEventsTaskletTest { createExternalEventView("aType", "aCategory", "aSchema", new byte[0], "aIdempotencyKey", 1L), createExternalEventView("aType", "aCategory", "aSchema", new byte[0], "aIdempotencyKey", 1L)); // Dummy Message - MessageV1 dummyMessage = new MessageV1(1, "aSource", "aType", "nocategory", "aCreateDate", "aBusinessDate", "aTenantId", + MessageV1 dummyMessage = new MessageV1(1L, "aSource", "aType", "nocategory", "aCreateDate", "aBusinessDate", "aTenantId", "anidempotencyKey", "aSchema", Mockito.mock(ByteBuffer.class)); when(repository.findByStatusOrderByBusinessDateAscIdAsc(Mockito.any(), Mockito.any())).thenReturn(events); @@ -166,7 +166,7 @@ class SendAsynchronousEventsTaskletTest { List events = Arrays.asList( createExternalEventView("aType", "aCategory", "aSchema", new byte[0], "aIdempotencyKey", 1L), createExternalEventView("aType", "aCategory", "aSchema", new byte[0], "aIdempotencyKey", 1L)); - MessageV1 dummyMessage = new MessageV1(1, "aSource", "aType", "nocategory", "aCreateDate", "aBusinessDate", "aTenantId", + MessageV1 dummyMessage = new MessageV1(1L, "aSource", "aType", "nocategory", "aCreateDate", "aBusinessDate", "aTenantId", "anidempotencyKey", "aSchema", Mockito.mock(ByteBuffer.class)); when(repository.findByStatusOrderByBusinessDateAscIdAsc(Mockito.any(), Mockito.any())).thenReturn(events); when(messageFactory.createMessage(Mockito.any())).thenReturn(dummyMessage); @@ -185,7 +185,7 @@ class SendAsynchronousEventsTaskletTest { // given List events = Arrays .asList(createExternalEventView("aType", "aCategory", "aSchema", new byte[0], "aIdempotencyKey", 1L)); - MessageV1 dummyMessage = new MessageV1(1, "aSource", "aType", "nocategory", "aCreateDate", "aBusinessDate", "aTenantId", + MessageV1 dummyMessage = new MessageV1(1L, "aSource", "aType", "nocategory", "aCreateDate", "aBusinessDate", "aTenantId", "anidempotencyKey", "aSchema", Mockito.mock(ByteBuffer.class)); when(repository.findByStatusOrderByBusinessDateAscIdAsc(Mockito.any(), Mockito.any())).thenReturn(events); when(messageFactory.createMessage(Mockito.any())).thenReturn(dummyMessage); @@ -206,7 +206,7 @@ class SendAsynchronousEventsTaskletTest { // given List events = Arrays .asList(createExternalEventView("aType", "aCategory", "aSchema", new byte[0], "aIdempotencyKey", null)); - MessageV1 dummyMessage = new MessageV1(1, "aSource", "aType", "nocategory", "aCreateDate", "aBusinessDate", "aTenantId", + MessageV1 dummyMessage = new MessageV1(1L, "aSource", "aType", "nocategory", "aCreateDate", "aBusinessDate", "aTenantId", "anidempotencyKey", "aSchema", Mockito.mock(ByteBuffer.class)); when(repository.findByStatusOrderByBusinessDateAscIdAsc(Mockito.any(), Mockito.any())).thenReturn(events); when(messageFactory.createMessage(Mockito.any())).thenReturn(dummyMessage); diff --git a/fineract-provider/src/test/java/org/apache/fineract/infrastructure/event/external/service/ExternalEventServiceTest.java b/fineract-provider/src/test/java/org/apache/fineract/infrastructure/event/external/service/ExternalEventServiceTest.java index 8aaea6ff8..7549e3bcf 100644 --- a/fineract-provider/src/test/java/org/apache/fineract/infrastructure/event/external/service/ExternalEventServiceTest.java +++ b/fineract-provider/src/test/java/org/apache/fineract/infrastructure/event/external/service/ExternalEventServiceTest.java @@ -180,7 +180,7 @@ class ExternalEventServiceTest { String idempotencyKey = "key"; BusinessEvent event = mock(BusinessEvent.class); - BulkMessageItemV1 messageItem = new BulkMessageItemV1(1, "", "", "", ByteBuffer.wrap(new byte[0])); + BulkMessageItemV1 messageItem = new BulkMessageItemV1(1L, "", "", "", ByteBuffer.wrap(new byte[0])); BulkBusinessEvent bulkEvent = new BulkBusinessEvent(List.of(event)); byte[] data = new byte[0];