[java] RFC: moving persistent messages, queue durability

2009-07-07 Thread Robbie Gemmell
While looking into QPID-1941 (moved messages remaining in the JMX
viewMessages() results for the old queue, but not being considered
still on the queue) for GSoC I have noticed an inconsistency between
the recovery behaviour of persistent messages which are moved, and
those handled only by the normal message delivery path.

if (message.isPersistent()  toQueue.isDurable())
{
 store.enqueueMessage(storeContext, toQueue, message.getMessageId());
}

The above check in the SimpleAMQQueue moveMessagesToAnotherQueue
method means that persistent messages are not moved in the message
store unless the destination queue is durable. As a result, if the
broker is restarted while using a persistence store any persistent
messages which have been moved to a non-durable queue are lost.
However, any persistent messages delivered directly to the same
non-durable queue are currently recovered at startup as the broker
places no such restriction on messages in the normal delivery path, eg
in IncomingMessage:

if (persistent)
{
.
.
.
store.enqueueMessage(.)

I am not particularly bothered either way by the 'should persistent
messages should be recovered from non durable queues' argument, but I
do think they should be treated equally whether they have been moved
or not. It means changing the previous behaviour of the section, but I
think it should be entirely consistent one way or the other, so...any
objections to me removing the durability check from the move method?

Robbie

-
Apache Qpid - AMQP Messaging Implementation
Project:  http://qpid.apache.org
Use/Interact: mailto:dev-subscr...@qpid.apache.org



[jira] Commented: (QPID-1935) FailoverTest and QueueBrowser*Test fail on persistent builds

2009-07-07 Thread Rafael H. Schloming (JIRA)

[ 
https://issues.apache.org/jira/browse/QPID-1935?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanelfocusedCommentId=12728279#action_12728279
 ] 

Rafael H. Schloming commented on QPID-1935:
---

I'm reverting the fix for this as it breaks the normal cpp profile.

 FailoverTest and QueueBrowser*Test fail on persistent builds
 

 Key: QPID-1935
 URL: https://issues.apache.org/jira/browse/QPID-1935
 Project: Qpid
  Issue Type: Bug
  Components: Java Tests
Affects Versions: 0.6
Reporter: Aidan Skinner
Assignee: Aidan Skinner
 Fix For: 0.6


 The failover and queuebrowser tests do weird things that cause them to fail 
 when run persistently. 

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.


-
Apache Qpid - AMQP Messaging Implementation
Project:  http://qpid.apache.org
Use/Interact: mailto:dev-subscr...@qpid.apache.org



Re: [java] RFC: moving persistent messages, queue durability

2009-07-07 Thread Aidan Skinner
Removing that check seems like the right thing to do to me. There's a
couple of other oddities like that elsewhere in the stores though. We
should really make a decision about how to treat them, but IMO the
right thing to do is to persist if *either* the queue or the message
is marked as durable.

On 7/7/09, Robbie Gemmell robbie.gemm...@gmail.com wrote:
 While looking into QPID-1941 (moved messages remaining in the JMX
 viewMessages() results for the old queue, but not being considered
 still on the queue) for GSoC I have noticed an inconsistency between
 the recovery behaviour of persistent messages which are moved, and
 those handled only by the normal message delivery path.

 if (message.isPersistent()  toQueue.isDurable())
 {
  store.enqueueMessage(storeContext, toQueue, message.getMessageId());
 }

 The above check in the SimpleAMQQueue moveMessagesToAnotherQueue
 method means that persistent messages are not moved in the message
 store unless the destination queue is durable. As a result, if the
 broker is restarted while using a persistence store any persistent
 messages which have been moved to a non-durable queue are lost.
 However, any persistent messages delivered directly to the same
 non-durable queue are currently recovered at startup as the broker
 places no such restriction on messages in the normal delivery path, eg
 in IncomingMessage:

 if (persistent)
 {
 .
 .
 .
 store.enqueueMessage(.)

 I am not particularly bothered either way by the 'should persistent
 messages should be recovered from non durable queues' argument, but I
 do think they should be treated equally whether they have been moved
 or not. It means changing the previous behaviour of the section, but I
 think it should be entirely consistent one way or the other, so...any
 objections to me removing the durability check from the move method?

 Robbie

 -
 Apache Qpid - AMQP Messaging Implementation
 Project:  http://qpid.apache.org
 Use/Interact: mailto:dev-subscr...@qpid.apache.org



-- 
Sent from Google Mail for mobile | mobile.google.com

Apache Qpid - AMQP, JMS, other messaging love http://qpid.apache.org
A witty saying proves nothing - Voltaire

-
Apache Qpid - AMQP Messaging Implementation
Project:  http://qpid.apache.org
Use/Interact: mailto:dev-subscr...@qpid.apache.org



Re: [RFC][java] Additional Broker Logging

2009-07-07 Thread Rafael Schloming

Martin Ritchie wrote:

Java Broker Users,
I have been working on designs for improving the logging from the Java
Broker. The current logging is more aimed at developers so providing
more operational focused log messages would be good.

The design is up on the wiki here:
http://cwiki.apache.org/confluence/display/qpid/Java+Broker+Design+-+Operational+Logging
and will be proceeding under JIRA :
https://issues.apache.org/jira/browse/QPID-1970

Comments greatly appreciated. At this stage I'm looking to get the
ability to perform this type of logging started with some simple
status updates. Refinement of the messages and other details will come
later.


I like the high level overview. How exactly do you see protocol level 
logging fitting into things? Also, have you considered finer grained 
control of logging? It might be useful to be able to enable or disable 
finer grained logging for a specific connection.


Regarding the detailed design notes, I'm struggling a bit to understand 
the purpose of the various interfaces you describe. Based on the high 
level overview, I would have imagined something simpler, e.g. 
Channel.log(...), and Connection.log(...).


--Rafael

-
Apache Qpid - AMQP Messaging Implementation
Project:  http://qpid.apache.org
Use/Interact: mailto:dev-subscr...@qpid.apache.org



Re: [java] RFC: moving persistent messages, queue durability

2009-07-07 Thread Robert Godfrey
2009/7/7 Aidan Skinner ai...@apache.org:
 Removing that check seems like the right thing to do to me. There's a
 couple of other oddities like that elsewhere in the stores though. We
 should really make a decision about how to treat them, but IMO the
 right thing to do is to persist if *either* the queue or the message
 is marked as durable.


Definitely not an *either* thing (transient messages on a durable
queue should certainly not be persisted).  In practice we currently
put persistent messages in the store regardless of the durability of
the queue (e.g. even if the queue is a temporary queue).  This is
wrong really, but because of the messed up way our configuration is,
people may be depending on it so we would need to make it clear before
changing.

I would leave as is for the moment - IMHO we should JIRA the whole
durable message on transient queue thing (if it isn't already) and
solve that properly as a separate task.

-- Rob

 On 7/7/09, Robbie Gemmell robbie.gemm...@gmail.com wrote:
 While looking into QPID-1941 (moved messages remaining in the JMX
 viewMessages() results for the old queue, but not being considered
 still on the queue) for GSoC I have noticed an inconsistency between
 the recovery behaviour of persistent messages which are moved, and
 those handled only by the normal message delivery path.

 if (message.isPersistent()  toQueue.isDurable())
 {
  store.enqueueMessage(storeContext, toQueue, message.getMessageId());
 }

 The above check in the SimpleAMQQueue moveMessagesToAnotherQueue
 method means that persistent messages are not moved in the message
 store unless the destination queue is durable. As a result, if the
 broker is restarted while using a persistence store any persistent
 messages which have been moved to a non-durable queue are lost.
 However, any persistent messages delivered directly to the same
 non-durable queue are currently recovered at startup as the broker
 places no such restriction on messages in the normal delivery path, eg
 in IncomingMessage:

 if (persistent)
 {
     .
     .
     .
     store.enqueueMessage(.)

 I am not particularly bothered either way by the 'should persistent
 messages should be recovered from non durable queues' argument, but I
 do think they should be treated equally whether they have been moved
 or not. It means changing the previous behaviour of the section, but I
 think it should be entirely consistent one way or the other, so...any
 objections to me removing the durability check from the move method?

 Robbie

 -
 Apache Qpid - AMQP Messaging Implementation
 Project:      http://qpid.apache.org
 Use/Interact: mailto:dev-subscr...@qpid.apache.org



 --
 Sent from Google Mail for mobile | mobile.google.com

 Apache Qpid - AMQP, JMS, other messaging love http://qpid.apache.org
 A witty saying proves nothing - Voltaire

 -
 Apache Qpid - AMQP Messaging Implementation
 Project:      http://qpid.apache.org
 Use/Interact: mailto:dev-subscr...@qpid.apache.org



-
Apache Qpid - AMQP Messaging Implementation
Project:  http://qpid.apache.org
Use/Interact: mailto:dev-subscr...@qpid.apache.org



[jira] Resolved: (QPID-1952) C++: client request memory leak on windows

2009-07-07 Thread Steve Huston (JIRA)

 [ 
https://issues.apache.org/jira/browse/QPID-1952?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Steve Huston resolved QPID-1952.


   Resolution: Fixed
Fix Version/s: 0.6
 Assignee: Steve Huston

I tested the patch here with Purify - no more leak.
Fix is in r791997.

 C++: client request memory leak on windows
 --

 Key: QPID-1952
 URL: https://issues.apache.org/jira/browse/QPID-1952
 Project: Qpid
  Issue Type: Bug
  Components: C++ Client
Affects Versions: 0.5
 Environment: Windows XP Pro w/SP3
Reporter: David Rennalls
Assignee: Steve Huston
 Fix For: 0.6

 Attachments: AsynchIO.cpp.diff, Connector_memory_leak.patch, Main2.cpp


 I'm experiencing a memory leak when using the client library on Windows (0.5 
 release) when sending a single request. From what debugging I've done so far 
 it looks like the The AsynchIO object used by the TCPConnector is not being 
 deleted.  When the connection is being closed aio-queueForDeletion() is 
 called from TCPConnector::closeInternal().. However in 
 AsynchIO::queueForDeletion() aio.opsInProgress  0 so the 'delete this' 
 branch is not done. There are no more queueForDeletion() calls made on the 
 aio object (after opsInProgress is 0) and so it never gets deleted. The 
 ConnectionImpl object involved is not cleaned up either, the shared_ptr to it 
 has a non-zero ref count but I'm guessing it's related to the AsynchIO object 
 not being cleaned up.
 There used to be some code in AsynchIO::completion() that seems like it would 
 do the necessary delete (see below). It was removed with code changes in 
 https://issues.apache.org/jira/browse/QPID-1550 because 'It fixed a memory 
 corruption on the broker side by deleting too early' (from Steve H.)
 -// Lock released; ok to delete if all is done.
 -if (opsInProgress == 0  queuedDelete)
 -delete this;

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.


-
Apache Qpid - AMQP Messaging Implementation
Project:  http://qpid.apache.org
Use/Interact: mailto:dev-subscr...@qpid.apache.org



[jira] Assigned: (QPID-1973) Calling session.objects fails to return objects in certain cases

2009-07-07 Thread Ted Ross (JIRA)

 [ 
https://issues.apache.org/jira/browse/QPID-1973?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Ted Ross reassigned QPID-1973:
--

Assignee: Ted Ross

 Calling session.objects fails to return objects in certain cases
 

 Key: QPID-1973
 URL: https://issues.apache.org/jira/browse/QPID-1973
 Project: Qpid
  Issue Type: Bug
  Components: Ruby Client
 Environment: Fedora 11, Qpid svn trunk revision 787286
Reporter: Arjun Roy
Assignee: Ted Ross
   Original Estimate: 72h
  Remaining Estimate: 72h

 Suppose we have a simple schema consisting of class A and class B, where A is 
 the parent of class B.
 Suppose also that we have a simple ruby console program that, upon having the 
 obj_props callback called by the broker, ignores all objects not of class A. 
 For any objects of class A, it prints out the instance (of class A) and all 
 corresponding child instances (of class B).
 In the case where managed_connections is enabled in the session, if the agent 
 connected to the broker before the console, then the session.objects method 
 fails to return any objects. The agent can be running for a large length of 
 time before the console connects, and other consoles that connected can see 
 all the published qmf objects, but the console that connected after the agent 
 cannot see the objects.
 Finally, I tried writing a simple console that extended debug console that 
 queried for objects on user input to try debugging when session.objects() 
 fails. It appears that the console picks up the qmf objects in the schema 
 written by the user before picking up any of the org.apache.* schemas, and 
 that after the console picks up the org.apache.* schemas, then 
 session.objects() works normally.

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.


-
Apache Qpid - AMQP Messaging Implementation
Project:  http://qpid.apache.org
Use/Interact: mailto:dev-subscr...@qpid.apache.org