diff options
author | Michi Henning <michi@zeroc.com> | 2002-09-04 05:39:57 +0000 |
---|---|---|
committer | Michi Henning <michi@zeroc.com> | 2002-09-04 05:39:57 +0000 |
commit | a5da64185ba234ae8dfdec11764e1821bbc67a57 (patch) | |
tree | 4aa60640dbb0b01960e8aa644ef9179594e28b6d /cpp/src/Ice/Proxy.cpp | |
parent | fix (diff) | |
download | ice-a5da64185ba234ae8dfdec11764e1821bbc67a57.tar.bz2 ice-a5da64185ba234ae8dfdec11764e1821bbc67a57.tar.xz ice-a5da64185ba234ae8dfdec11764e1821bbc67a57.zip |
Changed Current.ice to use enum OperationMode to distinguish between
Normal, Nonmutating, and Idempotent operations. Fixed bug introduced
into Freeze with previous changes for saving object state. (State
wasn't saved for idempotent operations.) Retested everything. I'm
getting a failure in the Yellow (C++) tests, and another failure in the
IceBox (Java) tests, but I don't think these are related to these
changes.
Diffstat (limited to 'cpp/src/Ice/Proxy.cpp')
-rw-r--r-- | cpp/src/Ice/Proxy.cpp | 40 |
1 files changed, 21 insertions, 19 deletions
diff --git a/cpp/src/Ice/Proxy.cpp b/cpp/src/Ice/Proxy.cpp index 098987d2d24..bdbf6b52cbe 100644 --- a/cpp/src/Ice/Proxy.cpp +++ b/cpp/src/Ice/Proxy.cpp @@ -249,7 +249,7 @@ IceProxy::Ice::Object::ice_facets(const Context& __context) bool IceProxy::Ice::Object::ice_invoke(const string& operation, - bool idempotent, + OperationMode mode, const vector<Byte>& inParams, vector<Byte>& outParams, const Context& context) @@ -260,7 +260,7 @@ IceProxy::Ice::Object::ice_invoke(const string& operation, try { Handle< ::IceDelegate::Ice::Object> __del = __getDelegate(); - return __del->ice_invoke(operation, idempotent, inParams, outParams, context); + return __del->ice_invoke(operation, mode, inParams, outParams, context); } catch(const LocationForward& __ex) { @@ -268,7 +268,8 @@ IceProxy::Ice::Object::ice_invoke(const string& operation, } catch(const NonRepeatable& __ex) { - if(idempotent) + bool canRetry = mode == Nonmutating || mode == Idempotent; + if(canRetry) { __handleException(*__ex.get(), __cnt); } @@ -746,7 +747,7 @@ bool IceDelegateM::Ice::Object::ice_isA(const string& __id, const Context& __context) { static const string __operation("ice_isA"); - Outgoing __out(__connection, __reference, __operation, true, __context); + Outgoing __out(__connection, __reference, __operation, ::Ice::Nonmutating, __context); BasicStream* __is = __out.is(); BasicStream* __os = __out.os(); __os->write(__id); @@ -763,7 +764,7 @@ void IceDelegateM::Ice::Object::ice_ping(const Context& __context) { static const string __operation("ice_ping"); - Outgoing __out(__connection, __reference, __operation, true, __context); + Outgoing __out(__connection, __reference, __operation, ::Ice::Nonmutating, __context); if(!__out.invoke()) { throw ::Ice::UnknownUserException(__FILE__, __LINE__); @@ -774,7 +775,7 @@ vector<string> IceDelegateM::Ice::Object::ice_ids(const Context& __context) { static const string __operation("ice_ids"); - Outgoing __out(__connection, __reference, __operation, true, __context); + Outgoing __out(__connection, __reference, __operation, ::Ice::Nonmutating, __context); BasicStream* __is = __out.is(); if(!__out.invoke()) { @@ -789,7 +790,7 @@ string IceDelegateM::Ice::Object::ice_id(const Context& __context) { static const string __operation("ice_id"); - Outgoing __out(__connection, __reference, __operation, true, __context); + Outgoing __out(__connection, __reference, __operation, ::Ice::Nonmutating, __context); BasicStream* __is = __out.is(); if(!__out.invoke()) { @@ -804,7 +805,7 @@ vector<string> IceDelegateM::Ice::Object::ice_facets(const Context& __context) { static const string __operation("ice_facets"); - Outgoing __out(__connection, __reference, __operation, true, __context); + Outgoing __out(__connection, __reference, __operation, ::Ice::Nonmutating, __context); BasicStream* __is = __out.is(); if(!__out.invoke()) { @@ -817,12 +818,12 @@ IceDelegateM::Ice::Object::ice_facets(const Context& __context) bool IceDelegateM::Ice::Object::ice_invoke(const string& operation, - bool idempotent, + ::Ice::OperationMode mode, const vector<Byte>& inParams, vector<Byte>& outParams, const Context& context) { - Outgoing __out(__connection, __reference, operation, idempotent, context); + Outgoing __out(__connection, __reference, operation, mode, context); BasicStream* __os = __out.os(); __os->writeBlob(inParams); bool ok = __out.invoke(); @@ -1054,7 +1055,7 @@ bool IceDelegateD::Ice::Object::ice_isA(const string& __id, const Context& __context) { Current __current; - __initCurrent(__current, "ice_isA", true, __context); + __initCurrent(__current, "ice_isA", ::Ice::Nonmutating, __context); while(true) { Direct __direct(__adapter, __current); @@ -1082,7 +1083,7 @@ void IceDelegateD::Ice::Object::ice_ping(const ::Ice::Context& __context) { Current __current; - __initCurrent(__current, "ice_ping", true, __context); + __initCurrent(__current, "ice_ping", ::Ice::Nonmutating, __context); while(true) { Direct __direct(__adapter, __current); @@ -1110,7 +1111,7 @@ vector<string> IceDelegateD::Ice::Object::ice_ids(const ::Ice::Context& __context) { Current __current; - __initCurrent(__current, "ice_ids", true, __context); + __initCurrent(__current, "ice_ids", ::Ice::Nonmutating, __context); while(true) { Direct __direct(__adapter, __current); @@ -1138,7 +1139,7 @@ string IceDelegateD::Ice::Object::ice_id(const ::Ice::Context& __context) { Current __current; - __initCurrent(__current, "ice_id", true, __context); + __initCurrent(__current, "ice_id", ::Ice::Nonmutating, __context); while(true) { Direct __direct(__adapter, __current); @@ -1166,7 +1167,7 @@ vector<string> IceDelegateD::Ice::Object::ice_facets(const ::Ice::Context& __context) { Current __current; - __initCurrent(__current, "ice_facets", true, __context); + __initCurrent(__current, "ice_facets", ::Ice::Nonmutating, __context); while(true) { Direct __direct(__adapter, __current); @@ -1192,13 +1193,13 @@ IceDelegateD::Ice::Object::ice_facets(const ::Ice::Context& __context) bool IceDelegateD::Ice::Object::ice_invoke(const string& operation, - bool idempotent, + ::Ice::OperationMode mode, const vector<Byte>& inParams, vector<Byte>& outParams, const ::Ice::Context& context) { Current current; - __initCurrent(current, operation, idempotent, context); + __initCurrent(current, operation, mode, context); while(true) { Direct __direct(__adapter, current); @@ -1253,12 +1254,13 @@ IceDelegateD::Ice::Object::__copyFrom(const ::IceInternal::Handle< ::IceDelegate } void -IceDelegateD::Ice::Object::__initCurrent(Current& current, const string& op, bool idempotent, const Context& context) +IceDelegateD::Ice::Object::__initCurrent(Current& current, const string& op, ::Ice::OperationMode mode, + const Context& context) { current.id = __reference->identity; current.facet = __reference->facet; current.operation = op; - current.idempotent = idempotent; + current.mode = mode; current.ctx = context; } |