summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBenoit Foucher <benoit@zeroc.com>2017-06-08 14:30:51 +0200
committerBenoit Foucher <benoit@zeroc.com>2017-06-08 14:30:51 +0200
commitdc1e2f82241d2860ae481b8e0d8442e248c7b89c (patch)
treeab5aafe6bb280e03ee5f0e7c37e2ea3094326178
parentFixed bogus C# ami/metrics tests (diff)
downloadice-dc1e2f82241d2860ae481b8e0d8442e248c7b89c.tar.bz2
ice-dc1e2f82241d2860ae481b8e0d8442e248c7b89c.tar.xz
ice-dc1e2f82241d2860ae481b8e0d8442e248c7b89c.zip
Fixed ICE-7994 - invocation metrics issue with AMI batch oneway requests
-rw-r--r--cpp/include/Ice/OutgoingAsync.h4
-rw-r--r--cpp/src/Ice/OutgoingAsync.cpp15
-rw-r--r--cpp/src/Ice/Proxy.cpp4
-rw-r--r--cpp/test/Ice/ami/AllTests.cpp2
-rw-r--r--cpp/test/Ice/metrics/AllTests.cpp11
-rw-r--r--csharp/src/Ice/OutgoingAsync.cs19
-rw-r--r--csharp/test/Ice/metrics/AllTests.cs6
-rw-r--r--java-compat/src/Ice/src/main/java/IceInternal/AsyncResultI.java7
-rw-r--r--java-compat/src/Ice/src/main/java/IceInternal/OutgoingAsync.java4
-rw-r--r--java-compat/src/Ice/src/main/java/IceInternal/ProxyGetConnection.java4
-rw-r--r--java-compat/src/Ice/src/main/java/IceInternal/ProxyOutgoingAsyncBase.java4
-rw-r--r--java-compat/test/src/main/java/test/Ice/metrics/AllTests.java6
-rw-r--r--java/src/Ice/src/main/java/com/zeroc/IceInternal/CommunicatorFlushBatch.java7
-rw-r--r--java/src/Ice/src/main/java/com/zeroc/IceInternal/InvocationFutureI.java15
-rw-r--r--java/src/Ice/src/main/java/com/zeroc/IceInternal/OutgoingAsync.java2
-rw-r--r--java/src/Ice/src/main/java/com/zeroc/IceInternal/ProxyFlushBatch.java6
-rw-r--r--java/src/Ice/src/main/java/com/zeroc/IceInternal/ProxyGetConnection.java10
-rw-r--r--java/src/Ice/src/main/java/com/zeroc/IceInternal/ProxyIceInvoke.java2
-rw-r--r--java/src/Ice/src/main/java/com/zeroc/IceInternal/ProxyOutgoingAsyncBaseI.java12
-rw-r--r--java/test/src/main/java/test/Ice/metrics/AllTests.java6
20 files changed, 61 insertions, 85 deletions
diff --git a/cpp/include/Ice/OutgoingAsync.h b/cpp/include/Ice/OutgoingAsync.h
index 572515e0324..b115581e4e9 100644
--- a/cpp/include/Ice/OutgoingAsync.h
+++ b/cpp/include/Ice/OutgoingAsync.h
@@ -139,7 +139,7 @@ protected:
bool sentImpl(bool);
bool exceptionImpl(const Ice::Exception&);
- bool responseImpl(bool);
+ bool responseImpl(bool, bool);
void cancel(const Ice::LocalException&);
void checkCanceled();
@@ -229,7 +229,7 @@ protected:
void invokeImpl(bool);
bool sentImpl(bool);
bool exceptionImpl(const Ice::Exception&);
- bool responseImpl(bool);
+ bool responseImpl(bool, bool);
virtual void runTimerTask();
diff --git a/cpp/src/Ice/OutgoingAsync.cpp b/cpp/src/Ice/OutgoingAsync.cpp
index 0c312b4c6f3..7ccf0536106 100644
--- a/cpp/src/Ice/OutgoingAsync.cpp
+++ b/cpp/src/Ice/OutgoingAsync.cpp
@@ -332,7 +332,7 @@ OutgoingAsyncBase::exceptionImpl(const Exception& ex)
}
bool
-OutgoingAsyncBase::responseImpl(bool ok)
+OutgoingAsyncBase::responseImpl(bool ok, bool invoke)
{
Lock sync(_m);
if(ok)
@@ -347,10 +347,9 @@ OutgoingAsyncBase::responseImpl(bool ok)
_m.notifyAll();
#endif
- bool invoke;
try
{
- invoke = handleResponse(ok);
+ invoke &= handleResponse(ok);
}
catch(const Ice::Exception& ex)
{
@@ -830,13 +829,13 @@ ProxyOutgoingAsyncBase::exceptionImpl(const Exception& ex)
}
bool
-ProxyOutgoingAsyncBase::responseImpl(bool ok)
+ProxyOutgoingAsyncBase::responseImpl(bool ok, bool invoke)
{
if(_proxy->_getReference()->getInvocationTimeout() != -1)
{
_instance->timer()->cancel(ICE_SHARED_FROM_THIS);
}
- return OutgoingAsyncBase::responseImpl(ok);
+ return OutgoingAsyncBase::responseImpl(ok, invoke);
}
void
@@ -1084,7 +1083,7 @@ OutgoingAsync::response()
}
}
- return responseImpl(replyStatus == replyOK);
+ return responseImpl(replyStatus == replyOK, true);
}
catch(const Exception& ex)
{
@@ -1130,8 +1129,8 @@ OutgoingAsync::invoke(const string& operation)
{
_sentSynchronously = true;
_proxy->_getBatchRequestQueue()->finishBatchRequest(&_os, _proxy, operation);
- responseImpl(true);
- return; // Don't call sent/completed callback for batch AMI requests
+ responseImpl(true, false); // Don't call sent/completed callback for batch AMI requests
+ return;
}
//
diff --git a/cpp/src/Ice/Proxy.cpp b/cpp/src/Ice/Proxy.cpp
index ea668c25017..d24fcc1c4b2 100644
--- a/cpp/src/Ice/Proxy.cpp
+++ b/cpp/src/Ice/Proxy.cpp
@@ -124,7 +124,7 @@ AsyncStatus
ProxyGetConnection::invokeRemote(const ConnectionIPtr& connection, bool, bool)
{
_cachedConnection = connection;
- if(responseImpl(true))
+ if(responseImpl(true, true))
{
invokeResponseAsync();
}
@@ -134,7 +134,7 @@ ProxyGetConnection::invokeRemote(const ConnectionIPtr& connection, bool, bool)
AsyncStatus
ProxyGetConnection::invokeCollocated(CollocatedRequestHandler*)
{
- if(responseImpl(true))
+ if(responseImpl(true, true))
{
invokeResponseAsync();
}
diff --git a/cpp/test/Ice/ami/AllTests.cpp b/cpp/test/Ice/ami/AllTests.cpp
index 035cc5249d6..cdafe75816c 100644
--- a/cpp/test/Ice/ami/AllTests.cpp
+++ b/cpp/test/Ice/ami/AllTests.cpp
@@ -1838,7 +1838,7 @@ allTests(const Ice::CommunicatorPtr& communicator, bool collocated)
{
test(p->opBatchCount() == 0);
auto b1 = p->ice_batchOneway();
- b1->opBatch();
+ b1->opBatchAsync().get();
b1->opBatch();
auto id = this_thread::get_id();
promise<void> promise;
diff --git a/cpp/test/Ice/metrics/AllTests.cpp b/cpp/test/Ice/metrics/AllTests.cpp
index 2ed799067ee..43a87962fb5 100644
--- a/cpp/test/Ice/metrics/AllTests.cpp
+++ b/cpp/test/Ice/metrics/AllTests.cpp
@@ -1406,14 +1406,19 @@ allTests(const Ice::CommunicatorPtr& communicator, const CommunicatorObserverIPt
MetricsPrxPtr metricsBatchOneway = metrics->ice_batchOneway();
metricsBatchOneway->op();
- //metricsBatchOneway->end_op(metricsOneway->begin_op());
- //metricsBatchOneway->begin_op(newCallback_Metrics_op(cb, &Callback::response, &Callback::exception));
+#ifdef ICE_CPP11_MAPPING
+ metricsBatchOneway->opAsync().get();
+ metricsBatchOneway->opAsync([cb]() {}, [cb](exception_ptr) {});
+#else
+ metricsBatchOneway->end_op(metricsBatchOneway->begin_op());
+ metricsBatchOneway->begin_op(newCallback_Metrics_op(cb, &Callback::response, &Callback::exception))->waitForCompleted();
+#endif
map = toMap(clientMetrics->getMetricsView("View", timestamp)["Invocation"]);
test(map.size() == 1);
im1 = ICE_DYNAMIC_CAST(IceMX::InvocationMetrics, map["op"]);
- test(im1->current == 0 && im1->total == 1 && im1->failures == 0 && im1->retry == 0);
+ test(im1->current == 0 && im1->total == 3 && im1->failures == 0 && im1->retry == 0);
test(im1->remotes.size() == 0);
testAttribute(clientMetrics, clientProps, update.get(), "Invocation", "mode", "batch-oneway",
diff --git a/csharp/src/Ice/OutgoingAsync.cs b/csharp/src/Ice/OutgoingAsync.cs
index ea08c6be130..e3da11537a3 100644
--- a/csharp/src/Ice/OutgoingAsync.cs
+++ b/csharp/src/Ice/OutgoingAsync.cs
@@ -312,7 +312,7 @@ namespace IceInternal
return invoke;
}
}
- protected virtual bool responseImpl(bool userThread, bool ok)
+ protected virtual bool responseImpl(bool userThread, bool ok, bool invoke)
{
lock(this)
{
@@ -323,10 +323,9 @@ namespace IceInternal
_cancellationHandler = null;
- bool invoke;
try
{
- invoke = _completionCallback.handleResponse(userThread, ok, this);
+ invoke &= _completionCallback.handleResponse(userThread, ok, this);
}
catch(Ice.Exception ex)
{
@@ -632,13 +631,13 @@ namespace IceInternal
return base.exceptionImpl(ex);
}
- protected override bool responseImpl(bool userThread, bool ok)
+ protected override bool responseImpl(bool userThread, bool ok, bool invoke)
{
if(proxy_.iceReference().getInvocationTimeout() != -1)
{
instance_.timer().cancel(this);
}
- return base.responseImpl(userThread, ok);
+ return base.responseImpl(userThread, ok, invoke);
}
public void runTimerTask()
@@ -894,7 +893,7 @@ namespace IceInternal
}
}
- return responseImpl(false, replyStatus == ReplyStatus.replyOK);
+ return responseImpl(false, replyStatus == ReplyStatus.replyOK, true);
}
catch(Ice.Exception ex)
{
@@ -943,8 +942,8 @@ namespace IceInternal
{
sentSynchronously_ = true;
proxy_.iceGetBatchRequestQueue().finishBatchRequest(os_, proxy_, operation);
- responseImpl(true, true);
- return; // Don't call sent/completed callback for batch AMI requests
+ responseImpl(true, true, false); // Don't call sent/completed callback for batch AMI requests
+ return;
}
//
@@ -1169,7 +1168,7 @@ namespace IceInternal
public override int invokeRemote(Ice.ConnectionI connection, bool compress, bool response)
{
cachedConnection_ = connection;
- if(responseImpl(false, true))
+ if(responseImpl(false, true, true))
{
invokeResponseAsync();
}
@@ -1178,7 +1177,7 @@ namespace IceInternal
public override int invokeCollocated(CollocatedRequestHandler handler)
{
- if(responseImpl(false, true))
+ if(responseImpl(false, true, true))
{
invokeResponseAsync();
}
diff --git a/csharp/test/Ice/metrics/AllTests.cs b/csharp/test/Ice/metrics/AllTests.cs
index 3f0be1ab0fc..de3c3515255 100644
--- a/csharp/test/Ice/metrics/AllTests.cs
+++ b/csharp/test/Ice/metrics/AllTests.cs
@@ -1131,14 +1131,14 @@ public class AllTests : TestCommon.AllTests
MetricsPrx metricsBatchOneway = (MetricsPrx)metrics.ice_batchOneway();
metricsBatchOneway.op();
- //metricsBatchOneway.end_op(metricsBatchOneway.begin_op());
- //metricsBatchOneway.begin_op().whenCompleted(cb.response, cb.exception).waitForSent();
+ metricsBatchOneway.end_op(metricsBatchOneway.begin_op());
+ metricsBatchOneway.begin_op().whenCompleted(cb.response, cb.exception);
map = toMap(clientMetrics.getMetricsView("View", out timestamp)["Invocation"]);
test(map.Count == 1);
im1 = (IceMX.InvocationMetrics)map["op"];
- test(im1.current == 0 && im1.total == 1 && im1.failures == 0 && im1.retry == 0);
+ test(im1.current == 0 && im1.total == 3 && im1.failures == 0 && im1.retry == 0);
test(im1.remotes.Length == 0);
testAttribute(clientMetrics, clientProps, update, "Invocation", "mode", "batch-oneway",
diff --git a/java-compat/src/Ice/src/main/java/IceInternal/AsyncResultI.java b/java-compat/src/Ice/src/main/java/IceInternal/AsyncResultI.java
index b0369089d66..3cc9c9c45d3 100644
--- a/java-compat/src/Ice/src/main/java/IceInternal/AsyncResultI.java
+++ b/java-compat/src/Ice/src/main/java/IceInternal/AsyncResultI.java
@@ -328,7 +328,7 @@ public class AsyncResultI implements AsyncResult
}
}
- protected boolean finished(boolean ok)
+ protected boolean finished(boolean ok, boolean invoke)
{
synchronized(this)
{
@@ -338,7 +338,8 @@ public class AsyncResultI implements AsyncResult
_state |= StateOK;
}
_cancellationHandler = null;
- if(_callback == null)
+ invoke &= _callback != null;
+ if(!invoke)
{
if(_observer != null)
{
@@ -347,7 +348,7 @@ public class AsyncResultI implements AsyncResult
}
}
this.notifyAll();
- return _callback != null;
+ return invoke;
}
}
diff --git a/java-compat/src/Ice/src/main/java/IceInternal/OutgoingAsync.java b/java-compat/src/Ice/src/main/java/IceInternal/OutgoingAsync.java
index be1eaef7a8f..d2470858ada 100644
--- a/java-compat/src/Ice/src/main/java/IceInternal/OutgoingAsync.java
+++ b/java-compat/src/Ice/src/main/java/IceInternal/OutgoingAsync.java
@@ -170,7 +170,7 @@ public class OutgoingAsync extends ProxyOutgoingAsyncBase
//
_sentSynchronously = true;
_proxy._getBatchRequestQueue().finishBatchRequest(_os, _proxy, getOperation());
- finished(true);
+ finished(true, false);
}
else
{
@@ -333,7 +333,7 @@ public class OutgoingAsync extends ProxyOutgoingAsyncBase
}
}
- return finished(replyStatus == ReplyStatus.replyOK);
+ return finished(replyStatus == ReplyStatus.replyOK, true);
}
catch(Ice.Exception ex)
{
diff --git a/java-compat/src/Ice/src/main/java/IceInternal/ProxyGetConnection.java b/java-compat/src/Ice/src/main/java/IceInternal/ProxyGetConnection.java
index c918107e4ca..74919c5ddb5 100644
--- a/java-compat/src/Ice/src/main/java/IceInternal/ProxyGetConnection.java
+++ b/java-compat/src/Ice/src/main/java/IceInternal/ProxyGetConnection.java
@@ -35,7 +35,7 @@ public class ProxyGetConnection extends ProxyOutgoingAsyncBase
throws RetryException
{
_cachedConnection = connection;
- if(finished(true))
+ if(finished(true, true))
{
invokeCompletedAsync();
}
@@ -45,7 +45,7 @@ public class ProxyGetConnection extends ProxyOutgoingAsyncBase
@Override
public int invokeCollocated(CollocatedRequestHandler handler)
{
- if(finished(true))
+ if(finished(true, true))
{
invokeCompletedAsync();
}
diff --git a/java-compat/src/Ice/src/main/java/IceInternal/ProxyOutgoingAsyncBase.java b/java-compat/src/Ice/src/main/java/IceInternal/ProxyOutgoingAsyncBase.java
index 507c8aea68f..68308f97184 100644
--- a/java-compat/src/Ice/src/main/java/IceInternal/ProxyOutgoingAsyncBase.java
+++ b/java-compat/src/Ice/src/main/java/IceInternal/ProxyOutgoingAsyncBase.java
@@ -291,14 +291,14 @@ public abstract class ProxyOutgoingAsyncBase extends OutgoingAsyncBase
}
@Override
- protected boolean finished(boolean ok)
+ protected boolean finished(boolean ok, boolean invoke)
{
if(_future != null)
{
_future.cancel(false);
_future = null;
}
- return super.finished(ok);
+ return super.finished(ok, invoke);
}
protected int handleException(Ice.Exception exc)
diff --git a/java-compat/test/src/main/java/test/Ice/metrics/AllTests.java b/java-compat/test/src/main/java/test/Ice/metrics/AllTests.java
index 171dea9389c..619ba3f330e 100644
--- a/java-compat/test/src/main/java/test/Ice/metrics/AllTests.java
+++ b/java-compat/test/src/main/java/test/Ice/metrics/AllTests.java
@@ -1196,13 +1196,15 @@ public class AllTests
MetricsPrx metricsBatchOneway = (MetricsPrx)metrics.ice_batchOneway();
metricsBatchOneway.op();
metricsBatchOneway.end_op(metricsBatchOneway.begin_op());
- //metricsBatchOneway.begin_op(cb).waitForSent();
+ metricsBatchOneway.begin_op(cb);
map = toMap(clientMetrics.getMetricsView("View", timestamp).get("Invocation"));
test(map.size() == 1);
im1 = (IceMX.InvocationMetrics)map.get("op");
- test(im1.current == 0 && im1.total == 2 && im1.failures == 0 && im1.retry == 0);
+ out.print(im1.current);
+ out.print(im1.total);
+ test(im1.current == 0 && im1.total == 3 && im1.failures == 0 && im1.retry == 0);
test(im1.remotes.length == 0);
testAttribute(clientMetrics, clientProps, update, "Invocation", "mode", "batch-oneway",
diff --git a/java/src/Ice/src/main/java/com/zeroc/IceInternal/CommunicatorFlushBatch.java b/java/src/Ice/src/main/java/com/zeroc/IceInternal/CommunicatorFlushBatch.java
index 566d9dd5b70..dbffde1de31 100644
--- a/java/src/Ice/src/main/java/com/zeroc/IceInternal/CommunicatorFlushBatch.java
+++ b/java/src/Ice/src/main/java/com/zeroc/IceInternal/CommunicatorFlushBatch.java
@@ -45,12 +45,6 @@ public class CommunicatorFlushBatch extends InvocationFutureI<Void>
}
@Override
- protected boolean needCallback()
- {
- return false;
- }
-
- @Override
protected void markCompleted()
{
assert(false);
@@ -68,7 +62,6 @@ public class CommunicatorFlushBatch extends InvocationFutureI<Void>
return false;
}
- // TODO: MJN: This is missing a test.
@Override
public boolean completed(com.zeroc.Ice.Exception ex)
{
diff --git a/java/src/Ice/src/main/java/com/zeroc/IceInternal/InvocationFutureI.java b/java/src/Ice/src/main/java/com/zeroc/IceInternal/InvocationFutureI.java
index 0d444f50816..2315ae131c4 100644
--- a/java/src/Ice/src/main/java/com/zeroc/IceInternal/InvocationFutureI.java
+++ b/java/src/Ice/src/main/java/com/zeroc/IceInternal/InvocationFutureI.java
@@ -223,11 +223,6 @@ public abstract class InvocationFutureI<T> extends com.zeroc.Ice.InvocationFutur
}
}
- protected boolean needCallback()
- {
- return !_synchronous; // No callbacks for synchronous or batch invocations
- }
-
abstract protected void markCompleted();
public final void invokeCompleted()
@@ -342,14 +337,14 @@ public abstract class InvocationFutureI<T> extends com.zeroc.Ice.InvocationFutur
cacheMessageBuffers();
}
- boolean invoke = !alreadySent && (_sentFuture != null || done && needCallback());
+ boolean invoke = (!alreadySent && _sentFuture != null || done) && !_synchronous;
if(!invoke && done && _observer != null)
{
_observer.detach();
_observer = null;
};
- if(done && !needCallback())
+ if(!invoke && done)
{
markCompleted();
return false;
@@ -362,7 +357,7 @@ public abstract class InvocationFutureI<T> extends com.zeroc.Ice.InvocationFutur
}
}
- protected boolean finished(boolean ok)
+ protected boolean finished(boolean ok, boolean invoke)
{
synchronized(this)
{
@@ -373,7 +368,7 @@ public abstract class InvocationFutureI<T> extends com.zeroc.Ice.InvocationFutur
}
_cancellationHandler = null;
- boolean invoke = needCallback();
+ invoke &= !_synchronous;
if(!invoke && _observer != null)
{
_observer.detach();
@@ -412,7 +407,7 @@ public abstract class InvocationFutureI<T> extends com.zeroc.Ice.InvocationFutur
_observer.failed(ex.ice_id());
}
- boolean invoke = needCallback();
+ boolean invoke = !_synchronous;
if(!invoke && _observer != null)
{
_observer.detach();
diff --git a/java/src/Ice/src/main/java/com/zeroc/IceInternal/OutgoingAsync.java b/java/src/Ice/src/main/java/com/zeroc/IceInternal/OutgoingAsync.java
index 91fc3d3a6f9..f5e580e56f5 100644
--- a/java/src/Ice/src/main/java/com/zeroc/IceInternal/OutgoingAsync.java
+++ b/java/src/Ice/src/main/java/com/zeroc/IceInternal/OutgoingAsync.java
@@ -87,7 +87,7 @@ public class OutgoingAsync<T> extends ProxyOutgoingAsyncBaseI<T>
//
_sentSynchronously = true;
_proxy._getBatchRequestQueue().finishBatchRequest(_os, _proxy, _operation);
- finished(true);
+ finished(true, false);
}
else
{
diff --git a/java/src/Ice/src/main/java/com/zeroc/IceInternal/ProxyFlushBatch.java b/java/src/Ice/src/main/java/com/zeroc/IceInternal/ProxyFlushBatch.java
index a5bc5281797..cb3348f2daf 100644
--- a/java/src/Ice/src/main/java/com/zeroc/IceInternal/ProxyFlushBatch.java
+++ b/java/src/Ice/src/main/java/com/zeroc/IceInternal/ProxyFlushBatch.java
@@ -20,12 +20,6 @@ public class ProxyFlushBatch extends ProxyOutgoingAsyncBaseI<Void>
}
@Override
- protected boolean needCallback()
- {
- return !_synchronous;
- }
-
- @Override
public boolean completed(com.zeroc.Ice.InputStream is)
{
assert(false);
diff --git a/java/src/Ice/src/main/java/com/zeroc/IceInternal/ProxyGetConnection.java b/java/src/Ice/src/main/java/com/zeroc/IceInternal/ProxyGetConnection.java
index 22f9544fdea..44921e2e183 100644
--- a/java/src/Ice/src/main/java/com/zeroc/IceInternal/ProxyGetConnection.java
+++ b/java/src/Ice/src/main/java/com/zeroc/IceInternal/ProxyGetConnection.java
@@ -18,12 +18,6 @@ public class ProxyGetConnection extends ProxyOutgoingAsyncBaseI<com.zeroc.Ice.Co
}
@Override
- protected boolean needCallback()
- {
- return !_synchronous;
- }
-
- @Override
protected void markCompleted()
{
complete(_cachedConnection);
@@ -41,7 +35,7 @@ public class ProxyGetConnection extends ProxyOutgoingAsyncBaseI<com.zeroc.Ice.Co
throws RetryException
{
_cachedConnection = connection;
- if(finished(true))
+ if(finished(true, true))
{
invokeCompletedAsync();
}
@@ -51,7 +45,7 @@ public class ProxyGetConnection extends ProxyOutgoingAsyncBaseI<com.zeroc.Ice.Co
@Override
public int invokeCollocated(CollocatedRequestHandler handler)
{
- if(finished(true))
+ if(finished(true, true))
{
invokeCompletedAsync();
}
diff --git a/java/src/Ice/src/main/java/com/zeroc/IceInternal/ProxyIceInvoke.java b/java/src/Ice/src/main/java/com/zeroc/IceInternal/ProxyIceInvoke.java
index 6e17d0bbcaf..88778e268a7 100644
--- a/java/src/Ice/src/main/java/com/zeroc/IceInternal/ProxyIceInvoke.java
+++ b/java/src/Ice/src/main/java/com/zeroc/IceInternal/ProxyIceInvoke.java
@@ -43,7 +43,7 @@ public class ProxyIceInvoke extends ProxyOutgoingAsyncBaseI<com.zeroc.Ice.Object
//
_sentSynchronously = true;
_proxy._getBatchRequestQueue().finishBatchRequest(_os, _proxy, _operation);
- finished(true);
+ finished(true, false);
}
else
{
diff --git a/java/src/Ice/src/main/java/com/zeroc/IceInternal/ProxyOutgoingAsyncBaseI.java b/java/src/Ice/src/main/java/com/zeroc/IceInternal/ProxyOutgoingAsyncBaseI.java
index 5adb9a3a86c..97bb7467005 100644
--- a/java/src/Ice/src/main/java/com/zeroc/IceInternal/ProxyOutgoingAsyncBaseI.java
+++ b/java/src/Ice/src/main/java/com/zeroc/IceInternal/ProxyOutgoingAsyncBaseI.java
@@ -171,7 +171,7 @@ public abstract class ProxyOutgoingAsyncBaseI<T> extends OutgoingAsyncBaseI<T> i
}
}
- return finished(replyStatus == ReplyStatus.replyOK);
+ return finished(replyStatus == ReplyStatus.replyOK, true);
}
catch(com.zeroc.Ice.Exception ex)
{
@@ -292,12 +292,6 @@ public abstract class ProxyOutgoingAsyncBaseI<T> extends OutgoingAsyncBaseI<T> i
_proxyMode = _proxy._getReference().getMode();
}
- @Override
- protected boolean needCallback()
- {
- return !_synchronous && !isBatch(); // No callbacks for synchronous or batch invocations
- }
-
protected void invokeImpl(boolean userThread)
{
try
@@ -417,14 +411,14 @@ public abstract class ProxyOutgoingAsyncBaseI<T> extends OutgoingAsyncBaseI<T> i
}
@Override
- protected boolean finished(boolean ok)
+ protected boolean finished(boolean ok, boolean invoke)
{
if(_timerFuture != null)
{
_timerFuture.cancel(false);
_timerFuture = null;
}
- return super.finished(ok);
+ return super.finished(ok, invoke);
}
protected int handleException(com.zeroc.Ice.Exception exc)
diff --git a/java/test/src/main/java/test/Ice/metrics/AllTests.java b/java/test/src/main/java/test/Ice/metrics/AllTests.java
index f0eb80ef5b3..67481fdfb4c 100644
--- a/java/test/src/main/java/test/Ice/metrics/AllTests.java
+++ b/java/test/src/main/java/test/Ice/metrics/AllTests.java
@@ -1161,14 +1161,14 @@ public class AllTests
MetricsPrx metricsBatchOneway = metrics.ice_batchOneway();
metricsBatchOneway.op();
- metricsBatchOneway.opAsync();
- //metricsBatchOneway.opAsync().waitForSent();
+ metricsBatchOneway.opAsync().join();
+ metricsBatchOneway.opAsync().whenComplete((response, ex) -> {});
map = toMap(clientMetrics.getMetricsView("View").returnValue.get("Invocation"));
test(map.size() == 1);
im1 = (InvocationMetrics)map.get("op");
- test(im1.current == 0 && im1.total == 2 && im1.failures == 0 && im1.retry == 0);
+ test(im1.current == 0 && im1.total == 3 && im1.failures == 0 && im1.retry == 0);
test(im1.remotes.length == 0);
testAttribute(clientMetrics, clientProps, "Invocation", "mode", "batch-oneway",