sgroschupf/zkclient

unecessary invocation of exists and readData for each listener?

Opened this issue · 0 comments

wy96f commented

Could the code below:

private void fireDataChangedEvents(final String path, Set<IZkDataListener> listeners) {
    for (final IZkDataListener listener : listeners) {
        _eventThread.send(new ZkEvent("Data of " + path + " changed sent to " + listener) {

            @Override
            public void run() throws Exception {
                // reinstall watch
                exists(path, true);
                try {
                    Object data = readData(path, null, true);
                    listener.handleDataChange(path, data);
                } catch (ZkNoNodeException e) {
                    listener.handleDataDeleted(path);
                }
            }
        });
    }
}

modify as:

private void fireDataChangedEvents(final String path, Set<IZkDataListener> listeners) {
    _eventThread.send(new ZkEvent("Data of " + path + " changed sent to " + listeners) {

        @Override
        public void run() throws Exception {
            // reinstall watch
            exists(path, true);
            try {
                Object data = readData(path, null, true);
                for (final IZkDataListener listener : listeners) {
                    listener.handleDataChange(path, data);
                }
            } catch (ZkNoNodeException e) {
                for (final IZkDataListener listener : listeners) {
                    listener.handleDataDeleted(path);
                }
            }
        }
    });
}