Hi James, Well, I liked the good news part. :) I will share the test results with you too. And yeah, will look into the create view comments. Thanks, Sriram On Thu, Jun 19, 2014 at 2:48 PM, James Briggs <james.briggs@yahoo.com> wrote:
Hi Sriram.
The good news ... nice catch, you earned your GSoC salary!
The mysql_register_view() has a dozen different ways to fail:
- RAM: my_error(ER_OUT_OF_RESOURCES, MYF(0)); - disk: sql_create_definition_file() - name collision - etc.
So the create view statement can definitely fail on the master, and should not replicate when that happens.
Note that warnings can also be set, so investigate if that affects replication:
push_warning(thd, Sql_condition::WARN_LEVEL_WARN, ER_WARN_VIEW_MERGE, ER(ER_WARN_VIEW_MERGE));
The bad news ... I read over the create view source, and there's tons of work that hasn't been finished yet (just read the comments about union and restrict/ cascade for starters.)
Another future project!
Thanks, James.
-------------------------------------------- On Thu, 6/19/14, sriram patil <spsrirampatil@gmail.com> wrote:
Subject: [Maria-developers] Doubt in bin logging for CREATE VIEW To: maria-developers@lists.launchpad.net Date: Thursday, June 19, 2014, 12:54 AM
Hi All, I was checking the behavior of bin logging in various methods. I found out CREATE VIEW differs a little bit than others in bin logging. The query is written into bin log if query is executed successfully. If there is any error the query is not logged. This behavior is observed across all the commands.
In case of CREATE VIEW (method: mysql_create_view file: sql/sql_view.cc), while the bin logging is skipped for most of the errors by jumping to "err" label, it is not skipped in following code snippet (line number: 616)
res= mysql_register_view(thd, view, mode); /* View TABLE_SHARE must be removed from the table definition cache in order to make ALTER VIEW work properly. Otherwise, we would not be able to detect
meta-data changes after ALTER VIEW.*/ if (!res) tdc_remove_table(thd, TDC_RT_REMOVE_ALL, view->db, view->table_name, false); if (mysql_bin_log.is_open())
{ // this is where the log is written}
If an error occurs in mysql_register_view, e.g. ER_OUT_OF_RESOURCES, ER_TABLE_EXISTS_ERROR, etc. the query is still logged.
Is there a specific reason why it is logged even though an error occurs? Or is it a bug? Thanks & Regards,Sriram -----Inline Attachment Follows-----
_______________________________________________ Mailing list: https://launchpad.net/~maria-developers Post to : maria-developers@lists.launchpad.net Unsubscribe : https://launchpad.net/~maria-developers More help : https://help.launchpad.net/ListHelp