You are viewing a plain text version of this content. The canonical link for it is here.
Posted to user@phoenix.apache.org by F21 <f2...@gmail.com> on 2016/04/01 06:25:11 UTC

Phoenix transactions not committing.

As I mentioned about a week ago, I am working on a golang client using 
protobuf serialization with the phoenix query server. I have 
successfully dealt with the serialization of requests and responses.

However, I am trying to commit a transaction and just doesn't seem to 
commit.

Here's what I am doing (I am not including the WireMessage message that 
wraps the requests/responses for brevity):

I have a table called "my_table", created by running this sql in 
Squirrel SQL: CREATE TABLE my_table (k BIGINT PRIMARY KEY, v VARCHAR) 
TRANSACTIONAL=true

OpenConnectionRequest {
   connection_id: "myconnectionid"
}

statementID = CreateStatementRequest {
   connection_id: "myconnectionid"
}

PrepareAndExecuteRequest {
   connection_id : "myconnectionid"
   statement_id = statementID
   sql = " UPSERT INTO my_table VALUES (1,'A')"
}

CommitRequest {
   connection_id: "myconnectionid"
}

After sending the commands to the query service, I executed "SELECT * 
FROM my_table" in Squirrel SQL, but I do not see any records. There also 
doesn't seem to be anything interesting in the tephra or hbase master logs.

What is causing this problem?

Re: Phoenix transactions not committing.

Posted by Josh Elser <jo...@gmail.com>.
If you invoked a commit on PQS, it should have flushed any cached values 
to HBase. The general messages you described in your initial post look 
correct at a glance.

If you have an end-to-end example of this that I can play with, I can 
help explain what's happening inside of PQS. If you want to figure it 
out yourself, I'd recommend attaching a remote debugger to the 
QueryServer and stopping it inside of the class JdbcMeta in Avatica's 
codebase (you should see a method in there corresponding to the request 
you sent).

F21 wrote:
> @James Taylor:
>
> I was unable to reproduce the problem today after extensive testing. I
> think the problem is probably due to SquirrelSQL and not the query
> server. Not familiar with the thin-client and SquirrelSQL, but does it
> do any caching?
>
> On 3/04/2016 5:12 AM, James Taylor wrote:
>> Glad you have a work around. Would you mind filing a Calcite bug for
>> the Avatica component after you finish your testing?
>>
>> Thanks,
>> James
>>
>> On Sat, Apr 2, 2016 at 4:10 AM, F21 <f21.groups@gmail.com
>> <ma...@gmail.com>> wrote:
>>
>>     I was able to successfully commit a transaction if I set the
>>     serialization of the phoenix query server to JSON.
>>
>>     I will test more with protobufs and report back.
>>
>>     On 2/04/2016 1:11 AM, Steve Terrell wrote:
>>>     You might try looking up previous emails from me in this mailing
>>>     list.  I had some problems doing commits when using the thin
>>>     client and Phoenix 4.6.0.
>>>
>>>     Hope this helps,
>>>         Steve
>>>
>>>     On Thu, Mar 31, 2016 at 11:25 PM, F21
>>>     <<m...@gmail.com> wrote:
>>>
>>>         As I mentioned about a week ago, I am working on a golang
>>>         client using protobuf serialization with the phoenix query
>>>         server. I have successfully dealt with the serialization of
>>>         requests and responses.
>>>
>>>         However, I am trying to commit a transaction and just doesn't
>>>         seem to commit.
>>>
>>>         Here's what I am doing (I am not including the WireMessage
>>>         message that wraps the requests/responses for brevity):
>>>
>>>         I have a table called "my_table", created by running this sql
>>>         in Squirrel SQL: CREATE TABLE my_table (k BIGINT PRIMARY KEY,
>>>         v VARCHAR) TRANSACTIONAL=true
>>>
>>>         OpenConnectionRequest {
>>>           connection_id: "myconnectionid"
>>>         }
>>>
>>>         statementID = CreateStatementRequest {
>>>           connection_id: "myconnectionid"
>>>         }
>>>
>>>         PrepareAndExecuteRequest {
>>>           connection_id : "myconnectionid"
>>>           statement_id = statementID
>>>           sql = " UPSERT INTO my_table VALUES (1,'A')"
>>>         }
>>>
>>>         CommitRequest {
>>>           connection_id: "myconnectionid"
>>>         }
>>>
>>>         After sending the commands to the query service, I executed
>>>         "SELECT * FROM my_table" in Squirrel SQL, but I do not see
>>>         any records. There also doesn't seem to be anything
>>>         interesting in the tephra or hbase master logs.
>>>
>>>         What is causing this problem?
>>>
>>>
>>
>>
>

Re: Phoenix transactions not committing.

Posted by F21 <f2...@gmail.com>.
@James Taylor:

I was unable to reproduce the problem today after extensive testing. I 
think the problem is probably due to SquirrelSQL and not the query 
server. Not familiar with the thin-client and SquirrelSQL, but does it 
do any caching?

On 3/04/2016 5:12 AM, James Taylor wrote:
> Glad you have a work around. Would you mind filing a Calcite bug for 
> the Avatica component after you finish your testing?
>
> Thanks,
> James
>
> On Sat, Apr 2, 2016 at 4:10 AM, F21 <f21.groups@gmail.com 
> <ma...@gmail.com>> wrote:
>
>     I was able to successfully commit a transaction if I set the
>     serialization of the phoenix query server to JSON.
>
>     I will test more with protobufs and report back.
>
>     On 2/04/2016 1:11 AM, Steve Terrell wrote:
>>     You might try looking up previous emails from me in this mailing
>>     list.  I had some problems doing commits when using the thin
>>     client and Phoenix 4.6.0.
>>
>>     Hope this helps,
>>         Steve
>>
>>     On Thu, Mar 31, 2016 at 11:25 PM, F21 <f21.groups@gmail.com
>>     <ma...@gmail.com>> wrote:
>>
>>         As I mentioned about a week ago, I am working on a golang
>>         client using protobuf serialization with the phoenix query
>>         server. I have successfully dealt with the serialization of
>>         requests and responses.
>>
>>         However, I am trying to commit a transaction and just doesn't
>>         seem to commit.
>>
>>         Here's what I am doing (I am not including the WireMessage
>>         message that wraps the requests/responses for brevity):
>>
>>         I have a table called "my_table", created by running this sql
>>         in Squirrel SQL: CREATE TABLE my_table (k BIGINT PRIMARY KEY,
>>         v VARCHAR) TRANSACTIONAL=true
>>
>>         OpenConnectionRequest {
>>           connection_id: "myconnectionid"
>>         }
>>
>>         statementID = CreateStatementRequest {
>>           connection_id: "myconnectionid"
>>         }
>>
>>         PrepareAndExecuteRequest {
>>           connection_id : "myconnectionid"
>>           statement_id = statementID
>>           sql = " UPSERT INTO my_table VALUES (1,'A')"
>>         }
>>
>>         CommitRequest {
>>           connection_id: "myconnectionid"
>>         }
>>
>>         After sending the commands to the query service, I executed
>>         "SELECT * FROM my_table" in Squirrel SQL, but I do not see
>>         any records. There also doesn't seem to be anything
>>         interesting in the tephra or hbase master logs.
>>
>>         What is causing this problem?
>>
>>
>
>


Re: Phoenix transactions not committing.

Posted by James Taylor <ja...@apache.org>.
Glad you have a work around. Would you mind filing a Calcite bug for the
Avatica component after you finish your testing?

Thanks,
James

On Sat, Apr 2, 2016 at 4:10 AM, F21 <f2...@gmail.com> wrote:

> I was able to successfully commit a transaction if I set the serialization
> of the phoenix query server to JSON.
>
> I will test more with protobufs and report back.
>
> On 2/04/2016 1:11 AM, Steve Terrell wrote:
>
> You might try looking up previous emails from me in this mailing list.  I
> had some problems doing commits when using the thin client and Phoenix
> 4.6.0.
>
> Hope this helps,
>     Steve
>
> On Thu, Mar 31, 2016 at 11:25 PM, F21 <f2...@gmail.com> wrote:
>
>> As I mentioned about a week ago, I am working on a golang client using
>> protobuf serialization with the phoenix query server. I have successfully
>> dealt with the serialization of requests and responses.
>>
>> However, I am trying to commit a transaction and just doesn't seem to
>> commit.
>>
>> Here's what I am doing (I am not including the WireMessage message that
>> wraps the requests/responses for brevity):
>>
>> I have a table called "my_table", created by running this sql in Squirrel
>> SQL: CREATE TABLE my_table (k BIGINT PRIMARY KEY, v VARCHAR)
>> TRANSACTIONAL=true
>>
>> OpenConnectionRequest {
>>   connection_id: "myconnectionid"
>> }
>>
>> statementID = CreateStatementRequest {
>>   connection_id: "myconnectionid"
>> }
>>
>> PrepareAndExecuteRequest {
>>   connection_id : "myconnectionid"
>>   statement_id = statementID
>>   sql = " UPSERT INTO my_table VALUES (1,'A')"
>> }
>>
>> CommitRequest {
>>   connection_id: "myconnectionid"
>> }
>>
>> After sending the commands to the query service, I executed "SELECT *
>> FROM my_table" in Squirrel SQL, but I do not see any records. There also
>> doesn't seem to be anything interesting in the tephra or hbase master logs.
>>
>> What is causing this problem?
>>
>
>
>

Re: Phoenix transactions not committing.

Posted by F21 <f2...@gmail.com>.
I was able to successfully commit a transaction if I set the 
serialization of the phoenix query server to JSON.

I will test more with protobufs and report back.

On 2/04/2016 1:11 AM, Steve Terrell wrote:
> You might try looking up previous emails from me in this mailing 
> list.  I had some problems doing commits when using the thin client 
> and Phoenix 4.6.0.
>
> Hope this helps,
>     Steve
>
> On Thu, Mar 31, 2016 at 11:25 PM, F21 <f21.groups@gmail.com 
> <ma...@gmail.com>> wrote:
>
>     As I mentioned about a week ago, I am working on a golang client
>     using protobuf serialization with the phoenix query server. I have
>     successfully dealt with the serialization of requests and responses.
>
>     However, I am trying to commit a transaction and just doesn't seem
>     to commit.
>
>     Here's what I am doing (I am not including the WireMessage message
>     that wraps the requests/responses for brevity):
>
>     I have a table called "my_table", created by running this sql in
>     Squirrel SQL: CREATE TABLE my_table (k BIGINT PRIMARY KEY, v
>     VARCHAR) TRANSACTIONAL=true
>
>     OpenConnectionRequest {
>       connection_id: "myconnectionid"
>     }
>
>     statementID = CreateStatementRequest {
>       connection_id: "myconnectionid"
>     }
>
>     PrepareAndExecuteRequest {
>       connection_id : "myconnectionid"
>       statement_id = statementID
>       sql = " UPSERT INTO my_table VALUES (1,'A')"
>     }
>
>     CommitRequest {
>       connection_id: "myconnectionid"
>     }
>
>     After sending the commands to the query service, I executed
>     "SELECT * FROM my_table" in Squirrel SQL, but I do not see any
>     records. There also doesn't seem to be anything interesting in the
>     tephra or hbase master logs.
>
>     What is causing this problem?
>
>


Re: Phoenix transactions not committing.

Posted by F21 <f2...@gmail.com>.
Hey Steve,

Thanks for your reply. I am using Phoenix 4.7.0 so these problem to be 
fixed. Anyway, I did some more tests and noticed that the transactions 
were timing out:

2016-04-02 09:58:28,189 INFO  [tx-clean-timeout] 
tephra.TransactionManager: Tx invalid list: added tx 1459591047079000000 
because of timeout
2016-04-02 09:58:28,189 INFO  [tx-clean-timeout] 
tephra.TransactionManager: Invalidated 1 transactions due to timeout.

On 2/04/2016 1:11 AM, Steve Terrell wrote:
> You might try looking up previous emails from me in this mailing 
> list.  I had some problems doing commits when using the thin client 
> and Phoenix 4.6.0.
>
> Hope this helps,
>     Steve
>
> On Thu, Mar 31, 2016 at 11:25 PM, F21 <f21.groups@gmail.com 
> <ma...@gmail.com>> wrote:
>
>     As I mentioned about a week ago, I am working on a golang client
>     using protobuf serialization with the phoenix query server. I have
>     successfully dealt with the serialization of requests and responses.
>
>     However, I am trying to commit a transaction and just doesn't seem
>     to commit.
>
>     Here's what I am doing (I am not including the WireMessage message
>     that wraps the requests/responses for brevity):
>
>     I have a table called "my_table", created by running this sql in
>     Squirrel SQL: CREATE TABLE my_table (k BIGINT PRIMARY KEY, v
>     VARCHAR) TRANSACTIONAL=true
>
>     OpenConnectionRequest {
>       connection_id: "myconnectionid"
>     }
>
>     statementID = CreateStatementRequest {
>       connection_id: "myconnectionid"
>     }
>
>     PrepareAndExecuteRequest {
>       connection_id : "myconnectionid"
>       statement_id = statementID
>       sql = " UPSERT INTO my_table VALUES (1,'A')"
>     }
>
>     CommitRequest {
>       connection_id: "myconnectionid"
>     }
>
>     After sending the commands to the query service, I executed
>     "SELECT * FROM my_table" in Squirrel SQL, but I do not see any
>     records. There also doesn't seem to be anything interesting in the
>     tephra or hbase master logs.
>
>     What is causing this problem?
>
>


Re: Phoenix transactions not committing.

Posted by Steve Terrell <st...@oculus360.us>.
You might try looking up previous emails from me in this mailing list.  I
had some problems doing commits when using the thin client and Phoenix
4.6.0.

Hope this helps,
    Steve

On Thu, Mar 31, 2016 at 11:25 PM, F21 <f2...@gmail.com> wrote:

> As I mentioned about a week ago, I am working on a golang client using
> protobuf serialization with the phoenix query server. I have successfully
> dealt with the serialization of requests and responses.
>
> However, I am trying to commit a transaction and just doesn't seem to
> commit.
>
> Here's what I am doing (I am not including the WireMessage message that
> wraps the requests/responses for brevity):
>
> I have a table called "my_table", created by running this sql in Squirrel
> SQL: CREATE TABLE my_table (k BIGINT PRIMARY KEY, v VARCHAR)
> TRANSACTIONAL=true
>
> OpenConnectionRequest {
>   connection_id: "myconnectionid"
> }
>
> statementID = CreateStatementRequest {
>   connection_id: "myconnectionid"
> }
>
> PrepareAndExecuteRequest {
>   connection_id : "myconnectionid"
>   statement_id = statementID
>   sql = " UPSERT INTO my_table VALUES (1,'A')"
> }
>
> CommitRequest {
>   connection_id: "myconnectionid"
> }
>
> After sending the commands to the query service, I executed "SELECT * FROM
> my_table" in Squirrel SQL, but I do not see any records. There also doesn't
> seem to be anything interesting in the tephra or hbase master logs.
>
> What is causing this problem?
>