Am 4. September 2020 08:50:08 MESZ schrieb Philippe Mouawad 
<p.moua...@ubik-ingenierie.com>:
>On Fri, Sep 4, 2020 at 8:43 AM Felix Schumacher <
>felix.schumac...@internetallee.de> wrote:
>
>>
>> Am 03.09.20 um 22:00 schrieb Philippe Mouawad:
>> > Hello Felix,
>> >
>> > Thanks for answer, just 2 notes:
>> >
>> >    - I guess rollback should be named commit (just a matter of
>naming)
>> >    - More important, do we need to put a "commit"  in Query for 
>Query
>> >    Type: Commit, reading the code I am not sure text is used  ?:
>> >       -
>> >
>>
>https://github.com/apache/jmeter/blob/master/src/protocol/jdbc/src/main/java/org/apache/jmeter/protocol/jdbc/AbstractJDBCTestElement.java#L224
>>
>>
>> I am not sure, what you mean by this. In my example, I used rollback
>> instead of commit, as I think it shows the way the samplers work more
>> nicely.
>>
>Just that the name of the element is rollback and Query Type is commit.

Hm. Maybe I changed the type to test the commit case and used that in my mail. 
Wasn't my intention. I wanted to show rollback. Sorry for the confusion. 

>
>>
>> The OP wanted to have commit, so my comment (... (or commit) ...) was
>a
>> placeholder to show, where the type has to be changed (and the name
>of
>> the sampler should be changed, too).
>>
>ok
>
>>
>> I think the documentation could be made clearer, that the special
>types
>> commit, rollback, autocommit(true) and autocommit(false) are really
>that
>> (special) and will ignore the given content of the sql statements.
>
>
>I agree
>
>> And
>> while we are at it, the sql field could be disabled when the special
>> types are selected.
>>
>As it's a Generic TestBeanGU I am afraid it might not be that easy to
>do
>

Right

>>
>> For the OP the most important take away is probably, that
>> autocommit(false) switches the current connection into transaction
>mode,
>> that has to be either committed or rollbacked and that the type to
>use
>> in his scenario would have been "commit" AND that the sql statement
>in
>> the special typed samplers are ignored.
>>
>> The "begin; create ...; commit" as init sql -- in my example -- was
>> needed, as the connections are initialized in transaction mode
>> (autocommit(false)) and I really wanted to create the table.
>>
>
>Yes very clear, I didn't say anything about that

It wasn't clear to me, neither. 

Felix 

>Thanks
>
>>
>> Felix
>>
>>
>> >
>> >
>> > Regards
>> >
>> > On Thu, Sep 3, 2020 at 9:33 PM Felix Schumacher <
>> > felix.schumac...@internetallee.de> wrote:
>> >
>> >> Am 03.09.20 um 18:16 schrieb Brian Flowers:
>> >>> Hi everyone,
>> >>>
>> >>> I'm having some issues using JMeter to insert some records in a
>MariaDB
>> >>> database with autocommit disabled (the idea being that we want to
>> commit
>> >>> every ~1000 records, not after each one).
>> >>>
>> >>> Did some searches and couldn't find any documentation or
>tutorials
>> >>> explaining this...I got desperate enough to ask on StackOverflow
>:) but
>> >>> the only response so far seems to indicate that I'm configuring
>it
>> >>> correctly:
>> >>>
>https://stackoverflow.com/questions/63713516/jmeter-jdbc-manual-commit
>> >>>
>> >>> I started with JMeter 3.2 connecting via the mysql connector
>version
>> >>> 5.1.27 as that's what we already had...I realize those are pretty
>old,
>> >>> so I did try upgrading, but got the same results. Tried on JMeter
>5.3
>> >>> with mysql connector 8.0.21, and also with the dedicated mariadb
>> >>> connector version 2.11.3 (all connectors from the Maven
>repository).
>> >>> With auto commit true, any combination of those versions works
>fine.
>> >>> With auto commit false, I can't get my data committed on any of
>them.
>> >>>
>> >>> What I have set up right now is a thread group with one thread,
>than
>> >>> contains a JDBC request with a single INSERT statement, using a
>couple
>> >>> variables that it takes from a csv data set and a counter, on a
>> constant
>> >>> throughput timer, and I'm using the loop count in the thread
>group to
>> >>> control the number of records inserted. When I have auto commit
>set to
>> >>> true in the JDBC configuration, the records all get inserted just
>fine.
>> >>> But when I turn auto commit off, I can't get those statements
>> committed.
>> >>> I set the JDBC request query type to "AutoCommit(false)" instead
>of
>> >>> "Update Statement", then I added a second JDBC request on the
>same
>> >>> configuration with request type of "Commit". In the results tree
>I can
>> >>> see a commit statement following each insert statement with no
>errors,
>> >>> but the records don't actually get committed in the DB. I tried
>adding
>> >>> the commit inside the original JDBC request (just to see if
>that'd
>> work)
>> >>> but that gave a SQL error; I tried adding a commit post processor
>> within
>> >>> the main JDBC request, but no luck there. I tried adding a
>> pre-processor
>> >>> to open a transaction, assuming that it wasn't including the
>commit and
>> >>> the insert on the same transaction, but no change with that. I
>tried
>> >>> configuration transaction isolation as DEFAULT or as
>> >>> TRANSACTION_SERIALIZABLE but that had no apparent effect either.
>> >>>
>> >>> So...how do I manually commit an insert statement on a mariaDB
>> database?
>> >>> Or what else can I check to try to diagnose exactly what is going
>on
>> >>> here? Are there any resources or documentation about exactly how
>to use
>> >>> the autocommit setting?
>> >> I have (tried) to attach a minimal test plan, that works for me.
>It was
>> >> tested with a MariaDB in a docker instance, that I started with
>> >>
>> >>  $ docker run --rm -p 3306:3306 -e
>MYSQL_ROOT_PASSWORD=my-secret-pw -ti
>> >> mariadb
>> >>
>> >> I then added  a database named db to it with a mysql client
>> >>
>> >>  $ docker exec  mydb /bin/bash -c 'echo "create database db;" |
>mysql
>> >> --password=my-secret-pw'
>> >>
>> >> In the test plan I have one thread group with one thread. It
>contains a
>> >> jdbc config which has set autocommit to false and a name of db. I
>used a
>> >> init sql statement to create a table:
>> >>
>> >> begin; create table if not exists person (id int, name text);
>commit;
>> >>
>> >> and filled in the database connection parameters
>> >>
>> >> url: jdbc:mysql://localhost:3306/db
>> >> driver class: com.mysql.jdbc.Driver
>> >> username: root
>> >> password: my-secret-pw
>> >>
>> >> (Oh, and don't forget to add the driver jar somewhere JMeter can
>find it
>> >> ;))
>> >>
>> >> Now, for the logic I added loop controller named loop and placed
>an jdbc
>> >> sampler into it.
>> >>
>> >> That sampler was named "insert data" and had set the auto commit
>field
>> >> set to false. Its type was prepared update statement and the query
>was
>> >> "insert into person values (?, ?)". Parameter values and types
>were
>> >>
>${__jm__loop__idx},${__RandomString(10,abcdefghijklmnopqrstuvwxyz,)}
>and
>> >> INTEGER,VARCHAR.
>> >>
>> >> After the loop I verified that the transaction had all the data
>with a
>> >> jdbc sampler named "view data", that had the type set to select
>> >> statement and the query "select * from person".
>> >>
>> >> Now to rollback (or commit), I used another jdbc sampler called
>"roll
>> >> back" with a query type of "Rollback".
>> >>
>> >> To verify that rollback worked. I added a last jdbc sampler named
>"view
>> >> data (again)" with the same type and statement as "view data".
>> >>
>> >> As I wanted to see all those requests and their responses, I added
>a
>> >> tree results view.
>> >>
>> >> So, reading your message correctly, I think you want to try
>changing the
>> >> query type of your statements back to update/select and adding a
>commit
>> >> typed query every once in a while.
>> >>
>> >> Felix
>> >>
>> >>> Thanks!
>> >>> Brian Flowers
>> >>> jmeter-s...@bsflowers.net
>> >>>
>> >>>
>> >>>
>---------------------------------------------------------------------
>> >>> To unsubscribe, e-mail: user-unsubscr...@jmeter.apache.org
>> >>> For additional commands, e-mail: user-h...@jmeter.apache.org
>> >>>
>> >>
>---------------------------------------------------------------------
>> >> To unsubscribe, e-mail: user-unsubscr...@jmeter.apache.org
>> >> For additional commands, e-mail: user-h...@jmeter.apache.org
>> >
>> >
>>

---------------------------------------------------------------------
To unsubscribe, e-mail: user-unsubscr...@jmeter.apache.org
For additional commands, e-mail: user-h...@jmeter.apache.org

Reply via email to