35
35
import org .apache .logging .log4j .Logger ;
36
36
37
37
import java .io .IOException ;
38
- import java .time .ZoneId ;
39
- import java .time .format .DateTimeFormatter ;
40
38
import java .util .concurrent .BlockingQueue ;
41
39
import java .util .concurrent .TimeUnit ;
42
40
@@ -48,9 +46,6 @@ public class AuditLoader extends Plugin implements AuditPlugin {
48
46
49
47
public static final String AUDIT_LOG_TABLE = "audit_log" ;
50
48
51
- private static final DateTimeFormatter DATETIME_FORMAT = DateTimeFormatter .ofPattern ("yyyy-MM-dd HH:mm:ss.SSS" )
52
- .withZone (ZoneId .systemDefault ());
53
-
54
49
private StringBuilder auditLogBuffer = new StringBuilder ();
55
50
private int auditLogNum = 0 ;
56
51
private long lastLoadTimeAuditLog = 0 ;
@@ -90,7 +85,7 @@ public void init(PluginInfo info, PluginContext ctx) throws PluginException {
90
85
// GlobalVariable.audit_plugin_max_batch_bytes.
91
86
this .auditEventQueue = Queues .newLinkedBlockingDeque (100000 );
92
87
this .streamLoader = new AuditStreamLoader ();
93
- this .loadThread = new Thread (new LoadWorker (this . streamLoader ), "audit loader thread" );
88
+ this .loadThread = new Thread (new LoadWorker (), "audit loader thread" );
94
89
this .loadThread .start ();
95
90
96
91
isInit = true ;
@@ -143,6 +138,7 @@ private void assembleAudit(AuditEvent event) {
143
138
}
144
139
145
140
private void fillLogBuffer (AuditEvent event , StringBuilder logBuffer ) {
141
+ // should be same order as InternalSchema.AUDIT_SCHEMA
146
142
logBuffer .append (event .queryId ).append ("\t " );
147
143
logBuffer .append (TimeUtils .longToTimeStringWithms (event .timestamp )).append ("\t " );
148
144
logBuffer .append (event .clientIp ).append ("\t " );
@@ -156,8 +152,11 @@ private void fillLogBuffer(AuditEvent event, StringBuilder logBuffer) {
156
152
logBuffer .append (event .scanBytes ).append ("\t " );
157
153
logBuffer .append (event .scanRows ).append ("\t " );
158
154
logBuffer .append (event .returnRows ).append ("\t " );
155
+ logBuffer .append (event .shuffleSendRows ).append ("\t " );
156
+ logBuffer .append (event .shuffleSendBytes ).append ("\t " );
159
157
logBuffer .append (event .stmtId ).append ("\t " );
160
158
logBuffer .append (event .isQuery ? 1 : 0 ).append ("\t " );
159
+ logBuffer .append (event .isNereids ? 1 : 0 ).append ("\t " );
161
160
logBuffer .append (event .feIp ).append ("\t " );
162
161
logBuffer .append (event .cpuTimeMs ).append ("\t " );
163
162
logBuffer .append (event .sqlHash ).append ("\t " );
@@ -172,10 +171,12 @@ private void fillLogBuffer(AuditEvent event, StringBuilder logBuffer) {
172
171
logBuffer .append (stmt ).append ("\n " );
173
172
}
174
173
175
- private void loadIfNecessary (AuditStreamLoader loader ) {
174
+ // public for external call.
175
+ // synchronized to avoid concurrent load.
176
+ public synchronized void loadIfNecessary (boolean force ) {
176
177
long currentTime = System .currentTimeMillis ();
177
178
178
- if (auditLogBuffer .length () >= GlobalVariable .auditPluginMaxBatchBytes
179
+ if (force || auditLogBuffer .length () >= GlobalVariable .auditPluginMaxBatchBytes
179
180
|| currentTime - lastLoadTimeAuditLog >= GlobalVariable .auditPluginMaxBatchInternalSec * 1000 ) {
180
181
// begin to load
181
182
try {
@@ -188,7 +189,7 @@ private void loadIfNecessary(AuditStreamLoader loader) {
188
189
discardLogNum += auditLogNum ;
189
190
return ;
190
191
}
191
- AuditStreamLoader .LoadResponse response = loader .loadBatch (auditLogBuffer , token );
192
+ AuditStreamLoader .LoadResponse response = streamLoader .loadBatch (auditLogBuffer , token );
192
193
if (LOG .isDebugEnabled ()) {
193
194
LOG .debug ("audit loader response: {}" , response );
194
195
}
@@ -214,10 +215,8 @@ private void resetBatch(long currentTime) {
214
215
}
215
216
216
217
private class LoadWorker implements Runnable {
217
- private AuditStreamLoader loader ;
218
218
219
- public LoadWorker (AuditStreamLoader loader ) {
220
- this .loader = loader ;
219
+ public LoadWorker () {
221
220
}
222
221
223
222
public void run () {
@@ -227,7 +226,7 @@ public void run() {
227
226
if (event != null ) {
228
227
assembleAudit (event );
229
228
// process all audit logs
230
- loadIfNecessary (loader );
229
+ loadIfNecessary (false );
231
230
}
232
231
} catch (InterruptedException ie ) {
233
232
if (LOG .isDebugEnabled ()) {
@@ -240,3 +239,4 @@ public void run() {
240
239
}
241
240
}
242
241
}
242
+
0 commit comments