diff mbox

docs: remove wrong statement about bug in xenstore

Message ID 1477308437-32057-1-git-send-email-jgross@suse.com (mailing list archive)
State New, archived
Headers show

Commit Message

Juergen Gross Oct. 24, 2016, 11:27 a.m. UTC
docs/misc/xenstore.txt states that xenstored will use "0" as a valid
transaction id after 2^32 transactions. This is not true. Remove that
statement.

Signed-off-by: Juergen Gross <jgross@suse.com>
---
 docs/misc/xenstore.txt | 2 --
 1 file changed, 2 deletions(-)

Comments

Wei Liu Oct. 24, 2016, 11:41 a.m. UTC | #1
On Mon, Oct 24, 2016 at 01:27:17PM +0200, Juergen Gross wrote:
> docs/misc/xenstore.txt states that xenstored will use "0" as a valid
> transaction id after 2^32 transactions. This is not true. Remove that
> statement.
> 
> Signed-off-by: Juergen Gross <jgross@suse.com>

Can you point me to the relevant code snippet? Better still I would like
to see why it is the case in commit message.

> ---
>  docs/misc/xenstore.txt | 2 --
>  1 file changed, 2 deletions(-)
> 
> diff --git a/docs/misc/xenstore.txt b/docs/misc/xenstore.txt
> index c9f4a05..ae1b6a8 100644
> --- a/docs/misc/xenstore.txt
> +++ b/docs/misc/xenstore.txt
> @@ -229,8 +229,6 @@ TRANSACTION_START	|			<transid>|
>  	tx_id request header field.  When transaction is started whole
>  	db is copied; reads and writes happen on the copy.
>  	It is not legal to send non-0 tx_id in TRANSACTION_START.
> -	Currently xenstored has the bug that after 2^32 transactions
> -	it will allocate the transid 0 for an actual transaction.
>  
>  TRANSACTION_END		T|
>  TRANSACTION_END		F|
> -- 
> 2.6.6
>
Juergen Gross Oct. 24, 2016, 11:49 a.m. UTC | #2
On 24/10/16 13:41, Wei Liu wrote:
> On Mon, Oct 24, 2016 at 01:27:17PM +0200, Juergen Gross wrote:
>> docs/misc/xenstore.txt states that xenstored will use "0" as a valid
>> transaction id after 2^32 transactions. This is not true. Remove that
>> statement.
>>
>> Signed-off-by: Juergen Gross <jgross@suse.com>
> 
> Can you point me to the relevant code snippet? Better still I would like
> to see why it is the case in commit message.

Sure: tools/xenstore/xenstored_transaction.c

do_transaction_start():
...
        /* Pick an unused transaction identifier. */
        do {
                trans->id = conn->next_transaction_id;
                exists = transaction_lookup(conn,
conn->next_transaction_id++);
        } while (!IS_ERR(exists));

It should be noted here that conn->next_transaction_id is initialized
to be 0. So the error would occur for the first transaction, too.


Juergen

> 
>> ---
>>  docs/misc/xenstore.txt | 2 --
>>  1 file changed, 2 deletions(-)
>>
>> diff --git a/docs/misc/xenstore.txt b/docs/misc/xenstore.txt
>> index c9f4a05..ae1b6a8 100644
>> --- a/docs/misc/xenstore.txt
>> +++ b/docs/misc/xenstore.txt
>> @@ -229,8 +229,6 @@ TRANSACTION_START	|			<transid>|
>>  	tx_id request header field.  When transaction is started whole
>>  	db is copied; reads and writes happen on the copy.
>>  	It is not legal to send non-0 tx_id in TRANSACTION_START.
>> -	Currently xenstored has the bug that after 2^32 transactions
>> -	it will allocate the transid 0 for an actual transaction.
>>  
>>  TRANSACTION_END		T|
>>  TRANSACTION_END		F|
>> -- 
>> 2.6.6
>>
>
Andrew Cooper Oct. 24, 2016, 12:06 p.m. UTC | #3
On 24/10/16 12:49, Juergen Gross wrote:
> On 24/10/16 13:41, Wei Liu wrote:
>> On Mon, Oct 24, 2016 at 01:27:17PM +0200, Juergen Gross wrote:
>>> docs/misc/xenstore.txt states that xenstored will use "0" as a valid
>>> transaction id after 2^32 transactions. This is not true. Remove that
>>> statement.
>>>
>>> Signed-off-by: Juergen Gross <jgross@suse.com>
>> Can you point me to the relevant code snippet? Better still I would like
>> to see why it is the case in commit message.
> Sure: tools/xenstore/xenstored_transaction.c
>
> do_transaction_start():
> ...
>         /* Pick an unused transaction identifier. */
>         do {
>                 trans->id = conn->next_transaction_id;
>                 exists = transaction_lookup(conn,
> conn->next_transaction_id++);
>         } while (!IS_ERR(exists));
>
> It should be noted here that conn->next_transaction_id is initialized
> to be 0. So the error would occur for the first transaction, too.

Cxenstored isn't the only xenstored implementation, and I can't see
anything in the Ocaml version which mitigates this issue.  Furthermore,
because Ocaml's int is 31 bits or 63 bits, I suspect a 64bit oxenstored
will become unusable when the transaction id hits 4 billion and an a
truncation occurs when writing the id into the ring.  A 32bit oxenstored
only uses half the available transaction id space, and does wrap around
to 0.

~Andrew
Juergen Gross Oct. 24, 2016, 12:18 p.m. UTC | #4
On 24/10/16 14:06, Andrew Cooper wrote:
> On 24/10/16 12:49, Juergen Gross wrote:
>> On 24/10/16 13:41, Wei Liu wrote:
>>> On Mon, Oct 24, 2016 at 01:27:17PM +0200, Juergen Gross wrote:
>>>> docs/misc/xenstore.txt states that xenstored will use "0" as a valid
>>>> transaction id after 2^32 transactions. This is not true. Remove that
>>>> statement.
>>>>
>>>> Signed-off-by: Juergen Gross <jgross@suse.com>
>>> Can you point me to the relevant code snippet? Better still I would like
>>> to see why it is the case in commit message.
>> Sure: tools/xenstore/xenstored_transaction.c
>>
>> do_transaction_start():
>> ...
>>         /* Pick an unused transaction identifier. */
>>         do {
>>                 trans->id = conn->next_transaction_id;
>>                 exists = transaction_lookup(conn,
>> conn->next_transaction_id++);
>>         } while (!IS_ERR(exists));
>>
>> It should be noted here that conn->next_transaction_id is initialized
>> to be 0. So the error would occur for the first transaction, too.
> 
> Cxenstored isn't the only xenstored implementation, and I can't see
> anything in the Ocaml version which mitigates this issue.  Furthermore,
> because Ocaml's int is 31 bits or 63 bits, I suspect a 64bit oxenstored
> will become unusable when the transaction id hits 4 billion and an a
> truncation occurs when writing the id into the ring.  A 32bit oxenstored
> only uses half the available transaction id space, and does wrap around
> to 0.

Okay, so either oxenstored should be corrected by some ocaml capable
developer, or I can send a patch which will limit the bug statement to
oxenstored.

Such a simple to fix problem should not be just mentioned in some text
file, but it should be fixed! Leaving the text unmodified is no option
IMHO.


Juergen
Wei Liu Oct. 24, 2016, 1:02 p.m. UTC | #5
On Mon, Oct 24, 2016 at 02:18:17PM +0200, Juergen Gross wrote:
> On 24/10/16 14:06, Andrew Cooper wrote:
> > On 24/10/16 12:49, Juergen Gross wrote:
> >> On 24/10/16 13:41, Wei Liu wrote:
> >>> On Mon, Oct 24, 2016 at 01:27:17PM +0200, Juergen Gross wrote:
> >>>> docs/misc/xenstore.txt states that xenstored will use "0" as a valid
> >>>> transaction id after 2^32 transactions. This is not true. Remove that
> >>>> statement.
> >>>>
> >>>> Signed-off-by: Juergen Gross <jgross@suse.com>
> >>> Can you point me to the relevant code snippet? Better still I would like
> >>> to see why it is the case in commit message.
> >> Sure: tools/xenstore/xenstored_transaction.c
> >>
> >> do_transaction_start():
> >> ...
> >>         /* Pick an unused transaction identifier. */
> >>         do {
> >>                 trans->id = conn->next_transaction_id;
> >>                 exists = transaction_lookup(conn,
> >> conn->next_transaction_id++);
> >>         } while (!IS_ERR(exists));
> >>
> >> It should be noted here that conn->next_transaction_id is initialized
> >> to be 0. So the error would occur for the first transaction, too.
> > 
> > Cxenstored isn't the only xenstored implementation, and I can't see
> > anything in the Ocaml version which mitigates this issue.  Furthermore,
> > because Ocaml's int is 31 bits or 63 bits, I suspect a 64bit oxenstored
> > will become unusable when the transaction id hits 4 billion and an a
> > truncation occurs when writing the id into the ring.  A 32bit oxenstored
> > only uses half the available transaction id space, and does wrap around
> > to 0.
> 
> Okay, so either oxenstored should be corrected by some ocaml capable
> developer, or I can send a patch which will limit the bug statement to
> oxenstored.
> 

A patch to spell out limitation on oxenstored works for me.

Wei.
Wei Liu Oct. 26, 2016, 12:02 p.m. UTC | #6
On Mon, Oct 24, 2016 at 01:27:17PM +0200, Juergen Gross wrote:
> docs/misc/xenstore.txt states that xenstored will use "0" as a valid
> transaction id after 2^32 transactions. This is not true. Remove that
> statement.
> 
> Signed-off-by: Juergen Gross <jgross@suse.com>

Applied.
diff mbox

Patch

diff --git a/docs/misc/xenstore.txt b/docs/misc/xenstore.txt
index c9f4a05..ae1b6a8 100644
--- a/docs/misc/xenstore.txt
+++ b/docs/misc/xenstore.txt
@@ -229,8 +229,6 @@  TRANSACTION_START	|			<transid>|
 	tx_id request header field.  When transaction is started whole
 	db is copied; reads and writes happen on the copy.
 	It is not legal to send non-0 tx_id in TRANSACTION_START.
-	Currently xenstored has the bug that after 2^32 transactions
-	it will allocate the transid 0 for an actual transaction.
 
 TRANSACTION_END		T|
 TRANSACTION_END		F|