You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@qpid.apache.org by kw...@apache.org on 2014/08/03 20:05:17 UTC
svn commit: r1615424 - in /qpid/trunk/qpid/java:
broker-core/src/main/java/org/apache/qpid/server/model/
broker-core/src/main/java/org/apache/qpid/server/model/adapter/
broker-core/src/main/java/org/apache/qpid/server/protocol/
broker-plugins/amqp-0-10...
Author: kwall
Date: Sun Aug 3 18:05:16 2014
New Revision: 1615424
URL: http://svn.apache.org/r1615424
Log:
QPID-5957: [Java Broker] Extend the Session model object to expose transaction start and update times
* Expose the same information on the Connection tab within the Web Management UI.
Modified:
qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/Session.java
qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/adapter/SessionAdapter.java
qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/protocol/AMQSessionModel.java
qpid/trunk/qpid/java/broker-plugins/amqp-0-10-protocol/src/main/java/org/apache/qpid/server/protocol/v0_10/ServerSession.java
qpid/trunk/qpid/java/broker-plugins/amqp-0-8-protocol/src/main/java/org/apache/qpid/server/protocol/v0_8/AMQChannel.java
qpid/trunk/qpid/java/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/Session_1_0.java
qpid/trunk/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/Connection.js
qpid/trunk/qpid/java/systests/src/main/java/org/apache/qpid/systest/rest/ConnectionRestTest.java
Modified: qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/Session.java
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/Session.java?rev=1615424&r1=1615423&r2=1615424&view=diff
==============================================================================
--- qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/Session.java (original)
+++ qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/Session.java Sun Aug 3 18:05:16 2014
@@ -55,5 +55,19 @@ public interface Session<X extends Sessi
@ManagedStatistic
long getUnacknowledgedMessages();
- void delete();
+ /**
+ * Return the time the current transaction started.
+ *
+ * @return the time this transaction started or 0 if not in a transaction
+ */
+ @ManagedStatistic
+ long getTransactionStartTime();
+
+ /**
+ * Return the time of the last activity on the current transaction.
+ *
+ * @return the time of the last activity or 0 if not in a transaction
+ */
+ @ManagedStatistic
+ long getTransactionUpdateTime();
}
Modified: qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/adapter/SessionAdapter.java
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/adapter/SessionAdapter.java?rev=1615424&r1=1615423&r2=1615424&view=diff
==============================================================================
--- qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/adapter/SessionAdapter.java (original)
+++ qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/adapter/SessionAdapter.java Sun Aug 3 18:05:16 2014
@@ -41,9 +41,7 @@ import org.apache.qpid.server.util.Actio
final class SessionAdapter extends AbstractConfiguredObject<SessionAdapter> implements Session<SessionAdapter>
{
// Attributes
-
-
- private AMQSessionModel _session;
+ private final AMQSessionModel _session;
private State _state = State.ACTIVE;
@@ -175,6 +173,18 @@ final class SessionAdapter extends Abstr
return _session.getUnacknowledgedMessageCount();
}
+ @Override
+ public long getTransactionStartTime()
+ {
+ return _session.getTransactionStartTime();
+ }
+
+ @Override
+ public long getTransactionUpdateTime()
+ {
+ return _session.getTransactionUpdateTime();
+ }
+
@StateTransition(currentState = State.ACTIVE, desiredState = State.DELETED)
private void doDelete()
{
Modified: qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/protocol/AMQSessionModel.java
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/protocol/AMQSessionModel.java?rev=1615424&r1=1615423&r2=1615424&view=diff
==============================================================================
--- qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/protocol/AMQSessionModel.java (original)
+++ qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/protocol/AMQSessionModel.java Sun Aug 3 18:05:16 2014
@@ -99,4 +99,18 @@ public interface AMQSessionModel<T exten
void setModelObject(Session<?> session);
Session<?> getModelObject();
+
+ /**
+ * Return the time the current transaction started.
+ *
+ * @return the time this transaction started or 0 if not in a transaction
+ */
+ long getTransactionStartTime();
+
+ /**
+ * Return the time of the last activity on the current transaction.
+ *
+ * @return the time of the last activity or 0 if not in a transaction
+ */
+ long getTransactionUpdateTime();
}
Modified: qpid/trunk/qpid/java/broker-plugins/amqp-0-10-protocol/src/main/java/org/apache/qpid/server/protocol/v0_10/ServerSession.java
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/java/broker-plugins/amqp-0-10-protocol/src/main/java/org/apache/qpid/server/protocol/v0_10/ServerSession.java?rev=1615424&r1=1615423&r2=1615424&view=diff
==============================================================================
--- qpid/trunk/qpid/java/broker-plugins/amqp-0-10-protocol/src/main/java/org/apache/qpid/server/protocol/v0_10/ServerSession.java (original)
+++ qpid/trunk/qpid/java/broker-plugins/amqp-0-10-protocol/src/main/java/org/apache/qpid/server/protocol/v0_10/ServerSession.java Sun Aug 3 18:05:16 2014
@@ -1020,6 +1020,34 @@ public class ServerSession extends Sessi
return _modelObject;
}
+ @Override
+ public long getTransactionStartTime()
+ {
+ ServerTransaction serverTransaction = _transaction;
+ if (serverTransaction.isTransactional())
+ {
+ return serverTransaction.getTransactionStartTime();
+ }
+ else
+ {
+ return 0L;
+ }
+ }
+
+ @Override
+ public long getTransactionUpdateTime()
+ {
+ ServerTransaction serverTransaction = _transaction;
+ if (serverTransaction.isTransactional())
+ {
+ return serverTransaction.getTransactionUpdateTime();
+ }
+ else
+ {
+ return 0L;
+ }
+ }
+
private void consumerAdded(Consumer<?> consumer)
{
for(ConsumerListener l : _consumerListeners)
Modified: qpid/trunk/qpid/java/broker-plugins/amqp-0-8-protocol/src/main/java/org/apache/qpid/server/protocol/v0_8/AMQChannel.java
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/java/broker-plugins/amqp-0-8-protocol/src/main/java/org/apache/qpid/server/protocol/v0_8/AMQChannel.java?rev=1615424&r1=1615423&r2=1615424&view=diff
==============================================================================
--- qpid/trunk/qpid/java/broker-plugins/amqp-0-8-protocol/src/main/java/org/apache/qpid/server/protocol/v0_8/AMQChannel.java (original)
+++ qpid/trunk/qpid/java/broker-plugins/amqp-0-8-protocol/src/main/java/org/apache/qpid/server/protocol/v0_8/AMQChannel.java Sun Aug 3 18:05:16 2014
@@ -1764,4 +1764,32 @@ public class AMQChannel<T extends AMQPro
{
return _modelObject;
}
+
+ @Override
+ public long getTransactionStartTime()
+ {
+ ServerTransaction serverTransaction = _transaction;
+ if (serverTransaction.isTransactional())
+ {
+ return serverTransaction.getTransactionStartTime();
+ }
+ else
+ {
+ return 0L;
+ }
+ }
+
+ @Override
+ public long getTransactionUpdateTime()
+ {
+ ServerTransaction serverTransaction = _transaction;
+ if (serverTransaction.isTransactional())
+ {
+ return serverTransaction.getTransactionUpdateTime();
+ }
+ else
+ {
+ return 0L;
+ }
+ }
}
Modified: qpid/trunk/qpid/java/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/Session_1_0.java
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/java/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/Session_1_0.java?rev=1615424&r1=1615423&r2=1615424&view=diff
==============================================================================
--- qpid/trunk/qpid/java/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/Session_1_0.java (original)
+++ qpid/trunk/qpid/java/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/Session_1_0.java Sun Aug 3 18:05:16 2014
@@ -95,7 +95,6 @@ public class Session_1_0 implements Sess
private static final Logger _logger = Logger.getLogger(Session_1_0.class);
private static final Symbol LIFETIME_POLICY = Symbol.valueOf("lifetime-policy");
private final SessionEndpoint _endpoint;
- private VirtualHostImpl _vhost;
private AutoCommitTransaction _transaction;
private final LinkedHashMap<Integer, ServerTransaction> _openTransactions =
@@ -866,6 +865,18 @@ public class Session_1_0 implements Sess
return _modelObject;
}
+ @Override
+ public long getTransactionStartTime()
+ {
+ return 0L;
+ }
+
+ @Override
+ public long getTransactionUpdateTime()
+ {
+ return 0L;
+ }
+
private void consumerAdded(Consumer<?> consumer)
{
for(ConsumerListener l : _consumerListeners)
Modified: qpid/trunk/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/Connection.js
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/Connection.js?rev=1615424&r1=1615423&r2=1615424&view=diff
==============================================================================
--- qpid/trunk/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/Connection.js (original)
+++ qpid/trunk/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/Connection.js Sun Aug 3 18:05:16 2014
@@ -27,9 +27,10 @@ define(["dojo/_base/xhr",
"qpid/common/util",
"qpid/common/formatter",
"qpid/common/UpdatableStore",
+ "qpid/management/UserPreferences",
"dojox/html/entities",
"dojo/domReady!"],
- function (xhr, parser, query, connect, properties, updater, util, formatter, UpdatableStore, entities) {
+ function (xhr, parser, query, connect, properties, updater, util, formatter, UpdatableStore, UserPreferences, entities) {
function Connection(name, parent, controller) {
this.name = name;
@@ -105,12 +106,35 @@ define(["dojo/_base/xhr",
that.updateHeader();
that.sessionsGrid = new UpdatableStore(that.connectionData.sessions, findNode("sessions"),
- [ { name: "Name", field: "name", width: "70px"},
- { name: "Mode", field: "distributionMode", width: "70px"},
- { name: "Msgs Rate", field: "msgRate",
- width: "150px"},
- { name: "Bytes Rate", field: "bytesRate",
- width: "100%"}
+ [ { name: "Name", field: "name", width: "70px"},
+ { name: "Consumers", field: "consumerCount", width: "90px"},
+ { name: "Unacknowledged messages", field: "unacknowledgedMessages", width: "110px"},
+ { name: "Current store transaction start", field: "transactionStartTime", width: "200px",
+ formatter: function (transactionStartTime)
+ {
+ if (transactionStartTime > 0)
+ {
+ return UserPreferences.formatDateTime(transactionStartTime, {selector: "time", addOffset: true, appendTimeZone: true});
+ }
+ else
+ {
+ return "N/A";
+ }
+ }
+ },
+ { name: "Current store transaction update", field: "transactionUpdateTime", width: "100%",
+ formatter: function (transactionUpdateTime)
+ {
+ if (transactionUpdateTime > 0)
+ {
+ return UserPreferences.formatDateTime(transactionUpdateTime, {selector: "time", addOffset: true, appendTimeZone: true});
+ }
+ else
+ {
+ return "N/A";
+ }
+ }
+ }
]);
Modified: qpid/trunk/qpid/java/systests/src/main/java/org/apache/qpid/systest/rest/ConnectionRestTest.java
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/java/systests/src/main/java/org/apache/qpid/systest/rest/ConnectionRestTest.java?rev=1615424&r1=1615423&r2=1615424&view=diff
==============================================================================
--- qpid/trunk/qpid/java/systests/src/main/java/org/apache/qpid/systest/rest/ConnectionRestTest.java (original)
+++ qpid/trunk/qpid/java/systests/src/main/java/org/apache/qpid/systest/rest/ConnectionRestTest.java Sun Aug 3 18:05:16 2014
@@ -32,6 +32,8 @@ import javax.jms.MessageConsumer;
import javax.jms.MessageProducer;
import javax.servlet.http.HttpServletResponse;
+import org.junit.Assert;
+
import org.apache.qpid.client.AMQConnection;
import org.apache.qpid.client.AMQSession;
import org.apache.qpid.server.model.ConfiguredObject;
@@ -88,6 +90,8 @@ public class ConnectionRestTest extends
m = consumer.receive(1000l);
assertNotNull("Message was not received after rollback", m);
}
+
+ // Session left open
}
public void testGetAllConnections() throws Exception
@@ -175,6 +179,34 @@ public class ConnectionRestTest extends
assertSession(sessions.get(0), (AMQSession<?, ?>) _session);
}
+ public void testProducerSessionOpenHasTransactionStartAndUpdateTimes() throws Exception
+ {
+ Destination queue = _session.createQueue(getTestQueueName());
+ MessageProducer producer = _session.createProducer(queue);
+ producer.send(_session.createMessage());
+ // session left open
+
+ String connectionName = getConnectionName();
+
+ List<Map<String, Object>> sessions = getRestTestHelper().getJsonAsList("session/test/test/"
+ + URLDecoder.decode(connectionName, "UTF-8") + "/" + ((AMQSession<?, ?>) _session).getChannelId());
+ assertEquals("Unexpected number of sessions", 1, sessions.size());
+
+ final Map<String, Object> sessionData = sessions.get(0);
+
+ @SuppressWarnings("unchecked")
+ Map<String, Object> statistics = (Map<String, Object>) sessionData.get(Asserts.STATISTICS_ATTRIBUTE);
+
+ long transactionStartTime = ((Number) statistics.get("transactionStartTime")).longValue();
+ long transactionUpdateTime = ((Number) statistics.get("transactionUpdateTime")).longValue();
+
+ assertTrue("Unexpected transaction start value for open transaction " + transactionStartTime, transactionStartTime > 0);
+ assertTrue("Unexpected transaction update value for open transaction " + transactionUpdateTime, transactionUpdateTime > 0);
+ assertTrue("Expected transaction update value " + transactionUpdateTime + " to be greater than transaction start time " + transactionStartTime, transactionUpdateTime >= transactionStartTime);
+
+
+ }
+
private void assertConnection(Map<String, Object> connectionDetails) throws JMSException
{
Asserts.assertConnection(connectionDetails, (AMQConnection) _connection);
@@ -212,27 +244,28 @@ public class ConnectionRestTest extends
Session.STATE,
Session.DURABLE,
Session.LIFETIME_POLICY);
- assertEquals("Unexpecte value of attribute " + Session.NAME, session.getChannelId() + "",
+ assertEquals("Unexpected value of attribute " + Session.NAME, session.getChannelId() + "",
sessionData.get(Session.NAME));
- assertEquals("Unexpecte value of attribute " + Session.PRODUCER_FLOW_BLOCKED, Boolean.FALSE,
+ assertEquals("Unexpected value of attribute " + Session.PRODUCER_FLOW_BLOCKED, Boolean.FALSE,
sessionData.get(Session.PRODUCER_FLOW_BLOCKED));
- assertEquals("Unexpecte value of attribute " + Session.CHANNEL_ID, session.getChannelId(),
+ assertEquals("Unexpected value of attribute " + Session.CHANNEL_ID, session.getChannelId(),
sessionData.get(Session.CHANNEL_ID));
@SuppressWarnings("unchecked")
Map<String, Object> statistics = (Map<String, Object>) sessionData.get(Asserts.STATISTICS_ATTRIBUTE);
Asserts.assertAttributesPresent(statistics, "consumerCount",
"localTransactionBegins", "localTransactionOpen",
- "localTransactionRollbacks", "unacknowledgedMessages");
+ "localTransactionRollbacks", "unacknowledgedMessages",
+ "transactionStartTime", "transactionUpdateTime");
- assertEquals("Unexpecte value of statistic attribute " + "unacknowledgedMessages", MESSAGE_NUMBER - 1,
+ assertEquals("Unexpected value of statistic attribute " + "unacknowledgedMessages", MESSAGE_NUMBER - 1,
statistics.get("unacknowledgedMessages"));
- assertEquals("Unexpecte value of statistic attribute " + "localTransactionBegins", 4,
- statistics.get("localTransactionBegins"));
- assertEquals("Unexpecte value of statistic attribute " + "localTransactionRollbacks", 1,
- statistics.get("localTransactionRollbacks"));
- assertEquals("Unexpecte value of statistic attribute " + "consumerCount", 1,
- statistics.get("consumerCount"));
+ assertEquals("Unexpected value of statistic attribute " + "localTransactionBegins", 4,
+ statistics.get("localTransactionBegins"));
+ assertEquals("Unexpected value of statistic attribute " + "localTransactionRollbacks", 1,
+ statistics.get("localTransactionRollbacks"));
+ assertEquals("Unexpected value of statistic attribute " + "consumerCount", 1,
+ statistics.get("consumerCount"));
}
private String getConnectionName() throws IOException
---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@qpid.apache.org
For additional commands, e-mail: commits-help@qpid.apache.org