in curator-framework/src/main/java/org/apache/curator/framework/imps/GetDataBuilderImpl.java [231:275]
public void performBackgroundOperation(final OperationAndData<String> operationAndData) throws Exception {
try {
final OperationTrace trace =
client.getZookeeperClient().startAdvancedTracer("GetDataBuilderImpl-Background");
AsyncCallback.DataCallback callback = new AsyncCallback.DataCallback() {
@Override
public void processResult(int rc, String path, Object ctx, byte[] data, Stat stat) {
watching.commitWatcher(rc, false);
trace.setReturnCode(rc)
.setResponseBytesLength(data)
.setPath(path)
.setWithWatcher(watching.hasWatcher())
.setStat(stat)
.commit();
if ((responseStat != null) && (stat != null)) {
DataTree.copyStat(stat, responseStat);
}
if (decompress && (data != null)) {
try {
data = client.getCompressionProvider().decompress(path, data);
} catch (Exception e) {
ThreadUtils.checkInterrupted(e);
log.error("Decompressing for path: " + path, e);
rc = KeeperException.Code.DATAINCONSISTENCY.intValue();
}
}
CuratorEvent event = new CuratorEventImpl(
client, CuratorEventType.GET_DATA, rc, path, null, ctx, stat, data, null, null, null, null);
client.processBackgroundOperation(operationAndData, event);
}
};
if (watching.isWatched()) {
client.getZooKeeper().getData(operationAndData.getData(), true, callback, backgrounding.getContext());
} else {
client.getZooKeeper()
.getData(
operationAndData.getData(),
watching.getWatcher(operationAndData.getData()),
callback,
backgrounding.getContext());
}
} catch (Throwable e) {
backgrounding.checkError(e, watching);
}
}