Skip to content
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

Send worker changes to master #42294

Merged
merged 137 commits into from
Mar 27, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
137 commits
Select commit Hold shift + click to select a range
a3371aa
Enable build for worker_change branch
lochana-chathura Nov 14, 2023
752ac25
Add parsing support for on-fail-clause in worker-decl
lochana-chathura Nov 14, 2023
bd8cf2f
Add parsing support for alternate-receive-action
lochana-chathura Nov 14, 2023
a5d501c
Skip worker-decl_source_07.bal from formatting due to #41698
lochana-chathura Nov 15, 2023
7fd8965
Merge pull request #41683 from lochana-chathura/worker_new
rdulmina Nov 17, 2023
a0469f6
Merge branch 'master' of github.com:ballerina-platform/ballerina-lang…
HindujaB Nov 21, 2023
a215eb8
Create channel per each worker message send-receive
lochana-chathura Nov 22, 2023
36b41e7
Implement alternate-receive support up to desugar
lochana-chathura Nov 22, 2023
e015ca1
Fix channel name for single message passing
HindujaB Nov 23, 2023
b9cf39a
Fix check styles
lochana-chathura Nov 23, 2023
71e46db
Merge pull request #41754 from lochana-chathura/worker_new
lochana-chathura Nov 23, 2023
e0db559
Merge remote-tracking branch 'upstream/master' into worker_change
lochana-chathura Nov 24, 2023
bae6ffe
Implement multiple worker support up to desugar
lochana-chathura Nov 24, 2023
d4eba64
Fix failing worker change parser tests
poorna2152 Nov 27, 2023
b1d64b3
Merge pull request #41767 from poorna2152/worker_change_parser_test
lochana-chathura Nov 27, 2023
87e9ce5
Add semantic for worker on fail
poorna2152 Nov 21, 2023
f2bfbf4
Update the top level check
poorna2152 Nov 22, 2023
71b5e28
Allow send-action inside if-else
lochana-chathura Nov 29, 2023
d1eb014
Add runtime support for alternate receive
HindujaB Nov 29, 2023
a2324ab
Fix syntax tree for receive-field parsing
lochana-chathura Nov 29, 2023
8ca659c
Fix checkstyle error
HindujaB Nov 29, 2023
b56670d
Add alternate receive tests
HindujaB Nov 30, 2023
d3e765c
Refactor receive logic
HindujaB Nov 30, 2023
6b2bff4
Remove unnecessary lines
HindujaB Dec 1, 2023
f4e8e53
Remove unnecessary lines
HindujaB Dec 1, 2023
3d38a9d
Add more tests
HindujaB Dec 1, 2023
08089a0
Rename error test
HindujaB Dec 1, 2023
776a75a
Merge conditional changes
HindujaB Dec 1, 2023
65dc784
Fix compiler tests
HindujaB Dec 4, 2023
2aca5de
Fix issue with autoClose() stmts
lochana-chathura Dec 8, 2023
333fc16
Merge branch 'worker_new' of github.com:lochana-chathura/ballerina-la…
HindujaB Dec 8, 2023
2da36e8
Add display annotation support for worker
nipunayf Dec 8, 2023
99b6495
Add conditional send runtime support
HindujaB Dec 9, 2023
ba12ba6
Add more tests
HindujaB Dec 9, 2023
ab50a0d
Update LS tests for display annotation
nipunayf Dec 9, 2023
57760c0
Fix checkStyle error
HindujaB Dec 9, 2023
176f977
Merge pull request #41741 from poorna2152/worker_change_semantic
lochana-chathura Dec 11, 2023
8240b05
Merge pull request #41849 from nipunayf/display-worker
lochana-chathura Dec 11, 2023
7510300
Fix syntax tree for receive-field
lochana-chathura Dec 11, 2023
a6eb346
Merge remote-tracking branch 'upstream/worker_change' into worker_new…
lochana-chathura Dec 11, 2023
cc7e577
Temporary comment-out worker send/receive related error
lochana-chathura Dec 11, 2023
2983755
Update bvm/ballerina-runtime/src/main/java/io/ballerina/runtime/inter…
HindujaB Dec 11, 2023
d3c6c8f
Fix failing tests
HindujaB Dec 11, 2023
05b32da
Update component fetch logic
axewilledge Nov 28, 2023
2922bd6
Update checkstyle
axewilledge Nov 29, 2023
0a897c9
Update tests
axewilledge Nov 29, 2023
f21b33e
Address suggestions
HindujaB Dec 11, 2023
e78d90e
Fix peer-worker parsing
lochana-chathura Dec 11, 2023
97562c9
Fix peer-worker parsing
lochana-chathura Dec 11, 2023
59c1319
Merge pull request #41857 from axewilledge/worker_change_origin
HindujaB Dec 11, 2023
e116c9b
Merge pull request #41797 from HindujaB/worker_new
HindujaB Dec 11, 2023
27eb93f
Fix formatting of multiple receive actions
poorna2152 Dec 14, 2023
15f8195
Improve codegen and alternate receive
HindujaB Dec 15, 2023
3064cec
Address review suggestions
poorna2152 Dec 15, 2023
b349f9b
Merge pull request #41880 from poorna2152/multiple_receive_formatter
lochana-chathura Dec 18, 2023
3811f1d
Merge remote-tracking branch 'upstream/worker_change' into worker_new3
lochana-chathura Dec 18, 2023
0d2b913
Fix multiple receive type checking
lochana-chathura Dec 20, 2023
96a16d0
Fix worker send/receive allowed positions
lochana-chathura Dec 21, 2023
ebb4937
Merge branch 'worker_change' of github.com:ballerina-platform/balleri…
HindujaB Dec 21, 2023
f8db245
Merge branch 'worker_new3' of github.com:lochana-chathura/ballerina-l…
HindujaB Dec 21, 2023
b464fae
Move negative test to positive
HindujaB Dec 21, 2023
2f3570a
Temporary disable failing 2 tests
lochana-chathura Dec 21, 2023
f9d6b59
Fix worker send/receive failure type population
lochana-chathura Dec 21, 2023
04da5f8
Merge pull request #41913 from lochana-chathura/worker_new3
lochana-chathura Dec 21, 2023
1f69119
Fix merge conflicts
HindujaB Jan 2, 2024
5a4a95f
Add no message error type for worker interactions
lochana-chathura Jan 2, 2024
c242c8d
Fix result type for multiple receive action
lochana-chathura Jan 2, 2024
96e1d3a
Merge branch 'worker_new3' of github.com:lochana-chathura/ballerina-l…
HindujaB Jan 2, 2024
c786533
Fix result type for multiple receive action
lochana-chathura Jan 2, 2024
974a022
Merge pull request #41925 from lochana-chathura/worker_new
lochana-chathura Jan 3, 2024
ba41d6b
Merge remote-tracking branch 'upstream/worker_change' into worker_new3
lochana-chathura Jan 3, 2024
f7f73d4
Fix NoMessageError when there are error only returns
lochana-chathura Jan 3, 2024
f601782
Temporary disable WorkerConditionalSendTest
lochana-chathura Jan 3, 2024
539ea07
Merge branch 'worker_change' of github.com:ballerina-platform/balleri…
HindujaB Jan 3, 2024
15da91b
Fix jballerina-unit-test:checkstyleTest failure
lochana-chathura Jan 3, 2024
549ab1b
Merge pull request #41922 from lochana-chathura/worker_new3
lochana-chathura Jan 3, 2024
a61000d
Merge branch 'worker_change' of github.com:ballerina-platform/balleri…
HindujaB Jan 4, 2024
9deff31
Add multiple receive support
HindujaB Jan 5, 2024
b3ffe02
Support NoMessage error return
HindujaB Jan 5, 2024
d9b6da7
Improve tests for multiple receive action
HindujaB Jan 5, 2024
b048609
Refactor minor errors
HindujaB Jan 5, 2024
5b0a8d7
Fix regression issue introduced with commit c786533
lochana-chathura Jan 7, 2024
29ba176
Fix semantic API visitors for alternate and multiple receive AST nodes
lochana-chathura Jan 7, 2024
4c11167
Merge pull request #41944 from lochana-chathura/worker_new3
lochana-chathura Jan 7, 2024
967c703
Refactor receive methods
HindujaB Jan 8, 2024
e84edfd
Merge branch 'worker_change' of github.com:ballerina-platform/balleri…
HindujaB Jan 8, 2024
a7fb64f
Fix nil return bug
HindujaB Jan 8, 2024
92d0475
Add negative tests
HindujaB Jan 11, 2024
c32670f
Address review suggestions
HindujaB Jan 11, 2024
6f2389a
Fix no message error returning
HindujaB Jan 16, 2024
3a75d12
Add stream-receive-action parsing support
lochana-chathura Jan 16, 2024
1dfe02c
Merge pull request #41986 from lochana-chathura/worker_new3
lochana-chathura Jan 16, 2024
adf365b
Improve error message for mismatch in worker send-receive pairing
lochana-chathura Jan 17, 2024
3f419d8
Merge pull request #41999 from lochana-chathura/worker_new3
lochana-chathura Jan 17, 2024
57cdd60
Merge branch 'worker_change' of github.com:ballerina-platform/balleri…
HindujaB Jan 18, 2024
5752c59
Rename `error:NoMessageError` to `error:NoMessage`
lochana-chathura Jan 24, 2024
632175d
Remove channels after message passing
HindujaB Jan 26, 2024
00bd0cf
Remove channel details after message passing
HindujaB Jan 29, 2024
2a6837a
Add `error:NoMessage` iff all receives have it in alternate receive
lochana-chathura Jan 28, 2024
966289c
Merge pull request #42050 from lochana-chathura/worker_new3
lochana-chathura Jan 29, 2024
d4b7c15
Refactor alternate receive type checking test
lochana-chathura Feb 1, 2024
9039f51
Add multiple receive type checking tests
lochana-chathura Feb 1, 2024
4e3050e
Add test for worker send receive allowed positions
lochana-chathura Feb 1, 2024
529f978
Refactor worker send receive tests
lochana-chathura Feb 1, 2024
25c17f3
Add test for worker send receive failure type
lochana-chathura Feb 1, 2024
5373a08
Add alternate and multiple receive tests for symbol finder
lochana-chathura Feb 1, 2024
26600bd
Add alternate and multiple receive tests for reference finder
lochana-chathura Feb 1, 2024
ba4b219
Merge pull request #42084 from lochana-chathura/worker_new3
lochana-chathura Feb 1, 2024
31d8a0d
Fix merge conflicts
HindujaB Feb 8, 2024
8dcfb2e
Rename NoMessageError in tests
HindujaB Feb 8, 2024
b96cc4f
Change ReceiveField to record
HindujaB Feb 19, 2024
b58703d
Fix checkstyle errors
HindujaB Feb 19, 2024
39503b9
Fix checkstyle errors
HindujaB Feb 20, 2024
91a5952
Remove array stream usage
HindujaB Mar 5, 2024
eef9971
Revert changes done in 3a75d12
lochana-chathura Mar 5, 2024
225f2f0
Rename AlternateWorkerReceiveNode to AlternateReceiveNode
lochana-chathura Mar 5, 2024
4248f4e
Merge pull request #42280 from lochana-chathura/worker_new3
lochana-chathura Mar 6, 2024
4e9f2f6
Enable full build for worker_change branch
lochana-chathura Mar 7, 2024
7e280f4
Merge branch 'worker_change' of github.com:ballerina-platform/balleri…
HindujaB Mar 7, 2024
0baff67
Merge pull request #41939 from HindujaB/worker_new
warunalakshitha Mar 8, 2024
ad03f22
Merge remote-tracking branch 'upstream/master' into worker_change
lochana-chathura Mar 11, 2024
dd63236
Remove worker_change branch build
lochana-chathura Mar 11, 2024
ecd62f3
Update license headers
lochana-chathura Mar 11, 2024
e856489
Merge remote-tracking branch 'upstream/master' into worker_change
lochana-chathura Mar 13, 2024
7185566
Update bvm/ballerina-runtime/src/main/java/io/ballerina/runtime/inter…
HindujaB Mar 19, 2024
e94d7dc
Increment BIR version
HindujaB Mar 20, 2024
57e8c6a
Refactor message result handling
HindujaB Mar 20, 2024
0780848
Add comment about callCount
HindujaB Mar 20, 2024
cc01a89
Refactor code
lochana-chathura Mar 20, 2024
4eb341f
Merge pull request #42353 from HindujaB/worker_new
lochana-chathura Mar 20, 2024
1ec750e
Improve error message for multiple-receive with 'var'
lochana-chathura Mar 21, 2024
f2e6cd8
Add tests with if-else ladder to fix desugar coverage
lochana-chathura Mar 21, 2024
a733e1e
Update license headers where applicable
lochana-chathura Mar 21, 2024
bb35d98
Merge remote-tracking branch 'upstream/master' into worker_change
lochana-chathura Mar 21, 2024
72b015d
Fix test failure due to test file newline addition
lochana-chathura Mar 21, 2024
e6ef91c
Improve coverage failure type
lochana-chathura Mar 26, 2024
6d20660
Merge remote-tracking branch 'upstream/master' into worker_change
lochana-chathura Mar 26, 2024
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,7 @@
import io.ballerina.runtime.internal.values.MapValueImpl;
import io.ballerina.runtime.internal.values.MappingInitialValueEntry;

import static io.ballerina.runtime.api.constants.RuntimeConstants.BALLERINA_LANG_ERROR_PKG_ID;
import static io.ballerina.runtime.api.constants.RuntimeConstants.FLOAT_LANG_LIB;
import static io.ballerina.runtime.api.creators.ErrorCreator.createError;
import static io.ballerina.runtime.internal.errors.ErrorCodes.INCOMPATIBLE_CONVERT_OPERATION;
Expand Down Expand Up @@ -187,4 +188,11 @@ public static BError createInvalidFractionDigitsError() {
ErrorReasons.INVALID_FRACTION_DIGITS_ERROR),
ErrorHelper.getErrorDetails(ErrorCodes.INVALID_FRACTION_DIGITS));
}

public static BError createNoMessageError(String chnlName) {
String[] splitWorkers = chnlName.split(":")[0].split("->");
return createError(BALLERINA_LANG_ERROR_PKG_ID, "NoMessage", ErrorReasons.NO_MESSAGE_ERROR,
null, ErrorHelper.getErrorDetails(ErrorCodes.NO_MESSAGE_ERROR,
StringUtils.fromString(splitWorkers[0]), StringUtils.fromString(splitWorkers[1])));
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -149,7 +149,8 @@ public enum ErrorCodes implements DiagnosticCode {
REGEXP_INVALID_HEX_DIGIT("regexp.invalid.hex.digit", "RUNTIME_0120"),
CONFIG_TOML_INVALID_MODULE_STRUCTURE_WITH_VARIABLE("config.toml.invalid.module.structure.with.variable",
"RUNTIME_0121"),
EMPTY_XML_SEQUENCE_HAS_NO_ATTRIBUTES("empty.xml.sequence.no.attributes", "RUNTIME_0122");
EMPTY_XML_SEQUENCE_HAS_NO_ATTRIBUTES("empty.xml.sequence.no.attributes", "RUNTIME_0122"),
NO_MESSAGE_ERROR("no.worker.message.received", "RUNTIME_0123");

private final String errorMsgKey;
private final String errorCode;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -133,6 +133,8 @@ private ErrorReasons() {}
public static final BString REGEXP_OPERATION_ERROR = getModulePrefixedReason(REGEXP_LANG_LIB,
"RegularExpressionOperationError");

public static final BString NO_MESSAGE_ERROR = StringUtils.fromString("NoMessage");

public static BString getModulePrefixedReason(String moduleName, String identifier) {
return StringUtils.fromString(BALLERINA_ORG_PREFIX.concat(moduleName)
.concat(CLOSING_CURLY_BRACE).concat(identifier));
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,7 @@
import io.ballerina.runtime.api.creators.ErrorCreator;
import io.ballerina.runtime.api.utils.StringUtils;
import io.ballerina.runtime.api.values.BError;
import io.ballerina.runtime.api.values.BMap;
import io.ballerina.runtime.api.values.BString;
import io.ballerina.runtime.internal.TypeChecker;
import io.ballerina.runtime.internal.values.ChannelDetails;
Expand Down Expand Up @@ -90,6 +91,8 @@ public class Strand {
public Stack<TransactionLocalContext> trxContexts;
private State state;
private final ReentrantLock strandLock;
public BMap<BString, Object> workerReceiveMap = null;
public int channelCount = 0;

public Strand(String name, StrandMetadata metadata, Scheduler scheduler, Strand parent,
Map<String, Object> properties) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,9 +17,22 @@
*/
package io.ballerina.runtime.internal.scheduling;

import io.ballerina.runtime.api.creators.ValueCreator;
import io.ballerina.runtime.api.types.Type;
import io.ballerina.runtime.api.utils.StringUtils;
import io.ballerina.runtime.api.values.BMap;
import io.ballerina.runtime.api.values.BString;
import io.ballerina.runtime.internal.ErrorUtils;
import io.ballerina.runtime.internal.values.ChannelDetails;
import io.ballerina.runtime.internal.values.ErrorValue;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import static io.ballerina.runtime.internal.scheduling.State.BLOCK_AND_YIELD;

/**
* This represents a worker data channel holder that is created for each strand to hold channels required.
*
Expand All @@ -28,11 +41,13 @@
public class WDChannels {

private Map<String, WorkerDataChannel> wDChannels;
private final List<ErrorValue> errors = new ArrayList<>();

//TODO try to generalize this to a normal data channel, in that case we won't need these classes.
public WDChannels() {
// A worker receive field for multiple receive action.
public record ReceiveField(String fieldName, String channelName) {
}

//TODO try to generalize this to a normal data channel, in that case we won't need these classes.
public synchronized WorkerDataChannel getWorkerDataChannel(String name) {
if (this.wDChannels == null) {
this.wDChannels = new HashMap<>();
Expand All @@ -44,4 +59,122 @@ public synchronized WorkerDataChannel getWorkerDataChannel(String name) {
}
return channel;
}

public Object receiveDataMultipleChannels(Strand strand, ReceiveField[] receiveFields, Type targetType)
throws Throwable {
if (strand.workerReceiveMap == null) {
strand.workerReceiveMap = ValueCreator.createMapValue(targetType);
}
for (ReceiveField field : receiveFields) {
WorkerDataChannel channel = getWorkerDataChannel(field.channelName());
WorkerDataChannel.State state = channel.getState();
Object result = null;
switch (state) {
case OPEN:
result = channel.tryTakeData(strand, true);
break;
case AUTO_CLOSED:
result = ErrorUtils.createNoMessageError(field.channelName());
break;
case CLOSED:
continue;
}
checkAndPopulateResult(strand, field, result, channel);
}
return clearResultCache(strand, receiveFields);
}

private void checkAndPopulateResult(Strand strand, ReceiveField field, Object result, WorkerDataChannel channel) {
if (result == null) {
strand.setState(BLOCK_AND_YIELD);
return;
}
result = getResultValue(result);
strand.workerReceiveMap.populateInitialValue(StringUtils.fromString(field.fieldName()), result);
channel.close();
++strand.channelCount;
}

private Object clearResultCache(Strand strand, ReceiveField[] receiveFields) {
if (strand.channelCount != receiveFields.length) {
return null;
}
BMap<BString, Object> map = strand.workerReceiveMap;
strand.workerReceiveMap = null;
strand.channelCount = 0;
strand.setState(State.RUNNABLE);
return map;
}

public Object receiveDataAlternateChannels(Strand strand, String[] channels) throws Throwable {
Object result = null;
boolean allChannelsClosed = true;
for (String channelName : channels) {
WorkerDataChannel channel = getWorkerDataChannel(channelName);
WorkerDataChannel.State state = channel.getState();
if (state == WorkerDataChannel.State.OPEN) {
allChannelsClosed = false;
result = handleResultForOpenChannel(strand, channels, channel);
} else if (state == WorkerDataChannel.State.AUTO_CLOSED) {
errors.add((ErrorValue) ErrorUtils.createNoMessageError(channelName));
}
}
return processResulAndError(strand, channels, result, allChannelsClosed);
}

private Object handleResultForOpenChannel(Strand strand, String[] channels, WorkerDataChannel channel)
throws Throwable {
Object result = channel.tryTakeData(strand, true);
if (result == null) {
return null;
}
Object resultValue = getResultValue(result);
if (resultValue instanceof ErrorValue errorValue) {
errors.add(errorValue);
channel.close();
return null;
}
closeChannels(channels);
return result;
}

private static Object getResultValue(Object result) {
if (result instanceof WorkerDataChannel.WorkerResult workerResult) {
return workerResult.value;
}
return result;
}

private Object processResulAndError(Strand strand, String[] channels, Object result, boolean allChannelsClosed) {
if (result == null) {
if (errors.size() == channels.length) {
result = errors.get(errors.size() - 1);
} else if (!allChannelsClosed) {
strand.setState(BLOCK_AND_YIELD);
}
} else {
strand.setState(State.RUNNABLE);
}
return getResultValue(result);
}

private void closeChannels(String[] channels) {
for (String channelName : channels) {
WorkerDataChannel channel = getWorkerDataChannel(channelName);
channel.close();
channel.callCount = 2;
}
}

public synchronized void removeCompletedChannels(Strand strand, String channelName) {
if (this.wDChannels != null) {
WorkerDataChannel channel = this.wDChannels.get(channelName);
// callCount is incremented to 2 when the message passing is completed.
if (channel != null && channel.callCount == 2) {
this.wDChannels.remove(channelName);
strand.channelDetails.remove(new ChannelDetails(channelName, true, false));
}
}
}

}
Loading
Loading