From d188eb710222f6ca52c9c88dc786a18854bc9e70 Mon Sep 17 00:00:00 2001 From: imbajin Date: Thu, 13 May 2021 23:11:22 +0800 Subject: [PATCH 1/4] refact: use batch flush & async way to output log More details refer to [doc](xx), here are some points: 1. change log4j2 appender to `RandomAccessFile` to improve perf (default is BufferedOutputStream) 2. change log4j2 to not flush immediately (default is true) 3. use bigger (512K) buffer size (default is 4k) 4. use (LMAX Disruptor) async way to improve log perf (default is sync) 5. separate audit log & server log to keep sever log clean & readable 6. use simple layout format for audit log 7. use `StringBuilder` to reduce about `9%` cost for audit log 8. record mysql connection url info for user issue --- .../baidu/hugegraph/auth/ResourceObject.java | 6 ++-- .../backend/store/mysql/MysqlSessions.java | 6 +++- hugegraph-test/src/main/resources/log4j2.xml | 29 +++++++++++++++---- 3 files changed, 33 insertions(+), 8 deletions(-) diff --git a/hugegraph-core/src/main/java/com/baidu/hugegraph/auth/ResourceObject.java b/hugegraph-core/src/main/java/com/baidu/hugegraph/auth/ResourceObject.java index b3bb609e5d..ffdcb28245 100644 --- a/hugegraph-core/src/main/java/com/baidu/hugegraph/auth/ResourceObject.java +++ b/hugegraph-core/src/main/java/com/baidu/hugegraph/auth/ResourceObject.java @@ -58,8 +58,10 @@ public String toString() { if (this.type.isAuth()) { operated = ((AuthElement) this.operated).idString(); } - return String.format("Resource{graph=%s,type=%s,operated=%s}", - this.graph, this.type, operated); + + StringBuilder sb = new StringBuilder("Resource{graph="); + return sb.append(this.graph).append(",type=").append(this.type) + .append(",operated=").append(operated).append("}").toString(); } public static ResourceObject of(String graph, diff --git a/hugegraph-mysql/src/main/java/com/baidu/hugegraph/backend/store/mysql/MysqlSessions.java b/hugegraph-mysql/src/main/java/com/baidu/hugegraph/backend/store/mysql/MysqlSessions.java index 7e02fc6520..4e6cedf1af 100644 --- a/hugegraph-mysql/src/main/java/com/baidu/hugegraph/backend/store/mysql/MysqlSessions.java +++ b/hugegraph-mysql/src/main/java/com/baidu/hugegraph/backend/store/mysql/MysqlSessions.java @@ -233,7 +233,11 @@ protected String buildUri(boolean withConnParams, boolean withDB, if (timeout != null) { builder.setParameter("socketTimeout", String.valueOf(timeout)); } - return builder.toString(); + + String finalUrl = builder.toString(); + LOG.info("The jdbc prefix url = '%s', and the final jdbc url = '%s'", + url, finalUrl); + return finalUrl; } protected String buildUrlPrefix(boolean withDB) { diff --git a/hugegraph-test/src/main/resources/log4j2.xml b/hugegraph-test/src/main/resources/log4j2.xml index 5881345a7e..0aeeeb50f0 100644 --- a/hugegraph-test/src/main/resources/log4j2.xml +++ b/hugegraph-test/src/main/resources/log4j2.xml @@ -7,13 +7,27 @@ - + + - + + + + + + + + + + @@ -47,9 +61,14 @@ - + + - + + + + + From 193c7f141ec329b8a6081177e3d520179bbe38f5 Mon Sep 17 00:00:00 2001 From: imbajin Date: Mon, 17 May 2021 19:44:42 +0800 Subject: [PATCH 2/4] format align & remove mysql log(todo: replace other log4j2.xml later) --- .../baidu/hugegraph/auth/ResourceObject.java | 7 +++-- .../src/assembly/static/conf/log4j2.xml | 27 ++++++++++++++---- hugegraph-dist/src/main/resources/log4j2.xml | 28 +++++++++++++++---- .../backend/store/mysql/MysqlSessions.java | 6 +--- hugegraph-test/src/main/resources/log4j2.xml | 17 ++++++----- 5 files changed, 58 insertions(+), 27 deletions(-) diff --git a/hugegraph-core/src/main/java/com/baidu/hugegraph/auth/ResourceObject.java b/hugegraph-core/src/main/java/com/baidu/hugegraph/auth/ResourceObject.java index ffdcb28245..f7f4d8d213 100644 --- a/hugegraph-core/src/main/java/com/baidu/hugegraph/auth/ResourceObject.java +++ b/hugegraph-core/src/main/java/com/baidu/hugegraph/auth/ResourceObject.java @@ -59,9 +59,10 @@ public String toString() { operated = ((AuthElement) this.operated).idString(); } - StringBuilder sb = new StringBuilder("Resource{graph="); - return sb.append(this.graph).append(",type=").append(this.type) - .append(",operated=").append(operated).append("}").toString(); + StringBuilder sb = new StringBuilder(64); + return sb.append("Resource{graph=").append(this.graph).append(",type=") + .append(this.type).append(",operated=").append(operated) + .append("}").toString(); } public static ResourceObject of(String graph, diff --git a/hugegraph-dist/src/assembly/static/conf/log4j2.xml b/hugegraph-dist/src/assembly/static/conf/log4j2.xml index 07621ed182..83e0598e1c 100644 --- a/hugegraph-dist/src/assembly/static/conf/log4j2.xml +++ b/hugegraph-dist/src/assembly/static/conf/log4j2.xml @@ -7,13 +7,26 @@ - + + - + + + + + + + + + + @@ -39,8 +52,12 @@ - + + - + + + + diff --git a/hugegraph-dist/src/main/resources/log4j2.xml b/hugegraph-dist/src/main/resources/log4j2.xml index 10f10c7662..39971f2f0a 100644 --- a/hugegraph-dist/src/main/resources/log4j2.xml +++ b/hugegraph-dist/src/main/resources/log4j2.xml @@ -7,13 +7,26 @@ - + + - + + + + + + + + + + @@ -47,9 +60,14 @@ - + + - + + + + + diff --git a/hugegraph-mysql/src/main/java/com/baidu/hugegraph/backend/store/mysql/MysqlSessions.java b/hugegraph-mysql/src/main/java/com/baidu/hugegraph/backend/store/mysql/MysqlSessions.java index 4e6cedf1af..7e02fc6520 100644 --- a/hugegraph-mysql/src/main/java/com/baidu/hugegraph/backend/store/mysql/MysqlSessions.java +++ b/hugegraph-mysql/src/main/java/com/baidu/hugegraph/backend/store/mysql/MysqlSessions.java @@ -233,11 +233,7 @@ protected String buildUri(boolean withConnParams, boolean withDB, if (timeout != null) { builder.setParameter("socketTimeout", String.valueOf(timeout)); } - - String finalUrl = builder.toString(); - LOG.info("The jdbc prefix url = '%s', and the final jdbc url = '%s'", - url, finalUrl); - return finalUrl; + return builder.toString(); } protected String buildUrlPrefix(boolean withDB) { diff --git a/hugegraph-test/src/main/resources/log4j2.xml b/hugegraph-test/src/main/resources/log4j2.xml index 0aeeeb50f0..64fb5180b1 100644 --- a/hugegraph-test/src/main/resources/log4j2.xml +++ b/hugegraph-test/src/main/resources/log4j2.xml @@ -8,19 +8,18 @@ - + - + @@ -66,9 +65,9 @@ - + - + From 84bdae5e0a785bf6a572eae9723ab7fc87761458 Mon Sep 17 00:00:00 2001 From: imbajin Date: Mon, 17 May 2021 21:01:56 +0800 Subject: [PATCH 3/4] define capacity for char array --- .../com/baidu/hugegraph/auth/ResourceObject.java | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/hugegraph-core/src/main/java/com/baidu/hugegraph/auth/ResourceObject.java b/hugegraph-core/src/main/java/com/baidu/hugegraph/auth/ResourceObject.java index f7f4d8d213..bdff3b38d4 100644 --- a/hugegraph-core/src/main/java/com/baidu/hugegraph/auth/ResourceObject.java +++ b/hugegraph-core/src/main/java/com/baidu/hugegraph/auth/ResourceObject.java @@ -59,9 +59,15 @@ public String toString() { operated = ((AuthElement) this.operated).idString(); } - StringBuilder sb = new StringBuilder(64); - return sb.append("Resource{graph=").append(this.graph).append(",type=") - .append(this.type).append(",operated=").append(operated) + String typeStr = this.type.toString(); + String operatedStr = operated.toString(); + int capacity = this.graph.length() + typeStr.length() + + operatedStr.length() + 36; + + StringBuilder sb = new StringBuilder(capacity); + return sb.append("Resource{graph=").append(this.graph) + .append(",type=").append(typeStr) + .append(",operated=").append(operatedStr) .append("}").toString(); } From 71f5275a1ea3cb0fceeaf2c8dfdfead0e4ef3edd Mon Sep 17 00:00:00 2001 From: imbajin Date: Mon, 17 May 2021 23:26:25 +0800 Subject: [PATCH 4/4] unified example module --- .../src/main/resources/log4j2.xml | 28 +++++++++++++++---- 1 file changed, 23 insertions(+), 5 deletions(-) diff --git a/hugegraph-example/src/main/resources/log4j2.xml b/hugegraph-example/src/main/resources/log4j2.xml index 5a705332ff..84511f69c4 100644 --- a/hugegraph-example/src/main/resources/log4j2.xml +++ b/hugegraph-example/src/main/resources/log4j2.xml @@ -7,13 +7,26 @@ - + + - + + + + + + + + + + @@ -47,9 +60,14 @@ - + + - + + + + +