Skip to content

Commit 16be941

Browse files
Merge pull request #87 from iExecBlockchainComputing/feature/remove-broker-engine-usage
Feature/remove broker engine usage
2 parents 40ffd67 + 12f058f commit 16be941

File tree

10 files changed

+143
-130
lines changed

10 files changed

+143
-130
lines changed

CHANGELOG.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ All notable changes to this project will be documented in this file.
77
### New Features
88
- Enable Prometheus actuator. (#79)
99
- Rework `QueueService` with a thread pool based on a `PriorityBlockingQueue`. (#84)
10+
- Do not use `broker` to match ordes on chain. (#87)
1011
### Bug Fixes
1112
- Fix security rule to access Swagger API. (#79)
1213
### Dependency Upgrades

build.gradle

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -109,11 +109,11 @@ sourceSets {
109109
}
110110

111111
task itestSetup(type: Exec) {
112-
commandLine 'docker-compose', 'up', '-d'
112+
commandLine 'docker', 'compose', 'up', '-d'
113113
}
114114

115115
task itestTeardown(type: Exec) {
116-
commandLine 'docker-compose', 'down'
116+
commandLine 'docker', 'compose', 'down'
117117
}
118118

119119
task itest(type: Test) {

docker-compose.yml

Lines changed: 0 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -14,22 +14,6 @@ services:
1414
networks:
1515
- iexec-blockchain-adapter-api-net
1616

17-
ibaa-broker:
18-
image: docker-regis.iex.ec/iexec-autonomous-brokering-engine:dev #warn, using nexus repo + dev tag, can it be public?
19-
container_name: ibaa-broker
20-
environment:
21-
- CHAIN=http://ibaa-chain:8545
22-
- PROXY=0xC129e7917b7c7DeDfAa5Fff1FB18d5D7050fE8ca
23-
- MNEMONIC=${BROKER_PRIVATE_KEY} #must use an other wallet for the broker, like wallet-abc
24-
- PORT=3000
25-
ports:
26-
- 23000:3000
27-
depends_on:
28-
- ibaa-chain
29-
networks:
30-
- iexec-blockchain-adapter-api-net
31-
restart: unless-stopped
32-
3317
ibaa-blockchain-adapter-mongo:
3418
image: library/mongo:4.4
3519
container_name: ibaa-blockchain-adapter-mongo

src/itest/resources/application-itest.yml

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,4 +7,3 @@ chain:
77
id: 65535
88
node-address: http://localhost:28545
99
hub-address: "0xC129e7917b7c7DeDfAa5Fff1FB18d5D7050fE8ca"
10-
broker-url: http://localhost:23000

src/main/java/com/iexec/blockchain/broker/BrokerClient.java

Lines changed: 0 additions & 28 deletions
This file was deleted.

src/main/java/com/iexec/blockchain/broker/BrokerController.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
import io.swagger.v3.oas.annotations.security.SecurityRequirement;
66
import lombok.extern.slf4j.Slf4j;
77
import org.apache.commons.lang3.StringUtils;
8+
import org.springframework.context.annotation.Profile;
89
import org.springframework.http.ResponseEntity;
910
import org.springframework.web.bind.annotation.PostMapping;
1011
import org.springframework.web.bind.annotation.RequestBody;
@@ -14,6 +15,7 @@
1415
import static com.iexec.blockchain.swagger.OpenApiConfig.SWAGGER_BASIC_AUTH;
1516

1617
@Slf4j
18+
@Profile("itest")
1719
@RestController
1820
@RequestMapping("/broker")
1921
public class BrokerController {

src/main/java/com/iexec/blockchain/broker/BrokerService.java

Lines changed: 43 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -16,40 +16,38 @@
1616

1717
package com.iexec.blockchain.broker;
1818

19-
import com.iexec.blockchain.tool.ChainConfig;
2019
import com.iexec.blockchain.tool.IexecHubService;
2120
import com.iexec.common.sdk.broker.BrokerOrder;
22-
import com.iexec.common.sdk.cli.FillOrdersCliOutput;
23-
import com.iexec.common.utils.FeignBuilder;
2421
import com.iexec.commons.poco.chain.ChainAccount;
22+
import com.iexec.commons.poco.contract.generated.IexecHubContract;
2523
import com.iexec.commons.poco.order.AppOrder;
2624
import com.iexec.commons.poco.order.DatasetOrder;
2725
import com.iexec.commons.poco.order.RequestOrder;
2826
import com.iexec.commons.poco.order.WorkerpoolOrder;
2927
import com.iexec.commons.poco.utils.BytesUtils;
30-
import feign.Logger;
3128
import lombok.extern.slf4j.Slf4j;
3229
import org.apache.commons.lang3.StringUtils;
30+
import org.springframework.context.annotation.Profile;
3331
import org.springframework.stereotype.Service;
32+
import org.web3j.protocol.core.methods.response.TransactionReceipt;
3433

3534
import java.math.BigInteger;
3635
import java.text.MessageFormat;
36+
import java.util.List;
3737
import java.util.Objects;
3838
import java.util.Optional;
39+
import java.util.stream.Collectors;
3940

4041
@Slf4j
4142
@Service
43+
@Profile("itest")
4244
public class BrokerService {
4345

44-
private final BrokerClient brokerClient;
4546
private final IexecHubService iexecHubService;
4647

4748

48-
public BrokerService(ChainConfig chainConfig, IexecHubService iexecHubService) {
49-
//TODO Assert broker is up
49+
public BrokerService(IexecHubService iexecHubService) {
5050
this.iexecHubService = iexecHubService;
51-
this.brokerClient = FeignBuilder.createBuilder(Logger.Level.BASIC)
52-
.target(BrokerClient.class, chainConfig.getBrokerUrl());
5351
}
5452

5553
void checkBrokerOrder(BrokerOrder brokerOrder) {
@@ -97,7 +95,8 @@ public String matchOrders(BrokerOrder brokerOrder) {
9795
RequestOrder requestOrder = brokerOrder.getRequestOrder();
9896
final boolean withDataset = withDataset(requestOrder.getDataset());
9997
BigInteger datasetPrice = withDataset ? datasetOrder.getDatasetprice() : BigInteger.ZERO;
100-
if (!hasRequesterAcceptedPrices(brokerOrder.getRequestOrder(),
98+
if (!hasRequesterAcceptedPrices(
99+
requestOrder,
101100
appOrder.getAppprice(),
102101
workerpoolOrder.getWorkerpoolprice(),
103102
datasetPrice,
@@ -114,27 +113,51 @@ public String matchOrders(BrokerOrder brokerOrder) {
114113
datasetPrice.longValue())) {
115114
throw new IllegalStateException("Deposit too low");
116115
}
117-
String beneficiary = brokerOrder.getRequestOrder().getBeneficiary();
116+
String beneficiary = requestOrder.getBeneficiary();
118117
String messageDetails = MessageFormat.format("requester:{0}, beneficiary:{1}, pool:{2}, app:{3}",
119118
requestOrder.getRequester(), beneficiary, workerpoolOrder.getWorkerpool(), appOrder.getApp());
120119
if (withDataset) {
121120
messageDetails += ", dataset:" + datasetOrder.getDataset();
122121
}
123122
log.info("Matching valid orders on-chain [{}]", messageDetails);
124-
return fireMatchOrders(brokerOrder).orElse("");
123+
return fireMatchOrders(appOrder, datasetOrder, workerpoolOrder, requestOrder)
124+
.orElse("");
125125
}
126126

127-
Optional<String> fireMatchOrders(BrokerOrder brokerOrder) {
127+
Optional<String> fireMatchOrders(
128+
AppOrder appOrder,
129+
DatasetOrder datasetOrder,
130+
WorkerpoolOrder workerpoolOrder,
131+
RequestOrder requestOrder) {
128132
try {
129-
FillOrdersCliOutput dealResponse = brokerClient.matchOrders(brokerOrder);
130-
log.info("Matched orders [chainDealId:{}, tx:{}]", dealResponse.getDealid(), dealResponse.getTxHash());
131-
return Optional.of(dealResponse.getDealid());
133+
TransactionReceipt receipt = iexecHubService.
134+
getHubContract()
135+
.matchOrders(
136+
appOrder.toHubContract(),
137+
datasetOrder.toHubContract(),
138+
workerpoolOrder.toHubContract(),
139+
requestOrder.toHubContract()
140+
).send();
141+
log.info("block {}, hash {}, status {}", receipt.getBlockNumber(), receipt.getTransactionHash(), receipt.getStatus());
142+
log.info("logs count {}", receipt.getLogs().size());
143+
144+
String workerpoolAddress = workerpoolOrder.getWorkerpool();
145+
List<String> events = IexecHubContract.getSchedulerNoticeEvents(receipt)
146+
.stream()
147+
.filter(event -> workerpoolAddress.equals(event.workerpool))
148+
.map(event -> BytesUtils.bytesToString(event.dealid))
149+
.collect(Collectors.toList());
150+
log.info("events count {}", events.size());
151+
if (events.size() != 1) {
152+
throw new IllegalStateException("A single deal should have been created, not " + events.size());
153+
}
154+
String dealId = events.get(0);
155+
log.info("Matched orders [chainDealId:{}, tx:{}]", dealId, receipt.getTransactionHash());
156+
return Optional.of(dealId);
132157
} catch (Exception e) {
133158
log.error("Failed to request match order [requester:{}, app:{}, workerpool:{}, dataset:{}]",
134-
brokerOrder.getRequestOrder().getRequester(),
135-
brokerOrder.getRequestOrder().getApp(),
136-
brokerOrder.getRequestOrder().getWorkerpool(),
137-
brokerOrder.getRequestOrder().getDataset(), e);
159+
requestOrder.getRequester(), requestOrder.getApp(),
160+
requestOrder.getWorkerpool(), requestOrder.getDataset(), e);
138161
}
139162
return Optional.empty();
140163
}

src/main/java/com/iexec/blockchain/tool/ChainConfig.java

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -65,9 +65,6 @@ public class ChainConfig {
6565
@Value("${chain.gas-price-cap}")
6666
private long gasPriceCap;
6767

68-
@Value("${chain.broker-url}")
69-
private String brokerUrl;
70-
7168
@Getter(AccessLevel.NONE) // no getter
7269
private final Validator validator;
7370

src/main/resources/application.yml

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -20,11 +20,10 @@ chain:
2020
is-sidechain: ${IEXEC_BLOCKCHAIN_ADAPTER_API_IS_SIDECHAIN:true}
2121
gas-price-multiplier: ${IEXEC_BLOCKCHAIN_ADAPTER_API_GAS_PRICE_MULTIPLIER:1.0} # txs will be sent with networkGasPrice*gasPriceMultiplier, 4.0 means super fast
2222
gas-price-cap: ${IEXEC_BLOCKCHAIN_ADAPTER_API_GAS_PRICE_CAP:22000000000} #in Wei, will be used for txs if networkGasPrice*gasPriceMultiplier > gasPriceCap
23-
broker-url: ${IEXEC_BLOCKCHAIN_ADAPTER_API_BROKER_URL:http://localhost:3000}
2423
wallet:
2524
path: ${IEXEC_BLOCKCHAIN_ADAPTER_API_WALLET_PATH:src/main/resources/wallet.json}
2625
password: ${IEXEC_BLOCKCHAIN_ADAPTER_API_WALLET_PASSWORD:whatever}
2726

2827
springdoc:
2928
packagesToScan: com.iexec.blockchain
30-
pathsToMatch: /**
29+
pathsToMatch: /**

0 commit comments

Comments
 (0)