Source:
<code><START> public String create(final String path, final Object dataObject, final List<ACL> acl, <END> final CreateMode mode, final String expectedSessionId) throws IllegalArgumentException, ZkException { if (path == null) { throw new NullPointerException("Path must not be null."); } if (acl == null || acl.size() == 0) { throw new NullPointerException("Missing value for ACL"); } long startT = System.currentTimeMillis(); try { final byte[] dataBytes = dataObject == null ? null : serialize(dataObject, path); checkDataSizeLimit(dataBytes); final String actualPath = retryUntilConnected(() -> { ZooKeeper zooKeeper = ((ZkConnection) getConnection()).getZookeeper(); if (isSessionAwareOperation(expectedSessionId, mode)) { acquireEventLock(); try { final String actualSessionId = toHexSessionId(zooKeeper.getSessionId()); if (!actualSessionId.equals(expectedSessionId)) { throw new ZkSessionMismatchedException( "Failed to create ephemeral node! There is a session id mismatch. Expected: " + expectedSessionId + ". Actual: " + actualSessionId); } zooKeeper = ((ZkConnection) getConnection()).getZookeeper(); } finally { getEventLock().unlock(); } } return zooKeeper.create(path, dataBytes, acl, mode); }); record(path, dataBytes, startT, ZkClientMonitor.AccessType.WRITE); return actualPath; } catch (Exception e) { recordFailure(path, ZkClientMonitor.AccessType.WRITE); throw e; } finally { long endT = System.currentTimeMillis(); if (LOG.isTraceEnabled()) { LOG.trace("create, path: " + path + ", time: " + (endT - startT) + " ms"); } } }</code><technical_language>change this access modifier in ZkClient? This is interface change</technical_language>

Target:
private String create(final String path, final Object dataObject, final List<ACL> acl, final CreateMode mode, final String expectedSessionId) throws IllegalArgumentException, ZkException { if (path == null) { throw new NullPointerException("Path must not be null."); } if (acl == null || acl.size() == 0) { throw new NullPointerException("Missing value for ACL"); } long startT = System.currentTimeMillis(); try { final byte[] dataBytes = dataObject == null ? null : serialize(dataObject, path); checkDataSizeLimit(dataBytes); final String actualPath = retryUntilConnected(() -> { ZooKeeper zooKeeper = ((ZkConnection) getConnection()).getZookeeper(); if (isSessionAwareOperation(expectedSessionId, mode)) { acquireEventLock(); try { final String actualSessionId = toHexSessionId(zooKeeper.getSessionId()); if (!actualSessionId.equals(expectedSessionId)) { throw new ZkSessionMismatchedException( "Failed to create ephemeral node! There is a session id mismatch. Expected: " + expectedSessionId + ". Actual: " + actualSessionId); } zooKeeper = ((ZkConnection) getConnection()).getZookeeper(); } finally { getEventLock().unlock(); } } return zooKeeper.create(path, dataBytes, acl, mode); }); record(path, dataBytes, startT, ZkClientMonitor.AccessType.WRITE); return actualPath; } catch (Exception e) { recordFailure(path, ZkClientMonitor.AccessType.WRITE); throw e; } finally { long endT = System.currentTimeMillis(); if (LOG.isTraceEnabled()) { LOG.trace("create, path: " + path + ", time: " + (endT - startT) + " ms"); } } }