Re: [rt-users] Setting owner with _Set breaks queries (may be a bug)

2012-10-09 Thread Thomas Sibley
On 10/05/2012 08:15 AM, Scotto Alberto wrote:
 Very interesting, thank you! Now I understand the relationships. So I
 think I should correct all the _Set I've used all around in my custom
 scrips :(

Yes, rarely is _Set the right answer.

 To verify if it finds the errors caused by _Set I searched in the
 ouput for 2985, which is the number of a ticket affected by the
 issue. I also searched for 12626, the ID of the owner group
 associated with that ticket. But none of them are there.

rt-validator does not validate or fix this problem.  There's a comment
in the code:

# XXX: check that owner is only member of owner role group

 PS: (OT) if at every moment the Owner is one and only one, I wonder
 why you defined a group for role Owner. Maybe in order to have a
 history of past owners? Or for some code consistency?

All access control in RT is based on groups (even individual users have
equivalence groups containing only them).  The reason Owner is a column
on the Tickets table is for historical reasons, performance, and
convenience.


Final RT training for 2012 in Atlanta, GA - October 23  24
  http://bestpractical.com/training

We're hiring! http://bestpractical.com/jobs


Re: [rt-users] Setting owner with _Set breaks queries (may be a bug)

2012-10-05 Thread Scotto Alberto
Very interesting, thank you!
Now I understand the relationships.
So I think I should correct all the _Set I've used all around in my custom 
scrips :(

Talking about correcting the old tickets processed with _Set, I think 
rt-validator doesn't help, can you please confirm?
Here is the output of rt-validator --check: http://pastebin.com/1PTL8mY8
To verify if it finds the errors caused by _Set I searched in the ouput for 
2985, which is the number of a ticket affected by the issue. I also searched 
for 12626, the ID of the owner group associated with that ticket. But none of 
them are there.

Thanks


PS: (OT) if at every moment the Owner is one and only one, I wonder why you 
defined a group for role Owner. Maybe in order to have a history of past 
owners? Or for some code consistency?




Alberto Scotto

Blue Reply
Via Cardinal Massaia, 83
10147 - Torino - ITALY
phone: +39 011 29100
al.sco...@reply.it
www.reply.it

-Original Message-
From: rt-users-boun...@lists.bestpractical.com 
[mailto:rt-users-boun...@lists.bestpractical.com] On Behalf Of Thomas Sibley
Sent: giovedì 4 ottobre 2012 18:50
To: rt-users@lists.bestpractical.com
Subject: Re: [rt-users] Setting owner with _Set breaks queries (may be a bug)

On 10/04/2012 04:05 AM, Scotto Alberto wrote:
 I think I found a bug.

Not a bug in RT, only your scrip. :)

 Looks like _Set doesn’t update correctly some field in some table in
 the DB. But I have no idea of what field and what table! I had a quick
 look at the DB, and it seems that the relation ticket-owner is based
 on an user ID, not a string (the real name).

Using _Set to change the Owner is incorrect as it only updates the Owner column 
in the Tickets table.  It doesn't also update the Owner role group for the 
ticket.  SetOwner does both.

In general you shouldn't be calling private methods (starting with an
underscore) from code you write, for reasons just like this.

rt-validator may be able to fix your existing tickets, but I haven't checked so 
I'm not certain.

http://bestpractical.com/rt/docs/latest/rt-validator.html


Final RT training for 2012 in Atlanta, GA - October 23  24
  http://bestpractical.com/training

We're hiring! http://bestpractical.com/jobs





--
The information transmitted is intended for the person or entity to which it is 
addressed and may contain confidential and/or privileged material. Any review, 
retransmission, dissemination or other use of, or taking of any action in 
reliance upon, this information by persons or entities other than the intended 
recipient is prohibited. If you received this in error, please contact the 
sender and delete the material from any computer.


Final RT training for 2012 in Atlanta, GA - October 23  24
  http://bestpractical.com/training

We're hiring! http://bestpractical.com/jobs


[rt-users] Setting owner with _Set breaks queries (may be a bug)

2012-10-04 Thread Scotto Alberto
Hi all,
I think I found a bug.
I have a scrip called On closure Auto set owner, which sets the owner while 
closing the ticket in case nobody has never taken it, so that I don't get 
resolved tickets assigned to Nobody in particular.
Everything seemed ok until today a colleague of mine noticed something weird 
with a chart that acts like a hall of fame, showing the top Owners. This chart 
is very simple: it retrieves all the tickets and it is grouped by 
Owner.RealName.
The weird thing is not the chart itself, but the fact that the following two 
queries should return the same tickets but they don't:

-  Owner.RealName = 'Nobody in particular' returns 706 tickets

-  Owner = 'Nobody in particular' returns 369 tickets
The results of the former are not correct: it includes also the tickets for 
which the owner was set by my scrip, though the column Owner is correct 
(filled with John Doe, not Nobody in particular).

Here are the relevant lines of the code of my scrip:

# get actor ID
my $Actor = $self-TransactionObj-Creator;
my $tkt = $self-TicketObj;
# try to change owner
my ($status, $msg) = $tkt-_Set(Field = 'Owner', Value = $Actor, 
RecordTransaction = 0);

I solved the problem using SetOwner instead of _Set, like this:

my ($status, $msg) = $tkt-SetOwner($Actor);

With the new code, the tickets whose owner is set by my scrip don't get caught 
by the query Owner.RealName = 'Nobody in particular'.

Looks like _Set doesn't update correctly some field in some table in the DB. 
But I have no idea of what field and what table! I had a quick look at the DB, 
and it seems that the relation ticket-owner is based on an user ID, not a 
string (the real name).

Finally, a weird thing with the chart: on the right side, it displays all the 
owners and the number of tickets associated. For Nobody in particular, the 
number is 369 (correct); but if I click on this number it generates the query 
Owner.RealName = 'Nobody in particular' saying Found 706 tickets.

The questions are:
Should I file a bug?
How can I convert the tickets that were processed with the old code?

Hope everything is clear

Thank you very much!



Alberto Scotto

Blue Reply
Via Cardinal Massaia, 83
10147 - Torino - ITALY
phone: +39 011 29100
al.sco...@reply.it
www.reply.it

[Blue Reply]




--
The information transmitted is intended for the person or entity to which it is 
addressed and may contain confidential and/or privileged material. Any review, 
retransmission, dissemination or other use of, or taking of any action in 
reliance upon, this information by persons or entities other than the intended 
recipient is prohibited. If you received this in error, please contact the 
sender and delete the material from any computer.
inline: blue.png

Final RT training for 2012 in Atlanta, GA - October 23  24
  http://bestpractical.com/training

We're hiring! http://bestpractical.com/jobs


Re: [rt-users] Setting owner with _Set breaks queries (may be a bug)

2012-10-04 Thread Joe Harris
This is a shot in the dark and I may be way off, but is there a chance your 
scrip to set the owner runs in a transaction that happens after the transaction 
that resolves the ticket?

And the chart looks for the resolved transaction to get owner at the time of 
resolution?

Just a thought. 

Sent from my mobile device. 

On Oct 4, 2012, at 7:05 AM, Scotto Alberto al.sco...@reply.it wrote:

 Hi all,
 I think I found a bug.
 I have a scrip called On closure Auto set owner, which sets the owner while 
 closing the ticket in case nobody has never taken it, so that I don't get 
 resolved tickets assigned to Nobody in particular.
 Everything seemed ok until today a colleague of mine noticed something weird 
 with a chart that acts like a hall of fame, showing the top Owners. This 
 chart is very simple: it retrieves all the tickets and it is grouped by 
 Owner.RealName.
 The weird thing is not the chart itself, but the fact that the following two 
 queries should return the same tickets but they don’t:
 -  Owner.RealName = 'Nobody in particular' returns 706 tickets
 -  Owner = 'Nobody in particular' returns 369 tickets
 The results of the former are not correct: it includes also the tickets for 
 which the owner was set by my scrip, though the column “Owner” is correct 
 (filled with “John Doe”, not “Nobody in particular”).
  
 Here are the relevant lines of the code of my scrip:
  
 # get actor ID
 my $Actor = $self-TransactionObj-Creator;
 my $tkt = $self-TicketObj;
 # try to change owner
 my ($status, $msg) = $tkt-_Set(Field = 'Owner', Value = $Actor, 
 RecordTransaction = 0);
  
 I solved the problem using SetOwner instead of _Set, like this:
  
 my ($status, $msg) = $tkt-SetOwner($Actor);
  
 With the new code, the tickets whose owner is set by my scrip don’t get 
 caught by the query Owner.RealName = 'Nobody in particular'.
  
 Looks like _Set doesn’t update correctly some field in some table in the DB. 
 But I have no idea of what field and what table! I had a quick look at the 
 DB, and it seems that the relation ticket-owner is based on an user ID, not a 
 string (the real name).
  
 Finally, a weird thing with the chart: on the right side, it displays all the 
 owners and the number of tickets associated. For “Nobody in particular”, the 
 number is 369 (correct); but if I click on this number it generates the query 
 “Owner.RealName = 'Nobody in particular'” saying “Found 706 tickets”.
  
 The questions are:
 Should I file a bug?
 How can I “convert” the tickets that were processed with the old code?
  
 Hope everything is clear
  
 Thank you very much!
 
 
 Alberto Scotto 
 
 Blue Reply 
 Via Cardinal Massaia, 83
 10147 - Torino - ITALY 
 phone: +39 011 29100 
 al.sco...@reply.it 
 www.reply.it 
 
 blue.png 
  
 
 
 
 --
 The information transmitted is intended for the person or entity to which it 
 is addressed and may contain confidential and/or privileged material. Any 
 review, retransmission, dissemination or other use of, or taking of any 
 action in reliance upon, this information by persons or entities other than 
 the intended recipient is prohibited. If you received this in error, please 
 contact the sender and delete the material from any computer.
 
 
 Final RT training for 2012 in Atlanta, GA - October 23  24
  http://bestpractical.com/training
 
 We're hiring! http://bestpractical.com/jobs


Final RT training for 2012 in Atlanta, GA - October 23  24
  http://bestpractical.com/training

We're hiring! http://bestpractical.com/jobs


Re: [rt-users] Setting owner with _Set breaks queries (may be a bug)

2012-10-04 Thread Scotto Alberto
Joe,
Thank for you your quick answer!

I’ll take ticket #2985 as an example, which is one of those affected by the 
issue.

The scrip correctly happens in the transaction #38624, “Status changed from 
'new' to 'resolved'”, as the (custom) scrip condition is (taken from the DB):

| 17 | On closure | If the status is set to inactive
 | StatusChange| old: 
initial, active; new: inactive | Status   | 
  1 | 2012-05-30 15:54:19 | 1 | 2012-05-30 15:54:19 |

Here is some output from rt.log:

[Mon Sep 10 13:24:00 2012] [debug]: About to think about scrips for transaction 
#38624 (/opt/rt4/sbin/../lib/RT/Transaction.pm:173)
[Mon Sep 10 13:24:00 2012] [debug]: About to prepare scrips for transaction 
#38624 (/opt/rt4/sbin/../lib/RT/Transaction.pm:177)
[Mon Sep 10 13:24:00 2012] [debug]: Found 15 scrips for TransactionCreate stage 
with applicable type(s) Status for txn #38624 on ticket #2985 
(/opt/rt4/sbin/../lib/RT/Scrips.pm:367)
[Mon Sep 10 13:24:00 2012] [debug]: Skipping Scrip #19 because it isn't 
applicable (/opt/rt4/sbin/../lib/RT/Scrips.pm:229)
[Mon Sep 10 13:24:00 2012] [debug]: Skipping Scrip #35 because it isn't 
applicable (/opt/rt4/sbin/../lib/RT/Scrips.pm:229)
[Mon Sep 10 13:24:00 2012] [debug]: Skipping Scrip #18 because it isn't 
applicable (/opt/rt4/sbin/../lib/RT/Scrips.pm:229)
[Mon Sep 10 13:24:00 2012] [debug]: Skipping Scrip #12 because it isn't 
applicable (/opt/rt4/sbin/../lib/RT/Scrips.pm:229)
[Mon Sep 10 13:24:00 2012] [debug]: Skipping Scrip #2 because it isn't 
applicable (/opt/rt4/sbin/../lib/RT/Scrips.pm:229)
[Mon Sep 10 13:24:00 2012] [debug]: Skipping Scrip #21 because it isn't 
applicable (/opt/rt4/sbin/../lib/RT/Scrips.pm:229)
[Mon Sep 10 13:24:00 2012] [debug]: Skipping Scrip #27 because it isn't 
applicable (/opt/rt4/sbin/../lib/RT/Scrips.pm:229)
[Mon Sep 10 13:24:00 2012] [debug]: Skipping Scrip #23 because it isn't 
applicable (/opt/rt4/sbin/../lib/RT/Scrips.pm:229)
[Mon Sep 10 13:24:00 2012] [debug]: Skipping Scrip #29 because it isn't 
applicable (/opt/rt4/sbin/../lib/RT/Scrips.pm:229)
[Mon Sep 10 13:24:00 2012] [debug]: Skipping Scrip #37 because it isn't 
applicable (/opt/rt4/sbin/../lib/RT/Scrips.pm:229)
[Mon Sep 10 13:24:00 2012] [debug]: Skipping Scrip #38 because it isn't 
applicable (/opt/rt4/sbin/../lib/RT/Scrips.pm:229)
[Mon Sep 10 13:24:00 2012] [debug]: About to commit scrips for transaction 
#38624 (/opt/rt4/sbin/../lib/RT/Transaction.pm:197)
[Mon Sep 10 13:24:00 2012] [debug]: Committing scrip #34 on txn #38624 of 
ticket #2985 (/opt/rt4/sbin/../lib/RT/Scrips.pm:183)
[Mon Sep 10 13:24:00 2012] [info]: Attempting to auto assign ticket #2985 to 
user #3444 ((eval 3201):12)
[Mon Sep 10 13:24:00 2012] [debug]: Committing scrip #10 on txn #38624 of 
ticket #2985 (/opt/rt4/sbin/../lib/RT/Scrips.pm:183)
[Mon Sep 10 13:24:00 2012] [debug]: Calling SetRecipientDigests for transaction 
RT::Transaction=HASH(0xe6582b0), id 38624 
(/opt/rt4/sbin/../lib/RT/Action/SendEmail.pm:6

Attached you can find two queries I’ve just executed in my DB. It shows that 
the owner is correctly set as the id of the user John Doe.


Ø  And the chart looks for the resolved transaction to get owner at the time of 
resolution?
I don’t think it’s a matter of transactions, as I think the chart queries 
tickets, not transactions.








Alberto Scotto

Blue Reply
Via Cardinal Massaia, 83
10147 - Torino - ITALY
phone: +39 011 29100
al.sco...@reply.it
www.reply.it

[Blue Reply]

From: Joe Harris [mailto:drey...@gmail.com]
Sent: giovedì 4 ottobre 2012 13:37
To: Scotto Alberto
Cc: rt-users@lists.bestpractical.com
Subject: Re: [rt-users] Setting owner with _Set breaks queries (may be a bug)

This is a shot in the dark and I may be way off, but is there a chance your 
scrip to set the owner runs in a transaction that happens after the transaction 
that resolves the ticket?

And the chart looks for the resolved transaction to get owner at the time of 
resolution?

Just a thought.
Sent from my mobile device.

On Oct 4, 2012, at 7:05 AM, Scotto Alberto 
al.sco...@reply.itmailto:al.sco...@reply.it wrote:
Hi all,
I think I found a bug.
I have a scrip called On closure Auto set owner, which sets the owner while 
closing the ticket in case nobody has never taken it, so that I don't get 
resolved tickets assigned to Nobody in particular.
Everything seemed ok until today a colleague of mine noticed something weird 
with a chart that acts like a hall of fame, showing the top Owners. This chart 
is very simple: it retrieves all the tickets and it is grouped by 
Owner.RealName.
The weird thing is not the chart itself, but the fact that the following two 
queries should return the same tickets but they don’t:

-  Owner.RealName = 'Nobody in particular' returns 706 tickets

-  Owner = 'Nobody in particular' returns 369 tickets
The results of the former are not correct

Re: [rt-users] Setting owner with _Set breaks queries (may be a bug)

2012-10-04 Thread Thomas Sibley
On 10/04/2012 04:05 AM, Scotto Alberto wrote:
 I think I found a bug.

Not a bug in RT, only your scrip. :)

 Looks like _Set doesn’t update correctly some field in some table in the
 DB. But I have no idea of what field and what table! I had a quick look
 at the DB, and it seems that the relation ticket-owner is based on an
 user ID, not a string (the real name).

Using _Set to change the Owner is incorrect as it only updates the Owner
column in the Tickets table.  It doesn't also update the Owner role
group for the ticket.  SetOwner does both.

In general you shouldn't be calling private methods (starting with an
underscore) from code you write, for reasons just like this.

rt-validator may be able to fix your existing tickets, but I haven't
checked so I'm not certain.

http://bestpractical.com/rt/docs/latest/rt-validator.html


Final RT training for 2012 in Atlanta, GA - October 23  24
  http://bestpractical.com/training

We're hiring! http://bestpractical.com/jobs