use of com.google.common.util.concurrent.RateLimiter in project web3sdk by FISCO-BCOS.
the class PerfomanceTableQuery method main.
public static void main(String[] args) throws Exception {
try {
String groupId = args[3];
ApplicationContext context = new ClassPathXmlApplicationContext("classpath:applicationContext.xml");
Service service = context.getBean(Service.class);
service.setGroupId(Integer.parseInt(groupId));
service.run();
System.out.println("Start test...");
System.out.println("===================================================================");
ChannelEthereumService channelEthereumService = new ChannelEthereumService();
channelEthereumService.setChannelService(service);
ScheduledExecutorService scheduledExecutorService = Executors.newScheduledThreadPool(500);
Web3j web3 = Web3j.build(channelEthereumService, 15 * 100, scheduledExecutorService, Integer.parseInt(groupId));
Credentials credentials = Credentials.create("b83261efa42895c38c6c2364ca878f43e77f3cddbc922bf57d0d48070f79feb6");
BigInteger gasPrice = new BigInteger("30000000");
BigInteger gasLimit = new BigInteger("30000000");
String command = args[0];
Integer count = 0;
Integer qps = 0;
switch(command) {
case "trans":
count = Integer.parseInt(args[1]);
qps = Integer.parseInt(args[2]);
break;
default:
System.out.println("Args: <trans> <Total> <QPS>");
}
ThreadPoolTaskExecutor threadPool = new ThreadPoolTaskExecutor();
threadPool.setCorePoolSize(200);
threadPool.setMaxPoolSize(500);
threadPool.setQueueCapacity(count);
threadPool.initialize();
System.out.println("Deploying contract...");
TableTest tabletest = TableTest.deploy(web3, credentials, gasPrice, gasLimit).send();
PerfomanceCollector collector = new PerfomanceCollector();
collector.setTotal(count);
RateLimiter limiter = RateLimiter.create(qps);
Integer area = count / 10;
final Integer total = count;
Random random = new Random(System.currentTimeMillis());
System.out.println("Start test,total:" + count);
for (Integer i = 0; i < count; ++i) {
threadPool.execute(new Runnable() {
@Override
public void run() {
limiter.acquire();
PerfomanceTableTestCallback callback = new PerfomanceTableTestCallback();
callback.setCollector(collector);
try {
Long time_before = System.currentTimeMillis();
long _id = getNextID();
Random r = new Random();
long l1 = r.nextLong();
Tuple3<List<byte[]>, List<BigInteger>, List<byte[]>> lists = tabletest.select("fruit" + l1 % TableTestClient.modevalue).send();
Long time_after = System.currentTimeMillis();
TransactionReceipt receipt = new TransactionReceipt();
receipt.setStatus("0");
collector.onSelectMessage(receipt, time_after - time_before);
/*
List<byte[]> value1 = lists.getValue1();
List<BigInteger> value2 = lists.getValue2();
List<byte[]> value3 = lists.getValue3();
logger.info("record numbers = " + value1.size());
System.out.println("record numbers = " + value1.size());
for (int i = 0; i < value1.size(); i++) {
String name = new String(value1.get(i));
logger.info("name = " + name);
System.out.println("name = " + name);
int item_id = value2.get(i).intValue();
logger.info("item_id = " + item_id);
System.out.println("item_id = " + item_id);
String item_name = new String(value3.get(i));
logger.info("item_name = " + item_name);
System.out.println("item_name = " + item_name);
}
*/
} catch (Exception e) {
TransactionReceipt receipt = new TransactionReceipt();
receipt.setStatus("-1");
callback.onResponse(receipt);
logger.error("Error sending:", e);
}
int current = sended.incrementAndGet();
if (current >= area && ((current % area) == 0)) {
System.out.println("Already sended: " + current + "/" + total + " transactions");
}
}
});
}
} catch (Exception e) {
e.printStackTrace();
System.exit(-1);
}
}
use of com.google.common.util.concurrent.RateLimiter in project web3sdk by FISCO-BCOS.
the class PerformanceEvidenceVerify method main.
public static void main(String[] args) throws Exception {
try {
String groupId = args[3];
ApplicationContext context = new ClassPathXmlApplicationContext("classpath:applicationContext.xml");
Service service = context.getBean(Service.class);
service.setGroupId(Integer.parseInt(groupId));
service.run();
System.out.println("Start Evidence test...");
System.out.println("===================================================================");
ChannelEthereumService channelEthereumService = new ChannelEthereumService();
channelEthereumService.setChannelService(service);
Web3AsyncThreadPoolSize.web3AsyncCorePoolSize = 3000;
Web3AsyncThreadPoolSize.web3AsyncPoolSize = 2000;
ScheduledExecutorService scheduledExecutorService = Executors.newScheduledThreadPool(500);
Web3j web3 = Web3j.build(channelEthereumService, 15 * 100, scheduledExecutorService, Integer.parseInt(groupId));
Credentials credentials = GenCredential.create();
BigInteger gasPrice = new BigInteger("30000000");
BigInteger gasLimit = new BigInteger("30000000");
String command = args[0];
Integer count = 0;
Integer qps = 0;
switch(command) {
case "insert":
count = Integer.parseInt(args[1]);
qps = Integer.parseInt(args[2]);
break;
default:
System.out.println("Args: <insert> <Total> <QPS>");
}
ThreadPoolTaskExecutor threadPool = new ThreadPoolTaskExecutor();
threadPool.setCorePoolSize(200);
threadPool.setMaxPoolSize(500);
threadPool.setQueueCapacity(count);
threadPool.initialize();
System.out.println("Deploying Evidence contract...");
EvidenceVerify evidence = EvidenceVerify.deploy(web3, credentials, gasPrice, gasLimit).send();
PerformanceCollector collector = new PerformanceCollector();
collector.setTotal(count);
RateLimiter limiter = RateLimiter.create(qps);
Integer area = count / 10;
final Integer total = count;
ECDSASign signHandler = new ECDSASign();
ECKeyPair keyPair = Keys.createEcKeyPair();
System.out.println("Start test,total:" + count);
System.out.println("address:" + credentials.getAddress());
String signAddr = Keys.getAddress(keyPair);
System.out.println("standardCredential address:" + signAddr);
for (Integer i = 0; i < count; ++i) {
threadPool.execute(new Runnable() {
@Override
public void run() {
limiter.acquire();
PerformanceOkCallback callback = new PerformanceOkCallback();
callback.setCollector(collector);
try {
String evi = "test";
String evInfo = "test_info";
int random = new SecureRandom().nextInt(50000);
String eviId = String.valueOf(random);
// sign to evi
byte[] message = Hash.sha3(evi.getBytes());
Sign.SignatureData sign = signHandler.signMessage(evi.getBytes(), keyPair);
int v = sign.getV();
evidence.insertEvidence(evi, evInfo, eviId, signAddr, message, BigInteger.valueOf(v), sign.getR(), sign.getS(), callback);
} catch (Exception e) {
TransactionReceipt receipt = new TransactionReceipt();
receipt.setStatus("-1");
callback.onResponse(receipt);
logger.info(e.getMessage());
}
int current = sended.incrementAndGet();
if (current >= area && ((current % area) == 0)) {
System.out.println("Already sended: " + current + "/" + total + " transactions");
}
}
});
}
} catch (Exception e) {
e.printStackTrace();
System.exit(-1);
}
}
use of com.google.common.util.concurrent.RateLimiter in project web3sdk by FISCO-BCOS.
the class PerformanceOk method main.
public static void main(String[] args) throws Exception {
try {
String groupId = args[3];
ApplicationContext context = new ClassPathXmlApplicationContext("classpath:applicationContext.xml");
Service service = context.getBean(Service.class);
service.setGroupId(Integer.parseInt(groupId));
service.run();
System.out.println("Start test...");
System.out.println("===================================================================");
ChannelEthereumService channelEthereumService = new ChannelEthereumService();
channelEthereumService.setChannelService(service);
Web3AsyncThreadPoolSize.web3AsyncCorePoolSize = 3000;
Web3AsyncThreadPoolSize.web3AsyncPoolSize = 2000;
ScheduledExecutorService scheduledExecutorService = Executors.newScheduledThreadPool(500);
Web3j web3 = Web3j.build(channelEthereumService, 15 * 100, scheduledExecutorService, Integer.parseInt(groupId));
Credentials credentials = Credentials.create("b83261efa42895c38c6c2364ca878f43e77f3cddbc922bf57d0d48070f79feb6");
BigInteger gasPrice = new BigInteger("30000000");
BigInteger gasLimit = new BigInteger("30000000");
String command = args[0];
Integer count = 0;
Integer qps = 0;
switch(command) {
case "trans":
count = Integer.parseInt(args[1]);
qps = Integer.parseInt(args[2]);
break;
default:
System.out.println("Args: <trans> <Total> <QPS>");
}
ThreadPoolTaskExecutor threadPool = new ThreadPoolTaskExecutor();
threadPool.setCorePoolSize(200);
threadPool.setMaxPoolSize(500);
threadPool.setQueueCapacity(count);
threadPool.initialize();
System.out.println("Deploying contract...");
Ok ok = Ok.deploy(web3, credentials, gasPrice, gasLimit).send();
PerformanceCollector collector = new PerformanceCollector();
collector.setTotal(count);
RateLimiter limiter = RateLimiter.create(qps);
Integer area = count / 10;
final Integer total = count;
System.out.println("Start test,total:" + count);
for (Integer i = 0; i < count; ++i) {
threadPool.execute(new Runnable() {
@Override
public void run() {
limiter.acquire();
PerformanceOkCallback callback = new PerformanceOkCallback();
callback.setCollector(collector);
try {
ok.trans(new BigInteger("4"), callback);
} catch (Exception e) {
TransactionReceipt receipt = new TransactionReceipt();
receipt.setStatus("-1");
callback.onResponse(receipt);
logger.info(e.getMessage());
}
int current = sended.incrementAndGet();
if (current >= area && ((current % area) == 0)) {
System.out.println("Already sended: " + current + "/" + total + " transactions");
}
}
});
}
} catch (Exception e) {
e.printStackTrace();
System.exit(-1);
;
}
}
use of com.google.common.util.concurrent.RateLimiter in project web3sdk by FISCO-BCOS.
the class PerfomanceTableModify method main.
public static void main(String[] args) throws Exception {
try {
String groupId = args[3];
ApplicationContext context = new ClassPathXmlApplicationContext("classpath:applicationContext.xml");
Service service = context.getBean(Service.class);
service.setGroupId(Integer.parseInt(groupId));
service.run();
System.out.println("Start test...");
System.out.println("===================================================================");
ChannelEthereumService channelEthereumService = new ChannelEthereumService();
channelEthereumService.setChannelService(service);
ScheduledExecutorService scheduledExecutorService = Executors.newScheduledThreadPool(500);
Web3j web3 = Web3j.build(channelEthereumService, 15 * 100, scheduledExecutorService, Integer.parseInt(groupId));
Credentials credentials = Credentials.create("b83261efa42895c38c6c2364ca878f43e77f3cddbc922bf57d0d48070f79feb6");
BigInteger gasPrice = new BigInteger("30000000");
BigInteger gasLimit = new BigInteger("30000000");
String command = args[0];
Integer count = 0;
Integer qps = 0;
switch(command) {
case "trans":
count = Integer.parseInt(args[1]);
qps = Integer.parseInt(args[2]);
break;
default:
System.out.println("Args: <trans> <Total> <QPS>");
}
ThreadPoolTaskExecutor threadPool = new ThreadPoolTaskExecutor();
threadPool.setCorePoolSize(200);
threadPool.setMaxPoolSize(500);
threadPool.setQueueCapacity(count);
threadPool.initialize();
System.out.println("Deploying contract...");
TableTest tabletest = TableTest.deploy(web3, credentials, gasPrice, gasLimit).send();
PerfomanceCollector collector = new PerfomanceCollector();
collector.setTotal(count);
RateLimiter limiter = RateLimiter.create(qps);
Integer area = count / 10;
final Integer total = count;
Random random = new Random(System.currentTimeMillis());
System.out.println("Start test,total:" + count);
for (Integer i = 0; i < count; ++i) {
threadPool.execute(new Runnable() {
@Override
public void run() {
limiter.acquire();
PerfomanceTableTestCallback callback = new PerfomanceTableTestCallback();
callback.setCollector(collector);
try {
long _id = getNextID();
Random r = new Random();
long l1 = r.nextLong();
tabletest.update("fruit" + l1 % TableTestClient.modevalue, BigInteger.valueOf(_id), "apple" + getId(), callback);
} catch (Exception e) {
TransactionReceipt receipt = new TransactionReceipt();
receipt.setStatus("-1");
callback.onResponse(receipt);
logger.error("Error sending:", e);
}
int current = sended.incrementAndGet();
if (current >= area && ((current % area) == 0)) {
System.out.println("Already sended: " + current + "/" + total + " transactions");
}
}
});
}
} catch (Exception e) {
e.printStackTrace();
System.exit(-1);
}
}
use of com.google.common.util.concurrent.RateLimiter in project web3sdk by FISCO-BCOS.
the class PerformanceDTTest method userTransferTest.
public void userTransferTest(BigInteger count, BigInteger qps, BigInteger deci, BigInteger queryAccountQPS) {
List<String> signedTransactions = new ArrayList<String>();
List<PerformanceDTCallback> callbacks = new ArrayList<PerformanceDTCallback>();
try {
parallelokAddr = dagUserMgr.getContractAddr();
parallelok = ParallelOk.load(parallelokAddr, web3, credentials, new StaticGasProvider(new BigInteger("30000000"), new BigInteger("30000000")));
/*
System.out.println("Reading account state...");
List<DagTransferUser> allUser = dagUserMgr.getUserList();
for (int i = 0; i < allUser.size(); ++i) {
BigInteger result = parallelok.balanceOf(allUser.get(i).getUser()).send();
allUser.get(i).setAmount(result);
}
*/
List<DagTransferUser> allUser = dagUserMgr.getUserList();
ThreadPoolTaskExecutor threadPool = new ThreadPoolTaskExecutor();
threadPool.setCorePoolSize(200);
threadPool.setMaxPoolSize(500);
threadPool.setQueueCapacity(Math.max(count.intValue(), allUser.size()) + 1000);
threadPool.initialize();
Lock lock = new ReentrantLock();
final ParallelOk _parallelok = parallelok;
RateLimiter queryAccountLimiter = RateLimiter.create(queryAccountQPS.intValue());
AtomicInteger geted = new AtomicInteger(0);
for (int i = 0; i < allUser.size(); ++i) {
final Integer _i = i;
queryAccountLimiter.acquire();
threadPool.execute(new Runnable() {
@Override
public void run() {
try {
BigInteger result = _parallelok.balanceOf(allUser.get(_i).getUser()).send();
allUser.get(_i).setAmount(result);
int all = geted.incrementAndGet();
if (all >= allUser.size()) {
System.out.println(dateFormat.format(new Date()) + " Query account finished");
}
} catch (Exception e) {
System.out.println(" Query failed, user is " + allUser.get(_i).getUser());
System.exit(0);
}
}
});
}
while (geted.get() < allUser.size()) {
Thread.sleep(50);
}
latch = new CountDownLatch(count.intValue());
AtomicLong signed = new AtomicLong(0);
// create signed transactions
System.out.println("Creating signed transactions...");
for (int i = 0; i < count.intValue(); ++i) {
final int index = i;
threadPool.execute(new Runnable() {
@Override
public void run() {
while (true) {
DagTransferUser from = dagUserMgr.getFrom(index);
DagTransferUser to = dagUserMgr.getTo(index);
if ((deci.intValue() > 0) && (deci.intValue() >= (index % 10 + 1))) {
to = dagUserMgr.getNext(index);
}
Random random = new Random();
int r = random.nextInt(100);
BigInteger amount = BigInteger.valueOf(r);
PerformanceDTCallback callback = new PerformanceDTCallback();
callback.setCallBackType("transfer");
callback.setCollector(collector);
callback.setDagUserMgr(getDagUserMgr());
callback.setFromUser(from);
callback.setToUser(to);
callback.setAmount(amount);
try {
callback.recordStartTime();
String signedTransaction = parallelok.transferSeq(from.getUser(), to.getUser(), amount);
lock.lock();
signedTransactions.add(signedTransaction);
callbacks.add(callback);
long totalSigned = signed.incrementAndGet();
if (totalSigned % (count.longValue() / 10) == 0) {
System.out.println("Signed transaction: " + String.valueOf(totalSigned * 100 / count.longValue()) + "%");
}
break;
} catch (Exception e) {
e.printStackTrace();
continue;
} finally {
lock.unlock();
}
}
latch.countDown();
}
});
}
latch.await();
latch = new CountDownLatch(count.intValue());
long startTime = System.currentTimeMillis();
collector.setStartTimestamp(startTime);
AtomicInteger sent = new AtomicInteger(0);
int division = count.intValue() / 10;
RateLimiter limiter = RateLimiter.create(qps.intValue());
System.out.println("Sending signed transactions...");
for (int i = 0; i < count.intValue(); ++i) {
limiter.acquire();
final int index = i;
threadPool.execute(new Runnable() {
@Override
public void run() {
while (true) {
try {
callbacks.get(index).recordStartTime();
transactionManager.sendTransaction(signedTransactions.get(index), callbacks.get(index));
break;
} catch (Exception e) {
continue;
}
}
int current = sent.incrementAndGet();
if (current >= division && ((current % division) == 0)) {
long elapsed = System.currentTimeMillis() - startTime;
double sendSpeed = current / ((double) elapsed / 1000);
System.out.println("Already sent: " + current + "/" + count + " transactions" + ",QPS=" + sendSpeed);
}
latch.countDown();
}
});
}
latch.await();
while (!collector.isEnd()) {
Thread.sleep(3000);
logger.info(" received: {}, total: {}", collector.getReceived().intValue(), collector.getTotal());
}
veryTransferData(threadPool, queryAccountQPS);
System.exit(0);
} catch (Exception e) {
e.printStackTrace();
System.exit(0);
}
}
Aggregations