List:Commits« Previous MessageNext Message »
From:Chuck Bell Date:November 29 2007 1:40pm
Subject:RE: bk commit into 6.0 tree (cbell:1.2691) WL#4116
View as plain text  
Rafal,

I have to open and close the tables individually because I am using a write
lock. The merlin folks want to be able to read from the tables at any time.
Rather than debate this now, I suggest we defer this one until after the big
push.

I will look at the calls during Synch phase. I didn't think I had any but I
am wrong it seems.

Please look through below. I have questions for you.

Chuck 


> > +  /*
> > +    Record the backup id for this driver.
> > +  */
> > +  void set_backup_prog_id(ulonglong backup_prog_id)
> > +  { m_drv->backup_prog_id= backup_prog_id; };
> > +
> > +  /*
> > +    Record the engine name this driver.
> > +    Note: must be called after set_backup_prog_id.
> > +  */
> > +  void set_backup_prog_engine_name(const char *engine_name)
> > +  { report_ob_engines(m_drv->backup_prog_id, engine_name); };
> 
> I'd not add progress reporting to the responsibilities of the 
> Pump class - it is 
> perfectly ok to report these things outside. Adding weakly 
> related tasks to a 
> class weakens modularity of the code...

Ok, but I need a way to get the name of the drivers. This seemed the best
place. Can you suggest another place?

> 
> > +
> >   private:
> >  
> >    static const uint m_buf_size= 2048; ///< Size of buffers 
> used for data transfers.
> > @@ -513,6 +527,12 @@ int write_table_data(THD* thd, Backup_in
> >        continue;
> >  
> >      Scheduler::Pump *p= new Scheduler::Pump(no,*i,s);
> > +    
> > +    /*
> > +      Record the backup id and name for this driver.
> > +    */
> > +    p->set_backup_prog_id(info.backup_prog_id);
> > +    p->set_backup_prog_engine_name(p->m_name);
> 
> It seems pointless to pass objects member value to this 
> objects method - if 
> method needs this value it can read it directly.
> 
> I opt for calling report_ob_engines() and such outside of the 
> Pump object.

So where do I put it? I just need a way to get the name of the drivers when
backup and restore begin. I'd gladly move it but I need you to tell me where
the best location is.

> >  
> >      if (!p || !p->is_valid())
> >      {
> > @@ -625,6 +645,7 @@ int write_table_data(THD* thd, Backup_in
> >      // VP creation
> >      DBUG_PRINT("backup/data",("-- SYNC PHASE --"));
> >  
> > +    report_ob_state(info.backup_prog_id, BUP_VALIDITY_POINT);
> 
> PROBLEM:
> I think it is not acceptable to have such complex thing 
> happen here between 
> lock()/unlock() calls. Complex because inside 
> report_ob_state() function we 
> spawn the locking thread, open progress table and potentially 
> write to disk.

Ok, will move.

> 
> >      /*
> >        Block commits.
> >  
> > @@ -651,6 +672,8 @@ int write_table_data(THD* thd, Backup_in
> >        info.binlog_information.position= li.pos;
> >        memcpy(info.binlog_information.binlog_file_name, 
> >               li.log_file_name, strlen(li.log_file_name));
> > +      if (strlen(li.log_file_name) > 0)
> > +        
> info.binlog_information.binlog_file_name[strlen(li.log_file_name)]= 0;
> >        DBUG_PRINT("SYNC PHASE - binlog position : ", ("%d", 
> li.pos));
> >        DBUG_PRINT("SYNC PHASE - binlog filename : ", ("%s", 
> li.log_file_name));
> >      }
> > @@ -674,6 +697,15 @@ int write_table_data(THD* thd, Backup_in
> >      if (error)
> >        goto error;
> >  
> > +    BACKUP_BREAKPOINT("bp_validity_point");
> > +    report_ob_vp_time(info.backup_prog_id, (my_time_t)skr);
> > +    report_ob_state(info.backup_prog_id, BUP_RUNNING);
> > +    BACKUP_BREAKPOINT("bp_running");
> > +
> 
> I think this is executed after VP has been created (after 
> unlock() calls) which 
> is correct. But then the "bp_validity_point" breakpoint seems 
> missplaced - it is 
>   already past the validity point.

Hmmm...

> 
> > +    if (mysql_bin_log.is_open())
> > +      report_ob_binlog_info(info.backup_prog_id, 
> (int)info.binlog_information.position,
> > +                            
> info.binlog_information.binlog_file_name);
> > +
> 
> Minor thing: instead of examining mysql_bin_log again (it was 
> already done above 
> when binlog pos was saved in the info structure) examine the 
> info structure to 
> know if there is anything to report.

??

> 
> >      // get final data from drivers
> >      DBUG_PRINT("backup/data",("-- FINISH PHASE --"));

Thread
bk commit into 6.0 tree (cbell:1.2691) WL#4116cbell29 Nov
  • Re: bk commit into 6.0 tree (cbell:1.2691) WL#4116Rafal Somla29 Nov
    • RE: bk commit into 6.0 tree (cbell:1.2691) WL#4116Chuck Bell29 Nov
      • Re: bk commit into 6.0 tree (cbell:1.2691) WL#4116Rafal Somla29 Nov
    • RE: bk commit into 6.0 tree (cbell:1.2691) WL#4116Chuck Bell29 Nov