-
Notifications
You must be signed in to change notification settings - Fork 4.4k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
BufferedStreamConsumerTest: remove non-determinism in size of generated test records #9274
Conversation
Signed-off-by: Sergey Chvalyuk <grubberr@gmail.com>
fix buffer flush Signed-off-by: Sergey Chvalyuk <grubberr@gmail.com>
@@ -315,7 +315,7 @@ private static void consumeRecords(final BufferedStreamConsumer consumer, final | |||
List<AirbyteMessage> output = Lists.newArrayList(); | |||
long bytesCounter = 0; | |||
for (int i = 0;; i++) { | |||
JsonNode payload = Jsons.jsonNode(ImmutableMap.of("id", RandomStringUtils.randomAscii(7), "name", "human " + String.format("%5d", i))); | |||
JsonNode payload = Jsons.jsonNode(ImmutableMap.of("id", RandomStringUtils.randomAlphabetic(7), "name", "human " + String.format("%8d", i))); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
how does this make the generated size always be 40?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
now it generates object of fixed size:
{"id":"dumplEw","name":"human 0"}
{"id":"tnJatrn","name":"human 25"}
I have added more spaces before number (to make it 40 bytes)
I have also changed randomAscii
-> randomAlphabetic
to avoid generation DOULD-QUOTE and BACK-SLACH which can generated 2 bytes after json-encoding
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Got it, thanks for the explanation!
@@ -147,7 +147,7 @@ protected void acceptTracked(final AirbyteMessage message) throws Exception { | |||
// are serialized again when writing to | |||
// the destination | |||
long messageSizeInBytes = ByteUtils.getSizeInBytesForUTF8CharSet(Jsons.serialize(recordMessage.getData())); | |||
if (bufferSizeInBytes + messageSizeInBytes >= maxQueueSizeInBytes) { | |||
if (bufferSizeInBytes + messageSizeInBytes > maxQueueSizeInBytes) { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
why is this changed too? should this also be =
?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
As for me it's real bug in code itself which I discovered fixing tests.
We need to FLUSH buffer only if
bufferSizeInBytes + messageSizeInBytes > maxQueueSizeInBytes
because if
bufferSizeInBytes + messageSizeInBytes = maxQueueSizeInBytes
we still has to keep buffer not flushed
it's not my logic
it's what I see according to tests
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
😍
Signed-off-by: Sergey Chvalyuk grubberr@gmail.com
What
BufferedStreamConsumerTest
has side-effectsbecause
generateRecords
could generated records of different size and also total size of all records != 1000 asassumed. Tests FAIL time to time.
How
My fix make all records fixed size (40 bytes) and total size of all records now equal 1000 (as assumed in function param)
How
Describe the solution
Recommended reading order
x.java
y.python
🚨 User Impact 🚨
Are there any breaking changes? What is the end result perceived by the user? If yes, please merge this PR with the 🚨🚨 emoji so changelog authors can further highlight this if needed.
Pre-merge Checklist
Expand the relevant checklist and delete the others.
New Connector
Community member or Airbyter
airbyte_secret
./gradlew :airbyte-integrations:connectors:<name>:integrationTest
.README.md
bootstrap.md
. See description and examplesdocs/SUMMARY.md
docs/integrations/<source or destination>/<name>.md
including changelog. See changelog exampledocs/integrations/README.md
airbyte-integrations/builds.md
Airbyter
If this is a community PR, the Airbyte engineer reviewing this PR is responsible for the below items.
/test connector=connectors/<name>
command is passing./publish
command described hereUpdating a connector
Community member or Airbyter
airbyte_secret
./gradlew :airbyte-integrations:connectors:<name>:integrationTest
.README.md
bootstrap.md
. See description and examplesdocs/integrations/<source or destination>/<name>.md
including changelog. See changelog exampleAirbyter
If this is a community PR, the Airbyte engineer reviewing this PR is responsible for the below items.
/test connector=connectors/<name>
command is passing./publish
command described hereConnector Generator
-scaffold
in their name) have been updated with the latest scaffold by running./gradlew :airbyte-integrations:connector-templates:generator:testScaffoldTemplates
then checking in your changes