Reduce inserts to LARGE_DATA in dao-hib
---------------------------------------
Key: ODE-640
URL: https://issues.apache.org/jira/browse/ODE-640
Project: ODE
Issue Type: Improvement
Components: BPEL Runtime
Affects Versions: 1.3.2, 2.0
Reporter: Rafal Rusin
Assignee: Rafal Rusin
Fix For: 1.3.3, 2.0
Each time assign:copy is executed in one transaction (job), there's an insert
to LARGE_DATA. The goal is to have only one insert for one variable update.
Here are details for 20 copy operation on the same variable:
for ODE-1.X:
07...@15:31:45 DEBUG (GeronimoLog.java:66) - Insert 0: insert into
LARGE_DATA (BIN_DATA, INSERT_TIME, MLOCK, ID) values (?, ?, ?, ?)
07...@15:31:49 DEBUG (GeronimoLog.java:66) - Beginning a new transaction
07...@15:31:49 DEBUG (GeronimoLog.java:66) - Commiting on
org.apache.geronimo.transaction.manager.geronimotransactionmana...@10b755d...
07...@15:31:49 DEBUG (GeronimoLog.java:66) - Beginning a new transaction
07...@15:31:49 DEBUG (GeronimoLog.java:66) - Commiting on
org.apache.geronimo.transaction.manager.geronimotransactionmana...@10b755d...
07...@15:31:51 DEBUG (GeronimoLog.java:66) - Beginning a new transaction
07...@15:31:51 DEBUG (GeronimoLog.java:66) - Commiting on
org.apache.geronimo.transaction.manager.geronimotransactionmana...@10b755d...
07...@15:31:51 DEBUG (GeronimoLog.java:66) - Commiting ODE MEX
{MyRoleMex#65536 [Client ID:127.0.1.1-122c18fcd42-3:0] calling
{urn:/HelloWorld2.wsdl}HelloService.Hello(...)}
07...@15:31:51 DEBUG (GeronimoLog.java:66) - insert into LARGE_DATA
(BIN_DATA, INSERT_TIME, MLOCK, ID) values (?, ?, ?, ?)
07...@15:31:51 DEBUG (GeronimoLog.java:66) - prepareStatement: insert into
LARGE_DATA (BIN_DATA, INSERT_TIME, MLOCK, ID) values (?, ?, ?, ?)
07...@15:31:52 DEBUG (GeronimoLog.java:66) - Beginning a new transaction
07...@15:31:53 DEBUG (GeronimoLog.java:66) - insert into LARGE_DATA
(BIN_DATA, INSERT_TIME, MLOCK, ID) values (?, ?, ?, ?)
07...@15:31:53 DEBUG (GeronimoLog.java:66) - prepareStatement: insert into
LARGE_DATA (BIN_DATA, INSERT_TIME, MLOCK, ID) values (?, ?, ?, ?)
07...@15:31:53 DEBUG (GeronimoLog.java:66) - insert into LARGE_DATA
(BIN_DATA, INSERT_TIME, MLOCK, ID) values (?, ?, ?, ?)
07...@15:31:53 DEBUG (GeronimoLog.java:66) - prepareStatement: insert into
LARGE_DATA (BIN_DATA, INSERT_TIME, MLOCK, ID) values (?, ?, ?, ?)
07...@15:31:53 DEBUG (GeronimoLog.java:66) - insert into LARGE_DATA
(BIN_DATA, INSERT_TIME, MLOCK, ID) values (?, ?, ?, ?)
07...@15:31:53 DEBUG (GeronimoLog.java:66) - prepareStatement: insert into
LARGE_DATA (BIN_DATA, INSERT_TIME, MLOCK, ID) values (?, ?, ?, ?)
07...@15:31:53 DEBUG (GeronimoLog.java:66) - insert into LARGE_DATA
(BIN_DATA, INSERT_TIME, MLOCK, ID) values (?, ?, ?, ?)
07...@15:31:53 DEBUG (GeronimoLog.java:66) - prepareStatement: insert into
LARGE_DATA (BIN_DATA, INSERT_TIME, MLOCK, ID) values (?, ?, ?, ?)
07...@15:31:54 DEBUG (GeronimoLog.java:66) - insert into LARGE_DATA
(BIN_DATA, INSERT_TIME, MLOCK, ID) values (?, ?, ?, ?)
07...@15:31:54 DEBUG (GeronimoLog.java:66) - prepareStatement: insert into
LARGE_DATA (BIN_DATA, INSERT_TIME, MLOCK, ID) values (?, ?, ?, ?)
07...@15:31:54 DEBUG (GeronimoLog.java:66) - insert into LARGE_DATA
(BIN_DATA, INSERT_TIME, MLOCK, ID) values (?, ?, ?, ?)
07...@15:31:54 DEBUG (GeronimoLog.java:66) - prepareStatement: insert into
LARGE_DATA (BIN_DATA, INSERT_TIME, MLOCK, ID) values (?, ?, ?, ?)
07...@15:31:54 DEBUG (GeronimoLog.java:66) - insert into LARGE_DATA
(BIN_DATA, INSERT_TIME, MLOCK, ID) values (?, ?, ?, ?)
07...@15:31:54 DEBUG (GeronimoLog.java:66) - prepareStatement: insert into
LARGE_DATA (BIN_DATA, INSERT_TIME, MLOCK, ID) values (?, ?, ?, ?)
07...@15:31:54 DEBUG (GeronimoLog.java:66) - insert into LARGE_DATA
(BIN_DATA, INSERT_TIME, MLOCK, ID) values (?, ?, ?, ?)
07...@15:31:54 DEBUG (GeronimoLog.java:66) - prepareStatement: insert into
LARGE_DATA (BIN_DATA, INSERT_TIME, MLOCK, ID) values (?, ?, ?, ?)
07...@15:31:54 DEBUG (GeronimoLog.java:66) - insert into LARGE_DATA
(BIN_DATA, INSERT_TIME, MLOCK, ID) values (?, ?, ?, ?)
07...@15:31:54 DEBUG (GeronimoLog.java:66) - prepareStatement: insert into
LARGE_DATA (BIN_DATA, INSERT_TIME, MLOCK, ID) values (?, ?, ?, ?)
07...@15:31:54 DEBUG (GeronimoLog.java:66) - insert into LARGE_DATA
(BIN_DATA, INSERT_TIME, MLOCK, ID) values (?, ?, ?, ?)
07...@15:31:54 DEBUG (GeronimoLog.java:66) - prepareStatement: insert into
LARGE_DATA (BIN_DATA, INSERT_TIME, MLOCK, ID) values (?, ?, ?, ?)
07...@15:31:54 DEBUG (GeronimoLog.java:66) - insert into LARGE_DATA
(BIN_DATA, INSERT_TIME, MLOCK, ID) values (?, ?, ?, ?)
07...@15:31:54 DEBUG (GeronimoLog.java:66) - prepareStatement: insert into
LARGE_DATA (BIN_DATA, INSERT_TIME, MLOCK, ID) values (?, ?, ?, ?)
07...@15:31:54 DEBUG (GeronimoLog.java:66) - insert into LARGE_DATA
(BIN_DATA, INSERT_TIME, MLOCK, ID) values (?, ?, ?, ?)
07...@15:31:54 DEBUG (GeronimoLog.java:66) - prepareStatement: insert into
LARGE_DATA (BIN_DATA, INSERT_TIME, MLOCK, ID) values (?, ?, ?, ?)
07...@15:31:55 DEBUG (GeronimoLog.java:66) - insert into LARGE_DATA
(BIN_DATA, INSERT_TIME, MLOCK, ID) values (?, ?, ?, ?)
07...@15:31:55 DEBUG (GeronimoLog.java:66) - prepareStatement: insert into
LARGE_DATA (BIN_DATA, INSERT_TIME, MLOCK, ID) values (?, ?, ?, ?)
07...@15:31:55 DEBUG (GeronimoLog.java:66) - insert into LARGE_DATA
(BIN_DATA, INSERT_TIME, MLOCK, ID) values (?, ?, ?, ?)
07...@15:31:55 DEBUG (GeronimoLog.java:66) - prepareStatement: insert into
LARGE_DATA (BIN_DATA, INSERT_TIME, MLOCK, ID) values (?, ?, ?, ?)
07...@15:31:55 DEBUG (GeronimoLog.java:66) - insert into LARGE_DATA
(BIN_DATA, INSERT_TIME, MLOCK, ID) values (?, ?, ?, ?)
07...@15:31:55 DEBUG (GeronimoLog.java:66) - prepareStatement: insert into
LARGE_DATA (BIN_DATA, INSERT_TIME, MLOCK, ID) values (?, ?, ?, ?)
07...@15:31:55 DEBUG (GeronimoLog.java:66) - insert into LARGE_DATA
(BIN_DATA, INSERT_TIME, MLOCK, ID) values (?, ?, ?, ?)
07...@15:31:55 DEBUG (GeronimoLog.java:66) - prepareStatement: insert into
LARGE_DATA (BIN_DATA, INSERT_TIME, MLOCK, ID) values (?, ?, ?, ?)
07...@15:31:55 DEBUG (GeronimoLog.java:66) - insert into LARGE_DATA
(BIN_DATA, INSERT_TIME, MLOCK, ID) values (?, ?, ?, ?)
07...@15:31:55 DEBUG (GeronimoLog.java:66) - prepareStatement: insert into
LARGE_DATA (BIN_DATA, INSERT_TIME, MLOCK, ID) values (?, ?, ?, ?)
07...@15:31:55 DEBUG (GeronimoLog.java:66) - insert into LARGE_DATA
(BIN_DATA, INSERT_TIME, MLOCK, ID) values (?, ?, ?, ?)
07...@15:31:55 DEBUG (GeronimoLog.java:66) - prepareStatement: insert into
LARGE_DATA (BIN_DATA, INSERT_TIME, MLOCK, ID) values (?, ?, ?, ?)
07...@15:31:55 DEBUG (GeronimoLog.java:66) - insert into LARGE_DATA
(BIN_DATA, INSERT_TIME, MLOCK, ID) values (?, ?, ?, ?)
07...@15:31:55 DEBUG (GeronimoLog.java:66) - prepareStatement: insert into
LARGE_DATA (BIN_DATA, INSERT_TIME, MLOCK, ID) values (?, ?, ?, ?)
07...@15:31:55 DEBUG (GeronimoLog.java:66) - insert into LARGE_DATA
(BIN_DATA, INSERT_TIME, MLOCK, ID) values (?, ?, ?, ?)
07...@15:31:55 DEBUG (GeronimoLog.java:66) - prepareStatement: insert into
LARGE_DATA (BIN_DATA, INSERT_TIME, MLOCK, ID) values (?, ?, ?, ?)
07...@15:31:55 DEBUG (GeronimoLog.java:66) - insert into LARGE_DATA
(BIN_DATA, INSERT_TIME, MLOCK, ID) values (?, ?, ?, ?)
07...@15:31:55 DEBUG (GeronimoLog.java:66) - prepareStatement: insert into
LARGE_DATA (BIN_DATA, INSERT_TIME, MLOCK, ID) values (?, ?, ?, ?)
07...@15:31:56 DEBUG (GeronimoLog.java:66) - insert into LARGE_DATA
(BIN_DATA, INSERT_TIME, MLOCK, ID) values (?, ?, ?, ?)
07...@15:31:56 DEBUG (GeronimoLog.java:66) - prepareStatement: insert into
LARGE_DATA (BIN_DATA, INSERT_TIME, MLOCK, ID) values (?, ?, ?, ?)
07...@15:31:56 DEBUG (GeronimoLog.java:66) - insert into LARGE_DATA
(BIN_DATA, INSERT_TIME, MLOCK, ID) values (?, ?, ?, ?)
07...@15:31:56 DEBUG (GeronimoLog.java:66) - prepareStatement: insert into
LARGE_DATA (BIN_DATA, INSERT_TIME, MLOCK, ID) values (?, ?, ?, ?)
07...@15:31:56 DEBUG (GeronimoLog.java:66) - insert into LARGE_DATA
(BIN_DATA, INSERT_TIME, MLOCK, ID) values (?, ?, ?, ?)
07...@15:31:56 DEBUG (GeronimoLog.java:66) - prepareStatement: insert into
LARGE_DATA (BIN_DATA, INSERT_TIME, MLOCK, ID) values (?, ?, ?, ?)
07...@15:31:56 DEBUG (GeronimoLog.java:66) - Commiting on
org.apache.geronimo.transaction.manager.geronimotransactionmana...@10b755d...
07...@15:31:56 DEBUG (GeronimoLog.java:66) - insert into LARGE_DATA
(BIN_DATA, INSERT_TIME, MLOCK, ID) values (?, ?, ?, ?)
07...@15:31:56 DEBUG (GeronimoLog.java:66) - prepareStatement: insert into
LARGE_DATA (BIN_DATA, INSERT_TIME, MLOCK, ID) values (?, ?, ?, ?)
07...@15:31:56 DEBUG (GeronimoLog.java:66) - insert into LARGE_DATA
(BIN_DATA, INSERT_TIME, MLOCK, ID) values (?, ?, ?, ?)
Here, in each copy operation Hibernate flushes dirty records to database,
because of sql query for variable.
for ODE-trunk:
07...@16:17:10 DEBUG (AbstractEntityPersister.java:2777) - Insert 0:
insert into LARGE_DATA (BIN_DATA, INSERT_TIME, MLOCK, ID) values (?, ?, ?, ?)
07...@16:17:14 DEBUG (SimpleScheduler.java:155) - Beginning a new
transaction
07...@16:17:15 DEBUG (SimpleScheduler.java:170) - Commiting...
07...@16:17:15 DEBUG (SimpleScheduler.java:155) - Beginning a new
transaction
07...@16:17:15 DEBUG (SimpleScheduler.java:170) - Commiting...
07...@16:17:18 DEBUG (SQLStatementLogger.java:111) - insert into
LARGE_DATA (BIN_DATA, INSERT_TIME, MLOCK, ID) values (?, ?, ?, ?)
07...@16:17:18 DEBUG (LoggingInterceptor.java:148) - prepareStmt: insert
into LARGE_DATA (BIN_DATA, INSERT_TIME, MLOCK, ID) values (?, ?, ?, ?)
07...@16:17:18 DEBUG (SQLStatementLogger.java:111) - insert into
LARGE_DATA (BIN_DATA, INSERT_TIME, MLOCK, ID) values (?, ?, ?, ?)
07...@16:17:18 DEBUG (LoggingInterceptor.java:148) - prepareStmt: insert
into LARGE_DATA (BIN_DATA, INSERT_TIME, MLOCK, ID) values (?, ?, ?, ?)
07...@16:17:19 DEBUG (SQLStatementLogger.java:111) - insert into
LARGE_DATA (BIN_DATA, INSERT_TIME, MLOCK, ID) values (?, ?, ?, ?)
07...@16:17:19 DEBUG (LoggingInterceptor.java:148) - prepareStmt: insert
into LARGE_DATA (BIN_DATA, INSERT_TIME, MLOCK, ID) values (?, ?, ?, ?)
07...@16:17:19 DEBUG (SQLStatementLogger.java:111) - insert into
LARGE_DATA (BIN_DATA, INSERT_TIME, MLOCK, ID) values (?, ?, ?, ?)
07...@16:17:19 DEBUG (LoggingInterceptor.java:148) - prepareStmt: insert
into LARGE_DATA (BIN_DATA, INSERT_TIME, MLOCK, ID) values (?, ?, ?, ?)
07...@16:17:19 DEBUG (SQLStatementLogger.java:111) - insert into
LARGE_DATA (BIN_DATA, INSERT_TIME, MLOCK, ID) values (?, ?, ?, ?)
07...@16:17:19 DEBUG (LoggingInterceptor.java:148) - prepareStmt: insert
into LARGE_DATA (BIN_DATA, INSERT_TIME, MLOCK, ID) values (?, ?, ?, ?)
07...@16:17:19 DEBUG (SQLStatementLogger.java:111) - insert into
LARGE_DATA (BIN_DATA, INSERT_TIME, MLOCK, ID) values (?, ?, ?, ?)
07...@16:17:19 DEBUG (LoggingInterceptor.java:148) - prepareStmt: insert
into LARGE_DATA (BIN_DATA, INSERT_TIME, MLOCK, ID) values (?, ?, ?, ?)
07...@16:17:19 DEBUG (SQLStatementLogger.java:111) - insert into
LARGE_DATA (BIN_DATA, INSERT_TIME, MLOCK, ID) values (?, ?, ?, ?)
07...@16:17:19 DEBUG (LoggingInterceptor.java:148) - prepareStmt: insert
into LARGE_DATA (BIN_DATA, INSERT_TIME, MLOCK, ID) values (?, ?, ?, ?)
07...@16:17:19 DEBUG (SQLStatementLogger.java:111) - insert into
LARGE_DATA (BIN_DATA, INSERT_TIME, MLOCK, ID) values (?, ?, ?, ?)
07...@16:17:19 DEBUG (LoggingInterceptor.java:148) - prepareStmt: insert
into LARGE_DATA (BIN_DATA, INSERT_TIME, MLOCK, ID) values (?, ?, ?, ?)
07...@16:17:20 DEBUG (SQLStatementLogger.java:111) - insert into
LARGE_DATA (BIN_DATA, INSERT_TIME, MLOCK, ID) values (?, ?, ?, ?)
07...@16:17:20 DEBUG (LoggingInterceptor.java:148) - prepareStmt: insert
into LARGE_DATA (BIN_DATA, INSERT_TIME, MLOCK, ID) values (?, ?, ?, ?)
07...@16:17:20 DEBUG (SQLStatementLogger.java:111) - insert into
LARGE_DATA (BIN_DATA, INSERT_TIME, MLOCK, ID) values (?, ?, ?, ?)
07...@16:17:20 DEBUG (LoggingInterceptor.java:148) - prepareStmt: insert
into LARGE_DATA (BIN_DATA, INSERT_TIME, MLOCK, ID) values (?, ?, ?, ?)
07...@16:17:20 DEBUG (SQLStatementLogger.java:111) - insert into
LARGE_DATA (BIN_DATA, INSERT_TIME, MLOCK, ID) values (?, ?, ?, ?)
07...@16:17:20 DEBUG (LoggingInterceptor.java:148) - prepareStmt: insert
into LARGE_DATA (BIN_DATA, INSERT_TIME, MLOCK, ID) values (?, ?, ?, ?)
07...@16:17:20 DEBUG (SQLStatementLogger.java:111) - insert into
LARGE_DATA (BIN_DATA, INSERT_TIME, MLOCK, ID) values (?, ?, ?, ?)
07...@16:17:20 DEBUG (LoggingInterceptor.java:148) - prepareStmt: insert
into LARGE_DATA (BIN_DATA, INSERT_TIME, MLOCK, ID) values (?, ?, ?, ?)
07...@16:17:20 DEBUG (SQLStatementLogger.java:111) - insert into
LARGE_DATA (BIN_DATA, INSERT_TIME, MLOCK, ID) values (?, ?, ?, ?)
07...@16:17:20 DEBUG (LoggingInterceptor.java:148) - prepareStmt: insert
into LARGE_DATA (BIN_DATA, INSERT_TIME, MLOCK, ID) values (?, ?, ?, ?)
07...@16:17:20 DEBUG (SQLStatementLogger.java:111) - insert into
LARGE_DATA (BIN_DATA, INSERT_TIME, MLOCK, ID) values (?, ?, ?, ?)
07...@16:17:20 DEBUG (LoggingInterceptor.java:148) - prepareStmt: insert
into LARGE_DATA (BIN_DATA, INSERT_TIME, MLOCK, ID) values (?, ?, ?, ?)
07...@16:17:20 DEBUG (SQLStatementLogger.java:111) - insert into
LARGE_DATA (BIN_DATA, INSERT_TIME, MLOCK, ID) values (?, ?, ?, ?)
07...@16:17:20 DEBUG (LoggingInterceptor.java:148) - prepareStmt: insert
into LARGE_DATA (BIN_DATA, INSERT_TIME, MLOCK, ID) values (?, ?, ?, ?)
07...@16:17:20 DEBUG (SQLStatementLogger.java:111) - insert into
LARGE_DATA (BIN_DATA, INSERT_TIME, MLOCK, ID) values (?, ?, ?, ?)
07...@16:17:20 DEBUG (LoggingInterceptor.java:148) - prepareStmt: insert
into LARGE_DATA (BIN_DATA, INSERT_TIME, MLOCK, ID) values (?, ?, ?, ?)
07...@16:17:21 DEBUG (SQLStatementLogger.java:111) - insert into
LARGE_DATA (BIN_DATA, INSERT_TIME, MLOCK, ID) values (?, ?, ?, ?)
07...@16:17:21 DEBUG (LoggingInterceptor.java:148) - prepareStmt: insert
into LARGE_DATA (BIN_DATA, INSERT_TIME, MLOCK, ID) values (?, ?, ?, ?)
07...@16:17:21 DEBUG (SQLStatementLogger.java:111) - insert into
LARGE_DATA (BIN_DATA, INSERT_TIME, MLOCK, ID) values (?, ?, ?, ?)
07...@16:17:21 DEBUG (LoggingInterceptor.java:148) - prepareStmt: insert
into LARGE_DATA (BIN_DATA, INSERT_TIME, MLOCK, ID) values (?, ?, ?, ?)
07...@16:17:21 DEBUG (SQLStatementLogger.java:111) - insert into
LARGE_DATA (BIN_DATA, INSERT_TIME, MLOCK, ID) values (?, ?, ?, ?)
07...@16:17:21 DEBUG (LoggingInterceptor.java:148) - prepareStmt: insert
into LARGE_DATA (BIN_DATA, INSERT_TIME, MLOCK, ID) values (?, ?, ?, ?)
07...@16:17:21 DEBUG (SQLStatementLogger.java:111) - insert into
LARGE_DATA (BIN_DATA, INSERT_TIME, MLOCK, ID) values (?, ?, ?, ?)
07...@16:17:21 DEBUG (LoggingInterceptor.java:148) - prepareStmt: insert
into LARGE_DATA (BIN_DATA, INSERT_TIME, MLOCK, ID) values (?, ?, ?, ?)
07...@16:17:21 DEBUG (SQLStatementLogger.java:111) - insert into
LARGE_DATA (BIN_DATA, INSERT_TIME, MLOCK, ID) values (?, ?, ?, ?)
07...@16:17:21 DEBUG (LoggingInterceptor.java:148) - prepareStmt: insert
into LARGE_DATA (BIN_DATA, INSERT_TIME, MLOCK, ID) values (?, ?, ?, ?)
07...@16:17:21 DEBUG (SQLStatementLogger.java:111) - insert into
LARGE_DATA (BIN_DATA, INSERT_TIME, MLOCK, ID) values (?, ?, ?, ?)
07...@16:17:21 DEBUG (LoggingInterceptor.java:148) - prepareStmt: insert
into LARGE_DATA (BIN_DATA, INSERT_TIME, MLOCK, ID) values (?, ?, ?, ?)
07...@16:17:21 DEBUG (SQLStatementLogger.java:111) - insert into
LARGE_DATA (BIN_DATA, INSERT_TIME, MLOCK, ID) values (?, ?, ?, ?)
07...@16:17:21 DEBUG (LoggingInterceptor.java:148) - prepareStmt: insert
into LARGE_DATA (BIN_DATA, INSERT_TIME, MLOCK, ID) values (?, ?, ?, ?)
07...@16:17:22 DEBUG (SQLStatementLogger.java:111) - insert into
LARGE_DATA (BIN_DATA, INSERT_TIME, MLOCK, ID) values (?, ?, ?, ?)
07...@16:17:22 DEBUG (LoggingInterceptor.java:148) - prepareStmt: insert
into LARGE_DATA (BIN_DATA, INSERT_TIME, MLOCK, ID) values (?, ?, ?, ?)
07...@16:17:22 DEBUG (SQLStatementLogger.java:111) - insert into
LARGE_DATA (BIN_DATA, INSERT_TIME, MLOCK, ID) values (?, ?, ?, ?)
07...@16:17:22 DEBUG (LoggingInterceptor.java:148) - prepareStmt: insert
into LARGE_DATA (BIN_DATA, INSERT_TIME, MLOCK, ID) values (?, ?, ?, ?)
07...@16:17:22 DEBUG (SQLStatementLogger.java:111) - insert into
LARGE_DATA (BIN_DATA, INSERT_TIME, MLOCK, ID) values (?, ?, ?, ?)
07...@16:17:22 DEBUG (LoggingInterceptor.java:148) - prepareStmt: insert
into LARGE_DATA (BIN_DATA, INSERT_TIME, MLOCK, ID) values (?, ?, ?, ?)
07...@16:17:22 DEBUG (SQLStatementLogger.java:111) - insert into
LARGE_DATA (BIN_DATA, INSERT_TIME, MLOCK, ID) values (?, ?, ?, ?)
Here's somewhat better, because inserts are done after commit, but still
there's to lot of them.
--
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.