This is an automated email from the ASF dual-hosted git repository.
morningman pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/incubator-doris.git
The following commit(s) were added to refs/heads/master by this push:
new 1e0e472 [fix](audit-plugin) Fix audit load plugin may stopped when
throw unexpected exceptions (#7607)
1e0e472 is described below
commit 1e0e4727842e8140dee24b3e0908ebf176dbd258
Author: Zhengguo Yang <[email protected]>
AuthorDate: Thu Jan 6 23:21:13 2022 +0800
[fix](audit-plugin) Fix audit load plugin may stopped when throw unexpected
exceptions (#7607)
Fix audit load may stopped when throw unexpected exceptions
---
.../doris/plugin/audit/AuditLoaderPlugin.java | 34 +++++++++++++++++-----
1 file changed, 26 insertions(+), 8 deletions(-)
diff --git
a/fe_plugins/auditloader/src/main/java/org/apache/doris/plugin/audit/AuditLoaderPlugin.java
b/fe_plugins/auditloader/src/main/java/org/apache/doris/plugin/audit/AuditLoaderPlugin.java
index 44d34a7..6d2b7bc 100755
---
a/fe_plugins/auditloader/src/main/java/org/apache/doris/plugin/audit/AuditLoaderPlugin.java
+++
b/fe_plugins/auditloader/src/main/java/org/apache/doris/plugin/audit/AuditLoaderPlugin.java
@@ -29,6 +29,11 @@ import org.apache.logging.log4j.Logger;
import java.io.IOException;
import java.io.InputStream;
+import java.nio.ByteBuffer;
+import java.nio.CharBuffer;
+import java.nio.charset.Charset;
+import java.nio.charset.CharsetDecoder;
+import java.nio.charset.CodingErrorAction;
import java.nio.file.FileSystems;
import java.nio.file.Files;
import java.nio.file.Path;
@@ -36,7 +41,6 @@ import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Map;
import java.util.Properties;
-import java.util.TimeZone;
import java.util.concurrent.BlockingQueue;
import java.util.concurrent.LinkedBlockingDeque;
import java.util.concurrent.TimeUnit;
@@ -62,9 +66,6 @@ public class AuditLoaderPlugin extends Plugin implements
AuditPlugin {
private volatile boolean isClosed = false;
private volatile boolean isInit = false;
- // the max auditEventQueue size to store audit_event
- private static final int MAX_AUDIT_EVENT_SIZE = 4096;
-
@Override
public void init(PluginInfo info, PluginContext ctx) throws
PluginException {
super.init(info, ctx);
@@ -161,12 +162,27 @@ public class AuditLoaderPlugin extends Plugin implements
AuditPlugin {
auditBuffer.append(event.peakMemoryBytes).append("\t");
// trim the query to avoid too long
// use `getBytes().length` to get real byte length
- int maxLen = Math.min(conf.max_stmt_length,
event.stmt.getBytes().length);
- String stmt = new String(event.stmt.getBytes(), 0,
maxLen).replace("\t", " ");
+ String stmt = truncateByBytes(event.stmt).replace("\t", " ");
LOG.debug("receive audit event with stmt: {}", stmt);
auditBuffer.append(stmt).append("\n");
}
+ private String truncateByBytes(String str) {
+ int maxLen = Math.min(conf.max_stmt_length, str.getBytes().length);
+ if (maxLen >= str.getBytes().length) {
+ return str;
+ }
+ Charset utf8Charset = Charset.forName("UTF-8");
+ CharsetDecoder decoder = utf8Charset.newDecoder();
+ byte[] sb = str.getBytes();
+ ByteBuffer buffer = ByteBuffer.wrap(sb, 0, maxLen);
+ CharBuffer charBuffer = CharBuffer.allocate(maxLen);
+ decoder.onMalformedInput(CodingErrorAction.IGNORE);
+ decoder.decode(buffer, charBuffer, true);
+ decoder.flush(charBuffer);
+ return new String(charBuffer.array(), 0, charBuffer.position());
+ }
+
private void loadIfNecessary(DorisStreamLoader loader) {
if (auditBuffer.length() < conf.maxBatchSize &&
System.currentTimeMillis() - lastLoadTime < conf.maxBatchIntervalSec * 1000) {
return;
@@ -256,8 +272,10 @@ public class AuditLoaderPlugin extends Plugin implements
AuditPlugin {
assembleAudit(event);
loadIfNecessary(loader);
}
- } catch (InterruptedException e) {
- LOG.debug("encounter exception when loading current audit
batch", e);
+ } catch (InterruptedException ie) {
+ LOG.debug("encounter exception when loading current audit
batch", ie);
+ } catch (Exception e) {
+ LOG.error("run audit logger error:", e);
}
}
}
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]