diff options
Diffstat (limited to 'cpp')
-rw-r--r-- | cpp/demo/IceStorm/clock/config.service | 2 | ||||
-rw-r--r-- | cpp/demo/IceStorm/counter/config.service | 2 | ||||
-rw-r--r-- | cpp/demo/IceStorm/replicated2/config.s3 | 2 | ||||
-rw-r--r-- | cpp/src/IceStorm/Makefile | 3 | ||||
-rw-r--r-- | cpp/src/IceStorm/Makefile.mak | 3 | ||||
-rwxr-xr-x | cpp/src/IceStorm/Subscriber.cpp | 26 | ||||
-rw-r--r-- | cpp/src/IceStorm/TopicI.cpp | 26 | ||||
-rw-r--r-- | cpp/src/IceStorm/TopicManagerI.cpp | 35 | ||||
-rw-r--r-- | cpp/src/IceStorm/TransientTopicI.cpp | 13 | ||||
-rw-r--r-- | cpp/src/IceStorm/Util.cpp | 35 | ||||
-rw-r--r-- | cpp/src/IceStorm/Util.h | 24 |
11 files changed, 156 insertions, 15 deletions
diff --git a/cpp/demo/IceStorm/clock/config.service b/cpp/demo/IceStorm/clock/config.service index 0f3443db18c..13ac3f168cc 100644 --- a/cpp/demo/IceStorm/clock/config.service +++ b/cpp/demo/IceStorm/clock/config.service @@ -38,6 +38,7 @@ IceStorm.Trace.TopicManager=2 # # 0 = no tracing # 1 = trace unsubscription diagnostics +# 2 = like 1, but with more detailed subscription information # IceStorm.Trace.Topic=1 @@ -47,6 +48,7 @@ IceStorm.Trace.Topic=1 # 0 = no tracing # 1 = subscriber diagnostics (subscription, unsubscription, event # propagation failures) +# 2 = like 1, but with more detailed subscription information # IceStorm.Trace.Subscriber=1 diff --git a/cpp/demo/IceStorm/counter/config.service b/cpp/demo/IceStorm/counter/config.service index 83a6e27ec2c..236bb2cab83 100644 --- a/cpp/demo/IceStorm/counter/config.service +++ b/cpp/demo/IceStorm/counter/config.service @@ -35,6 +35,7 @@ IceStorm.Trace.TopicManager=2 # # 0 = no tracing # 1 = trace unsubscription diagnostics +# 2 = like 1, but with more detailed subscription information # IceStorm.Trace.Topic=1 @@ -44,6 +45,7 @@ IceStorm.Trace.Topic=1 # 0 = no tracing # 1 = subscriber diagnostics (subscription, unsubscription, event # propagation failures) +# 2 = like 1, but with more detailed subscription information # IceStorm.Trace.Subscriber=1 diff --git a/cpp/demo/IceStorm/replicated2/config.s3 b/cpp/demo/IceStorm/replicated2/config.s3 index baf82e91bfb..449aca23b56 100644 --- a/cpp/demo/IceStorm/replicated2/config.s3 +++ b/cpp/demo/IceStorm/replicated2/config.s3 @@ -69,6 +69,7 @@ IceStorm.Trace.TopicManager=2 # # 0 = no tracing # 1 = trace unsubscription diagnostics +# 2 = like 1, but with more detailed subscription information # IceStorm.Trace.Topic=1 @@ -78,6 +79,7 @@ IceStorm.Trace.Topic=1 # 0 = no tracing # 1 = subscriber diagnostics (subscription, unsubscription, event # propagation failures) +# 2 = like 1, but with more detailed subscription information # IceStorm.Trace.Subscriber=1 diff --git a/cpp/src/IceStorm/Makefile b/cpp/src/IceStorm/Makefile index 92337364e81..759f7d3acee 100644 --- a/cpp/src/IceStorm/Makefile +++ b/cpp/src/IceStorm/Makefile @@ -31,7 +31,8 @@ OBJS = NodeI.o \ LLURecord.o \ Election.o \ SubscriberRecord.o \ - IceStormInternal.o + IceStormInternal.o \ + Util.o AOBJS = Admin.o \ Grammar.o \ diff --git a/cpp/src/IceStorm/Makefile.mak b/cpp/src/IceStorm/Makefile.mak index d5336eb86ec..12cdfeb9bb9 100644 --- a/cpp/src/IceStorm/Makefile.mak +++ b/cpp/src/IceStorm/Makefile.mak @@ -29,7 +29,8 @@ OBJS = NodeI.obj \ LLURecord.obj \
Election.obj \
SubscriberRecord.obj \
- IceStormInternal.obj
+ IceStormInternal.obj \
+ Util.obj
AOBJS = Admin.obj \
Grammar.obj \
diff --git a/cpp/src/IceStorm/Subscriber.cpp b/cpp/src/IceStorm/Subscriber.cpp index 6980bd5c312..5788521087a 100755 --- a/cpp/src/IceStorm/Subscriber.cpp +++ b/cpp/src/IceStorm/Subscriber.cpp @@ -11,6 +11,7 @@ #include <IceStorm/Instance.h> #include <IceStorm/TraceLevels.h> #include <IceStorm/NodeI.h> +#include <IceStorm/Util.h> #include <Ice/LoggerUtil.h> #include <iterator> @@ -791,8 +792,12 @@ Subscriber::error(bool dec, const Ice::Exception& e) if(_currentRetry == 0) { Ice::Warning warn(traceLevels->logger); - warn << traceLevels->subscriberCat << ":" << _instance->communicator()->identityToString(_rec.id) - << ": subscriber offline: " << e + warn << traceLevels->subscriberCat << ":" << _instance->communicator()->identityToString(_rec.id); + if(traceLevels->subscriber > 1) + { + warn << " endpoints: " << IceStormInternal::describeEndpoints(_rec.obj); + } + warn << " subscriber offline: " << e << " discarding events: " << _instance->discardInterval() << "s retryCount: " << _retryCount; } else @@ -801,7 +806,12 @@ Subscriber::error(bool dec, const Ice::Exception& e) { Ice::Trace out(traceLevels->logger, traceLevels->subscriberCat); out << this << " "; - out << _instance->communicator()->identityToString(_rec.id) << ": subscriber offline: " << e + out << _instance->communicator()->identityToString(_rec.id); + if(traceLevels->subscriber > 1) + { + out << " endpoints: " << IceStormInternal::describeEndpoints(_rec.obj); + } + out << " subscriber offline: " << e << " discarding events: " << _instance->discardInterval() << "s retry: " << _currentRetry << "/" << _retryCount; } @@ -825,7 +835,12 @@ Subscriber::error(bool dec, const Ice::Exception& e) { Ice::Trace out(traceLevels->logger, traceLevels->subscriberCat); out << this << " "; - out << _instance->communicator()->identityToString(_rec.id) << ": subscriber errored out: " << e + out << _instance->communicator()->identityToString(_rec.id); + if(traceLevels->subscriber > 1) + { + out << " endpoints: " << IceStormInternal::describeEndpoints(_rec.obj); + } + out << " subscriber errored out: " << e << " retry: " << _currentRetry << "/" << _retryCount; } } @@ -929,7 +944,8 @@ Subscriber::setState(Subscriber::SubscriberState state) if(traceLevels->subscriber > 1) { Ice::Trace out(traceLevels->logger, traceLevels->subscriberCat); - out << this << " transition from " << stateToString(_state) << " to " << stateToString(state); + out << this << " endpoints: " << IceStormInternal::describeEndpoints(_rec.obj) + << " transition from: " << stateToString(_state) << " to: " << stateToString(state); } _state = state; } diff --git a/cpp/src/IceStorm/TopicI.cpp b/cpp/src/IceStorm/TopicI.cpp index f5b17021af3..068f659bd66 100644 --- a/cpp/src/IceStorm/TopicI.cpp +++ b/cpp/src/IceStorm/TopicI.cpp @@ -15,6 +15,7 @@ #include <IceStorm/NodeI.h> #include <IceStorm/Observers.h> #include <IceStorm/DB.h> +#include <IceStorm/Util.h> #include <Ice/LoggerUtil.h> #include <algorithm> @@ -456,6 +457,10 @@ TopicImpl::TopicImpl( { Ice::Trace out(traceLevels->logger, traceLevels->topicCat); out << _name << " recreate " << _instance->communicator()->identityToString(id); + if(traceLevels->topic > 1) + { + out << " endpoints: " << IceStormInternal::describeEndpoints(p->obj); + } } try @@ -470,7 +475,12 @@ TopicImpl::TopicImpl( catch(const Ice::Exception& ex) { Ice::Warning out(traceLevels->logger); - out << _name << " recreate " << _instance->communicator()->identityToString(id) << " failed: " << ex; + out << _name << " recreate " << _instance->communicator()->identityToString(id); + if(traceLevels->topic > 1) + { + out << " endpoints: " << IceStormInternal::describeEndpoints(p->obj); + } + out << " failed: " << ex; } } } @@ -571,9 +581,11 @@ TopicImpl::subscribe(const QoS& origQoS, const Ice::ObjectPrx& obj) { Ice::Trace out(traceLevels->logger, traceLevels->topicCat); out << _name << ": subscribe: " << _instance->communicator()->identityToString(id); + if(traceLevels->topic > 1) { - out << " QoS: "; + out << " endpoints: " << IceStormInternal::describeEndpoints(obj) + << " QoS: "; for(QoS::const_iterator p = qos.begin(); p != qos.end() ; ++p) { if(p != qos.begin()) @@ -735,9 +747,11 @@ TopicImpl::subscribeAndGetPublisher(const QoS& qos, const Ice::ObjectPrx& obj) { Ice::Trace out(traceLevels->logger, traceLevels->topicCat); out << _name << ": subscribeAndGetPublisher: " << _instance->communicator()->identityToString(id); + if(traceLevels->topic > 1) { - out << " QoS: "; + out << " endpoints: " << IceStormInternal::describeEndpoints(obj) + << " QoS: "; for(QoS::const_iterator p = qos.begin(); p != qos.end() ; ++p) { if(p != qos.begin()) @@ -829,8 +843,10 @@ TopicImpl::unsubscribe(const Ice::ObjectPrx& subscriber) { Ice::Trace out(traceLevels->logger, traceLevels->topicCat); out << _name << ": unsubscribe: " << _instance->communicator()->identityToString(id); + if(traceLevels->topic > 1) { + out << " endpoints: " << IceStormInternal::describeEndpoints(subscriber); trace(out, _instance, _subscribers); } } @@ -1259,9 +1275,11 @@ TopicImpl::observerAddSubscriber(const LogUpdate& llu, const SubscriberRecord& r { Ice::Trace out(traceLevels->logger, traceLevels->topicCat); out << _name << ": add replica observer: " << _instance->communicator()->identityToString(record.id); + if(traceLevels->topic > 1) { - out << " QoS: "; + out << " endpoints: " << IceStormInternal::describeEndpoints(record.obj) + << " QoS: "; for(QoS::const_iterator p = record.theQoS.begin(); p != record.theQoS.end() ; ++p) { if(p != record.theQoS.begin()) diff --git a/cpp/src/IceStorm/TopicManagerI.cpp b/cpp/src/IceStorm/TopicManagerI.cpp index 076cdc612a6..d826c47ab48 100644 --- a/cpp/src/IceStorm/TopicManagerI.cpp +++ b/cpp/src/IceStorm/TopicManagerI.cpp @@ -16,6 +16,7 @@ #include <IceStorm/Observers.h> #include <IceStorm/Subscriber.h> #include <IceStorm/DB.h> +#include <IceStorm/Util.h> #include <Ice/SliceChecksums.h> #include <functional> @@ -471,6 +472,10 @@ TopicManagerImpl::observerInit(const LogUpdate& llu, const TopicContentSeq& cont out << ","; } out << _instance->communicator()->identityToString(q->id); + if(traceLevels->topicMgr > 1) + { + out << " endpoints: " << IceStormInternal::describeEndpoints(q->obj); + } } } } @@ -870,12 +875,38 @@ TopicManagerImpl::installTopic(const string& name, const Ice::Identity& id, bool if(create) { out << "creating new topic \"" << name << "\". id: " - << _instance->communicator()->identityToString(id); + << _instance->communicator()->identityToString(id) + << " subscribers: "; + for(SubscriberRecordSeq::const_iterator q = subscribers.begin(); q != subscribers.end(); ++q) + { + if(q != subscribers.begin()) + { + out << ","; + } + if(traceLevels->topicMgr > 1) + { + out << _instance->communicator()->identityToString(q->id) + << " endpoints: " << IceStormInternal::describeEndpoints(q->obj); + } + } } else { out << "loading topic \"" << name << "\" from database. id: " - << _instance->communicator()->identityToString(id); + << _instance->communicator()->identityToString(id) + << " subscribers: "; + for(SubscriberRecordSeq::const_iterator q = subscribers.begin(); q != subscribers.end(); ++q) + { + if(q != subscribers.begin()) + { + out << ","; + } + if(traceLevels->topicMgr > 1) + { + out << _instance->communicator()->identityToString(q->id) + << " endpoints: " << IceStormInternal::describeEndpoints(q->obj); + } + } } } diff --git a/cpp/src/IceStorm/TransientTopicI.cpp b/cpp/src/IceStorm/TransientTopicI.cpp index 1b303fde42f..09bb6d80add 100644 --- a/cpp/src/IceStorm/TransientTopicI.cpp +++ b/cpp/src/IceStorm/TransientTopicI.cpp @@ -12,6 +12,7 @@ #include <IceStorm/Instance.h> #include <IceStorm/Subscriber.h> #include <IceStorm/TraceLevels.h> +#include <IceStorm/Util.h> #include <Ice/Ice.h> @@ -196,9 +197,11 @@ TransientTopicImpl::subscribe(const QoS& origQoS, const Ice::ObjectPrx& obj, con { Ice::Trace out(traceLevels->logger, traceLevels->topicCat); out << _name << ": subscribe: " << _instance->communicator()->identityToString(id); + if(traceLevels->topic > 1) { - out << " QoS: "; + out << " endpoints: " << IceStormInternal::describeEndpoints(obj) + << " QoS: "; for(QoS::const_iterator p = qos.begin(); p != qos.end() ; ++p) { if(p != qos.begin()) @@ -286,9 +289,11 @@ TransientTopicImpl::subscribeAndGetPublisher(const QoS& qos, const Ice::ObjectPr { Ice::Trace out(traceLevels->logger, traceLevels->topicCat); out << _name << ": subscribeAndGetPublisher: " << _instance->communicator()->identityToString(id); + if(traceLevels->topic > 1) { - out << " QoS: "; + out << " endpoints: " << IceStormInternal::describeEndpoints(obj) + << " QoS: "; for(QoS::const_iterator p = qos.begin(); p != qos.end() ; ++p) { if(p != qos.begin()) @@ -342,6 +347,10 @@ TransientTopicImpl::unsubscribe(const Ice::ObjectPrx& subscriber, const Ice::Cur { Ice::Trace out(traceLevels->logger, traceLevels->topicCat); out << _name << ": unsubscribe: " << _instance->communicator()->identityToString(id); + if(traceLevels->topic > 1) + { + out << " endpoints: " << IceStormInternal::describeEndpoints(subscriber); + } } Lock sync(*this); diff --git a/cpp/src/IceStorm/Util.cpp b/cpp/src/IceStorm/Util.cpp new file mode 100644 index 00000000000..3ba86f439d3 --- /dev/null +++ b/cpp/src/IceStorm/Util.cpp @@ -0,0 +1,35 @@ +// ********************************************************************** +// +// Copyright (c) 2003-2011 ZeroC, Inc. All rights reserved. +// +// This copy of Ice is licensed to you under the terms described in the +// ICE_LICENSE file included in this distribution. +// +// ********************************************************************** + +#include <IceStorm/Util.h> + +using namespace std; + +string +IceStormInternal::describeEndpoints(const Ice::ObjectPrx& proxy) +{ + ostringstream os; + if(proxy) + { + Ice::EndpointSeq endpoints = proxy->ice_getEndpoints(); + for(Ice::EndpointSeq::const_iterator i = endpoints.begin(); i != endpoints.end(); ++i) + { + if(i != endpoints.begin()) + { + os << ", "; + } + os << "\"" << (*i)->toString() << "\""; + } + } + else + { + os << "subscriber proxy is null"; + } + return os.str(); +} diff --git a/cpp/src/IceStorm/Util.h b/cpp/src/IceStorm/Util.h new file mode 100644 index 00000000000..871a2a6793a --- /dev/null +++ b/cpp/src/IceStorm/Util.h @@ -0,0 +1,24 @@ +// ********************************************************************** +// +// Copyright (c) 2003-2011 ZeroC, Inc. All rights reserved. +// +// This copy of Ice is licensed to you under the terms described in the +// ICE_LICENSE file included in this distribution. +// +// ********************************************************************** + +#ifndef UTIL_H +#define UTIL_H + +#include <string> + +#include <Ice/Ice.h> + +namespace IceStormInternal +{ + +std::string +describeEndpoints(const Ice::ObjectPrx&); + +} +#endif |