Bug #42959 Wrong logic in backup stream library when saving object metadata

Submitted: 18 Feb 2009 7:53 Modified: 30 Mar 2009 1:51
Reporter: Rafal Somla Email Updates:
Status: Closed Impact on me:
None 
Category:MySQL Server: Backup Severity:S3 (Non-critical)
Version: OS:Any
Assigned to: Rafal Somla CPU Architecture:Any

[18 Feb 2009 7:53] Rafal Somla
Description:
The following code from stream_v1.c, function bstream_wr_item_def() is incorrect:

  ret= bcat_get_item_create_query(cat,item,&query);
  if (ret == BSTREAM_OK) 
    flags |= BSTREAM_FLAG_HAS_CREATE_STMT;
  else if (ret == BSTREAM_ERROR) 
    goto wr_error;

  /* bcat_get_item_create_data not in use yet. */
  /*
  ret= bcat_get_item_create_data(cat,item,&data);
  if (ret == BSTREAM_OK)
    flags |= BSTREAM_FLAG_HAS_EXTRA_DATA;
  else if (ret == BSTREAM_ERROR) 
    goto wr_error;
  */

This is because, according to the documentation of bcat_get_item_*() function in stream_v1_services.h, return value BSTREAM_ERROR does not indicate an error, but lack of relevant piece of metadata. Thus, in case of BSTREAM_ERROR the code should not jump to wr_error but continue leaving this part of metadata empty.

Also, the call to bcat_get_item_create_data() should not be commented-out. This is a valid part of backup image and the library should support it, even though the extra metadata is not used now.

How to repeat:
Look at code in sql/backup/stream_v1.c around line 1640.

Suggested fix:
Replace the code with:

  ret= bcat_get_item_create_query(cat,item,&query);
  if (ret == BSTREAM_OK) 
    flags |= BSTREAM_FLAG_HAS_CREATE_STMT;

  ret= bcat_get_item_create_data(cat,item,&data);
  if (ret == BSTREAM_OK)
    flags |= BSTREAM_FLAG_HAS_EXTRA_DATA;
[18 Feb 2009 8:00] Bugs System
A patch for this bug has been committed. After review, it may
be pushed to the relevant source trees for release in the next
version. You can access the patch from:

  http://lists.mysql.com/commits/66716

2773 Rafal Somla	2009-02-18
      Bug#42959 - Wrong logic in backup stream library when saving object metadata
      
      Fixing the logic by removing incorrect gotos. Also uncommenting the 
      call to bcat_get_item_create_data() function.
[18 Feb 2009 8:16] Rafal Somla
This is more complicated that it seemed. In the original design functions bcat_get_item_create_{query,data}() can not report errors. But this is a wrong design - there must be a way to inform that error has happened when collecting object metadata, so that an appropriate action can be taken.
[4 Mar 2009 9:48] Bugs System
A patch for this bug has been committed. After review, it may
be pushed to the relevant source trees for release in the next
version. You can access the patch from:

  http://lists.mysql.com/commits/68190

2784 Rafal Somla	2009-03-04
      Bug#42959 - Wrong logic in backup stream library when saving object metadata
      
      Changed specification of bcat_get_item_create_*() function so that they can 
      either report error or signal that there is no data. Updated the logic in
      stream_v1.c accordingly.
[4 Mar 2009 12:55] Jørgen Løland
Good to push
[5 Mar 2009 7:23] Bugs System
A patch for this bug has been committed. After review, it may
be pushed to the relevant source trees for release in the next
version. You can access the patch from:

  http://lists.mysql.com/commits/68314

2784 Rafal Somla	2009-03-05
      Bug#42959 - Wrong logic in backup stream library when saving object metadata
      
      Changed specifications of bcat_get_item_create_*() functions so that they
      can either report error or signal that there is no data. Updated the logic
      in stream_v1.c accordingly.
[5 Mar 2009 21:17] Chuck Bell
Patch approved.
[9 Mar 2009 16:19] Bugs System
A patch for this bug has been committed. After review, it may
be pushed to the relevant source trees for release in the next
version. You can access the patch from:

  http://lists.mysql.com/commits/68683

2789 Rafal Somla	2009-03-09
      Bug#42959 - Wrong logic in backup stream library when saving object metadata
      
      Changed specifications of bcat_get_item_create_*() functions so that they
      can either report error or signal that there is no data. Updated the logic
      in stream_v1.c accordingly.
[10 Mar 2009 18:20] Bugs System
A patch for this bug has been committed. After review, it may
be pushed to the relevant source trees for release in the next
version. You can access the patch from:

  http://lists.mysql.com/commits/68813

2795 Rafal Somla	2009-03-10
      Bug#42959 - Wrong logic in backup stream library when saving object metadata
      
      Changed specifications of bcat_get_item_create_*() functions so that they
      can either report error or signal that there is no data. Updated the logic
      in stream_v1.c accordingly.
[11 Mar 2009 6:28] Rafal Somla
Pushed to mysql-6.0-backup tree.
[26 Mar 2009 12:35] Bugs System
Pushed into 6.0.11-alpha (revid:alik@sun.com-20090326121822-pt84kzxxayzho4mn) (version source revid:charles.bell@sun.com-20090310202133-m0cab6yr4sdhxvxg) (merge vers: 6.0.11-alpha) (pib:6)
[30 Mar 2009 1:51] Paul DuBois
Noted in 6.0.11 changelog.

The MySQL Backup library had incorrect logic and error reporting for
metadata saving.

Portions of this website are copyright © 2001, 2002 The PHP Group

Page generated in 0.066 sec. using MySQL 8.4.7-u6-cloud

Timestamp references displayed by the system are UTC.
Content reproduced on this site is the property of the respective copyright holders.
It is not reviewed in advance by Oracle and does not necessarily represent the opinion of Oracle or any other party.