Skip to content

Commit a99d4ef

Browse files
ztzgkezhuw
authored andcommitted
ZOOKEEPER-4725: Record TTL node creations in audit log
Reviewers: kezhuw Author: ztzg Closes #2039 from ztzg/ZOOKEEPER-4725-audit-create-ttl (cherry picked from commit 10328b3)
1 parent 086b787 commit a99d4ef

File tree

2 files changed

+41
-4
lines changed

2 files changed

+41
-4
lines changed

zookeeper-server/src/main/java/org/apache/zookeeper/audit/AuditHelper.java

+13-4
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@
2828
import org.apache.zookeeper.ZooDefs;
2929
import org.apache.zookeeper.audit.AuditEvent.Result;
3030
import org.apache.zookeeper.proto.CreateRequest;
31+
import org.apache.zookeeper.proto.CreateTTLRequest;
3132
import org.apache.zookeeper.proto.DeleteRequest;
3233
import org.apache.zookeeper.proto.SetACLRequest;
3334
import org.apache.zookeeper.proto.SetDataRequest;
@@ -69,11 +70,19 @@ public static void addAuditLog(Request request, ProcessTxnResult txnResult, bool
6970
case ZooDefs.OpCode.createContainer:
7071
op = AuditConstants.OP_CREATE;
7172
CreateRequest createRequest = request.readRequestRecord(CreateRequest::new);
72-
createMode = getCreateMode(createRequest);
73+
createMode = getCreateMode(createRequest.getFlags());
7374
if (failedTxn) {
7475
path = createRequest.getPath();
7576
}
7677
break;
78+
case ZooDefs.OpCode.createTTL:
79+
op = AuditConstants.OP_CREATE;
80+
CreateTTLRequest createTtlRequest = request.readRequestRecord(CreateTTLRequest::new);
81+
createMode = getCreateMode(createTtlRequest.getFlags());
82+
if (failedTxn) {
83+
path = createTtlRequest.getPath();
84+
}
85+
break;
7786
case ZooDefs.OpCode.delete:
7887
case ZooDefs.OpCode.deleteContainer:
7988
op = AuditConstants.OP_DELETE;
@@ -172,8 +181,8 @@ private static void log(String user, String operation, String znode, String acl,
172181
ZKAuditProvider.log(user, operation, znode, acl, createMode, session, ip, result);
173182
}
174183

175-
private static String getCreateMode(CreateRequest createRequest) throws KeeperException {
176-
return CreateMode.fromFlag(createRequest.getFlags()).toString().toLowerCase();
184+
private static String getCreateMode(int createFlags) throws KeeperException {
185+
return CreateMode.fromFlag(createFlags).toString().toLowerCase();
177186
}
178187

179188
private static Map<String, String> getCreateModes(Request request)
@@ -188,7 +197,7 @@ private static Map<String, String> getCreateModes(Request request)
188197
|| op.getType() == ZooDefs.OpCode.createContainer) {
189198
CreateRequest requestRecord = (CreateRequest) op.toRequestRecord();
190199
createModes.put(requestRecord.getPath(),
191-
getCreateMode(requestRecord));
200+
getCreateMode(requestRecord.getFlags()));
192201
}
193202
}
194203
return createModes;

zookeeper-server/src/test/java/org/apache/zookeeper/audit/Slf4JAuditLoggerTest.java

+28
Original file line numberDiff line numberDiff line change
@@ -63,6 +63,7 @@ public class Slf4JAuditLoggerTest extends QuorumPeerTestBase {
6363
@BeforeAll
6464
public static void setUpBeforeClass() throws Exception {
6565
System.setProperty(ZKAuditProvider.AUDIT_ENABLE, "true");
66+
System.setProperty("zookeeper.extendedTypesEnabled", "true");
6667
// setup the logger to capture all logs
6768
LoggerTestTool loggerTestTool = new LoggerTestTool(Slf4jAuditLogger.class);
6869
os = loggerTestTool.getOutputStream();
@@ -103,6 +104,32 @@ public void testCreateAuditLogs()
103104
null, createMode), readAuditLog(os));
104105
}
105106

107+
@Test
108+
public void testCreateWithTtlAuditLogs()
109+
throws KeeperException, InterruptedException, IOException {
110+
final CreateMode createMode = CreateMode.PERSISTENT_WITH_TTL;
111+
final String path = "/createTtlPath";
112+
zk.create(path, "".getBytes(), ZooDefs.Ids.OPEN_ACL_UNSAFE,
113+
createMode, null, 3600);
114+
// success log
115+
verifyLog(
116+
getAuditLog(AuditConstants.OP_CREATE, path, Result.SUCCESS,
117+
null, createMode.toString().toLowerCase()), readAuditLog(os));
118+
}
119+
120+
@Test
121+
public void testCreateSeqWithTtlAuditLogs()
122+
throws KeeperException, InterruptedException, IOException {
123+
final CreateMode createMode = CreateMode.PERSISTENT_SEQUENTIAL_WITH_TTL;
124+
String path = "/createTtlPath";
125+
path = zk.create(path, "".getBytes(), ZooDefs.Ids.OPEN_ACL_UNSAFE,
126+
createMode, null, 3600);
127+
// success log
128+
verifyLog(
129+
getAuditLog(AuditConstants.OP_CREATE, path, Result.SUCCESS,
130+
null, createMode.toString().toLowerCase()), readAuditLog(os));
131+
}
132+
106133
@Test
107134
public void testDeleteAuditLogs()
108135
throws InterruptedException, IOException, KeeperException {
@@ -406,6 +433,7 @@ private void waitForDeletion(ZooKeeper zooKeeper, String path)
406433

407434
@AfterAll
408435
public static void tearDownAfterClass() {
436+
System.clearProperty("zookeeper.extendedTypesEnabled");
409437
System.clearProperty(ZKAuditProvider.AUDIT_ENABLE);
410438
for (int i = 0; i < SERVER_COUNT; i++) {
411439
try {

0 commit comments

Comments
 (0)