You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@spark.apache.org by zs...@apache.org on 2016/03/04 07:53:14 UTC
spark git commit: [SPARK-13652][CORE] Copy ByteBuffer in sendRpcSync
as it will be recycled
Repository: spark
Updated Branches:
refs/heads/master f6ac7c30d -> 465c665db
[SPARK-13652][CORE] Copy ByteBuffer in sendRpcSync as it will be recycled
## What changes were proposed in this pull request?
`sendRpcSync` should copy the response content because the underlying buffer will be recycled and reused.
## How was this patch tested?
Jenkins unit tests.
Author: Shixiong Zhu <sh...@databricks.com>
Closes #11499 from zsxwing/SPARK-13652.
Project: http://git-wip-us.apache.org/repos/asf/spark/repo
Commit: http://git-wip-us.apache.org/repos/asf/spark/commit/465c665d
Tree: http://git-wip-us.apache.org/repos/asf/spark/tree/465c665d
Diff: http://git-wip-us.apache.org/repos/asf/spark/diff/465c665d
Branch: refs/heads/master
Commit: 465c665db1dc65e3b02c584cf7f8d06b24909b0c
Parents: f6ac7c3
Author: Shixiong Zhu <sh...@databricks.com>
Authored: Thu Mar 3 22:53:07 2016 -0800
Committer: Shixiong Zhu <sh...@databricks.com>
Committed: Thu Mar 3 22:53:07 2016 -0800
----------------------------------------------------------------------
.../org/apache/spark/network/client/RpcResponseCallback.java | 7 ++++++-
.../java/org/apache/spark/network/client/TransportClient.java | 6 +++++-
2 files changed, 11 insertions(+), 2 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/spark/blob/465c665d/common/network-common/src/main/java/org/apache/spark/network/client/RpcResponseCallback.java
----------------------------------------------------------------------
diff --git a/common/network-common/src/main/java/org/apache/spark/network/client/RpcResponseCallback.java b/common/network-common/src/main/java/org/apache/spark/network/client/RpcResponseCallback.java
index 47e93f9..6afc63f 100644
--- a/common/network-common/src/main/java/org/apache/spark/network/client/RpcResponseCallback.java
+++ b/common/network-common/src/main/java/org/apache/spark/network/client/RpcResponseCallback.java
@@ -24,7 +24,12 @@ import java.nio.ByteBuffer;
* failure.
*/
public interface RpcResponseCallback {
- /** Successful serialized result from server. */
+ /**
+ * Successful serialized result from server.
+ *
+ * After `onSuccess` returns, `response` will be recycled and its content will become invalid.
+ * Please copy the content of `response` if you want to use it after `onSuccess` returns.
+ */
void onSuccess(ByteBuffer response);
/** Exception either propagated from server or raised on client side. */
http://git-wip-us.apache.org/repos/asf/spark/blob/465c665d/common/network-common/src/main/java/org/apache/spark/network/client/TransportClient.java
----------------------------------------------------------------------
diff --git a/common/network-common/src/main/java/org/apache/spark/network/client/TransportClient.java b/common/network-common/src/main/java/org/apache/spark/network/client/TransportClient.java
index e15f096..64a8317 100644
--- a/common/network-common/src/main/java/org/apache/spark/network/client/TransportClient.java
+++ b/common/network-common/src/main/java/org/apache/spark/network/client/TransportClient.java
@@ -257,7 +257,11 @@ public class TransportClient implements Closeable {
sendRpc(message, new RpcResponseCallback() {
@Override
public void onSuccess(ByteBuffer response) {
- result.set(response);
+ ByteBuffer copy = ByteBuffer.allocate(response.remaining());
+ copy.put(response);
+ // flip "copy" to make it readable
+ copy.flip();
+ result.set(copy);
}
@Override
---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@spark.apache.org
For additional commands, e-mail: commits-help@spark.apache.org