Skip to content

Commit

Permalink
Update resiliency clients
Browse files Browse the repository at this point in the history
  • Loading branch information
TharmiganK committed Apr 3, 2024
1 parent e580a01 commit 222cb20
Show file tree
Hide file tree
Showing 3 changed files with 92 additions and 53 deletions.
3 changes: 1 addition & 2 deletions ballerina/http_client_endpoint.bal
Original file line number Diff line number Diff line change
Expand Up @@ -733,8 +733,7 @@ isolated function createResponseError(int statusCode, string reasonPhrase, map<s
}

isolated function externProcessResponse(Response response, TargetType targetType, boolean requireValidation)
returns Response|anydata|StatusCodeResponse|ClientError =
@java:Method {
returns Response|anydata|StatusCodeResponse|ClientError = @java:Method {
'class: "io.ballerina.stdlib.http.api.nativeimpl.ExternResponseProcessor",
name: "processResponse"
} external;
64 changes: 40 additions & 24 deletions ballerina/resiliency_failover_client.bal
Original file line number Diff line number Diff line change
Expand Up @@ -99,14 +99,16 @@ public client isolated class FailoverClient {
} external;

private isolated function processPost(string path, RequestMessage message, TargetType targetType,
string? mediaType, map<string|string[]>? headers) returns Response|anydata|ClientError {
string? mediaType, map<string|string[]>? headers) returns Response|StatusCodeResponse|anydata|ClientError {
Request req = check buildRequest(message, mediaType);
populateOptions(req, mediaType, headers);
var result = self.performFailoverAction(path, req, HTTP_POST);
if result is HttpFuture {
return getInvalidTypeError();
} else if result is Response || result is ClientError {
return processResponse(result, targetType, self.requireValidation);
} else if result is ClientError {
return result;
} else if result is Response {
return externProcessResponse(result, targetType, self.requireValidation);
} else {
panic error ClientError("invalid response type received");
}
Expand Down Expand Up @@ -144,14 +146,16 @@ public client isolated class FailoverClient {
} external;

private isolated function processPut(string path, RequestMessage message, TargetType targetType,
string? mediaType, map<string|string[]>? headers) returns Response|anydata|ClientError {
string? mediaType, map<string|string[]>? headers) returns Response|StatusCodeResponse|anydata|ClientError {
Request req = check buildRequest(message, mediaType);
populateOptions(req, mediaType, headers);
var result = self.performFailoverAction(path, req, HTTP_PUT);
if result is HttpFuture {
return getInvalidTypeError();
} else if result is Response || result is ClientError {
return processResponse(result, targetType, self.requireValidation);
} else if result is ClientError {
return result;
} else if result is Response {
return externProcessResponse(result, targetType, self.requireValidation);
} else {
panic error ClientError("invalid response type received");
}
Expand Down Expand Up @@ -189,14 +193,16 @@ public client isolated class FailoverClient {
} external;

private isolated function processPatch(string path, RequestMessage message, TargetType targetType,
string? mediaType, map<string|string[]>? headers) returns Response|anydata|ClientError {
string? mediaType, map<string|string[]>? headers) returns Response|StatusCodeResponse|anydata|ClientError {
Request req = check buildRequest(message, mediaType);
populateOptions(req, mediaType, headers);
var result = self.performFailoverAction(path, req, HTTP_PATCH);
if result is HttpFuture {
return getInvalidTypeError();
} else if result is Response || result is ClientError {
return processResponse(result, targetType, self.requireValidation);
} else if result is ClientError {
return result;
} else if result is Response {
return externProcessResponse(result, targetType, self.requireValidation);
} else {
panic error ClientError("invalid response type received");
}
Expand Down Expand Up @@ -234,14 +240,16 @@ public client isolated class FailoverClient {
} external;

private isolated function processDelete(string path, RequestMessage message, TargetType targetType,
string? mediaType, map<string|string[]>? headers) returns Response|anydata|ClientError {
string? mediaType, map<string|string[]>? headers) returns Response|StatusCodeResponse|anydata|ClientError {
Request req = check buildRequest(message, mediaType);
populateOptions(req, mediaType, headers);
var result = self.performFailoverAction(path, req, HTTP_DELETE);
if result is HttpFuture {
return getInvalidTypeError();
} else if result is Response || result is ClientError {
return processResponse(result, targetType, self.requireValidation);
} else if result is ClientError {
return result;
} else if result is Response {
return externProcessResponse(result, targetType, self.requireValidation);
} else {
panic error ClientError("invalid response type received");
}
Expand Down Expand Up @@ -303,13 +311,15 @@ public client isolated class FailoverClient {
} external;

private isolated function processGet(string path, map<string|string[]>? headers, TargetType targetType)
returns Response|anydata|ClientError {
returns Response|StatusCodeResponse|anydata|ClientError {
Request req = buildRequestWithHeaders(headers);
var result = self.performFailoverAction(path, req, HTTP_GET);
if result is HttpFuture {
return getInvalidTypeError();
} else if result is Response || result is ClientError {
return processResponse(result, targetType, self.requireValidation);
} else if result is ClientError {
return result;
} else if result is Response {
return externProcessResponse(result, targetType, self.requireValidation);
} else {
panic error ClientError("invalid response type received");
}
Expand Down Expand Up @@ -342,13 +352,15 @@ public client isolated class FailoverClient {
} external;

private isolated function processOptions(string path, map<string|string[]>? headers, TargetType targetType)
returns Response|anydata|ClientError {
returns Response|StatusCodeResponse|anydata|ClientError {
Request req = buildRequestWithHeaders(headers);
var result = self.performFailoverAction(path, req, HTTP_OPTIONS);
if result is HttpFuture {
return getInvalidTypeError();
} else if result is Response || result is ClientError {
return processResponse(result, targetType, self.requireValidation);
} else if result is ClientError {
return result;
} else if result is Response {
return externProcessResponse(result, targetType, self.requireValidation);
} else {
panic error ClientError("invalid response type received");
}
Expand All @@ -372,14 +384,16 @@ public client isolated class FailoverClient {

private isolated function processExecute(string httpVerb, string path, RequestMessage message,
TargetType targetType, string? mediaType, map<string|string[]>? headers)
returns Response|anydata|ClientError {
returns Response|StatusCodeResponse|anydata|ClientError {
Request req = check buildRequest(message, mediaType);
populateOptions(req, mediaType, headers);
var result = self.performExecuteAction(path, req, httpVerb);
if result is HttpFuture {
return getInvalidTypeError();
} else if result is Response || result is ClientError {
return processResponse(result, targetType, self.requireValidation);
} else if result is ClientError {
return result;
} else if result is Response {
return externProcessResponse(result, targetType, self.requireValidation);
} else {
panic error ClientError("invalid response type received");
}
Expand All @@ -398,12 +412,14 @@ public client isolated class FailoverClient {
} external;

private isolated function processForward(string path, Request request, TargetType targetType)
returns Response|anydata|ClientError {
returns Response|StatusCodeResponse|anydata|ClientError {
var result = self.performFailoverAction(path, request, HTTP_FORWARD);
if result is HttpFuture {
return getInvalidTypeError();
} else if result is Response || result is ClientError {
return processResponse(result, targetType, self.requireValidation);
} else if result is ClientError {
return result;
} else if result is Response {
return externProcessResponse(result, targetType, self.requireValidation);
} else {
panic error ClientError("invalid response type received");
}
Expand Down
78 changes: 51 additions & 27 deletions ballerina/resiliency_load_balance_client.bal
Original file line number Diff line number Diff line change
Expand Up @@ -92,11 +92,14 @@ public client isolated class LoadBalanceClient {
} external;

private isolated function processPost(string path, RequestMessage message, TargetType targetType,
string? mediaType, map<string|string[]>? headers) returns Response|anydata|ClientError {
string? mediaType, map<string|string[]>? headers) returns Response|StatusCodeResponse|anydata|ClientError {
Request req = check buildRequest(message, mediaType);
populateOptions(req, mediaType, headers);
var result = self.performLoadBalanceAction(path, req, HTTP_POST);
return processResponse(result, targetType, self.requireValidation);
if result is ClientError {
return result;
}
return externProcessResponse(result, targetType, self.requireValidation);
}

# The PUT resource function implementation of the LoadBalancer Connector.
Expand Down Expand Up @@ -129,13 +132,16 @@ public client isolated class LoadBalanceClient {
returns targetType|ClientError = @java:Method {
'class: "io.ballerina.stdlib.http.api.client.actions.HttpClientAction"
} external;
private isolated function processPut(string path, RequestMessage message, TargetType targetType,
string? mediaType, map<string|string[]>? headers) returns Response|anydata|ClientError {

private isolated function processPut(string path, RequestMessage message, TargetType targetType,
string? mediaType, map<string|string[]>? headers) returns Response|StatusCodeResponse|anydata|ClientError {
Request req = check buildRequest(message, mediaType);
populateOptions(req, mediaType, headers);
var result = self.performLoadBalanceAction(path, req, HTTP_PUT);
return processResponse(result, targetType, self.requireValidation);
if result is ClientError {
return result;
}
return externProcessResponse(result, targetType, self.requireValidation);
}

# The PATCH resource function implementation of the LoadBalancer Connector.
Expand Down Expand Up @@ -168,13 +174,16 @@ public client isolated class LoadBalanceClient {
returns targetType|ClientError = @java:Method {
'class: "io.ballerina.stdlib.http.api.client.actions.HttpClientAction"
} external;
private isolated function processPatch(string path, RequestMessage message, TargetType targetType,
string? mediaType, map<string|string[]>? headers) returns Response|anydata|ClientError {

private isolated function processPatch(string path, RequestMessage message, TargetType targetType,
string? mediaType, map<string|string[]>? headers) returns Response|StatusCodeResponse|anydata|ClientError {
Request req = check buildRequest(message, mediaType);
populateOptions(req, mediaType, headers);
var result = self.performLoadBalanceAction(path, req, HTTP_PATCH);
return processResponse(result, targetType, self.requireValidation);
if result is ClientError {
return result;
}
return externProcessResponse(result, targetType, self.requireValidation);
}

# The DELETE resource function implementation of the LoadBalancer Connector.
Expand Down Expand Up @@ -207,13 +216,16 @@ public client isolated class LoadBalanceClient {
returns targetType|ClientError = @java:Method {
'class: "io.ballerina.stdlib.http.api.client.actions.HttpClientAction"
} external;
private isolated function processDelete(string path, RequestMessage message, TargetType targetType,
string? mediaType, map<string|string[]>? headers) returns Response|anydata|ClientError {

private isolated function processDelete(string path, RequestMessage message, TargetType targetType,
string? mediaType, map<string|string[]>? headers) returns Response|StatusCodeResponse|anydata|ClientError {
Request req = check buildRequest(message, mediaType);
populateOptions(req, mediaType, headers);
var result = self.performLoadBalanceAction(path, req, HTTP_DELETE);
return processResponse(result, targetType, self.requireValidation);
if result is ClientError {
return result;
}
return externProcessResponse(result, targetType, self.requireValidation);
}

# The HEAD resource function implementation of the LoadBalancer Connector.
Expand Down Expand Up @@ -253,7 +265,7 @@ public client isolated class LoadBalanceClient {
} external;

# The GET remote function implementation of the LoadBalancer Connector.
#
#
# + path - Request path
# + headers - The entity headers
# + targetType - HTTP response or `anydata`, which is expected to be returned after data binding
Expand All @@ -263,12 +275,15 @@ public client isolated class LoadBalanceClient {
returns targetType|ClientError = @java:Method {
'class: "io.ballerina.stdlib.http.api.client.actions.HttpClientAction"
} external;

private isolated function processGet(string path, map<string|string[]>? headers, TargetType targetType)
returns Response|anydata|ClientError {
returns Response|StatusCodeResponse|anydata|ClientError {
Request req = buildRequestWithHeaders(headers);
var result = self.performLoadBalanceAction(path, req, HTTP_GET);
return processResponse(result, targetType, self.requireValidation);
if result is ClientError {
return result;
}
return externProcessResponse(result, targetType, self.requireValidation);
}

# The OPTIONS resource function implementation of the LoadBalancer Connector.
Expand Down Expand Up @@ -296,12 +311,15 @@ public client isolated class LoadBalanceClient {
returns targetType|ClientError = @java:Method {
'class: "io.ballerina.stdlib.http.api.client.actions.HttpClientAction"
} external;

private isolated function processOptions(string path, map<string|string[]>? headers, TargetType targetType)
returns Response|anydata|ClientError {
returns Response|StatusCodeResponse|anydata|ClientError {
Request req = buildRequestWithHeaders(headers);
var result = self.performLoadBalanceAction(path, req, HTTP_OPTIONS);
return processResponse(result, targetType, self.requireValidation);
if result is ClientError {
return result;
}
return externProcessResponse(result, targetType, self.requireValidation);
}

# The EXECUTE remote function implementation of the LoadBalancer Connector.
Expand All @@ -319,14 +337,17 @@ public client isolated class LoadBalanceClient {
returns targetType|ClientError = @java:Method {
'class: "io.ballerina.stdlib.http.api.client.actions.HttpClientAction"
} external;

private isolated function processExecute(string httpVerb, string path, RequestMessage message,
TargetType targetType, string? mediaType, map<string|string[]>? headers)
returns Response|anydata|ClientError {
TargetType targetType, string? mediaType, map<string|string[]>? headers)
returns Response|StatusCodeResponse|anydata|ClientError {
Request req = check buildRequest(message, mediaType);
populateOptions(req, mediaType, headers);
var result = self.performLoadBalanceExecuteAction(path, req, httpVerb);
return processResponse(result, targetType, self.requireValidation);
if result is ClientError {
return result;
}
return externProcessResponse(result, targetType, self.requireValidation);
}

# The FORWARD remote function implementation of the LoadBalancer Connector.
Expand All @@ -342,9 +363,12 @@ public client isolated class LoadBalanceClient {
} external;

private isolated function processForward(string path, Request request, TargetType targetType)
returns Response|anydata|ClientError {
returns Response|StatusCodeResponse|anydata|ClientError {
var result = self.performLoadBalanceAction(path, request, HTTP_FORWARD);
return processResponse(result, targetType, self.requireValidation);
if result is ClientError {
return result;
}
return externProcessResponse(result, targetType, self.requireValidation);
}

# The submit implementation of the LoadBalancer Connector.
Expand Down

0 comments on commit 222cb20

Please sign in to comment.