summaryrefslogblamecommitdiffstats
path: root/tests/qemu-iotests/257.out
blob: aa76131ca91b91c6ab6bdda82b3bd5991131bfd6 (plain) (tree)
1
2
3
4
5
6
7
 
                                                             




                                                                                                                                                











                              
               











                                                               
                                                                                                                                                                                                     



















                                                                                                                                                                                                  
               





                             
                         

















                                                               
                                                                                                                                                                                                     


                                                                                                                                                                                                  
                      








                                                               
                                                                                                                                                                                                                                                                           













                              















                             
               




                             
                          





                             
                         






                             
                         










                                      
                                                          
              
                                                                                                                                       
                                                                                                                                                                                          

              
               





                             
                         



















                                        
               





                             
                         

















                                                               
                                                                                                                                                                                                     


                                                                                                                                                                                                  
                      








                                                               
                                                                                                                                                                                                                                                                           
              
                                                            
              
                                                                                                                                       
                                                                                                                                                                                          

              
               





                             
                         












                                                                                            
               








                                                                                 
                                                                




                                                                                                                                                                                                                                                                                                                                                                                                                











                              
               











                                                               
                                                                                                                                                                                                     



















                                                                                                                                                                                                  
               





                             
                         

















                                                               
                                                                                                                                                                                                     




                                                                                                                                                                                                  
                      








                                                               
                                                                                                                                                                                                                                                                           
              
                                                                                                                                                                
                                                                                                                                                                                                                        

              
               





                             
                         



















                                      
               





                             
                         

















                                                               
                                                                                                                                                                                                     


                                                                                                                                                                                                  
                      








                                                               
                                                                                                                                                                                                                                                                           
              
                                                            
              
                                                                                                                                       
                                                                                                                                                                                          

              
               





                             
                         












                                                                                            
               








                                                                                 
                                                      




                                                                                                                                                











                              
               











                                                               
                                                                                                                                                                                                     



















                                                                                                                                                                                                  
               





                             
                         

















                                                               
                                                                                                                                                                                                     


                                                                                                                                                                                                  
                      








                                                               
                                                                                                                                                                                                                                                                           













                              















                             
               




                             
                          





                             
                         






                             
                         










                                      
                                                            
              
                                                                                                                                       
                                                                                                                                                                                          

              
               





                             
                         



















                                        
               





                             
                         

















                                                               
                                                                                                                                                                                                     


                                                                                                                                                                                                  
                      








                                                               
                                                                                                                                                                                                                                                                           
              
                                                            
              
                                                                                                                                       
                                                                                                                                                                                          

              
               





                             
                         












                                                                                            
               








                                                                                 
                                                                  




                                                                                                                                                











                              
               











                                                               
                                                                                                                                                                                                     



















                                                                                                                                                                                                  
               





                             
                         

















                                                               
                                                                                                                                                                                                     


                                                                                                                                                                                                  
                      








                                                               
                                                                                                                                                                                                                                                                                













                              















                             
               




                             
                          





                             
                         






                             
                         










                                      
                                                          
              
                                                                                                                                       
                                                                                                                                                                                          

              
               





                             
                         



















                                        
               





                             
                         

















                                                               
                                                                                                                                                                                                     


                                                                                                                                                                                                  
                      








                                                               
                                                                                                                                                                                                                                                                                
              
                                                            
              
                                                                                                                                       
                                                                                                                                                                                          

              
               





                             
                         












                                                                                            
               








                                                                                 
                                                                     




                                                                                                                                                                                                                                                                                                                                                                                                                











                              
               











                                                               
                                                                                                                                                                                                     



















                                                                                                                                                                                                  
               





                             
                         

















                                                               
                                                                                                                                                                                                     




                                                                                                                                                                                                  
                      








                                                               
                                                                                                                                                                                                                                                                                
              
                                                                                                                                                                
                                                                                                                                                                                                                        

              
               





                             
                         



















                                      
               





                             
                         

















                                                               
                                                                                                                                                                                                     


                                                                                                                                                                                                  
                      








                                                               
                                                                                                                                                                                                                                                                                
              
                                                            
              
                                                                                                                                       
                                                                                                                                                                                          

              
               





                             
                         












                                                                                            
               








                                                                                 
                                                           




                                                                                                                                                











                              
               











                                                               
                                                                                                                                                                                                     



















                                                                                                                                                                                                  
               





                             
                         

















                                                               
                                                                                                                                                                                                     


                                                                                                                                                                                                  
                      








                                                               
                                                                                                                                                                                                                                                                                













                              















                             
               




                             
                          





                             
                         






                             
                         










                                      
                                                            
              
                                                                                                                                       
                                                                                                                                                                                          

              
               





                             
                         



















                                      
               





                             
                         

















                                                               
                                                                                                                                                                                                     


                                                                                                                                                                                                  
                      








                                                               
                                                                                                                                                                                                                                                                                
              
                                                            
              
                                                                                                                                       
                                                                                                                                                                                          

              
               





                             
                         












                                                                                            
               








                                                                                 
                                                              




                                                                                                                                                











                              
               











                                                               
                                                                                                                                                                                                     



















                                                                                                                                                                                                  
               





                             
                         

















                                                               
                                                                                                                                                                                                     


                                                                                                                                                                                                  
                      








                                                               
                                                                                                                                                                                                                                                                            













                              















                             
               




                             
                          





                             
                         






                             
                         










                                      
                                                          
              
                                                                                                                                       
                                                                                                                                                                                          

              
               





                             
                         



















                                      
               





                             
                         

















                                                               
                                                                                                                                                                                                     


                                                                                                                                                                                                  
                      








                                                               
                                                                                                                                                                                                                                                                            
              
                                                            
              
                                                                                                                                       
                                                                                                                                                                                          

              
               





                             
                         












                                                                                            
               








                                                                                 
                                                                 




                                                                                                                                                                                                                                                                                                                                                                                                                











                              
               











                                                               
                                                                                                                                                                                                     



















                                                                                                                                                                                                  
               





                             
                         

















                                                               
                                                                                                                                                                                                     




                                                                                                                                                                                                  
                      








                                                               
                                                                                                                                                                                                                                                                            
              
                                                                                                                                                                
                                                                                                                                                                                                                        

              
               





                             
                         



















                                      
               





                             
                         

















                                                               
                                                                                                                                                                                                     


                                                                                                                                                                                                  
                      








                                                               
                                                                                                                                                                                                                                                                            
              
                                                            
              
                                                                                                                                       
                                                                                                                                                                                          

              
               





                             
                         












                                                                                            
               








                                                                                 
                                                       




                                                                                                                                                











                              
               











                                                               
                                                                                                                                                                                                     



















                                                                                                                                                                                                  
               





                             
                         

















                                                               
                                                                                                                                                                                                     


                                                                                                                                                                                                  
                      








                                                               
                                                                                                                                                                                                                                                                            













                              















                             
               




                             
                          





                             
                         






                             
                         










                                      
                                                            
              
                                                                                                                                       
                                                                                                                                                                                          

              
               





                             
                         



















                                      
               





                             
                         

















                                                               
                                                                                                                                                                                                     


                                                                                                                                                                                                  
                      








                                                               
                                                                                                                                                                                                                                                                            
              
                                                            
              
                                                                                                                                       
                                                                                                                                                                                          

              
               





                             
                         












                                                                                            
               







                                                                                 
 





                                                                                                                                                











                              
               











                                                               
                                                                                                                                                                                                     



















                                                                                                                                                                                                  
               





                             
                         

















                                                               
                                                                                                                                                                                                     












                                                                                                                                                                                                  
                                                                                                                                                                                                                                                                              













                              















                             
               




                             
                          





                             
                         






                             
                         
















                                                                                                                                                                                              
               





                             
                         



















                                        
               





                             
                         

















                                                               
                                                                                                                                                                                                     












                                                                                                                                                                                                  
                                                                                                                                                                                                                                                                                






                                                                                                                                                                                          
               





                             
                         












                                                                                            
               














                                                                                                                                                                                                                                                                                                                                                                                                                











                              
               











                                                               
                                                                                                                                                                                                     



















                                                                                                                                                                                                  
               





                             
                         

















                                                               
                                                                                                                                                                                                     














                                                                                                                                                                                                  
                                                                                                                                                                                                                                                                              




                                                                                                                                                                                                                           
               





                             
                         



















                                      
               





                             
                         

















                                                               
                                                                                                                                                                                                     












                                                                                                                                                                                                  
                                                                                                                                                                                                                                                                                






                                                                                                                                                                                          
               





                             
                         












                                                                                            
               














                                                                                                                                                











                              
               











                                                               
                                                                                                                                                                                                     



















                                                                                                                                                                                                  
               





                             
                         

















                                                               
                                                                                                                                                                                                     












                                                                                                                                                                                                  
                                                                                                                                                                                                                                                                              













                              















                             
               




                             
                          





                             
                         






                             
                         
















                                                                                                                                                                                              
               





                             
                         



















                                      
               





                             
                         

















                                                               
                                                                                                                                                                                                     












                                                                                                                                                                                                  
                                                                                                                                                                                                                                                                                






                                                                                                                                                                                          
               





                             
                         












                                                                                            
               














                                                                                                                                                











                              
               











                                                               
                                                                                                                                                                                                     



















                                                                                                                                                                                                  
               





                             
                         

















                                                               
                                                                                                                                                                                                     












                                                                                                                                                                                                  
                                                                                                                                                                                                                                                                          













                              















                             
               




                             
                          





                             
                         






                             
                         
















                                                                                                                                                                                              
               





                             
                         



















                                      
               





                             
                         

















                                                               
                                                                                                                                                                                                     












                                                                                                                                                                                                  
                                                                                                                                                                                                                                                                            






                                                                                                                                                                                          
               





                             
                         












                                                                                            
               














                                                                                                                                                                                                                                                                                                                                                                                                                











                              
               











                                                               
                                                                                                                                                                                                     



















                                                                                                                                                                                                  
               





                             
                         

















                                                               
                                                                                                                                                                                                     














                                                                                                                                                                                                  
                                                                                                                                                                                                                                                                          




                                                                                                                                                                                                                           
               





                             
                         



















                                            
               





                             
                         

















                                                               
                                                                                                                                                                                                     












                                                                                                                                                                                                  
                                                                                                                                                                                                                                                                            






                                                                                                                                                                                              
               





                             
                         












                                                                                            
               














                                                                                                                                                











                              
               











                                                               
                                                                                                                                                                                                     



















                                                                                                                                                                                                  
               





                             
                         

















                                                               
                                                                                                                                                                                                     












                                                                                                                                                                                                  
                                                                                                                                                                                                                                                                          













                              















                             
               




                             
                          





                             
                         






                             
                         
















                                                                                                                                                                                              
               





                             
                         



















                                      
               





                             
                         

















                                                               
                                                                                                                                                                                                     












                                                                                                                                                                                                  
                                                                                                                                                                                                                                                                            






                                                                                                                                                                                          
               





                             
                         












                                                                                            
               














                                                                                                                                                











                              
               











                                                               
                                                                                                                                                                                                     



















                                                                                                                                                                                                  
               





                             
                         

















                                                               
                                                                                                                                                                                                     












                                                                                                                                                                                                  
                                                                                                                                                                                                                                                                             













                              















                             
               




                             
                          





                             
                         






                             
                         
















                                                                                                                                                                                          
               





                             
                         



















                                        
               





                             
                         

















                                                               
                                                                                                                                                                                                     












                                                                                                                                                                                                  
                                                                                                                                                                                                                                                                                






                                                                                                                                                                                          
               





                             
                         












                                                                                            
               














                                                                                                                                                                                                                                                                                                                                                                                                                











                              
               











                                                               
                                                                                                                                                                                                     



















                                                                                                                                                                                                  
               





                             
                         

















                                                               
                                                                                                                                                                                                     














                                                                                                                                                                                                  
                                                                                                                                                                                                                                                                             




                                                                                                                                                                                                                        
               





                             
                         



















                                      
               





                             
                         

















                                                               
                                                                                                                                                                                                     












                                                                                                                                                                                                  
                                                                                                                                                                                                                                                                                






                                                                                                                                                                                          
               





                             
                         












                                                                                            
               














                                                                                                                                                











                              
               











                                                               
                                                                                                                                                                                                     



















                                                                                                                                                                                                  
               





                             
                         

















                                                               
                                                                                                                                                                                                     












                                                                                                                                                                                                  
                                                                                                                                                                                                                                                                             













                              















                             
               




                             
                          





                             
                         






                             
                         
















                                                                                                                                                                                          
               





                             
                         



















                                      
               





                             
                         

















                                                               
                                                                                                                                                                                                     












                                                                                                                                                                                                  
                                                                                                                                                                                                                                                                                






                                                                                                                                                                                          
               





                             
                         












                                                                                            
               














                                                                                                                                                











                              
               











                                                               
                                                                                                                                                                                                     



















                                                                                                                                                                                                  
               





                             
                         

















                                                               
                                                                                                                                                                                                     












                                                                                                                                                                                                  
                                                                                                                                                                                                                                                                         













                              















                             
               




                             
                          





                             
                         






                             
                         
















                                                                                                                                                                                          
               





                             
                         



















                                      
               





                             
                         

















                                                               
                                                                                                                                                                                                     












                                                                                                                                                                                                  
                                                                                                                                                                                                                                                                            






                                                                                                                                                                                          
               





                             
                         












                                                                                            
               














                                                                                                                                                                                                                                                                                                                                                                                                                











                              
               











                                                               
                                                                                                                                                                                                     



















                                                                                                                                                                                                  
               





                             
                         

















                                                               
                                                                                                                                                                                                     














                                                                                                                                                                                                  
                                                                                                                                                                                                                                                                         




                                                                                                                                                                                                                        
               





                             
                         



















                                      
               





                             
                         

















                                                               
                                                                                                                                                                                                     












                                                                                                                                                                                                  
                                                                                                                                                                                                                                                                            






                                                                                                                                                                                          
               





                             
                         












                                                                                            
               














                                                                                                                                                











                              
               











                                                               
                                                                                                                                                                                                     



















                                                                                                                                                                                                  
               





                             
                         

















                                                               
                                                                                                                                                                                                     












                                                                                                                                                                                                  
                                                                                                                                                                                                                                                                         













                              















                             
               




                             
                          





                             
                         






                             
                         
















                                                                                                                                                                                          
               





                             
                         



















                                      
               





                             
                         

















                                                               
                                                                                                                                                                                                     












                                                                                                                                                                                                  
                                                                                                                                                                                                                                                                            






                                                                                                                                                                                          
               





                             
                         












                                                                                            
               








                                                                                 





                                                                                                                                                
















                                                                                                               
                                                                                                                                                                                                                                     

                                                                                                            
                                                                                                                                                                                                                                 

                                                                                                            
                                                                                                                                                                                                                                

                                                                                                            
                                                                                                                                                                                                        

                                                                                                            
                                                                                                                                                                                                                                                            

                                                                                     
                                                                                                                                                                                                                                                        

                                                                                                                        
                                                                                                                                                                                                                                                       

                                                                                                                        
                                                                                                                                                                                                                               

                                                                                     
                                                                                                                                                                                                                                                      

                                                                                                                        
                                                                                                                                                                                                                                                     



                                                                                                                        
                                                                                                                                                                                                                                

                                                                                                       
                                                                                                                                                                                                                            

                                                                                                       
                                                                                                                                                                                                                           

                                                                                                       
                                                                                                                                                                                                   

                                                                                                       
                                                                                                                                                                                                                                                       

                                                                                     
                                                                                                                                                                                                                                                   

                                                                                     
                                                                                                                                                                                                                                                  

                                                                                     
                                                                                                                                                                                                                          

                                                                                     
                                                                                                                                                                                                                        

                                                                                                      

                          
                                                                                                                                                                                                                              

                                                                                                
                                                                                                                                                                                                                          

                                                                                                
                                                                                                                                                                                                                         

                                                                                                
                                                                                                                                                                                                                                                     

                                                                                     
                                                                                                                                                                                                                                                 

                                                                                     
                                                                                                                                                                                                                                                

                                                                                     
                                                                                                                                                                                                                        

                                                                                     
                                                                                                                                                                                                                                              

                                                                                                                                     
                                                                                                                                                                                                                      



                                                                                                      
                                                                                                                                                                                                                             

                                                                                                
                                                                                                                                                                                                                         

                                                                                                
                                                                                                                                                                                                                        

                                                                                                
                                                                                                                                                                                                                                                    

                                                                                     
                                                                                                                                                                                                                                                

                                                                                     
                                                                                                                                                                                                                                               

                                                                                     
                                                                                                                                                                                                                       

                                                                                     
                                                                                                                                                                                                                                             

                                                                                                                                    
                                                                                                                                                                                                                     



                                                                                                      
                                                                                                                                                                                                                              

                                                                                                
                                                                                                                                                                                                                          

                                                                                                
                                                                                                                                                                                                                         

                                                                                                
                                                                                                                                                                                                                                                     

                                                                                     
                                                                                                                                                                                                                                                 

                                                                                     
                                                                                                                                                                                                                                                

                                                                                     
                                                                                                                                                                                                                        

                                                                                     
                                                                                                                                                                                                                                                   

                                                                                                           
                                                                                                                                                                                                                                               

                                                                                                           
                                                                                                                                                                                                                                              

                                                                                                           
                                                                                                                                                                                                                      

                                                                                                      

=== Mode bitmap; Bitmap Sync never with simulated failure ===

--- Preparing image & VM ---

{"execute": "blockdev-add", "arguments": {"driver": "qcow2", "file": {"driver": "file", "filename": "TEST_DIR/PID-img"}, "node-name": "drive0"}}
{"return": {}}

--- Write #0 ---

write -P0x49 0x0000000 0x10000
{"return": ""}
write -P0x6c 0x0100000 0x10000
{"return": ""}
write -P0x6f 0x2000000 0x10000
{"return": ""}
write -P0x76 0x3ff0000 0x10000
{"return": ""}
{
  "bitmaps": {}
}

--- Reference Backup #0 ---

{}
{"execute": "job-dismiss", "arguments": {"id": "bdc-file-job"}}
{"return": {}}
{}
{}
{"execute": "job-dismiss", "arguments": {"id": "bdc-fmt-job"}}
{"return": {}}
{}
{"execute": "blockdev-backup", "arguments": {"device": "drive0", "filter-node-name": "backup-top", "job-id": "ref_backup_0", "sync": "full", "target": "ref_target_0", "x-perf": {"max-workers": 1}}}
{"return": {}}
{"data": {"device": "ref_backup_0", "len": 67108864, "offset": 67108864, "speed": 0, "type": "backup"}, "event": "BLOCK_JOB_COMPLETED", "timestamp": {"microseconds": "USECS", "seconds": "SECS"}}

--- Add Bitmap ---

{"execute": "block-dirty-bitmap-add", "arguments": {"granularity": 65536, "name": "bitmap0", "node": "drive0"}}
{"return": {}}

--- Write #1 ---

write -P0x65 0x0000000 0x10000
{"return": ""}
write -P0x77 0x00f8000 0x10000
{"return": ""}
write -P0x72 0x2008000 0x10000
{"return": ""}
write -P0x69 0x3fe0000 0x10000
{"return": ""}
{
  "bitmaps": {
    "drive0": [
      {
        "busy": false,
        "count": 393216,
        "granularity": 65536,
        "name": "bitmap0",
        "persistent": false,
        "recording": true
      }
    ]
  }
}

= Checking Bitmap bitmap0 =
expecting 6 dirty sectors; have 6. OK!

--- Reference Backup #1 ---

{}
{"execute": "job-dismiss", "arguments": {"id": "bdc-file-job"}}
{"return": {}}
{}
{}
{"execute": "job-dismiss", "arguments": {"id": "bdc-fmt-job"}}
{"return": {}}
{}
{"execute": "blockdev-backup", "arguments": {"device": "drive0", "filter-node-name": "backup-top", "job-id": "ref_backup_1", "sync": "full", "target": "ref_target_1", "x-perf": {"max-workers": 1}}}
{"return": {}}
{"data": {"device": "ref_backup_1", "len": 67108864, "offset": 67108864, "speed": 0, "type": "backup"}, "event": "BLOCK_JOB_COMPLETED", "timestamp": {"microseconds": "USECS", "seconds": "SECS"}}

--- Test Backup #1 ---

{}
{"execute": "job-dismiss", "arguments": {"id": "bdc-file-job"}}
{"return": {}}
{}
{}
{"execute": "job-dismiss", "arguments": {"id": "bdc-fmt-job"}}
{"return": {}}
{}
{"execute": "blockdev-backup", "arguments": {"auto-finalize": false, "bitmap": "bitmap0", "bitmap-mode": "never", "device": "drive0", "filter-node-name": "backup-top", "job-id": "backup_1", "sync": "bitmap", "target": "backup_target_1", "x-perf": {"max-workers": 1}}}
{"return": {}}

--- Write #2 ---

write -P0x74 0x0010000 0x10000
{"return": ""}
write -P0x69 0x00e8000 0x10000
{"return": ""}
write -P0x6e 0x2018000 0x10000
{"return": ""}
write -P0x67 0x3fe0000 0x20000
{"return": ""}
{
  "bitmaps": {
    "backup-top": [
      {
        "busy": false,
        "count": 67108864,
        "granularity": 65536,
        "persistent": false,
        "recording": false
      },
      {
        "busy": false,
        "count": 458752,
        "granularity": 65536,
        "persistent": false,
        "recording": false
      }
    ],
    "drive0": [
      {
        "busy": false,
        "count": 0,
        "granularity": 65536,
        "persistent": false,
        "recording": false
      },
      {
        "busy": false,
        "count": 458752,
        "granularity": 65536,
        "persistent": false,
        "recording": true
      },
      {
        "busy": true,
        "count": 393216,
        "granularity": 65536,
        "name": "bitmap0",
        "persistent": false,
        "recording": true
      }
    ]
  }
}

= Checking Bitmap bitmap0 =
expecting 6 dirty sectors; have 6. OK!

= Checking Bitmap (anonymous) =
expecting 7 dirty sectors; have 7. OK!

{"execute": "job-cancel", "arguments": {"id": "backup_1"}}
{"return": {}}
{"data": {"id": "backup_1", "type": "backup"}, "event": "BLOCK_JOB_PENDING", "timestamp": {"microseconds": "USECS", "seconds": "SECS"}}
{"data": {"device": "backup_1", "len": 393216, "offset": 393216, "speed": 0, "type": "backup"}, "event": "BLOCK_JOB_CANCELLED", "timestamp": {"microseconds": "USECS", "seconds": "SECS"}}
{
  "bitmaps": {
    "drive0": [
      {
        "busy": false,
        "count": 655360,
        "granularity": 65536,
        "name": "bitmap0",
        "persistent": false,
        "recording": true
      }
    ]
  }
}

= Checking Bitmap bitmap0 =
expecting 10 dirty sectors; have 10. OK!

--- Write #3 ---

write -P0xaa 0x0010000 0x30000
{"return": ""}
write -P0xbb 0x00d8000 0x10000
{"return": ""}
write -P0xcc 0x2028000 0x10000
{"return": ""}
write -P0xdd 0x3fc0000 0x10000
{"return": ""}
{
  "bitmaps": {
    "drive0": [
      {
        "busy": false,
        "count": 983040,
        "granularity": 65536,
        "name": "bitmap0",
        "persistent": false,
        "recording": true
      }
    ]
  }
}

= Checking Bitmap bitmap0 =
expecting 15 dirty sectors; have 15. OK!

--- Reference Backup #2 ---

{}
{"execute": "job-dismiss", "arguments": {"id": "bdc-file-job"}}
{"return": {}}
{}
{}
{"execute": "job-dismiss", "arguments": {"id": "bdc-fmt-job"}}
{"return": {}}
{}
{"execute": "blockdev-backup", "arguments": {"device": "drive0", "filter-node-name": "backup-top", "job-id": "ref_backup_2", "sync": "full", "target": "ref_target_2", "x-perf": {"max-workers": 1}}}
{"return": {}}
{"data": {"device": "ref_backup_2", "len": 67108864, "offset": 67108864, "speed": 0, "type": "backup"}, "event": "BLOCK_JOB_COMPLETED", "timestamp": {"microseconds": "USECS", "seconds": "SECS"}}

--- Test Backup #2 ---

{}
{"execute": "job-dismiss", "arguments": {"id": "bdc-file-job"}}
{"return": {}}
{}
{}
{"execute": "job-dismiss", "arguments": {"id": "bdc-fmt-job"}}
{"return": {}}
{}
{"execute": "blockdev-backup", "arguments": {"auto-finalize": false, "bitmap": "bitmap0", "bitmap-mode": "never", "device": "drive0", "filter-node-name": "backup-top", "job-id": "backup_2", "sync": "bitmap", "target": "backup_target_2", "x-perf": {"max-workers": 1}}}
{"return": {}}
{"execute": "job-finalize", "arguments": {"id": "backup_2"}}
{"return": {}}
{"data": {"id": "backup_2", "type": "backup"}, "event": "BLOCK_JOB_PENDING", "timestamp": {"microseconds": "USECS", "seconds": "SECS"}}
{"data": {"device": "backup_2", "len": 983040, "offset": 983040, "speed": 0, "type": "backup"}, "event": "BLOCK_JOB_COMPLETED", "timestamp": {"microseconds": "USECS", "seconds": "SECS"}}
{
  "bitmaps": {
    "drive0": [
      {
        "busy": false,
        "count": 983040,
        "granularity": 65536,
        "name": "bitmap0",
        "persistent": false,
        "recording": true
      }
    ]
  }
}

= Checking Bitmap bitmap0 =
expecting 15 dirty sectors; have 15. OK!

--- Cleanup ---

{"execute": "block-dirty-bitmap-remove", "arguments": {"name": "bitmap0", "node": "drive0"}}
{"return": {}}
{
  "bitmaps": {}
}

--- Verification ---

qemu_img compare "TEST_DIR/PID-bsync1" "TEST_DIR/PID-fbackup1" ==> Identical, OK!
qemu_img compare "TEST_DIR/PID-bsync2" "TEST_DIR/PID-fbackup2" ==> Identical, OK!
qemu_img compare "TEST_DIR/PID-img" "TEST_DIR/PID-fbackup2" ==> Identical, OK!


=== Mode bitmap; Bitmap Sync never with intermediate failure ===

--- Preparing image & VM ---

{"execute": "blockdev-add", "arguments": {"driver": "qcow2", "file": {"driver": "blkdebug", "image": {"driver": "file", "filename": "TEST_DIR/PID-img"}, "inject-error": [{"errno": 5, "event": "read_aio", "immediately": false, "once": true, "state": 3}], "set-state": [{"event": "flush_to_disk", "new-state": 2, "state": 1}, {"event": "read_aio", "new-state": 3, "state": 2}]}, "node-name": "drive0"}}
{"return": {}}

--- Write #0 ---

write -P0x49 0x0000000 0x10000
{"return": ""}
write -P0x6c 0x0100000 0x10000
{"return": ""}
write -P0x6f 0x2000000 0x10000
{"return": ""}
write -P0x76 0x3ff0000 0x10000
{"return": ""}
{
  "bitmaps": {}
}

--- Reference Backup #0 ---

{}
{"execute": "job-dismiss", "arguments": {"id": "bdc-file-job"}}
{"return": {}}
{}
{}
{"execute": "job-dismiss", "arguments": {"id": "bdc-fmt-job"}}
{"return": {}}
{}
{"execute": "blockdev-backup", "arguments": {"device": "drive0", "filter-node-name": "backup-top", "job-id": "ref_backup_0", "sync": "full", "target": "ref_target_0", "x-perf": {"max-workers": 1}}}
{"return": {}}
{"data": {"device": "ref_backup_0", "len": 67108864, "offset": 67108864, "speed": 0, "type": "backup"}, "event": "BLOCK_JOB_COMPLETED", "timestamp": {"microseconds": "USECS", "seconds": "SECS"}}

--- Add Bitmap ---

{"execute": "block-dirty-bitmap-add", "arguments": {"granularity": 65536, "name": "bitmap0", "node": "drive0"}}
{"return": {}}

--- Write #1 ---

write -P0x65 0x0000000 0x10000
{"return": ""}
write -P0x77 0x00f8000 0x10000
{"return": ""}
write -P0x72 0x2008000 0x10000
{"return": ""}
write -P0x69 0x3fe0000 0x10000
{"return": ""}
{
  "bitmaps": {
    "drive0": [
      {
        "busy": false,
        "count": 393216,
        "granularity": 65536,
        "name": "bitmap0",
        "persistent": false,
        "recording": true
      }
    ]
  }
}

= Checking Bitmap bitmap0 =
expecting 6 dirty sectors; have 6. OK!

--- Reference Backup #1 ---

{}
{"execute": "job-dismiss", "arguments": {"id": "bdc-file-job"}}
{"return": {}}
{}
{}
{"execute": "job-dismiss", "arguments": {"id": "bdc-fmt-job"}}
{"return": {}}
{}
{"execute": "blockdev-backup", "arguments": {"device": "drive0", "filter-node-name": "backup-top", "job-id": "ref_backup_1", "sync": "full", "target": "ref_target_1", "x-perf": {"max-workers": 1}}}
{"return": {}}
{"data": {"device": "ref_backup_1", "len": 67108864, "offset": 67108864, "speed": 0, "type": "backup"}, "event": "BLOCK_JOB_COMPLETED", "timestamp": {"microseconds": "USECS", "seconds": "SECS"}}

{"return": ""}

--- Test Backup #1 ---

{}
{"execute": "job-dismiss", "arguments": {"id": "bdc-file-job"}}
{"return": {}}
{}
{}
{"execute": "job-dismiss", "arguments": {"id": "bdc-fmt-job"}}
{"return": {}}
{}
{"execute": "blockdev-backup", "arguments": {"auto-finalize": false, "bitmap": "bitmap0", "bitmap-mode": "never", "device": "drive0", "filter-node-name": "backup-top", "job-id": "backup_1", "sync": "bitmap", "target": "backup_target_1", "x-perf": {"max-workers": 1}}}
{"return": {}}
{"data": {"action": "report", "device": "backup_1", "operation": "read"}, "event": "BLOCK_JOB_ERROR", "timestamp": {"microseconds": "USECS", "seconds": "SECS"}}
{"data": {"device": "backup_1", "error": "Input/output error", "len": 393216, "offset": 65536, "speed": 0, "type": "backup"}, "event": "BLOCK_JOB_COMPLETED", "timestamp": {"microseconds": "USECS", "seconds": "SECS"}}
{
  "bitmaps": {
    "drive0": [
      {
        "busy": false,
        "count": 393216,
        "granularity": 65536,
        "name": "bitmap0",
        "persistent": false,
        "recording": true
      }
    ]
  }
}

= Checking Bitmap bitmap0 =
expecting 6 dirty sectors; have 6. OK!

--- Write #3 ---

write -P0xaa 0x0010000 0x30000
{"return": ""}
write -P0xbb 0x00d8000 0x10000
{"return": ""}
write -P0xcc 0x2028000 0x10000
{"return": ""}
write -P0xdd 0x3fc0000 0x10000
{"return": ""}
{
  "bitmaps": {
    "drive0": [
      {
        "busy": false,
        "count": 917504,
        "granularity": 65536,
        "name": "bitmap0",
        "persistent": false,
        "recording": true
      }
    ]
  }
}

= Checking Bitmap bitmap0 =
expecting 14 dirty sectors; have 14. OK!

--- Reference Backup #2 ---

{}
{"execute": "job-dismiss", "arguments": {"id": "bdc-file-job"}}
{"return": {}}
{}
{}
{"execute": "job-dismiss", "arguments": {"id": "bdc-fmt-job"}}
{"return": {}}
{}
{"execute": "blockdev-backup", "arguments": {"device": "drive0", "filter-node-name": "backup-top", "job-id": "ref_backup_2", "sync": "full", "target": "ref_target_2", "x-perf": {"max-workers": 1}}}
{"return": {}}
{"data": {"device": "ref_backup_2", "len": 67108864, "offset": 67108864, "speed": 0, "type": "backup"}, "event": "BLOCK_JOB_COMPLETED", "timestamp": {"microseconds": "USECS", "seconds": "SECS"}}

--- Test Backup #2 ---

{}
{"execute": "job-dismiss", "arguments": {"id": "bdc-file-job"}}
{"return": {}}
{}
{}
{"execute": "job-dismiss", "arguments": {"id": "bdc-fmt-job"}}
{"return": {}}
{}
{"execute": "blockdev-backup", "arguments": {"auto-finalize": false, "bitmap": "bitmap0", "bitmap-mode": "never", "device": "drive0", "filter-node-name": "backup-top", "job-id": "backup_2", "sync": "bitmap", "target": "backup_target_2", "x-perf": {"max-workers": 1}}}
{"return": {}}
{"execute": "job-finalize", "arguments": {"id": "backup_2"}}
{"return": {}}
{"data": {"id": "backup_2", "type": "backup"}, "event": "BLOCK_JOB_PENDING", "timestamp": {"microseconds": "USECS", "seconds": "SECS"}}
{"data": {"device": "backup_2", "len": 917504, "offset": 917504, "speed": 0, "type": "backup"}, "event": "BLOCK_JOB_COMPLETED", "timestamp": {"microseconds": "USECS", "seconds": "SECS"}}
{
  "bitmaps": {
    "drive0": [
      {
        "busy": false,
        "count": 917504,
        "granularity": 65536,
        "name": "bitmap0",
        "persistent": false,
        "recording": true
      }
    ]
  }
}

= Checking Bitmap bitmap0 =
expecting 14 dirty sectors; have 14. OK!

--- Cleanup ---

{"execute": "block-dirty-bitmap-remove", "arguments": {"name": "bitmap0", "node": "drive0"}}
{"return": {}}
{
  "bitmaps": {}
}

--- Verification ---

qemu_img compare "TEST_DIR/PID-bsync1" "TEST_DIR/PID-fbackup1" ==> Mismatch, OK!
qemu_img compare "TEST_DIR/PID-bsync2" "TEST_DIR/PID-fbackup2" ==> Identical, OK!
qemu_img compare "TEST_DIR/PID-img" "TEST_DIR/PID-fbackup2" ==> Identical, OK!


=== Mode bitmap; Bitmap Sync never without failure ===

--- Preparing image & VM ---

{"execute": "blockdev-add", "arguments": {"driver": "qcow2", "file": {"driver": "file", "filename": "TEST_DIR/PID-img"}, "node-name": "drive0"}}
{"return": {}}

--- Write #0 ---

write -P0x49 0x0000000 0x10000
{"return": ""}
write -P0x6c 0x0100000 0x10000
{"return": ""}
write -P0x6f 0x2000000 0x10000
{"return": ""}
write -P0x76 0x3ff0000 0x10000
{"return": ""}
{
  "bitmaps": {}
}

--- Reference Backup #0 ---

{}
{"execute": "job-dismiss", "arguments": {"id": "bdc-file-job"}}
{"return": {}}
{}
{}
{"execute": "job-dismiss", "arguments": {"id": "bdc-fmt-job"}}
{"return": {}}
{}
{"execute": "blockdev-backup", "arguments": {"device": "drive0", "filter-node-name": "backup-top", "job-id": "ref_backup_0", "sync": "full", "target": "ref_target_0", "x-perf": {"max-workers": 1}}}
{"return": {}}
{"data": {"device": "ref_backup_0", "len": 67108864, "offset": 67108864, "speed": 0, "type": "backup"}, "event": "BLOCK_JOB_COMPLETED", "timestamp": {"microseconds": "USECS", "seconds": "SECS"}}

--- Add Bitmap ---

{"execute": "block-dirty-bitmap-add", "arguments": {"granularity": 65536, "name": "bitmap0", "node": "drive0"}}
{"return": {}}

--- Write #1 ---

write -P0x65 0x0000000 0x10000
{"return": ""}
write -P0x77 0x00f8000 0x10000
{"return": ""}
write -P0x72 0x2008000 0x10000
{"return": ""}
write -P0x69 0x3fe0000 0x10000
{"return": ""}
{
  "bitmaps": {
    "drive0": [
      {
        "busy": false,
        "count": 393216,
        "granularity": 65536,
        "name": "bitmap0",
        "persistent": false,
        "recording": true
      }
    ]
  }
}

= Checking Bitmap bitmap0 =
expecting 6 dirty sectors; have 6. OK!

--- Reference Backup #1 ---

{}
{"execute": "job-dismiss", "arguments": {"id": "bdc-file-job"}}
{"return": {}}
{}
{}
{"execute": "job-dismiss", "arguments": {"id": "bdc-fmt-job"}}
{"return": {}}
{}
{"execute": "blockdev-backup", "arguments": {"device": "drive0", "filter-node-name": "backup-top", "job-id": "ref_backup_1", "sync": "full", "target": "ref_target_1", "x-perf": {"max-workers": 1}}}
{"return": {}}
{"data": {"device": "ref_backup_1", "len": 67108864, "offset": 67108864, "speed": 0, "type": "backup"}, "event": "BLOCK_JOB_COMPLETED", "timestamp": {"microseconds": "USECS", "seconds": "SECS"}}

--- Test Backup #1 ---

{}
{"execute": "job-dismiss", "arguments": {"id": "bdc-file-job"}}
{"return": {}}
{}
{}
{"execute": "job-dismiss", "arguments": {"id": "bdc-fmt-job"}}
{"return": {}}
{}
{"execute": "blockdev-backup", "arguments": {"auto-finalize": false, "bitmap": "bitmap0", "bitmap-mode": "never", "device": "drive0", "filter-node-name": "backup-top", "job-id": "backup_1", "sync": "bitmap", "target": "backup_target_1", "x-perf": {"max-workers": 1}}}
{"return": {}}

--- Write #2 ---

write -P0x74 0x0010000 0x10000
{"return": ""}
write -P0x69 0x00e8000 0x10000
{"return": ""}
write -P0x6e 0x2018000 0x10000
{"return": ""}
write -P0x67 0x3fe0000 0x20000
{"return": ""}
{
  "bitmaps": {
    "backup-top": [
      {
        "busy": false,
        "count": 67108864,
        "granularity": 65536,
        "persistent": false,
        "recording": false
      },
      {
        "busy": false,
        "count": 458752,
        "granularity": 65536,
        "persistent": false,
        "recording": false
      }
    ],
    "drive0": [
      {
        "busy": false,
        "count": 0,
        "granularity": 65536,
        "persistent": false,
        "recording": false
      },
      {
        "busy": false,
        "count": 458752,
        "granularity": 65536,
        "persistent": false,
        "recording": true
      },
      {
        "busy": true,
        "count": 393216,
        "granularity": 65536,
        "name": "bitmap0",
        "persistent": false,
        "recording": true
      }
    ]
  }
}

= Checking Bitmap bitmap0 =
expecting 6 dirty sectors; have 6. OK!

= Checking Bitmap (anonymous) =
expecting 7 dirty sectors; have 7. OK!

{"execute": "job-finalize", "arguments": {"id": "backup_1"}}
{"return": {}}
{"data": {"id": "backup_1", "type": "backup"}, "event": "BLOCK_JOB_PENDING", "timestamp": {"microseconds": "USECS", "seconds": "SECS"}}
{"data": {"device": "backup_1", "len": 393216, "offset": 393216, "speed": 0, "type": "backup"}, "event": "BLOCK_JOB_COMPLETED", "timestamp": {"microseconds": "USECS", "seconds": "SECS"}}
{
  "bitmaps": {
    "drive0": [
      {
        "busy": false,
        "count": 655360,
        "granularity": 65536,
        "name": "bitmap0",
        "persistent": false,
        "recording": true
      }
    ]
  }
}

= Checking Bitmap bitmap0 =
expecting 10 dirty sectors; have 10. OK!

--- Write #3 ---

write -P0xaa 0x0010000 0x30000
{"return": ""}
write -P0xbb 0x00d8000 0x10000
{"return": ""}
write -P0xcc 0x2028000 0x10000
{"return": ""}
write -P0xdd 0x3fc0000 0x10000
{"return": ""}
{
  "bitmaps": {
    "drive0": [
      {
        "busy": false,
        "count": 983040,
        "granularity": 65536,
        "name": "bitmap0",
        "persistent": false,
        "recording": true
      }
    ]
  }
}

= Checking Bitmap bitmap0 =
expecting 15 dirty sectors; have 15. OK!

--- Reference Backup #2 ---

{}
{"execute": "job-dismiss", "arguments": {"id": "bdc-file-job"}}
{"return": {}}
{}
{}
{"execute": "job-dismiss", "arguments": {"id": "bdc-fmt-job"}}
{"return": {}}
{}
{"execute": "blockdev-backup", "arguments": {"device": "drive0", "filter-node-name": "backup-top", "job-id": "ref_backup_2", "sync": "full", "target": "ref_target_2", "x-perf": {"max-workers": 1}}}
{"return": {}}
{"data": {"device": "ref_backup_2", "len": 67108864, "offset": 67108864, "speed": 0, "type": "backup"}, "event": "BLOCK_JOB_COMPLETED", "timestamp": {"microseconds": "USECS", "seconds": "SECS"}}

--- Test Backup #2 ---

{}
{"execute": "job-dismiss", "arguments": {"id": "bdc-file-job"}}
{"return": {}}
{}
{}
{"execute": "job-dismiss", "arguments": {"id": "bdc-fmt-job"}}
{"return": {}}
{}
{"execute": "blockdev-backup", "arguments": {"auto-finalize": false, "bitmap": "bitmap0", "bitmap-mode": "never", "device": "drive0", "filter-node-name": "backup-top", "job-id": "backup_2", "sync": "bitmap", "target": "backup_target_2", "x-perf": {"max-workers": 1}}}
{"return": {}}
{"execute": "job-finalize", "arguments": {"id": "backup_2"}}
{"return": {}}
{"data": {"id": "backup_2", "type": "backup"}, "event": "BLOCK_JOB_PENDING", "timestamp": {"microseconds": "USECS", "seconds": "SECS"}}
{"data": {"device": "backup_2", "len": 983040, "offset": 983040, "speed": 0, "type": "backup"}, "event": "BLOCK_JOB_COMPLETED", "timestamp": {"microseconds": "USECS", "seconds": "SECS"}}
{
  "bitmaps": {
    "drive0": [
      {
        "busy": false,
        "count": 983040,
        "granularity": 65536,
        "name": "bitmap0",
        "persistent": false,
        "recording": true
      }
    ]
  }
}

= Checking Bitmap bitmap0 =
expecting 15 dirty sectors; have 15. OK!

--- Cleanup ---

{"execute": "block-dirty-bitmap-remove", "arguments": {"name": "bitmap0", "node": "drive0"}}
{"return": {}}
{
  "bitmaps": {}
}

--- Verification ---

qemu_img compare "TEST_DIR/PID-bsync1" "TEST_DIR/PID-fbackup1" ==> Identical, OK!
qemu_img compare "TEST_DIR/PID-bsync2" "TEST_DIR/PID-fbackup2" ==> Identical, OK!
qemu_img compare "TEST_DIR/PID-img" "TEST_DIR/PID-fbackup2" ==> Identical, OK!


=== Mode bitmap; Bitmap Sync on-success with simulated failure ===

--- Preparing image & VM ---

{"execute": "blockdev-add", "arguments": {"driver": "qcow2", "file": {"driver": "file", "filename": "TEST_DIR/PID-img"}, "node-name": "drive0"}}
{"return": {}}

--- Write #0 ---

write -P0x49 0x0000000 0x10000
{"return": ""}
write -P0x6c 0x0100000 0x10000
{"return": ""}
write -P0x6f 0x2000000 0x10000
{"return": ""}
write -P0x76 0x3ff0000 0x10000
{"return": ""}
{
  "bitmaps": {}
}

--- Reference Backup #0 ---

{}
{"execute": "job-dismiss", "arguments": {"id": "bdc-file-job"}}
{"return": {}}
{}
{}
{"execute": "job-dismiss", "arguments": {"id": "bdc-fmt-job"}}
{"return": {}}
{}
{"execute": "blockdev-backup", "arguments": {"device": "drive0", "filter-node-name": "backup-top", "job-id": "ref_backup_0", "sync": "full", "target": "ref_target_0", "x-perf": {"max-workers": 1}}}
{"return": {}}
{"data": {"device": "ref_backup_0", "len": 67108864, "offset": 67108864, "speed": 0, "type": "backup"}, "event": "BLOCK_JOB_COMPLETED", "timestamp": {"microseconds": "USECS", "seconds": "SECS"}}

--- Add Bitmap ---

{"execute": "block-dirty-bitmap-add", "arguments": {"granularity": 65536, "name": "bitmap0", "node": "drive0"}}
{"return": {}}

--- Write #1 ---

write -P0x65 0x0000000 0x10000
{"return": ""}
write -P0x77 0x00f8000 0x10000
{"return": ""}
write -P0x72 0x2008000 0x10000
{"return": ""}
write -P0x69 0x3fe0000 0x10000
{"return": ""}
{
  "bitmaps": {
    "drive0": [
      {
        "busy": false,
        "count": 393216,
        "granularity": 65536,
        "name": "bitmap0",
        "persistent": false,
        "recording": true
      }
    ]
  }
}

= Checking Bitmap bitmap0 =
expecting 6 dirty sectors; have 6. OK!

--- Reference Backup #1 ---

{}
{"execute": "job-dismiss", "arguments": {"id": "bdc-file-job"}}
{"return": {}}
{}
{}
{"execute": "job-dismiss", "arguments": {"id": "bdc-fmt-job"}}
{"return": {}}
{}
{"execute": "blockdev-backup", "arguments": {"device": "drive0", "filter-node-name": "backup-top", "job-id": "ref_backup_1", "sync": "full", "target": "ref_target_1", "x-perf": {"max-workers": 1}}}
{"return": {}}
{"data": {"device": "ref_backup_1", "len": 67108864, "offset": 67108864, "speed": 0, "type": "backup"}, "event": "BLOCK_JOB_COMPLETED", "timestamp": {"microseconds": "USECS", "seconds": "SECS"}}

--- Test Backup #1 ---

{}
{"execute": "job-dismiss", "arguments": {"id": "bdc-file-job"}}
{"return": {}}
{}
{}
{"execute": "job-dismiss", "arguments": {"id": "bdc-fmt-job"}}
{"return": {}}
{}
{"execute": "blockdev-backup", "arguments": {"auto-finalize": false, "bitmap": "bitmap0", "bitmap-mode": "on-success", "device": "drive0", "filter-node-name": "backup-top", "job-id": "backup_1", "sync": "bitmap", "target": "backup_target_1", "x-perf": {"max-workers": 1}}}
{"return": {}}

--- Write #2 ---

write -P0x74 0x0010000 0x10000
{"return": ""}
write -P0x69 0x00e8000 0x10000
{"return": ""}
write -P0x6e 0x2018000 0x10000
{"return": ""}
write -P0x67 0x3fe0000 0x20000
{"return": ""}
{
  "bitmaps": {
    "backup-top": [
      {
        "busy": false,
        "count": 67108864,
        "granularity": 65536,
        "persistent": false,
        "recording": false
      },
      {
        "busy": false,
        "count": 458752,
        "granularity": 65536,
        "persistent": false,
        "recording": false
      }
    ],
    "drive0": [
      {
        "busy": false,
        "count": 0,
        "granularity": 65536,
        "persistent": false,
        "recording": false
      },
      {
        "busy": false,
        "count": 458752,
        "granularity": 65536,
        "persistent": false,
        "recording": true
      },
      {
        "busy": true,
        "count": 393216,
        "granularity": 65536,
        "name": "bitmap0",
        "persistent": false,
        "recording": true
      }
    ]
  }
}

= Checking Bitmap bitmap0 =
expecting 6 dirty sectors; have 6. OK!

= Checking Bitmap (anonymous) =
expecting 7 dirty sectors; have 7. OK!

{"execute": "job-cancel", "arguments": {"id": "backup_1"}}
{"return": {}}
{"data": {"id": "backup_1", "type": "backup"}, "event": "BLOCK_JOB_PENDING", "timestamp": {"microseconds": "USECS", "seconds": "SECS"}}
{"data": {"device": "backup_1", "len": 393216, "offset": 393216, "speed": 0, "type": "backup"}, "event": "BLOCK_JOB_CANCELLED", "timestamp": {"microseconds": "USECS", "seconds": "SECS"}}
{
  "bitmaps": {
    "drive0": [
      {
        "busy": false,
        "count": 655360,
        "granularity": 65536,
        "name": "bitmap0",
        "persistent": false,
        "recording": true
      }
    ]
  }
}

= Checking Bitmap bitmap0 =
expecting 10 dirty sectors; have 10. OK!

--- Write #3 ---

write -P0xaa 0x0010000 0x30000
{"return": ""}
write -P0xbb 0x00d8000 0x10000
{"return": ""}
write -P0xcc 0x2028000 0x10000
{"return": ""}
write -P0xdd 0x3fc0000 0x10000
{"return": ""}
{
  "bitmaps": {
    "drive0": [
      {
        "busy": false,
        "count": 983040,
        "granularity": 65536,
        "name": "bitmap0",
        "persistent": false,
        "recording": true
      }
    ]
  }
}

= Checking Bitmap bitmap0 =
expecting 15 dirty sectors; have 15. OK!

--- Reference Backup #2 ---

{}
{"execute": "job-dismiss", "arguments": {"id": "bdc-file-job"}}
{"return": {}}
{}
{}
{"execute": "job-dismiss", "arguments": {"id": "bdc-fmt-job"}}
{"return": {}}
{}
{"execute": "blockdev-backup", "arguments": {"device": "drive0", "filter-node-name": "backup-top", "job-id": "ref_backup_2", "sync": "full", "target": "ref_target_2", "x-perf": {"max-workers": 1}}}
{"return": {}}
{"data": {"device": "ref_backup_2", "len": 67108864, "offset": 67108864, "speed": 0, "type": "backup"}, "event": "BLOCK_JOB_COMPLETED", "timestamp": {"microseconds": "USECS", "seconds": "SECS"}}

--- Test Backup #2 ---

{}
{"execute": "job-dismiss", "arguments": {"id": "bdc-file-job"}}
{"return": {}}
{}
{}
{"execute": "job-dismiss", "arguments": {"id": "bdc-fmt-job"}}
{"return": {}}
{}
{"execute": "blockdev-backup", "arguments": {"auto-finalize": false, "bitmap": "bitmap0", "bitmap-mode": "on-success", "device": "drive0", "filter-node-name": "backup-top", "job-id": "backup_2", "sync": "bitmap", "target": "backup_target_2", "x-perf": {"max-workers": 1}}}
{"return": {}}
{"execute": "job-finalize", "arguments": {"id": "backup_2"}}
{"return": {}}
{"data": {"id": "backup_2", "type": "backup"}, "event": "BLOCK_JOB_PENDING", "timestamp": {"microseconds": "USECS", "seconds": "SECS"}}
{"data": {"device": "backup_2", "len": 983040, "offset": 983040, "speed": 0, "type": "backup"}, "event": "BLOCK_JOB_COMPLETED", "timestamp": {"microseconds": "USECS", "seconds": "SECS"}}
{
  "bitmaps": {
    "drive0": [
      {
        "busy": false,
        "count": 0,
        "granularity": 65536,
        "name": "bitmap0",
        "persistent": false,
        "recording": true
      }
    ]
  }
}

= Checking Bitmap bitmap0 =
expecting 0 dirty sectors; have 0. OK!

--- Cleanup ---

{"execute": "block-dirty-bitmap-remove", "arguments": {"name": "bitmap0", "node": "drive0"}}
{"return": {}}
{
  "bitmaps": {}
}

--- Verification ---

qemu_img compare "TEST_DIR/PID-bsync1" "TEST_DIR/PID-fbackup1" ==> Identical, OK!
qemu_img compare "TEST_DIR/PID-bsync2" "TEST_DIR/PID-fbackup2" ==> Identical, OK!
qemu_img compare "TEST_DIR/PID-img" "TEST_DIR/PID-fbackup2" ==> Identical, OK!


=== Mode bitmap; Bitmap Sync on-success with intermediate failure ===

--- Preparing image & VM ---

{"execute": "blockdev-add", "arguments": {"driver": "qcow2", "file": {"driver": "blkdebug", "image": {"driver": "file", "filename": "TEST_DIR/PID-img"}, "inject-error": [{"errno": 5, "event": "read_aio", "immediately": false, "once": true, "state": 3}], "set-state": [{"event": "flush_to_disk", "new-state": 2, "state": 1}, {"event": "read_aio", "new-state": 3, "state": 2}]}, "node-name": "drive0"}}
{"return": {}}

--- Write #0 ---

write -P0x49 0x0000000 0x10000
{"return": ""}
write -P0x6c 0x0100000 0x10000
{"return": ""}
write -P0x6f 0x2000000 0x10000
{"return": ""}
write -P0x76 0x3ff0000 0x10000
{"return": ""}
{
  "bitmaps": {}
}

--- Reference Backup #0 ---

{}
{"execute": "job-dismiss", "arguments": {"id": "bdc-file-job"}}
{"return": {}}
{}
{}
{"execute": "job-dismiss", "arguments": {"id": "bdc-fmt-job"}}
{"return": {}}
{}
{"execute": "blockdev-backup", "arguments": {"device": "drive0", "filter-node-name": "backup-top", "job-id": "ref_backup_0", "sync": "full", "target": "ref_target_0", "x-perf": {"max-workers": 1}}}
{"return": {}}
{"data": {"device": "ref_backup_0", "len": 67108864, "offset": 67108864, "speed": 0, "type": "backup"}, "event": "BLOCK_JOB_COMPLETED", "timestamp": {"microseconds": "USECS", "seconds": "SECS"}}

--- Add Bitmap ---

{"execute": "block-dirty-bitmap-add", "arguments": {"granularity": 65536, "name": "bitmap0", "node": "drive0"}}
{"return": {}}

--- Write #1 ---

write -P0x65 0x0000000 0x10000
{"return": ""}
write -P0x77 0x00f8000 0x10000
{"return": ""}
write -P0x72 0x2008000 0x10000
{"return": ""}
write -P0x69 0x3fe0000 0x10000
{"return": ""}
{
  "bitmaps": {
    "drive0": [
      {
        "busy": false,
        "count": 393216,
        "granularity": 65536,
        "name": "bitmap0",
        "persistent": false,
        "recording": true
      }
    ]
  }
}

= Checking Bitmap bitmap0 =
expecting 6 dirty sectors; have 6. OK!

--- Reference Backup #1 ---

{}
{"execute": "job-dismiss", "arguments": {"id": "bdc-file-job"}}
{"return": {}}
{}
{}
{"execute": "job-dismiss", "arguments": {"id": "bdc-fmt-job"}}
{"return": {}}
{}
{"execute": "blockdev-backup", "arguments": {"device": "drive0", "filter-node-name": "backup-top", "job-id": "ref_backup_1", "sync": "full", "target": "ref_target_1", "x-perf": {"max-workers": 1}}}
{"return": {}}
{"data": {"device": "ref_backup_1", "len": 67108864, "offset": 67108864, "speed": 0, "type": "backup"}, "event": "BLOCK_JOB_COMPLETED", "timestamp": {"microseconds": "USECS", "seconds": "SECS"}}

{"return": ""}

--- Test Backup #1 ---

{}
{"execute": "job-dismiss", "arguments": {"id": "bdc-file-job"}}
{"return": {}}
{}
{}
{"execute": "job-dismiss", "arguments": {"id": "bdc-fmt-job"}}
{"return": {}}
{}
{"execute": "blockdev-backup", "arguments": {"auto-finalize": false, "bitmap": "bitmap0", "bitmap-mode": "on-success", "device": "drive0", "filter-node-name": "backup-top", "job-id": "backup_1", "sync": "bitmap", "target": "backup_target_1", "x-perf": {"max-workers": 1}}}
{"return": {}}
{"data": {"action": "report", "device": "backup_1", "operation": "read"}, "event": "BLOCK_JOB_ERROR", "timestamp": {"microseconds": "USECS", "seconds": "SECS"}}
{"data": {"device": "backup_1", "error": "Input/output error", "len": 393216, "offset": 65536, "speed": 0, "type": "backup"}, "event": "BLOCK_JOB_COMPLETED", "timestamp": {"microseconds": "USECS", "seconds": "SECS"}}
{
  "bitmaps": {
    "drive0": [
      {
        "busy": false,
        "count": 393216,
        "granularity": 65536,
        "name": "bitmap0",
        "persistent": false,
        "recording": true
      }
    ]
  }
}

= Checking Bitmap bitmap0 =
expecting 6 dirty sectors; have 6. OK!

--- Write #3 ---

write -P0xaa 0x0010000 0x30000
{"return": ""}
write -P0xbb 0x00d8000 0x10000
{"return": ""}
write -P0xcc 0x2028000 0x10000
{"return": ""}
write -P0xdd 0x3fc0000 0x10000
{"return": ""}
{
  "bitmaps": {
    "drive0": [
      {
        "busy": false,
        "count": 917504,
        "granularity": 65536,
        "name": "bitmap0",
        "persistent": false,
        "recording": true
      }
    ]
  }
}

= Checking Bitmap bitmap0 =
expecting 14 dirty sectors; have 14. OK!

--- Reference Backup #2 ---

{}
{"execute": "job-dismiss", "arguments": {"id": "bdc-file-job"}}
{"return": {}}
{}
{}
{"execute": "job-dismiss", "arguments": {"id": "bdc-fmt-job"}}
{"return": {}}
{}
{"execute": "blockdev-backup", "arguments": {"device": "drive0", "filter-node-name": "backup-top", "job-id": "ref_backup_2", "sync": "full", "target": "ref_target_2", "x-perf": {"max-workers": 1}}}
{"return": {}}
{"data": {"device": "ref_backup_2", "len": 67108864, "offset": 67108864, "speed": 0, "type": "backup"}, "event": "BLOCK_JOB_COMPLETED", "timestamp": {"microseconds": "USECS", "seconds": "SECS"}}

--- Test Backup #2 ---

{}
{"execute": "job-dismiss", "arguments": {"id": "bdc-file-job"}}
{"return": {}}
{}
{}
{"execute": "job-dismiss", "arguments": {"id": "bdc-fmt-job"}}
{"return": {}}
{}
{"execute": "blockdev-backup", "arguments": {"auto-finalize": false, "bitmap": "bitmap0", "bitmap-mode": "on-success", "device": "drive0", "filter-node-name": "backup-top", "job-id": "backup_2", "sync": "bitmap", "target": "backup_target_2", "x-perf": {"max-workers": 1}}}
{"return": {}}
{"execute": "job-finalize", "arguments": {"id": "backup_2"}}
{"return": {}}
{"data": {"id": "backup_2", "type": "backup"}, "event": "BLOCK_JOB_PENDING", "timestamp": {"microseconds": "USECS", "seconds": "SECS"}}
{"data": {"device": "backup_2", "len": 917504, "offset": 917504, "speed": 0, "type": "backup"}, "event": "BLOCK_JOB_COMPLETED", "timestamp": {"microseconds": "USECS", "seconds": "SECS"}}
{
  "bitmaps": {
    "drive0": [
      {
        "busy": false,
        "count": 0,
        "granularity": 65536,
        "name": "bitmap0",
        "persistent": false,
        "recording": true
      }
    ]
  }
}

= Checking Bitmap bitmap0 =
expecting 0 dirty sectors; have 0. OK!

--- Cleanup ---

{"execute": "block-dirty-bitmap-remove", "arguments": {"name": "bitmap0", "node": "drive0"}}
{"return": {}}
{
  "bitmaps": {}
}

--- Verification ---

qemu_img compare "TEST_DIR/PID-bsync1" "TEST_DIR/PID-fbackup1" ==> Mismatch, OK!
qemu_img compare "TEST_DIR/PID-bsync2" "TEST_DIR/PID-fbackup2" ==> Identical, OK!
qemu_img compare "TEST_DIR/PID-img" "TEST_DIR/PID-fbackup2" ==> Identical, OK!


=== Mode bitmap; Bitmap Sync on-success without failure ===

--- Preparing image & VM ---

{"execute": "blockdev-add", "arguments": {"driver": "qcow2", "file": {"driver": "file", "filename": "TEST_DIR/PID-img"}, "node-name": "drive0"}}
{"return": {}}

--- Write #0 ---

write -P0x49 0x0000000 0x10000
{"return": ""}
write -P0x6c 0x0100000 0x10000
{"return": ""}
write -P0x6f 0x2000000 0x10000
{"return": ""}
write -P0x76 0x3ff0000 0x10000
{"return": ""}
{
  "bitmaps": {}
}

--- Reference Backup #0 ---

{}
{"execute": "job-dismiss", "arguments": {"id": "bdc-file-job"}}
{"return": {}}
{}
{}
{"execute": "job-dismiss", "arguments": {"id": "bdc-fmt-job"}}
{"return": {}}
{}
{"execute": "blockdev-backup", "arguments": {"device": "drive0", "filter-node-name": "backup-top", "job-id": "ref_backup_0", "sync": "full", "target": "ref_target_0", "x-perf": {"max-workers": 1}}}
{"return": {}}
{"data": {"device": "ref_backup_0", "len": 67108864, "offset": 67108864, "speed": 0, "type": "backup"}, "event": "BLOCK_JOB_COMPLETED", "timestamp": {"microseconds": "USECS", "seconds": "SECS"}}

--- Add Bitmap ---

{"execute": "block-dirty-bitmap-add", "arguments": {"granularity": 65536, "name": "bitmap0", "node": "drive0"}}
{"return": {}}

--- Write #1 ---

write -P0x65 0x0000000 0x10000
{"return": ""}
write -P0x77 0x00f8000 0x10000
{"return": ""}
write -P0x72 0x2008000 0x10000
{"return": ""}
write -P0x69 0x3fe0000 0x10000
{"return": ""}
{
  "bitmaps": {
    "drive0": [
      {
        "busy": false,
        "count": 393216,
        "granularity": 65536,
        "name": "bitmap0",
        "persistent": false,
        "recording": true
      }
    ]
  }
}

= Checking Bitmap bitmap0 =
expecting 6 dirty sectors; have 6. OK!

--- Reference Backup #1 ---

{}
{"execute": "job-dismiss", "arguments": {"id": "bdc-file-job"}}
{"return": {}}
{}
{}
{"execute": "job-dismiss", "arguments": {"id": "bdc-fmt-job"}}
{"return": {}}
{}
{"execute": "blockdev-backup", "arguments": {"device": "drive0", "filter-node-name": "backup-top", "job-id": "ref_backup_1", "sync": "full", "target": "ref_target_1", "x-perf": {"max-workers": 1}}}
{"return": {}}
{"data": {"device": "ref_backup_1", "len": 67108864, "offset": 67108864, "speed": 0, "type": "backup"}, "event": "BLOCK_JOB_COMPLETED", "timestamp": {"microseconds": "USECS", "seconds": "SECS"}}

--- Test Backup #1 ---

{}
{"execute": "job-dismiss", "arguments": {"id": "bdc-file-job"}}
{"return": {}}
{}
{}
{"execute": "job-dismiss", "arguments": {"id": "bdc-fmt-job"}}
{"return": {}}
{}
{"execute": "blockdev-backup", "arguments": {"auto-finalize": false, "bitmap": "bitmap0", "bitmap-mode": "on-success", "device": "drive0", "filter-node-name": "backup-top", "job-id": "backup_1", "sync": "bitmap", "target": "backup_target_1", "x-perf": {"max-workers": 1}}}
{"return": {}}

--- Write #2 ---

write -P0x74 0x0010000 0x10000
{"return": ""}
write -P0x69 0x00e8000 0x10000
{"return": ""}
write -P0x6e 0x2018000 0x10000
{"return": ""}
write -P0x67 0x3fe0000 0x20000
{"return": ""}
{
  "bitmaps": {
    "backup-top": [
      {
        "busy": false,
        "count": 67108864,
        "granularity": 65536,
        "persistent": false,
        "recording": false
      },
      {
        "busy": false,
        "count": 458752,
        "granularity": 65536,
        "persistent": false,
        "recording": false
      }
    ],
    "drive0": [
      {
        "busy": false,
        "count": 0,
        "granularity": 65536,
        "persistent": false,
        "recording": false
      },
      {
        "busy": false,
        "count": 458752,
        "granularity": 65536,
        "persistent": false,
        "recording": true
      },
      {
        "busy": true,
        "count": 393216,
        "granularity": 65536,
        "name": "bitmap0",
        "persistent": false,
        "recording": true
      }
    ]
  }
}

= Checking Bitmap bitmap0 =
expecting 6 dirty sectors; have 6. OK!

= Checking Bitmap (anonymous) =
expecting 7 dirty sectors; have 7. OK!

{"execute": "job-finalize", "arguments": {"id": "backup_1"}}
{"return": {}}
{"data": {"id": "backup_1", "type": "backup"}, "event": "BLOCK_JOB_PENDING", "timestamp": {"microseconds": "USECS", "seconds": "SECS"}}
{"data": {"device": "backup_1", "len": 393216, "offset": 393216, "speed": 0, "type": "backup"}, "event": "BLOCK_JOB_COMPLETED", "timestamp": {"microseconds": "USECS", "seconds": "SECS"}}
{
  "bitmaps": {
    "drive0": [
      {
        "busy": false,
        "count": 458752,
        "granularity": 65536,
        "name": "bitmap0",
        "persistent": false,
        "recording": true
      }
    ]
  }
}

= Checking Bitmap bitmap0 =
expecting 7 dirty sectors; have 7. OK!

--- Write #3 ---

write -P0xaa 0x0010000 0x30000
{"return": ""}
write -P0xbb 0x00d8000 0x10000
{"return": ""}
write -P0xcc 0x2028000 0x10000
{"return": ""}
write -P0xdd 0x3fc0000 0x10000
{"return": ""}
{
  "bitmaps": {
    "drive0": [
      {
        "busy": false,
        "count": 786432,
        "granularity": 65536,
        "name": "bitmap0",
        "persistent": false,
        "recording": true
      }
    ]
  }
}

= Checking Bitmap bitmap0 =
expecting 12 dirty sectors; have 12. OK!

--- Reference Backup #2 ---

{}
{"execute": "job-dismiss", "arguments": {"id": "bdc-file-job"}}
{"return": {}}
{}
{}
{"execute": "job-dismiss", "arguments": {"id": "bdc-fmt-job"}}
{"return": {}}
{}
{"execute": "blockdev-backup", "arguments": {"device": "drive0", "filter-node-name": "backup-top", "job-id": "ref_backup_2", "sync": "full", "target": "ref_target_2", "x-perf": {"max-workers": 1}}}
{"return": {}}
{"data": {"device": "ref_backup_2", "len": 67108864, "offset": 67108864, "speed": 0, "type": "backup"}, "event": "BLOCK_JOB_COMPLETED", "timestamp": {"microseconds": "USECS", "seconds": "SECS"}}

--- Test Backup #2 ---

{}
{"execute": "job-dismiss", "arguments": {"id": "bdc-file-job"}}
{"return": {}}
{}
{}
{"execute": "job-dismiss", "arguments": {"id": "bdc-fmt-job"}}
{"return": {}}
{}
{"execute": "blockdev-backup", "arguments": {"auto-finalize": false, "bitmap": "bitmap0", "bitmap-mode": "on-success", "device": "drive0", "filter-node-name": "backup-top", "job-id": "backup_2", "sync": "bitmap", "target": "backup_target_2", "x-perf": {"max-workers": 1}}}
{"return": {}}
{"execute": "job-finalize", "arguments": {"id": "backup_2"}}
{"return": {}}
{"data": {"id": "backup_2", "type": "backup"}, "event": "BLOCK_JOB_PENDING", "timestamp": {"microseconds": "USECS", "seconds": "SECS"}}
{"data": {"device": "backup_2", "len": 786432, "offset": 786432, "speed": 0, "type": "backup"}, "event": "BLOCK_JOB_COMPLETED", "timestamp": {"microseconds": "USECS", "seconds": "SECS"}}
{
  "bitmaps": {
    "drive0": [
      {
        "busy": false,
        "count": 0,
        "granularity": 65536,
        "name": "bitmap0",
        "persistent": false,
        "recording": true
      }
    ]
  }
}

= Checking Bitmap bitmap0 =
expecting 0 dirty sectors; have 0. OK!

--- Cleanup ---

{"execute": "block-dirty-bitmap-remove", "arguments": {"name": "bitmap0", "node": "drive0"}}
{"return": {}}
{
  "bitmaps": {}
}

--- Verification ---

qemu_img compare "TEST_DIR/PID-bsync1" "TEST_DIR/PID-fbackup1" ==> Identical, OK!
qemu_img compare "TEST_DIR/PID-bsync2" "TEST_DIR/PID-fbackup2" ==> Identical, OK!
qemu_img compare "TEST_DIR/PID-img" "TEST_DIR/PID-fbackup2" ==> Identical, OK!


=== Mode bitmap; Bitmap Sync always with simulated failure ===

--- Preparing image & VM ---

{"execute": "blockdev-add", "arguments": {"driver": "qcow2", "file": {"driver": "file", "filename": "TEST_DIR/PID-img"}, "node-name": "drive0"}}
{"return": {}}

--- Write #0 ---

write -P0x49 0x0000000 0x10000
{"return": ""}
write -P0x6c 0x0100000 0x10000
{"return": ""}
write -P0x6f 0x2000000 0x10000
{"return": ""}
write -P0x76 0x3ff0000 0x10000
{"return": ""}
{
  "bitmaps": {}
}

--- Reference Backup #0 ---

{}
{"execute": "job-dismiss", "arguments": {"id": "bdc-file-job"}}
{"return": {}}
{}
{}
{"execute": "job-dismiss", "arguments": {"id": "bdc-fmt-job"}}
{"return": {}}
{}
{"execute": "blockdev-backup", "arguments": {"device": "drive0", "filter-node-name": "backup-top", "job-id": "ref_backup_0", "sync": "full", "target": "ref_target_0", "x-perf": {"max-workers": 1}}}
{"return": {}}
{"data": {"device": "ref_backup_0", "len": 67108864, "offset": 67108864, "speed": 0, "type": "backup"}, "event": "BLOCK_JOB_COMPLETED", "timestamp": {"microseconds": "USECS", "seconds": "SECS"}}

--- Add Bitmap ---

{"execute": "block-dirty-bitmap-add", "arguments": {"granularity": 65536, "name": "bitmap0", "node": "drive0"}}
{"return": {}}

--- Write #1 ---

write -P0x65 0x0000000 0x10000
{"return": ""}
write -P0x77 0x00f8000 0x10000
{"return": ""}
write -P0x72 0x2008000 0x10000
{"return": ""}
write -P0x69 0x3fe0000 0x10000
{"return": ""}
{
  "bitmaps": {
    "drive0": [
      {
        "busy": false,
        "count": 393216,
        "granularity": 65536,
        "name": "bitmap0",
        "persistent": false,
        "recording": true
      }
    ]
  }
}

= Checking Bitmap bitmap0 =
expecting 6 dirty sectors; have 6. OK!

--- Reference Backup #1 ---

{}
{"execute": "job-dismiss", "arguments": {"id": "bdc-file-job"}}
{"return": {}}
{}
{}
{"execute": "job-dismiss", "arguments": {"id": "bdc-fmt-job"}}
{"return": {}}
{}
{"execute": "blockdev-backup", "arguments": {"device": "drive0", "filter-node-name": "backup-top", "job-id": "ref_backup_1", "sync": "full", "target": "ref_target_1", "x-perf": {"max-workers": 1}}}
{"return": {}}
{"data": {"device": "ref_backup_1", "len": 67108864, "offset": 67108864, "speed": 0, "type": "backup"}, "event": "BLOCK_JOB_COMPLETED", "timestamp": {"microseconds": "USECS", "seconds": "SECS"}}

--- Test Backup #1 ---

{}
{"execute": "job-dismiss", "arguments": {"id": "bdc-file-job"}}
{"return": {}}
{}
{}
{"execute": "job-dismiss", "arguments": {"id": "bdc-fmt-job"}}
{"return": {}}
{}
{"execute": "blockdev-backup", "arguments": {"auto-finalize": false, "bitmap": "bitmap0", "bitmap-mode": "always", "device": "drive0", "filter-node-name": "backup-top", "job-id": "backup_1", "sync": "bitmap", "target": "backup_target_1", "x-perf": {"max-workers": 1}}}
{"return": {}}

--- Write #2 ---

write -P0x74 0x0010000 0x10000
{"return": ""}
write -P0x69 0x00e8000 0x10000
{"return": ""}
write -P0x6e 0x2018000 0x10000
{"return": ""}
write -P0x67 0x3fe0000 0x20000
{"return": ""}
{
  "bitmaps": {
    "backup-top": [
      {
        "busy": false,
        "count": 67108864,
        "granularity": 65536,
        "persistent": false,
        "recording": false
      },
      {
        "busy": false,
        "count": 458752,
        "granularity": 65536,
        "persistent": false,
        "recording": false
      }
    ],
    "drive0": [
      {
        "busy": false,
        "count": 0,
        "granularity": 65536,
        "persistent": false,
        "recording": false
      },
      {
        "busy": false,
        "count": 458752,
        "granularity": 65536,
        "persistent": false,
        "recording": true
      },
      {
        "busy": true,
        "count": 393216,
        "granularity": 65536,
        "name": "bitmap0",
        "persistent": false,
        "recording": true
      }
    ]
  }
}

= Checking Bitmap bitmap0 =
expecting 6 dirty sectors; have 6. OK!

= Checking Bitmap (anonymous) =
expecting 7 dirty sectors; have 7. OK!

{"execute": "job-cancel", "arguments": {"id": "backup_1"}}
{"return": {}}
{"data": {"id": "backup_1", "type": "backup"}, "event": "BLOCK_JOB_PENDING", "timestamp": {"microseconds": "USECS", "seconds": "SECS"}}
{"data": {"device": "backup_1", "len": 393216, "offset": 393216, "speed": 0, "type": "backup"}, "event": "BLOCK_JOB_CANCELLED", "timestamp": {"microseconds": "USECS", "seconds": "SECS"}}
{
  "bitmaps": {
    "drive0": [
      {
        "busy": false,
        "count": 458752,
        "granularity": 65536,
        "name": "bitmap0",
        "persistent": false,
        "recording": true
      }
    ]
  }
}

= Checking Bitmap bitmap0 =
expecting 7 dirty sectors; have 7. OK!

--- Write #3 ---

write -P0xaa 0x0010000 0x30000
{"return": ""}
write -P0xbb 0x00d8000 0x10000
{"return": ""}
write -P0xcc 0x2028000 0x10000
{"return": ""}
write -P0xdd 0x3fc0000 0x10000
{"return": ""}
{
  "bitmaps": {
    "drive0": [
      {
        "busy": false,
        "count": 786432,
        "granularity": 65536,
        "name": "bitmap0",
        "persistent": false,
        "recording": true
      }
    ]
  }
}

= Checking Bitmap bitmap0 =
expecting 12 dirty sectors; have 12. OK!

--- Reference Backup #2 ---

{}
{"execute": "job-dismiss", "arguments": {"id": "bdc-file-job"}}
{"return": {}}
{}
{}
{"execute": "job-dismiss", "arguments": {"id": "bdc-fmt-job"}}
{"return": {}}
{}
{"execute": "blockdev-backup", "arguments": {"device": "drive0", "filter-node-name": "backup-top", "job-id": "ref_backup_2", "sync": "full", "target": "ref_target_2", "x-perf": {"max-workers": 1}}}
{"return": {}}
{"data": {"device": "ref_backup_2", "len": 67108864, "offset": 67108864, "speed": 0, "type": "backup"}, "event": "BLOCK_JOB_COMPLETED", "timestamp": {"microseconds": "USECS", "seconds": "SECS"}}

--- Test Backup #2 ---

{}
{"execute": "job-dismiss", "arguments": {"id": "bdc-file-job"}}
{"return": {}}
{}
{}
{"execute": "job-dismiss", "arguments": {"id": "bdc-fmt-job"}}
{"return": {}}
{}
{"execute": "blockdev-backup", "arguments": {"auto-finalize": false, "bitmap": "bitmap0", "bitmap-mode": "always", "device": "drive0", "filter-node-name": "backup-top", "job-id": "backup_2", "sync": "bitmap", "target": "backup_target_2", "x-perf": {"max-workers": 1}}}
{"return": {}}
{"execute": "job-finalize", "arguments": {"id": "backup_2"}}
{"return": {}}
{"data": {"id": "backup_2", "type": "backup"}, "event": "BLOCK_JOB_PENDING", "timestamp": {"microseconds": "USECS", "seconds": "SECS"}}
{"data": {"device": "backup_2", "len": 786432, "offset": 786432, "speed": 0, "type": "backup"}, "event": "BLOCK_JOB_COMPLETED", "timestamp": {"microseconds": "USECS", "seconds": "SECS"}}
{
  "bitmaps": {
    "drive0": [
      {
        "busy": false,
        "count": 0,
        "granularity": 65536,
        "name": "bitmap0",
        "persistent": false,
        "recording": true
      }
    ]
  }
}

= Checking Bitmap bitmap0 =
expecting 0 dirty sectors; have 0. OK!

--- Cleanup ---

{"execute": "block-dirty-bitmap-remove", "arguments": {"name": "bitmap0", "node": "drive0"}}
{"return": {}}
{
  "bitmaps": {}
}

--- Verification ---

qemu_img compare "TEST_DIR/PID-bsync1" "TEST_DIR/PID-fbackup1" ==> Identical, OK!
qemu_img compare "TEST_DIR/PID-bsync2" "TEST_DIR/PID-fbackup2" ==> Identical, OK!
qemu_img compare "TEST_DIR/PID-img" "TEST_DIR/PID-fbackup2" ==> Identical, OK!


=== Mode bitmap; Bitmap Sync always with intermediate failure ===

--- Preparing image & VM ---

{"execute": "blockdev-add", "arguments": {"driver": "qcow2", "file": {"driver": "blkdebug", "image": {"driver": "file", "filename": "TEST_DIR/PID-img"}, "inject-error": [{"errno": 5, "event": "read_aio", "immediately": false, "once": true, "state": 3}], "set-state": [{"event": "flush_to_disk", "new-state": 2, "state": 1}, {"event": "read_aio", "new-state": 3, "state": 2}]}, "node-name": "drive0"}}
{"return": {}}

--- Write #0 ---

write -P0x49 0x0000000 0x10000
{"return": ""}
write -P0x6c 0x0100000 0x10000
{"return": ""}
write -P0x6f 0x2000000 0x10000
{"return": ""}
write -P0x76 0x3ff0000 0x10000
{"return": ""}
{
  "bitmaps": {}
}

--- Reference Backup #0 ---

{}
{"execute": "job-dismiss", "arguments": {"id": "bdc-file-job"}}
{"return": {}}
{}
{}
{"execute": "job-dismiss", "arguments": {"id": "bdc-fmt-job"}}
{"return": {}}
{}
{"execute": "blockdev-backup", "arguments": {"device": "drive0", "filter-node-name": "backup-top", "job-id": "ref_backup_0", "sync": "full", "target": "ref_target_0", "x-perf": {"max-workers": 1}}}
{"return": {}}
{"data": {"device": "ref_backup_0", "len": 67108864, "offset": 67108864, "speed": 0, "type": "backup"}, "event": "BLOCK_JOB_COMPLETED", "timestamp": {"microseconds": "USECS", "seconds": "SECS"}}

--- Add Bitmap ---

{"execute": "block-dirty-bitmap-add", "arguments": {"granularity": 65536, "name": "bitmap0", "node": "drive0"}}
{"return": {}}

--- Write #1 ---

write -P0x65 0x0000000 0x10000
{"return": ""}
write -P0x77 0x00f8000 0x10000
{"return": ""}
write -P0x72 0x2008000 0x10000
{"return": ""}
write -P0x69 0x3fe0000 0x10000
{"return": ""}
{
  "bitmaps": {
    "drive0": [
      {
        "busy": false,
        "count": 393216,
        "granularity": 65536,
        "name": "bitmap0",
        "persistent": false,
        "recording": true
      }
    ]
  }
}

= Checking Bitmap bitmap0 =
expecting 6 dirty sectors; have 6. OK!

--- Reference Backup #1 ---

{}
{"execute": "job-dismiss", "arguments": {"id": "bdc-file-job"}}
{"return": {}}
{}
{}
{"execute": "job-dismiss", "arguments": {"id": "bdc-fmt-job"}}
{"return": {}}
{}
{"execute": "blockdev-backup", "arguments": {"device": "drive0", "filter-node-name": "backup-top", "job-id": "ref_backup_1", "sync": "full", "target": "ref_target_1", "x-perf": {"max-workers": 1}}}
{"return": {}}
{"data": {"device": "ref_backup_1", "len": 67108864, "offset": 67108864, "speed": 0, "type": "backup"}, "event": "BLOCK_JOB_COMPLETED", "timestamp": {"microseconds": "USECS", "seconds": "SECS"}}

{"return": ""}

--- Test Backup #1 ---

{}
{"execute": "job-dismiss", "arguments": {"id": "bdc-file-job"}}
{"return": {}}
{}
{}
{"execute": "job-dismiss", "arguments": {"id": "bdc-fmt-job"}}
{"return": {}}
{}
{"execute": "blockdev-backup", "arguments": {"auto-finalize": false, "bitmap": "bitmap0", "bitmap-mode": "always", "device": "drive0", "filter-node-name": "backup-top", "job-id": "backup_1", "sync": "bitmap", "target": "backup_target_1", "x-perf": {"max-workers": 1}}}
{"return": {}}
{"data": {"action": "report", "device": "backup_1", "operation": "read"}, "event": "BLOCK_JOB_ERROR", "timestamp": {"microseconds": "USECS", "seconds": "SECS"}}
{"data": {"device": "backup_1", "error": "Input/output error", "len": 393216, "offset": 65536, "speed": 0, "type": "backup"}, "event": "BLOCK_JOB_COMPLETED", "timestamp": {"microseconds": "USECS", "seconds": "SECS"}}
{
  "bitmaps": {
    "drive0": [
      {
        "busy": false,
        "count": 327680,
        "granularity": 65536,
        "name": "bitmap0",
        "persistent": false,
        "recording": true
      }
    ]
  }
}

= Checking Bitmap bitmap0 =
expecting 5 dirty sectors; have 5. OK!

--- Write #3 ---

write -P0xaa 0x0010000 0x30000
{"return": ""}
write -P0xbb 0x00d8000 0x10000
{"return": ""}
write -P0xcc 0x2028000 0x10000
{"return": ""}
write -P0xdd 0x3fc0000 0x10000
{"return": ""}
{
  "bitmaps": {
    "drive0": [
      {
        "busy": false,
        "count": 851968,
        "granularity": 65536,
        "name": "bitmap0",
        "persistent": false,
        "recording": true
      }
    ]
  }
}

= Checking Bitmap bitmap0 =
expecting 13 dirty sectors; have 13. OK!

--- Reference Backup #2 ---

{}
{"execute": "job-dismiss", "arguments": {"id": "bdc-file-job"}}
{"return": {}}
{}
{}
{"execute": "job-dismiss", "arguments": {"id": "bdc-fmt-job"}}
{"return": {}}
{}
{"execute": "blockdev-backup", "arguments": {"device": "drive0", "filter-node-name": "backup-top", "job-id": "ref_backup_2", "sync": "full", "target": "ref_target_2", "x-perf": {"max-workers": 1}}}
{"return": {}}
{"data": {"device": "ref_backup_2", "len": 67108864, "offset": 67108864, "speed": 0, "type": "backup"}, "event": "BLOCK_JOB_COMPLETED", "timestamp": {"microseconds": "USECS", "seconds": "SECS"}}

--- Test Backup #2 ---

{}
{"execute": "job-dismiss", "arguments": {"id": "bdc-file-job"}}
{"return": {}}
{}
{}
{"execute": "job-dismiss", "arguments": {"id": "bdc-fmt-job"}}
{"return": {}}
{}
{"execute": "blockdev-backup", "arguments": {"auto-finalize": false, "bitmap": "bitmap0", "bitmap-mode": "always", "device": "drive0", "filter-node-name": "backup-top", "job-id": "backup_2", "sync": "bitmap", "target": "backup_target_2", "x-perf": {"max-workers": 1}}}
{"return": {}}
{"execute": "job-finalize", "arguments": {"id": "backup_2"}}
{"return": {}}
{"data": {"id": "backup_2", "type": "backup"}, "event": "BLOCK_JOB_PENDING", "timestamp": {"microseconds": "USECS", "seconds": "SECS"}}
{"data": {"device": "backup_2", "len": 851968, "offset": 851968, "speed": 0, "type": "backup"}, "event": "BLOCK_JOB_COMPLETED", "timestamp": {"microseconds": "USECS", "seconds": "SECS"}}
{
  "bitmaps": {
    "drive0": [
      {
        "busy": false,
        "count": 0,
        "granularity": 65536,
        "name": "bitmap0",
        "persistent": false,
        "recording": true
      }
    ]
  }
}

= Checking Bitmap bitmap0 =
expecting 0 dirty sectors; have 0. OK!

--- Cleanup ---

{"execute": "block-dirty-bitmap-remove", "arguments": {"name": "bitmap0", "node": "drive0"}}
{"return": {}}
{
  "bitmaps": {}
}

--- Verification ---

qemu_img compare "TEST_DIR/PID-bsync1" "TEST_DIR/PID-fbackup1" ==> Mismatch, OK!
qemu_img compare "TEST_DIR/PID-bsync2" "TEST_DIR/PID-fbackup2" ==> Identical, OK!
qemu_img compare "TEST_DIR/PID-img" "TEST_DIR/PID-fbackup2" ==> Identical, OK!


=== Mode bitmap; Bitmap Sync always without failure ===

--- Preparing image & VM ---

{"execute": "blockdev-add", "arguments": {"driver": "qcow2", "file": {"driver": "file", "filename": "TEST_DIR/PID-img"}, "node-name": "drive0"}}
{"return": {}}

--- Write #0 ---

write -P0x49 0x0000000 0x10000
{"return": ""}
write -P0x6c 0x0100000 0x10000
{"return": ""}
write -P0x6f 0x2000000 0x10000
{"return": ""}
write -P0x76 0x3ff0000 0x10000
{"return": ""}
{
  "bitmaps": {}
}

--- Reference Backup #0 ---

{}
{"execute": "job-dismiss", "arguments": {"id": "bdc-file-job"}}
{"return": {}}
{}
{}
{"execute": "job-dismiss", "arguments": {"id": "bdc-fmt-job"}}
{"return": {}}
{}
{"execute": "blockdev-backup", "arguments": {"device": "drive0", "filter-node-name": "backup-top", "job-id": "ref_backup_0", "sync": "full", "target": "ref_target_0", "x-perf": {"max-workers": 1}}}
{"return": {}}
{"data": {"device": "ref_backup_0", "len": 67108864, "offset": 67108864, "speed": 0, "type": "backup"}, "event": "BLOCK_JOB_COMPLETED", "timestamp": {"microseconds": "USECS", "seconds": "SECS"}}

--- Add Bitmap ---

{"execute": "block-dirty-bitmap-add", "arguments": {"granularity": 65536, "name": "bitmap0", "node": "drive0"}}
{"return": {}}

--- Write #1 ---

write -P0x65 0x0000000 0x10000
{"return": ""}
write -P0x77 0x00f8000 0x10000
{"return": ""}
write -P0x72 0x2008000 0x10000
{"return": ""}
write -P0x69 0x3fe0000 0x10000
{"return": ""}
{
  "bitmaps": {
    "drive0": [
      {
        "busy": false,
        "count": 393216,
        "granularity": 65536,
        "name": "bitmap0",
        "persistent": false,
        "recording": true
      }
    ]
  }
}

= Checking Bitmap bitmap0 =
expecting 6 dirty sectors; have 6. OK!

--- Reference Backup #1 ---

{}
{"execute": "job-dismiss", "arguments": {"id": "bdc-file-job"}}
{"return": {}}
{}
{}
{"execute": "job-dismiss", "arguments": {"id": "bdc-fmt-job"}}
{"return": {}}
{}
{"execute": "blockdev-backup", "arguments": {"device": "drive0", "filter-node-name": "backup-top", "job-id": "ref_backup_1", "sync": "full", "target": "ref_target_1", "x-perf": {"max-workers": 1}}}
{"return": {}}
{"data": {"device": "ref_backup_1", "len": 67108864, "offset": 67108864, "speed": 0, "type": "backup"}, "event": "BLOCK_JOB_COMPLETED", "timestamp": {"microseconds": "USECS", "seconds": "SECS"}}

--- Test Backup #1 ---

{}
{"execute": "job-dismiss", "arguments": {"id": "bdc-file-job"}}
{"return": {}}
{}
{}
{"execute": "job-dismiss", "arguments": {"id": "bdc-fmt-job"}}
{"return": {}}
{}
{"execute": "blockdev-backup", "arguments": {"auto-finalize": false, "bitmap": "bitmap0", "bitmap-mode": "always", "device": "drive0", "filter-node-name": "backup-top", "job-id": "backup_1", "sync": "bitmap", "target": "backup_target_1", "x-perf": {"max-workers": 1}}}
{"return": {}}

--- Write #2 ---

write -P0x74 0x0010000 0x10000
{"return": ""}
write -P0x69 0x00e8000 0x10000
{"return": ""}
write -P0x6e 0x2018000 0x10000
{"return": ""}
write -P0x67 0x3fe0000 0x20000
{"return": ""}
{
  "bitmaps": {
    "backup-top": [
      {
        "busy": false,
        "count": 67108864,
        "granularity": 65536,
        "persistent": false,
        "recording": false
      },
      {
        "busy": false,
        "count": 458752,
        "granularity": 65536,
        "persistent": false,
        "recording": false
      }
    ],
    "drive0": [
      {
        "busy": false,
        "count": 0,
        "granularity": 65536,
        "persistent": false,
        "recording": false
      },
      {
        "busy": false,
        "count": 458752,
        "granularity": 65536,
        "persistent": false,
        "recording": true
      },
      {
        "busy": true,
        "count": 393216,
        "granularity": 65536,
        "name": "bitmap0",
        "persistent": false,
        "recording": true
      }
    ]
  }
}

= Checking Bitmap bitmap0 =
expecting 6 dirty sectors; have 6. OK!

= Checking Bitmap (anonymous) =
expecting 7 dirty sectors; have 7. OK!

{"execute": "job-finalize", "arguments": {"id": "backup_1"}}
{"return": {}}
{"data": {"id": "backup_1", "type": "backup"}, "event": "BLOCK_JOB_PENDING", "timestamp": {"microseconds": "USECS", "seconds": "SECS"}}
{"data": {"device": "backup_1", "len": 393216, "offset": 393216, "speed": 0, "type": "backup"}, "event": "BLOCK_JOB_COMPLETED", "timestamp": {"microseconds": "USECS", "seconds": "SECS"}}
{
  "bitmaps": {
    "drive0": [
      {
        "busy": false,
        "count": 458752,
        "granularity": 65536,
        "name": "bitmap0",
        "persistent": false,
        "recording": true
      }
    ]
  }
}

= Checking Bitmap bitmap0 =
expecting 7 dirty sectors; have 7. OK!

--- Write #3 ---

write -P0xaa 0x0010000 0x30000
{"return": ""}
write -P0xbb 0x00d8000 0x10000
{"return": ""}
write -P0xcc 0x2028000 0x10000
{"return": ""}
write -P0xdd 0x3fc0000 0x10000
{"return": ""}
{
  "bitmaps": {
    "drive0": [
      {
        "busy": false,
        "count": 786432,
        "granularity": 65536,
        "name": "bitmap0",
        "persistent": false,
        "recording": true
      }
    ]
  }
}

= Checking Bitmap bitmap0 =
expecting 12 dirty sectors; have 12. OK!

--- Reference Backup #2 ---

{}
{"execute": "job-dismiss", "arguments": {"id": "bdc-file-job"}}
{"return": {}}
{}
{}
{"execute": "job-dismiss", "arguments": {"id": "bdc-fmt-job"}}
{"return": {}}
{}
{"execute": "blockdev-backup", "arguments": {"device": "drive0", "filter-node-name": "backup-top", "job-id": "ref_backup_2", "sync": "full", "target": "ref_target_2", "x-perf": {"max-workers": 1}}}
{"return": {}}
{"data": {"device": "ref_backup_2", "len": 67108864, "offset": 67108864, "speed": 0, "type": "backup"}, "event": "BLOCK_JOB_COMPLETED", "timestamp": {"microseconds": "USECS", "seconds": "SECS"}}

--- Test Backup #2 ---

{}
{"execute": "job-dismiss", "arguments": {"id": "bdc-file-job"}}
{"return": {}}
{}
{}
{"execute": "job-dismiss", "arguments": {"id": "bdc-fmt-job"}}
{"return": {}}
{}
{"execute": "blockdev-backup", "arguments": {"auto-finalize": false, "bitmap": "bitmap0", "bitmap-mode": "always", "device": "drive0", "filter-node-name": "backup-top", "job-id": "backup_2", "sync": "bitmap", "target": "backup_target_2", "x-perf": {"max-workers": 1}}}
{"return": {}}
{"execute": "job-finalize", "arguments": {"id": "backup_2"}}
{"return": {}}
{"data": {"id": "backup_2", "type": "backup"}, "event": "BLOCK_JOB_PENDING", "timestamp": {"microseconds": "USECS", "seconds": "SECS"}}
{"data": {"device": "backup_2", "len": 786432, "offset": 786432, "speed": 0, "type": "backup"}, "event": "BLOCK_JOB_COMPLETED", "timestamp": {"microseconds": "USECS", "seconds": "SECS"}}
{
  "bitmaps": {
    "drive0": [
      {
        "busy": false,
        "count": 0,
        "granularity": 65536,
        "name": "bitmap0",
        "persistent": false,
        "recording": true
      }
    ]
  }
}

= Checking Bitmap bitmap0 =
expecting 0 dirty sectors; have 0. OK!

--- Cleanup ---

{"execute": "block-dirty-bitmap-remove", "arguments": {"name": "bitmap0", "node": "drive0"}}
{"return": {}}
{
  "bitmaps": {}
}

--- Verification ---

qemu_img compare "TEST_DIR/PID-bsync1" "TEST_DIR/PID-fbackup1" ==> Identical, OK!
qemu_img compare "TEST_DIR/PID-bsync2" "TEST_DIR/PID-fbackup2" ==> Identical, OK!
qemu_img compare "TEST_DIR/PID-img" "TEST_DIR/PID-fbackup2" ==> Identical, OK!


=== Mode full; Bitmap Sync on-success with simulated failure ===

--- Preparing image & VM ---

{"execute": "blockdev-add", "arguments": {"driver": "qcow2", "file": {"driver": "file", "filename": "TEST_DIR/PID-img"}, "node-name": "drive0"}}
{"return": {}}

--- Write #0 ---

write -P0x49 0x0000000 0x10000
{"return": ""}
write -P0x6c 0x0100000 0x10000
{"return": ""}
write -P0x6f 0x2000000 0x10000
{"return": ""}
write -P0x76 0x3ff0000 0x10000
{"return": ""}
{
  "bitmaps": {}
}

--- Reference Backup #0 ---

{}
{"execute": "job-dismiss", "arguments": {"id": "bdc-file-job"}}
{"return": {}}
{}
{}
{"execute": "job-dismiss", "arguments": {"id": "bdc-fmt-job"}}
{"return": {}}
{}
{"execute": "blockdev-backup", "arguments": {"device": "drive0", "filter-node-name": "backup-top", "job-id": "ref_backup_0", "sync": "full", "target": "ref_target_0", "x-perf": {"max-workers": 1}}}
{"return": {}}
{"data": {"device": "ref_backup_0", "len": 67108864, "offset": 67108864, "speed": 0, "type": "backup"}, "event": "BLOCK_JOB_COMPLETED", "timestamp": {"microseconds": "USECS", "seconds": "SECS"}}

--- Add Bitmap ---

{"execute": "block-dirty-bitmap-add", "arguments": {"granularity": 65536, "name": "bitmap0", "node": "drive0"}}
{"return": {}}

--- Write #1 ---

write -P0x65 0x0000000 0x10000
{"return": ""}
write -P0x77 0x00f8000 0x10000
{"return": ""}
write -P0x72 0x2008000 0x10000
{"return": ""}
write -P0x69 0x3fe0000 0x10000
{"return": ""}
{
  "bitmaps": {
    "drive0": [
      {
        "busy": false,
        "count": 393216,
        "granularity": 65536,
        "name": "bitmap0",
        "persistent": false,
        "recording": true
      }
    ]
  }
}

= Checking Bitmap bitmap0 =
expecting 6 dirty sectors; have 6. OK!

--- Reference Backup #1 ---

{}
{"execute": "job-dismiss", "arguments": {"id": "bdc-file-job"}}
{"return": {}}
{}
{}
{"execute": "job-dismiss", "arguments": {"id": "bdc-fmt-job"}}
{"return": {}}
{}
{"execute": "blockdev-backup", "arguments": {"device": "drive0", "filter-node-name": "backup-top", "job-id": "ref_backup_1", "sync": "full", "target": "ref_target_1", "x-perf": {"max-workers": 1}}}
{"return": {}}
{"data": {"device": "ref_backup_1", "len": 67108864, "offset": 67108864, "speed": 0, "type": "backup"}, "event": "BLOCK_JOB_COMPLETED", "timestamp": {"microseconds": "USECS", "seconds": "SECS"}}

--- Test Backup #1 ---

{}
{"execute": "job-dismiss", "arguments": {"id": "bdc-file-job"}}
{"return": {}}
{}
{}
{"execute": "job-dismiss", "arguments": {"id": "bdc-fmt-job"}}
{"return": {}}
{}
{"execute": "blockdev-backup", "arguments": {"auto-finalize": false, "bitmap": "bitmap0", "bitmap-mode": "on-success", "device": "drive0", "filter-node-name": "backup-top", "job-id": "backup_1", "sync": "full", "target": "backup_target_1", "x-perf": {"max-workers": 1}}}
{"return": {}}

--- Write #2 ---

write -P0x74 0x0010000 0x10000
{"return": ""}
write -P0x69 0x00e8000 0x10000
{"return": ""}
write -P0x6e 0x2018000 0x10000
{"return": ""}
write -P0x67 0x3fe0000 0x20000
{"return": ""}
{
  "bitmaps": {
    "backup-top": [
      {
        "busy": false,
        "count": 67108864,
        "granularity": 65536,
        "persistent": false,
        "recording": false
      },
      {
        "busy": false,
        "count": 458752,
        "granularity": 65536,
        "persistent": false,
        "recording": false
      }
    ],
    "drive0": [
      {
        "busy": false,
        "count": 0,
        "granularity": 65536,
        "persistent": false,
        "recording": false
      },
      {
        "busy": false,
        "count": 458752,
        "granularity": 65536,
        "persistent": false,
        "recording": true
      },
      {
        "busy": true,
        "count": 393216,
        "granularity": 65536,
        "name": "bitmap0",
        "persistent": false,
        "recording": true
      }
    ]
  }
}

= Checking Bitmap bitmap0 =
expecting 6 dirty sectors; have 6. OK!

= Checking Bitmap (anonymous) =
expecting 7 dirty sectors; have 7. OK!

{"execute": "job-cancel", "arguments": {"id": "backup_1"}}
{"return": {}}
{"data": {"id": "backup_1", "type": "backup"}, "event": "BLOCK_JOB_PENDING", "timestamp": {"microseconds": "USECS", "seconds": "SECS"}}
{"data": {"device": "backup_1", "len": 67108864, "offset": 67108864, "speed": 0, "type": "backup"}, "event": "BLOCK_JOB_CANCELLED", "timestamp": {"microseconds": "USECS", "seconds": "SECS"}}
{
  "bitmaps": {
    "drive0": [
      {
        "busy": false,
        "count": 655360,
        "granularity": 65536,
        "name": "bitmap0",
        "persistent": false,
        "recording": true
      }
    ]
  }
}

= Checking Bitmap bitmap0 =
expecting 10 dirty sectors; have 10. OK!

--- Write #3 ---

write -P0xaa 0x0010000 0x30000
{"return": ""}
write -P0xbb 0x00d8000 0x10000
{"return": ""}
write -P0xcc 0x2028000 0x10000
{"return": ""}
write -P0xdd 0x3fc0000 0x10000
{"return": ""}
{
  "bitmaps": {
    "drive0": [
      {
        "busy": false,
        "count": 983040,
        "granularity": 65536,
        "name": "bitmap0",
        "persistent": false,
        "recording": true
      }
    ]
  }
}

= Checking Bitmap bitmap0 =
expecting 15 dirty sectors; have 15. OK!

--- Reference Backup #2 ---

{}
{"execute": "job-dismiss", "arguments": {"id": "bdc-file-job"}}
{"return": {}}
{}
{}
{"execute": "job-dismiss", "arguments": {"id": "bdc-fmt-job"}}
{"return": {}}
{}
{"execute": "blockdev-backup", "arguments": {"device": "drive0", "filter-node-name": "backup-top", "job-id": "ref_backup_2", "sync": "full", "target": "ref_target_2", "x-perf": {"max-workers": 1}}}
{"return": {}}
{"data": {"device": "ref_backup_2", "len": 67108864, "offset": 67108864, "speed": 0, "type": "backup"}, "event": "BLOCK_JOB_COMPLETED", "timestamp": {"microseconds": "USECS", "seconds": "SECS"}}

--- Test Backup #2 ---

{}
{"execute": "job-dismiss", "arguments": {"id": "bdc-file-job"}}
{"return": {}}
{}
{}
{"execute": "job-dismiss", "arguments": {"id": "bdc-fmt-job"}}
{"return": {}}
{}
{"execute": "blockdev-backup", "arguments": {"auto-finalize": false, "bitmap": "bitmap0", "bitmap-mode": "on-success", "device": "drive0", "filter-node-name": "backup-top", "job-id": "backup_2", "sync": "bitmap", "target": "backup_target_2", "x-perf": {"max-workers": 1}}}
{"return": {}}
{"execute": "job-finalize", "arguments": {"id": "backup_2"}}
{"return": {}}
{"data": {"id": "backup_2", "type": "backup"}, "event": "BLOCK_JOB_PENDING", "timestamp": {"microseconds": "USECS", "seconds": "SECS"}}
{"data": {"device": "backup_2", "len": 983040, "offset": 983040, "speed": 0, "type": "backup"}, "event": "BLOCK_JOB_COMPLETED", "timestamp": {"microseconds": "USECS", "seconds": "SECS"}}
{
  "bitmaps": {
    "drive0": [
      {
        "busy": false,
        "count": 0,
        "granularity": 65536,
        "name": "bitmap0",
        "persistent": false,
        "recording": true
      }
    ]
  }
}

= Checking Bitmap bitmap0 =
expecting 0 dirty sectors; have 0. OK!

--- Cleanup ---

{"execute": "block-dirty-bitmap-remove", "arguments": {"name": "bitmap0", "node": "drive0"}}
{"return": {}}
{
  "bitmaps": {}
}

--- Verification ---

qemu_img compare "TEST_DIR/PID-bsync1" "TEST_DIR/PID-fbackup1" ==> Identical, OK!
qemu_img compare "TEST_DIR/PID-bsync2" "TEST_DIR/PID-fbackup2" ==> Identical, OK!
qemu_img compare "TEST_DIR/PID-img" "TEST_DIR/PID-fbackup2" ==> Identical, OK!


=== Mode full; Bitmap Sync on-success with intermediate failure ===

--- Preparing image & VM ---

{"execute": "blockdev-add", "arguments": {"driver": "qcow2", "file": {"driver": "blkdebug", "image": {"driver": "file", "filename": "TEST_DIR/PID-img"}, "inject-error": [{"errno": 5, "event": "read_aio", "immediately": false, "once": true, "state": 3}], "set-state": [{"event": "flush_to_disk", "new-state": 2, "state": 1}, {"event": "read_aio", "new-state": 3, "state": 2}]}, "node-name": "drive0"}}
{"return": {}}

--- Write #0 ---

write -P0x49 0x0000000 0x10000
{"return": ""}
write -P0x6c 0x0100000 0x10000
{"return": ""}
write -P0x6f 0x2000000 0x10000
{"return": ""}
write -P0x76 0x3ff0000 0x10000
{"return": ""}
{
  "bitmaps": {}
}

--- Reference Backup #0 ---

{}
{"execute": "job-dismiss", "arguments": {"id": "bdc-file-job"}}
{"return": {}}
{}
{}
{"execute": "job-dismiss", "arguments": {"id": "bdc-fmt-job"}}
{"return": {}}
{}
{"execute": "blockdev-backup", "arguments": {"device": "drive0", "filter-node-name": "backup-top", "job-id": "ref_backup_0", "sync": "full", "target": "ref_target_0", "x-perf": {"max-workers": 1}}}
{"return": {}}
{"data": {"device": "ref_backup_0", "len": 67108864, "offset": 67108864, "speed": 0, "type": "backup"}, "event": "BLOCK_JOB_COMPLETED", "timestamp": {"microseconds": "USECS", "seconds": "SECS"}}

--- Add Bitmap ---

{"execute": "block-dirty-bitmap-add", "arguments": {"granularity": 65536, "name": "bitmap0", "node": "drive0"}}
{"return": {}}

--- Write #1 ---

write -P0x65 0x0000000 0x10000
{"return": ""}
write -P0x77 0x00f8000 0x10000
{"return": ""}
write -P0x72 0x2008000 0x10000
{"return": ""}
write -P0x69 0x3fe0000 0x10000
{"return": ""}
{
  "bitmaps": {
    "drive0": [
      {
        "busy": false,
        "count": 393216,
        "granularity": 65536,
        "name": "bitmap0",
        "persistent": false,
        "recording": true
      }
    ]
  }
}

= Checking Bitmap bitmap0 =
expecting 6 dirty sectors; have 6. OK!

--- Reference Backup #1 ---

{}
{"execute": "job-dismiss", "arguments": {"id": "bdc-file-job"}}
{"return": {}}
{}
{}
{"execute": "job-dismiss", "arguments": {"id": "bdc-fmt-job"}}
{"return": {}}
{}
{"execute": "blockdev-backup", "arguments": {"device": "drive0", "filter-node-name": "backup-top", "job-id": "ref_backup_1", "sync": "full", "target": "ref_target_1", "x-perf": {"max-workers": 1}}}
{"return": {}}
{"data": {"device": "ref_backup_1", "len": 67108864, "offset": 67108864, "speed": 0, "type": "backup"}, "event": "BLOCK_JOB_COMPLETED", "timestamp": {"microseconds": "USECS", "seconds": "SECS"}}

{"return": ""}

--- Test Backup #1 ---

{}
{"execute": "job-dismiss", "arguments": {"id": "bdc-file-job"}}
{"return": {}}
{}
{}
{"execute": "job-dismiss", "arguments": {"id": "bdc-fmt-job"}}
{"return": {}}
{}
{"execute": "blockdev-backup", "arguments": {"auto-finalize": false, "bitmap": "bitmap0", "bitmap-mode": "on-success", "device": "drive0", "filter-node-name": "backup-top", "job-id": "backup_1", "sync": "full", "target": "backup_target_1", "x-perf": {"max-workers": 1}}}
{"return": {}}
{"data": {"action": "report", "device": "backup_1", "operation": "read"}, "event": "BLOCK_JOB_ERROR", "timestamp": {"microseconds": "USECS", "seconds": "SECS"}}
{"data": {"device": "backup_1", "error": "Input/output error", "len": 67108864, "offset": 983040, "speed": 0, "type": "backup"}, "event": "BLOCK_JOB_COMPLETED", "timestamp": {"microseconds": "USECS", "seconds": "SECS"}}
{
  "bitmaps": {
    "drive0": [
      {
        "busy": false,
        "count": 393216,
        "granularity": 65536,
        "name": "bitmap0",
        "persistent": false,
        "recording": true
      }
    ]
  }
}

= Checking Bitmap bitmap0 =
expecting 6 dirty sectors; have 6. OK!

--- Write #3 ---

write -P0xaa 0x0010000 0x30000
{"return": ""}
write -P0xbb 0x00d8000 0x10000
{"return": ""}
write -P0xcc 0x2028000 0x10000
{"return": ""}
write -P0xdd 0x3fc0000 0x10000
{"return": ""}
{
  "bitmaps": {
    "drive0": [
      {
        "busy": false,
        "count": 917504,
        "granularity": 65536,
        "name": "bitmap0",
        "persistent": false,
        "recording": true
      }
    ]
  }
}

= Checking Bitmap bitmap0 =
expecting 14 dirty sectors; have 14. OK!

--- Reference Backup #2 ---

{}
{"execute": "job-dismiss", "arguments": {"id": "bdc-file-job"}}
{"return": {}}
{}
{}
{"execute": "job-dismiss", "arguments": {"id": "bdc-fmt-job"}}
{"return": {}}
{}
{"execute": "blockdev-backup", "arguments": {"device": "drive0", "filter-node-name": "backup-top", "job-id": "ref_backup_2", "sync": "full", "target": "ref_target_2", "x-perf": {"max-workers": 1}}}
{"return": {}}
{"data": {"device": "ref_backup_2", "len": 67108864, "offset": 67108864, "speed": 0, "type": "backup"}, "event": "BLOCK_JOB_COMPLETED", "timestamp": {"microseconds": "USECS", "seconds": "SECS"}}

--- Test Backup #2 ---

{}
{"execute": "job-dismiss", "arguments": {"id": "bdc-file-job"}}
{"return": {}}
{}
{}
{"execute": "job-dismiss", "arguments": {"id": "bdc-fmt-job"}}
{"return": {}}
{}
{"execute": "blockdev-backup", "arguments": {"auto-finalize": false, "bitmap": "bitmap0", "bitmap-mode": "on-success", "device": "drive0", "filter-node-name": "backup-top", "job-id": "backup_2", "sync": "bitmap", "target": "backup_target_2", "x-perf": {"max-workers": 1}}}
{"return": {}}
{"execute": "job-finalize", "arguments": {"id": "backup_2"}}
{"return": {}}
{"data": {"id": "backup_2", "type": "backup"}, "event": "BLOCK_JOB_PENDING", "timestamp": {"microseconds": "USECS", "seconds": "SECS"}}
{"data": {"device": "backup_2", "len": 917504, "offset": 917504, "speed": 0, "type": "backup"}, "event": "BLOCK_JOB_COMPLETED", "timestamp": {"microseconds": "USECS", "seconds": "SECS"}}
{
  "bitmaps": {
    "drive0": [
      {
        "busy": false,
        "count": 0,
        "granularity": 65536,
        "name": "bitmap0",
        "persistent": false,
        "recording": true
      }
    ]
  }
}

= Checking Bitmap bitmap0 =
expecting 0 dirty sectors; have 0. OK!

--- Cleanup ---

{"execute": "block-dirty-bitmap-remove", "arguments": {"name": "bitmap0", "node": "drive0"}}
{"return": {}}
{
  "bitmaps": {}
}

--- Verification ---

qemu_img compare "TEST_DIR/PID-bsync1" "TEST_DIR/PID-fbackup1" ==> Mismatch, OK!
qemu_img compare "TEST_DIR/PID-bsync2" "TEST_DIR/PID-fbackup2" ==> Identical, OK!
qemu_img compare "TEST_DIR/PID-img" "TEST_DIR/PID-fbackup2" ==> Identical, OK!


=== Mode full; Bitmap Sync on-success without failure ===

--- Preparing image & VM ---

{"execute": "blockdev-add", "arguments": {"driver": "qcow2", "file": {"driver": "file", "filename": "TEST_DIR/PID-img"}, "node-name": "drive0"}}
{"return": {}}

--- Write #0 ---

write -P0x49 0x0000000 0x10000
{"return": ""}
write -P0x6c 0x0100000 0x10000
{"return": ""}
write -P0x6f 0x2000000 0x10000
{"return": ""}
write -P0x76 0x3ff0000 0x10000
{"return": ""}
{
  "bitmaps": {}
}

--- Reference Backup #0 ---

{}
{"execute": "job-dismiss", "arguments": {"id": "bdc-file-job"}}
{"return": {}}
{}
{}
{"execute": "job-dismiss", "arguments": {"id": "bdc-fmt-job"}}
{"return": {}}
{}
{"execute": "blockdev-backup", "arguments": {"device": "drive0", "filter-node-name": "backup-top", "job-id": "ref_backup_0", "sync": "full", "target": "ref_target_0", "x-perf": {"max-workers": 1}}}
{"return": {}}
{"data": {"device": "ref_backup_0", "len": 67108864, "offset": 67108864, "speed": 0, "type": "backup"}, "event": "BLOCK_JOB_COMPLETED", "timestamp": {"microseconds": "USECS", "seconds": "SECS"}}

--- Add Bitmap ---

{"execute": "block-dirty-bitmap-add", "arguments": {"granularity": 65536, "name": "bitmap0", "node": "drive0"}}
{"return": {}}

--- Write #1 ---

write -P0x65 0x0000000 0x10000
{"return": ""}
write -P0x77 0x00f8000 0x10000
{"return": ""}
write -P0x72 0x2008000 0x10000
{"return": ""}
write -P0x69 0x3fe0000 0x10000
{"return": ""}
{
  "bitmaps": {
    "drive0": [
      {
        "busy": false,
        "count": 393216,
        "granularity": 65536,
        "name": "bitmap0",
        "persistent": false,
        "recording": true
      }
    ]
  }
}

= Checking Bitmap bitmap0 =
expecting 6 dirty sectors; have 6. OK!

--- Reference Backup #1 ---

{}
{"execute": "job-dismiss", "arguments": {"id": "bdc-file-job"}}
{"return": {}}
{}
{}
{"execute": "job-dismiss", "arguments": {"id": "bdc-fmt-job"}}
{"return": {}}
{}
{"execute": "blockdev-backup", "arguments": {"device": "drive0", "filter-node-name": "backup-top", "job-id": "ref_backup_1", "sync": "full", "target": "ref_target_1", "x-perf": {"max-workers": 1}}}
{"return": {}}
{"data": {"device": "ref_backup_1", "len": 67108864, "offset": 67108864, "speed": 0, "type": "backup"}, "event": "BLOCK_JOB_COMPLETED", "timestamp": {"microseconds": "USECS", "seconds": "SECS"}}

--- Test Backup #1 ---

{}
{"execute": "job-dismiss", "arguments": {"id": "bdc-file-job"}}
{"return": {}}
{}
{}
{"execute": "job-dismiss", "arguments": {"id": "bdc-fmt-job"}}
{"return": {}}
{}
{"execute": "blockdev-backup", "arguments": {"auto-finalize": false, "bitmap": "bitmap0", "bitmap-mode": "on-success", "device": "drive0", "filter-node-name": "backup-top", "job-id": "backup_1", "sync": "full", "target": "backup_target_1", "x-perf": {"max-workers": 1}}}
{"return": {}}

--- Write #2 ---

write -P0x74 0x0010000 0x10000
{"return": ""}
write -P0x69 0x00e8000 0x10000
{"return": ""}
write -P0x6e 0x2018000 0x10000
{"return": ""}
write -P0x67 0x3fe0000 0x20000
{"return": ""}
{
  "bitmaps": {
    "backup-top": [
      {
        "busy": false,
        "count": 67108864,
        "granularity": 65536,
        "persistent": false,
        "recording": false
      },
      {
        "busy": false,
        "count": 458752,
        "granularity": 65536,
        "persistent": false,
        "recording": false
      }
    ],
    "drive0": [
      {
        "busy": false,
        "count": 0,
        "granularity": 65536,
        "persistent": false,
        "recording": false
      },
      {
        "busy": false,
        "count": 458752,
        "granularity": 65536,
        "persistent": false,
        "recording": true
      },
      {
        "busy": true,
        "count": 393216,
        "granularity": 65536,
        "name": "bitmap0",
        "persistent": false,
        "recording": true
      }
    ]
  }
}

= Checking Bitmap bitmap0 =
expecting 6 dirty sectors; have 6. OK!

= Checking Bitmap (anonymous) =
expecting 7 dirty sectors; have 7. OK!

{"execute": "job-finalize", "arguments": {"id": "backup_1"}}
{"return": {}}
{"data": {"id": "backup_1", "type": "backup"}, "event": "BLOCK_JOB_PENDING", "timestamp": {"microseconds": "USECS", "seconds": "SECS"}}
{"data": {"device": "backup_1", "len": 67108864, "offset": 67108864, "speed": 0, "type": "backup"}, "event": "BLOCK_JOB_COMPLETED", "timestamp": {"microseconds": "USECS", "seconds": "SECS"}}
{
  "bitmaps": {
    "drive0": [
      {
        "busy": false,
        "count": 458752,
        "granularity": 65536,
        "name": "bitmap0",
        "persistent": false,
        "recording": true
      }
    ]
  }
}

= Checking Bitmap bitmap0 =
expecting 7 dirty sectors; have 7. OK!

--- Write #3 ---

write -P0xaa 0x0010000 0x30000
{"return": ""}
write -P0xbb 0x00d8000 0x10000
{"return": ""}
write -P0xcc 0x2028000 0x10000
{"return": ""}
write -P0xdd 0x3fc0000 0x10000
{"return": ""}
{
  "bitmaps": {
    "drive0": [
      {
        "busy": false,
        "count": 786432,
        "granularity": 65536,
        "name": "bitmap0",
        "persistent": false,
        "recording": true
      }
    ]
  }
}

= Checking Bitmap bitmap0 =
expecting 12 dirty sectors; have 12. OK!

--- Reference Backup #2 ---

{}
{"execute": "job-dismiss", "arguments": {"id": "bdc-file-job"}}
{"return": {}}
{}
{}
{"execute": "job-dismiss", "arguments": {"id": "bdc-fmt-job"}}
{"return": {}}
{}
{"execute": "blockdev-backup", "arguments": {"device": "drive0", "filter-node-name": "backup-top", "job-id": "ref_backup_2", "sync": "full", "target": "ref_target_2", "x-perf": {"max-workers": 1}}}
{"return": {}}
{"data": {"device": "ref_backup_2", "len": 67108864, "offset": 67108864, "speed": 0, "type": "backup"}, "event": "BLOCK_JOB_COMPLETED", "timestamp": {"microseconds": "USECS", "seconds": "SECS"}}

--- Test Backup #2 ---

{}
{"execute": "job-dismiss", "arguments": {"id": "bdc-file-job"}}
{"return": {}}
{}
{}
{"execute": "job-dismiss", "arguments": {"id": "bdc-fmt-job"}}
{"return": {}}
{}
{"execute": "blockdev-backup", "arguments": {"auto-finalize": false, "bitmap": "bitmap0", "bitmap-mode": "on-success", "device": "drive0", "filter-node-name": "backup-top", "job-id": "backup_2", "sync": "bitmap", "target": "backup_target_2", "x-perf": {"max-workers": 1}}}
{"return": {}}
{"execute": "job-finalize", "arguments": {"id": "backup_2"}}
{"return": {}}
{"data": {"id": "backup_2", "type": "backup"}, "event": "BLOCK_JOB_PENDING", "timestamp": {"microseconds": "USECS", "seconds": "SECS"}}
{"data": {"device": "backup_2", "len": 786432, "offset": 786432, "speed": 0, "type": "backup"}, "event": "BLOCK_JOB_COMPLETED", "timestamp": {"microseconds": "USECS", "seconds": "SECS"}}
{
  "bitmaps": {
    "drive0": [
      {
        "busy": false,
        "count": 0,
        "granularity": 65536,
        "name": "bitmap0",
        "persistent": false,
        "recording": true
      }
    ]
  }
}

= Checking Bitmap bitmap0 =
expecting 0 dirty sectors; have 0. OK!

--- Cleanup ---

{"execute": "block-dirty-bitmap-remove", "arguments": {"name": "bitmap0", "node": "drive0"}}
{"return": {}}
{
  "bitmaps": {}
}

--- Verification ---

qemu_img compare "TEST_DIR/PID-bsync1" "TEST_DIR/PID-fbackup1" ==> Identical, OK!
qemu_img compare "TEST_DIR/PID-bsync2" "TEST_DIR/PID-fbackup2" ==> Identical, OK!
qemu_img compare "TEST_DIR/PID-img" "TEST_DIR/PID-fbackup2" ==> Identical, OK!


=== Mode full; Bitmap Sync always with simulated failure ===

--- Preparing image & VM ---

{"execute": "blockdev-add", "arguments": {"driver": "qcow2", "file": {"driver": "file", "filename": "TEST_DIR/PID-img"}, "node-name": "drive0"}}
{"return": {}}

--- Write #0 ---

write -P0x49 0x0000000 0x10000
{"return": ""}
write -P0x6c 0x0100000 0x10000
{"return": ""}
write -P0x6f 0x2000000 0x10000
{"return": ""}
write -P0x76 0x3ff0000 0x10000
{"return": ""}
{
  "bitmaps": {}
}

--- Reference Backup #0 ---

{}
{"execute": "job-dismiss", "arguments": {"id": "bdc-file-job"}}
{"return": {}}
{}
{}
{"execute": "job-dismiss", "arguments": {"id": "bdc-fmt-job"}}
{"return": {}}
{}
{"execute": "blockdev-backup", "arguments": {"device": "drive0", "filter-node-name": "backup-top", "job-id": "ref_backup_0", "sync": "full", "target": "ref_target_0", "x-perf": {"max-workers": 1}}}
{"return": {}}
{"data": {"device": "ref_backup_0", "len": 67108864, "offset": 67108864, "speed": 0, "type": "backup"}, "event": "BLOCK_JOB_COMPLETED", "timestamp": {"microseconds": "USECS", "seconds": "SECS"}}

--- Add Bitmap ---

{"execute": "block-dirty-bitmap-add", "arguments": {"granularity": 65536, "name": "bitmap0", "node": "drive0"}}
{"return": {}}

--- Write #1 ---

write -P0x65 0x0000000 0x10000
{"return": ""}
write -P0x77 0x00f8000 0x10000
{"return": ""}
write -P0x72 0x2008000 0x10000
{"return": ""}
write -P0x69 0x3fe0000 0x10000
{"return": ""}
{
  "bitmaps": {
    "drive0": [
      {
        "busy": false,
        "count": 393216,
        "granularity": 65536,
        "name": "bitmap0",
        "persistent": false,
        "recording": true
      }
    ]
  }
}

= Checking Bitmap bitmap0 =
expecting 6 dirty sectors; have 6. OK!

--- Reference Backup #1 ---

{}
{"execute": "job-dismiss", "arguments": {"id": "bdc-file-job"}}
{"return": {}}
{}
{}
{"execute": "job-dismiss", "arguments": {"id": "bdc-fmt-job"}}
{"return": {}}
{}
{"execute": "blockdev-backup", "arguments": {"device": "drive0", "filter-node-name": "backup-top", "job-id": "ref_backup_1", "sync": "full", "target": "ref_target_1", "x-perf": {"max-workers": 1}}}
{"return": {}}
{"data": {"device": "ref_backup_1", "len": 67108864, "offset": 67108864, "speed": 0, "type": "backup"}, "event": "BLOCK_JOB_COMPLETED", "timestamp": {"microseconds": "USECS", "seconds": "SECS"}}

--- Test Backup #1 ---

{}
{"execute": "job-dismiss", "arguments": {"id": "bdc-file-job"}}
{"return": {}}
{}
{}
{"execute": "job-dismiss", "arguments": {"id": "bdc-fmt-job"}}
{"return": {}}
{}
{"execute": "blockdev-backup", "arguments": {"auto-finalize": false, "bitmap": "bitmap0", "bitmap-mode": "always", "device": "drive0", "filter-node-name": "backup-top", "job-id": "backup_1", "sync": "full", "target": "backup_target_1", "x-perf": {"max-workers": 1}}}
{"return": {}}

--- Write #2 ---

write -P0x74 0x0010000 0x10000
{"return": ""}
write -P0x69 0x00e8000 0x10000
{"return": ""}
write -P0x6e 0x2018000 0x10000
{"return": ""}
write -P0x67 0x3fe0000 0x20000
{"return": ""}
{
  "bitmaps": {
    "backup-top": [
      {
        "busy": false,
        "count": 67108864,
        "granularity": 65536,
        "persistent": false,
        "recording": false
      },
      {
        "busy": false,
        "count": 458752,
        "granularity": 65536,
        "persistent": false,
        "recording": false
      }
    ],
    "drive0": [
      {
        "busy": false,
        "count": 0,
        "granularity": 65536,
        "persistent": false,
        "recording": false
      },
      {
        "busy": false,
        "count": 458752,
        "granularity": 65536,
        "persistent": false,
        "recording": true
      },
      {
        "busy": true,
        "count": 393216,
        "granularity": 65536,
        "name": "bitmap0",
        "persistent": false,
        "recording": true
      }
    ]
  }
}

= Checking Bitmap bitmap0 =
expecting 6 dirty sectors; have 6. OK!

= Checking Bitmap (anonymous) =
expecting 7 dirty sectors; have 7. OK!

{"execute": "job-cancel", "arguments": {"id": "backup_1"}}
{"return": {}}
{"data": {"id": "backup_1", "type": "backup"}, "event": "BLOCK_JOB_PENDING", "timestamp": {"microseconds": "USECS", "seconds": "SECS"}}
{"data": {"device": "backup_1", "len": 67108864, "offset": 67108864, "speed": 0, "type": "backup"}, "event": "BLOCK_JOB_CANCELLED", "timestamp": {"microseconds": "USECS", "seconds": "SECS"}}
{
  "bitmaps": {
    "drive0": [
      {
        "busy": false,
        "count": 458752,
        "granularity": 65536,
        "name": "bitmap0",
        "persistent": false,
        "recording": true
      }
    ]
  }
}

= Checking Bitmap bitmap0 =
expecting 7 dirty sectors; have 7. OK!

--- Write #3 ---

write -P0xaa 0x0010000 0x30000
{"return": ""}
write -P0xbb 0x00d8000 0x10000
{"return": ""}
write -P0xcc 0x2028000 0x10000
{"return": ""}
write -P0xdd 0x3fc0000 0x10000
{"return": ""}
{
  "bitmaps": {
    "drive0": [
      {
        "busy": false,
        "count": 786432,
        "granularity": 65536,
        "name": "bitmap0",
        "persistent": false,
        "recording": true
      }
    ]
  }
}

= Checking Bitmap bitmap0 =
expecting 12 dirty sectors; have 12. OK!

--- Reference Backup #2 ---

{}
{"execute": "job-dismiss", "arguments": {"id": "bdc-file-job"}}
{"return": {}}
{}
{}
{"execute": "job-dismiss", "arguments": {"id": "bdc-fmt-job"}}
{"return": {}}
{}
{"execute": "blockdev-backup", "arguments": {"device": "drive0", "filter-node-name": "backup-top", "job-id": "ref_backup_2", "sync": "full", "target": "ref_target_2", "x-perf": {"max-workers": 1}}}
{"return": {}}
{"data": {"device": "ref_backup_2", "len": 67108864, "offset": 67108864, "speed": 0, "type": "backup"}, "event": "BLOCK_JOB_COMPLETED", "timestamp": {"microseconds": "USECS", "seconds": "SECS"}}

--- Test Backup #2 ---

{}
{"execute": "job-dismiss", "arguments": {"id": "bdc-file-job"}}
{"return": {}}
{}
{}
{"execute": "job-dismiss", "arguments": {"id": "bdc-fmt-job"}}
{"return": {}}
{}
{"execute": "blockdev-backup", "arguments": {"auto-finalize": false, "bitmap": "bitmap0", "bitmap-mode": "always", "device": "drive0", "filter-node-name": "backup-top", "job-id": "backup_2", "sync": "bitmap", "target": "backup_target_2", "x-perf": {"max-workers": 1}}}
{"return": {}}
{"execute": "job-finalize", "arguments": {"id": "backup_2"}}
{"return": {}}
{"data": {"id": "backup_2", "type": "backup"}, "event": "BLOCK_JOB_PENDING", "timestamp": {"microseconds": "USECS", "seconds": "SECS"}}
{"data": {"device": "backup_2", "len": 786432, "offset": 786432, "speed": 0, "type": "backup"}, "event": "BLOCK_JOB_COMPLETED", "timestamp": {"microseconds": "USECS", "seconds": "SECS"}}
{
  "bitmaps": {
    "drive0": [
      {
        "busy": false,
        "count": 0,
        "granularity": 65536,
        "name": "bitmap0",
        "persistent": false,
        "recording": true
      }
    ]
  }
}

= Checking Bitmap bitmap0 =
expecting 0 dirty sectors; have 0. OK!

--- Cleanup ---

{"execute": "block-dirty-bitmap-remove", "arguments": {"name": "bitmap0", "node": "drive0"}}
{"return": {}}
{
  "bitmaps": {}
}

--- Verification ---

qemu_img compare "TEST_DIR/PID-bsync1" "TEST_DIR/PID-fbackup1" ==> Identical, OK!
qemu_img compare "TEST_DIR/PID-bsync2" "TEST_DIR/PID-fbackup2" ==> Identical, OK!
qemu_img compare "TEST_DIR/PID-img" "TEST_DIR/PID-fbackup2" ==> Identical, OK!


=== Mode full; Bitmap Sync always with intermediate failure ===

--- Preparing image & VM ---

{"execute": "blockdev-add", "arguments": {"driver": "qcow2", "file": {"driver": "blkdebug", "image": {"driver": "file", "filename": "TEST_DIR/PID-img"}, "inject-error": [{"errno": 5, "event": "read_aio", "immediately": false, "once": true, "state": 3}], "set-state": [{"event": "flush_to_disk", "new-state": 2, "state": 1}, {"event": "read_aio", "new-state": 3, "state": 2}]}, "node-name": "drive0"}}
{"return": {}}

--- Write #0 ---

write -P0x49 0x0000000 0x10000
{"return": ""}
write -P0x6c 0x0100000 0x10000
{"return": ""}
write -P0x6f 0x2000000 0x10000
{"return": ""}
write -P0x76 0x3ff0000 0x10000
{"return": ""}
{
  "bitmaps": {}
}

--- Reference Backup #0 ---

{}
{"execute": "job-dismiss", "arguments": {"id": "bdc-file-job"}}
{"return": {}}
{}
{}
{"execute": "job-dismiss", "arguments": {"id": "bdc-fmt-job"}}
{"return": {}}
{}
{"execute": "blockdev-backup", "arguments": {"device": "drive0", "filter-node-name": "backup-top", "job-id": "ref_backup_0", "sync": "full", "target": "ref_target_0", "x-perf": {"max-workers": 1}}}
{"return": {}}
{"data": {"device": "ref_backup_0", "len": 67108864, "offset": 67108864, "speed": 0, "type": "backup"}, "event": "BLOCK_JOB_COMPLETED", "timestamp": {"microseconds": "USECS", "seconds": "SECS"}}

--- Add Bitmap ---

{"execute": "block-dirty-bitmap-add", "arguments": {"granularity": 65536, "name": "bitmap0", "node": "drive0"}}
{"return": {}}

--- Write #1 ---

write -P0x65 0x0000000 0x10000
{"return": ""}
write -P0x77 0x00f8000 0x10000
{"return": ""}
write -P0x72 0x2008000 0x10000
{"return": ""}
write -P0x69 0x3fe0000 0x10000
{"return": ""}
{
  "bitmaps": {
    "drive0": [
      {
        "busy": false,
        "count": 393216,
        "granularity": 65536,
        "name": "bitmap0",
        "persistent": false,
        "recording": true
      }
    ]
  }
}

= Checking Bitmap bitmap0 =
expecting 6 dirty sectors; have 6. OK!

--- Reference Backup #1 ---

{}
{"execute": "job-dismiss", "arguments": {"id": "bdc-file-job"}}
{"return": {}}
{}
{}
{"execute": "job-dismiss", "arguments": {"id": "bdc-fmt-job"}}
{"return": {}}
{}
{"execute": "blockdev-backup", "arguments": {"device": "drive0", "filter-node-name": "backup-top", "job-id": "ref_backup_1", "sync": "full", "target": "ref_target_1", "x-perf": {"max-workers": 1}}}
{"return": {}}
{"data": {"device": "ref_backup_1", "len": 67108864, "offset": 67108864, "speed": 0, "type": "backup"}, "event": "BLOCK_JOB_COMPLETED", "timestamp": {"microseconds": "USECS", "seconds": "SECS"}}

{"return": ""}

--- Test Backup #1 ---

{}
{"execute": "job-dismiss", "arguments": {"id": "bdc-file-job"}}
{"return": {}}
{}
{}
{"execute": "job-dismiss", "arguments": {"id": "bdc-fmt-job"}}
{"return": {}}
{}
{"execute": "blockdev-backup", "arguments": {"auto-finalize": false, "bitmap": "bitmap0", "bitmap-mode": "always", "device": "drive0", "filter-node-name": "backup-top", "job-id": "backup_1", "sync": "full", "target": "backup_target_1", "x-perf": {"max-workers": 1}}}
{"return": {}}
{"data": {"action": "report", "device": "backup_1", "operation": "read"}, "event": "BLOCK_JOB_ERROR", "timestamp": {"microseconds": "USECS", "seconds": "SECS"}}
{"data": {"device": "backup_1", "error": "Input/output error", "len": 67108864, "offset": 983040, "speed": 0, "type": "backup"}, "event": "BLOCK_JOB_COMPLETED", "timestamp": {"microseconds": "USECS", "seconds": "SECS"}}
{
  "bitmaps": {
    "drive0": [
      {
        "busy": false,
        "count": 66125824,
        "granularity": 65536,
        "name": "bitmap0",
        "persistent": false,
        "recording": true
      }
    ]
  }
}

= Checking Bitmap bitmap0 =
expecting 1009 dirty sectors; have 1009. OK!

--- Write #3 ---

write -P0xaa 0x0010000 0x30000
{"return": ""}
write -P0xbb 0x00d8000 0x10000
{"return": ""}
write -P0xcc 0x2028000 0x10000
{"return": ""}
write -P0xdd 0x3fc0000 0x10000
{"return": ""}
{
  "bitmaps": {
    "drive0": [
      {
        "busy": false,
        "count": 66453504,
        "granularity": 65536,
        "name": "bitmap0",
        "persistent": false,
        "recording": true
      }
    ]
  }
}

= Checking Bitmap bitmap0 =
expecting 1014 dirty sectors; have 1014. OK!

--- Reference Backup #2 ---

{}
{"execute": "job-dismiss", "arguments": {"id": "bdc-file-job"}}
{"return": {}}
{}
{}
{"execute": "job-dismiss", "arguments": {"id": "bdc-fmt-job"}}
{"return": {}}
{}
{"execute": "blockdev-backup", "arguments": {"device": "drive0", "filter-node-name": "backup-top", "job-id": "ref_backup_2", "sync": "full", "target": "ref_target_2", "x-perf": {"max-workers": 1}}}
{"return": {}}
{"data": {"device": "ref_backup_2", "len": 67108864, "offset": 67108864, "speed": 0, "type": "backup"}, "event": "BLOCK_JOB_COMPLETED", "timestamp": {"microseconds": "USECS", "seconds": "SECS"}}

--- Test Backup #2 ---

{}
{"execute": "job-dismiss", "arguments": {"id": "bdc-file-job"}}
{"return": {}}
{}
{}
{"execute": "job-dismiss", "arguments": {"id": "bdc-fmt-job"}}
{"return": {}}
{}
{"execute": "blockdev-backup", "arguments": {"auto-finalize": false, "bitmap": "bitmap0", "bitmap-mode": "always", "device": "drive0", "filter-node-name": "backup-top", "job-id": "backup_2", "sync": "bitmap", "target": "backup_target_2", "x-perf": {"max-workers": 1}}}
{"return": {}}
{"execute": "job-finalize", "arguments": {"id": "backup_2"}}
{"return": {}}
{"data": {"id": "backup_2", "type": "backup"}, "event": "BLOCK_JOB_PENDING", "timestamp": {"microseconds": "USECS", "seconds": "SECS"}}
{"data": {"device": "backup_2", "len": 66453504, "offset": 66453504, "speed": 0, "type": "backup"}, "event": "BLOCK_JOB_COMPLETED", "timestamp": {"microseconds": "USECS", "seconds": "SECS"}}
{
  "bitmaps": {
    "drive0": [
      {
        "busy": false,
        "count": 0,
        "granularity": 65536,
        "name": "bitmap0",
        "persistent": false,
        "recording": true
      }
    ]
  }
}

= Checking Bitmap bitmap0 =
expecting 0 dirty sectors; have 0. OK!

--- Cleanup ---

{"execute": "block-dirty-bitmap-remove", "arguments": {"name": "bitmap0", "node": "drive0"}}
{"return": {}}
{
  "bitmaps": {}
}

--- Verification ---

qemu_img compare "TEST_DIR/PID-bsync1" "TEST_DIR/PID-fbackup1" ==> Mismatch, OK!
qemu_img compare "TEST_DIR/PID-bsync2" "TEST_DIR/PID-fbackup2" ==> Identical, OK!
qemu_img compare "TEST_DIR/PID-img" "TEST_DIR/PID-fbackup2" ==> Identical, OK!


=== Mode full; Bitmap Sync always without failure ===

--- Preparing image & VM ---

{"execute": "blockdev-add", "arguments": {"driver": "qcow2", "file": {"driver": "file", "filename": "TEST_DIR/PID-img"}, "node-name": "drive0"}}
{"return": {}}

--- Write #0 ---

write -P0x49 0x0000000 0x10000
{"return": ""}
write -P0x6c 0x0100000 0x10000
{"return": ""}
write -P0x6f 0x2000000 0x10000
{"return": ""}
write -P0x76 0x3ff0000 0x10000
{"return": ""}
{
  "bitmaps": {}
}

--- Reference Backup #0 ---

{}
{"execute": "job-dismiss", "arguments": {"id": "bdc-file-job"}}
{"return": {}}
{}
{}
{"execute": "job-dismiss", "arguments": {"id": "bdc-fmt-job"}}
{"return": {}}
{}
{"execute": "blockdev-backup", "arguments": {"device": "drive0", "filter-node-name": "backup-top", "job-id": "ref_backup_0", "sync": "full", "target": "ref_target_0", "x-perf": {"max-workers": 1}}}
{"return": {}}
{"data": {"device": "ref_backup_0", "len": 67108864, "offset": 67108864, "speed": 0, "type": "backup"}, "event": "BLOCK_JOB_COMPLETED", "timestamp": {"microseconds": "USECS", "seconds": "SECS"}}

--- Add Bitmap ---

{"execute": "block-dirty-bitmap-add", "arguments": {"granularity": 65536, "name": "bitmap0", "node": "drive0"}}
{"return": {}}

--- Write #1 ---

write -P0x65 0x0000000 0x10000
{"return": ""}
write -P0x77 0x00f8000 0x10000
{"return": ""}
write -P0x72 0x2008000 0x10000
{"return": ""}
write -P0x69 0x3fe0000 0x10000
{"return": ""}
{
  "bitmaps": {
    "drive0": [
      {
        "busy": false,
        "count": 393216,
        "granularity": 65536,
        "name": "bitmap0",
        "persistent": false,
        "recording": true
      }
    ]
  }
}

= Checking Bitmap bitmap0 =
expecting 6 dirty sectors; have 6. OK!

--- Reference Backup #1 ---

{}
{"execute": "job-dismiss", "arguments": {"id": "bdc-file-job"}}
{"return": {}}
{}
{}
{"execute": "job-dismiss", "arguments": {"id": "bdc-fmt-job"}}
{"return": {}}
{}
{"execute": "blockdev-backup", "arguments": {"device": "drive0", "filter-node-name": "backup-top", "job-id": "ref_backup_1", "sync": "full", "target": "ref_target_1", "x-perf": {"max-workers": 1}}}
{"return": {}}
{"data": {"device": "ref_backup_1", "len": 67108864, "offset": 67108864, "speed": 0, "type": "backup"}, "event": "BLOCK_JOB_COMPLETED", "timestamp": {"microseconds": "USECS", "seconds": "SECS"}}

--- Test Backup #1 ---

{}
{"execute": "job-dismiss", "arguments": {"id": "bdc-file-job"}}
{"return": {}}
{}
{}
{"execute": "job-dismiss", "arguments": {"id": "bdc-fmt-job"}}
{"return": {}}
{}
{"execute": "blockdev-backup", "arguments": {"auto-finalize": false, "bitmap": "bitmap0", "bitmap-mode": "always", "device": "drive0", "filter-node-name": "backup-top", "job-id": "backup_1", "sync": "full", "target": "backup_target_1", "x-perf": {"max-workers": 1}}}
{"return": {}}

--- Write #2 ---

write -P0x74 0x0010000 0x10000
{"return": ""}
write -P0x69 0x00e8000 0x10000
{"return": ""}
write -P0x6e 0x2018000 0x10000
{"return": ""}
write -P0x67 0x3fe0000 0x20000
{"return": ""}
{
  "bitmaps": {
    "backup-top": [
      {
        "busy": false,
        "count": 67108864,
        "granularity": 65536,
        "persistent": false,
        "recording": false
      },
      {
        "busy": false,
        "count": 458752,
        "granularity": 65536,
        "persistent": false,
        "recording": false
      }
    ],
    "drive0": [
      {
        "busy": false,
        "count": 0,
        "granularity": 65536,
        "persistent": false,
        "recording": false
      },
      {
        "busy": false,
        "count": 458752,
        "granularity": 65536,
        "persistent": false,
        "recording": true
      },
      {
        "busy": true,
        "count": 393216,
        "granularity": 65536,
        "name": "bitmap0",
        "persistent": false,
        "recording": true
      }
    ]
  }
}

= Checking Bitmap bitmap0 =
expecting 6 dirty sectors; have 6. OK!

= Checking Bitmap (anonymous) =
expecting 7 dirty sectors; have 7. OK!

{"execute": "job-finalize", "arguments": {"id": "backup_1"}}
{"return": {}}
{"data": {"id": "backup_1", "type": "backup"}, "event": "BLOCK_JOB_PENDING", "timestamp": {"microseconds": "USECS", "seconds": "SECS"}}
{"data": {"device": "backup_1", "len": 67108864, "offset": 67108864, "speed": 0, "type": "backup"}, "event": "BLOCK_JOB_COMPLETED", "timestamp": {"microseconds": "USECS", "seconds": "SECS"}}
{
  "bitmaps": {
    "drive0": [
      {
        "busy": false,
        "count": 458752,
        "granularity": 65536,
        "name": "bitmap0",
        "persistent": false,
        "recording": true
      }
    ]
  }
}

= Checking Bitmap bitmap0 =
expecting 7 dirty sectors; have 7. OK!

--- Write #3 ---

write -P0xaa 0x0010000 0x30000
{"return": ""}
write -P0xbb 0x00d8000 0x10000
{"return": ""}
write -P0xcc 0x2028000 0x10000
{"return": ""}
write -P0xdd 0x3fc0000 0x10000
{"return": ""}
{
  "bitmaps": {
    "drive0": [
      {
        "busy": false,
        "count": 786432,
        "granularity": 65536,
        "name": "bitmap0",
        "persistent": false,
        "recording": true
      }
    ]
  }
}

= Checking Bitmap bitmap0 =
expecting 12 dirty sectors; have 12. OK!

--- Reference Backup #2 ---

{}
{"execute": "job-dismiss", "arguments": {"id": "bdc-file-job"}}
{"return": {}}
{}
{}
{"execute": "job-dismiss", "arguments": {"id": "bdc-fmt-job"}}
{"return": {}}
{}
{"execute": "blockdev-backup", "arguments": {"device": "drive0", "filter-node-name": "backup-top", "job-id": "ref_backup_2", "sync": "full", "target": "ref_target_2", "x-perf": {"max-workers": 1}}}
{"return": {}}
{"data": {"device": "ref_backup_2", "len": 67108864, "offset": 67108864, "speed": 0, "type": "backup"}, "event": "BLOCK_JOB_COMPLETED", "timestamp": {"microseconds": "USECS", "seconds": "SECS"}}

--- Test Backup #2 ---

{}
{"execute": "job-dismiss", "arguments": {"id": "bdc-file-job"}}
{"return": {}}
{}
{}
{"execute": "job-dismiss", "arguments": {"id": "bdc-fmt-job"}}
{"return": {}}
{}
{"execute": "blockdev-backup", "arguments": {"auto-finalize": false, "bitmap": "bitmap0", "bitmap-mode": "always", "device": "drive0", "filter-node-name": "backup-top", "job-id": "backup_2", "sync": "bitmap", "target": "backup_target_2", "x-perf": {"max-workers": 1}}}
{"return": {}}
{"execute": "job-finalize", "arguments": {"id": "backup_2"}}
{"return": {}}
{"data": {"id": "backup_2", "type": "backup"}, "event": "BLOCK_JOB_PENDING", "timestamp": {"microseconds": "USECS", "seconds": "SECS"}}
{"data": {"device": "backup_2", "len": 786432, "offset": 786432, "speed": 0, "type": "backup"}, "event": "BLOCK_JOB_COMPLETED", "timestamp": {"microseconds": "USECS", "seconds": "SECS"}}
{
  "bitmaps": {
    "drive0": [
      {
        "busy": false,
        "count": 0,
        "granularity": 65536,
        "name": "bitmap0",
        "persistent": false,
        "recording": true
      }
    ]
  }
}

= Checking Bitmap bitmap0 =
expecting 0 dirty sectors; have 0. OK!

--- Cleanup ---

{"execute": "block-dirty-bitmap-remove", "arguments": {"name": "bitmap0", "node": "drive0"}}
{"return": {}}
{
  "bitmaps": {}
}

--- Verification ---

qemu_img compare "TEST_DIR/PID-bsync1" "TEST_DIR/PID-fbackup1" ==> Identical, OK!
qemu_img compare "TEST_DIR/PID-bsync2" "TEST_DIR/PID-fbackup2" ==> Identical, OK!
qemu_img compare "TEST_DIR/PID-img" "TEST_DIR/PID-fbackup2" ==> Identical, OK!


=== Mode top; Bitmap Sync on-success with simulated failure ===

--- Preparing image & VM ---

{"execute": "blockdev-add", "arguments": {"driver": "qcow2", "file": {"driver": "file", "filename": "TEST_DIR/PID-img"}, "node-name": "drive0"}}
{"return": {}}

--- Write #0 ---

write -P0x49 0x0000000 0x10000
{"return": ""}
write -P0x6c 0x0100000 0x10000
{"return": ""}
write -P0x6f 0x2000000 0x10000
{"return": ""}
write -P0x76 0x3ff0000 0x10000
{"return": ""}
{
  "bitmaps": {}
}

--- Reference Backup #0 ---

{}
{"execute": "job-dismiss", "arguments": {"id": "bdc-file-job"}}
{"return": {}}
{}
{}
{"execute": "job-dismiss", "arguments": {"id": "bdc-fmt-job"}}
{"return": {}}
{}
{"execute": "blockdev-backup", "arguments": {"device": "drive0", "filter-node-name": "backup-top", "job-id": "ref_backup_0", "sync": "full", "target": "ref_target_0", "x-perf": {"max-workers": 1}}}
{"return": {}}
{"data": {"device": "ref_backup_0", "len": 67108864, "offset": 67108864, "speed": 0, "type": "backup"}, "event": "BLOCK_JOB_COMPLETED", "timestamp": {"microseconds": "USECS", "seconds": "SECS"}}

--- Add Bitmap ---

{"execute": "block-dirty-bitmap-add", "arguments": {"granularity": 65536, "name": "bitmap0", "node": "drive0"}}
{"return": {}}

--- Write #1 ---

write -P0x65 0x0000000 0x10000
{"return": ""}
write -P0x77 0x00f8000 0x10000
{"return": ""}
write -P0x72 0x2008000 0x10000
{"return": ""}
write -P0x69 0x3fe0000 0x10000
{"return": ""}
{
  "bitmaps": {
    "drive0": [
      {
        "busy": false,
        "count": 393216,
        "granularity": 65536,
        "name": "bitmap0",
        "persistent": false,
        "recording": true
      }
    ]
  }
}

= Checking Bitmap bitmap0 =
expecting 6 dirty sectors; have 6. OK!

--- Reference Backup #1 ---

{}
{"execute": "job-dismiss", "arguments": {"id": "bdc-file-job"}}
{"return": {}}
{}
{}
{"execute": "job-dismiss", "arguments": {"id": "bdc-fmt-job"}}
{"return": {}}
{}
{"execute": "blockdev-backup", "arguments": {"device": "drive0", "filter-node-name": "backup-top", "job-id": "ref_backup_1", "sync": "full", "target": "ref_target_1", "x-perf": {"max-workers": 1}}}
{"return": {}}
{"data": {"device": "ref_backup_1", "len": 67108864, "offset": 67108864, "speed": 0, "type": "backup"}, "event": "BLOCK_JOB_COMPLETED", "timestamp": {"microseconds": "USECS", "seconds": "SECS"}}

--- Test Backup #1 ---

{}
{"execute": "job-dismiss", "arguments": {"id": "bdc-file-job"}}
{"return": {}}
{}
{}
{"execute": "job-dismiss", "arguments": {"id": "bdc-fmt-job"}}
{"return": {}}
{}
{"execute": "blockdev-backup", "arguments": {"auto-finalize": false, "bitmap": "bitmap0", "bitmap-mode": "on-success", "device": "drive0", "filter-node-name": "backup-top", "job-id": "backup_1", "sync": "top", "target": "backup_target_1", "x-perf": {"max-workers": 1}}}
{"return": {}}

--- Write #2 ---

write -P0x74 0x0010000 0x10000
{"return": ""}
write -P0x69 0x00e8000 0x10000
{"return": ""}
write -P0x6e 0x2018000 0x10000
{"return": ""}
write -P0x67 0x3fe0000 0x20000
{"return": ""}
{
  "bitmaps": {
    "backup-top": [
      {
        "busy": false,
        "count": 67108864,
        "granularity": 65536,
        "persistent": false,
        "recording": false
      },
      {
        "busy": false,
        "count": 458752,
        "granularity": 65536,
        "persistent": false,
        "recording": false
      }
    ],
    "drive0": [
      {
        "busy": false,
        "count": 0,
        "granularity": 65536,
        "persistent": false,
        "recording": false
      },
      {
        "busy": false,
        "count": 458752,
        "granularity": 65536,
        "persistent": false,
        "recording": true
      },
      {
        "busy": true,
        "count": 393216,
        "granularity": 65536,
        "name": "bitmap0",
        "persistent": false,
        "recording": true
      }
    ]
  }
}

= Checking Bitmap bitmap0 =
expecting 6 dirty sectors; have 6. OK!

= Checking Bitmap (anonymous) =
expecting 7 dirty sectors; have 7. OK!

{"execute": "job-cancel", "arguments": {"id": "backup_1"}}
{"return": {}}
{"data": {"id": "backup_1", "type": "backup"}, "event": "BLOCK_JOB_PENDING", "timestamp": {"microseconds": "USECS", "seconds": "SECS"}}
{"data": {"device": "backup_1", "len": 458752, "offset": 458752, "speed": 0, "type": "backup"}, "event": "BLOCK_JOB_CANCELLED", "timestamp": {"microseconds": "USECS", "seconds": "SECS"}}
{
  "bitmaps": {
    "drive0": [
      {
        "busy": false,
        "count": 655360,
        "granularity": 65536,
        "name": "bitmap0",
        "persistent": false,
        "recording": true
      }
    ]
  }
}

= Checking Bitmap bitmap0 =
expecting 10 dirty sectors; have 10. OK!

--- Write #3 ---

write -P0xaa 0x0010000 0x30000
{"return": ""}
write -P0xbb 0x00d8000 0x10000
{"return": ""}
write -P0xcc 0x2028000 0x10000
{"return": ""}
write -P0xdd 0x3fc0000 0x10000
{"return": ""}
{
  "bitmaps": {
    "drive0": [
      {
        "busy": false,
        "count": 983040,
        "granularity": 65536,
        "name": "bitmap0",
        "persistent": false,
        "recording": true
      }
    ]
  }
}

= Checking Bitmap bitmap0 =
expecting 15 dirty sectors; have 15. OK!

--- Reference Backup #2 ---

{}
{"execute": "job-dismiss", "arguments": {"id": "bdc-file-job"}}
{"return": {}}
{}
{}
{"execute": "job-dismiss", "arguments": {"id": "bdc-fmt-job"}}
{"return": {}}
{}
{"execute": "blockdev-backup", "arguments": {"device": "drive0", "filter-node-name": "backup-top", "job-id": "ref_backup_2", "sync": "full", "target": "ref_target_2", "x-perf": {"max-workers": 1}}}
{"return": {}}
{"data": {"device": "ref_backup_2", "len": 67108864, "offset": 67108864, "speed": 0, "type": "backup"}, "event": "BLOCK_JOB_COMPLETED", "timestamp": {"microseconds": "USECS", "seconds": "SECS"}}

--- Test Backup #2 ---

{}
{"execute": "job-dismiss", "arguments": {"id": "bdc-file-job"}}
{"return": {}}
{}
{}
{"execute": "job-dismiss", "arguments": {"id": "bdc-fmt-job"}}
{"return": {}}
{}
{"execute": "blockdev-backup", "arguments": {"auto-finalize": false, "bitmap": "bitmap0", "bitmap-mode": "on-success", "device": "drive0", "filter-node-name": "backup-top", "job-id": "backup_2", "sync": "bitmap", "target": "backup_target_2", "x-perf": {"max-workers": 1}}}
{"return": {}}
{"execute": "job-finalize", "arguments": {"id": "backup_2"}}
{"return": {}}
{"data": {"id": "backup_2", "type": "backup"}, "event": "BLOCK_JOB_PENDING", "timestamp": {"microseconds": "USECS", "seconds": "SECS"}}
{"data": {"device": "backup_2", "len": 983040, "offset": 983040, "speed": 0, "type": "backup"}, "event": "BLOCK_JOB_COMPLETED", "timestamp": {"microseconds": "USECS", "seconds": "SECS"}}
{
  "bitmaps": {
    "drive0": [
      {
        "busy": false,
        "count": 0,
        "granularity": 65536,
        "name": "bitmap0",
        "persistent": false,
        "recording": true
      }
    ]
  }
}

= Checking Bitmap bitmap0 =
expecting 0 dirty sectors; have 0. OK!

--- Cleanup ---

{"execute": "block-dirty-bitmap-remove", "arguments": {"name": "bitmap0", "node": "drive0"}}
{"return": {}}
{
  "bitmaps": {}
}

--- Verification ---

qemu_img compare "TEST_DIR/PID-bsync1" "TEST_DIR/PID-fbackup1" ==> Identical, OK!
qemu_img compare "TEST_DIR/PID-bsync2" "TEST_DIR/PID-fbackup2" ==> Identical, OK!
qemu_img compare "TEST_DIR/PID-img" "TEST_DIR/PID-fbackup2" ==> Identical, OK!


=== Mode top; Bitmap Sync on-success with intermediate failure ===

--- Preparing image & VM ---

{"execute": "blockdev-add", "arguments": {"driver": "qcow2", "file": {"driver": "blkdebug", "image": {"driver": "file", "filename": "TEST_DIR/PID-img"}, "inject-error": [{"errno": 5, "event": "read_aio", "immediately": false, "once": true, "state": 3}], "set-state": [{"event": "flush_to_disk", "new-state": 2, "state": 1}, {"event": "read_aio", "new-state": 3, "state": 2}]}, "node-name": "drive0"}}
{"return": {}}

--- Write #0 ---

write -P0x49 0x0000000 0x10000
{"return": ""}
write -P0x6c 0x0100000 0x10000
{"return": ""}
write -P0x6f 0x2000000 0x10000
{"return": ""}
write -P0x76 0x3ff0000 0x10000
{"return": ""}
{
  "bitmaps": {}
}

--- Reference Backup #0 ---

{}
{"execute": "job-dismiss", "arguments": {"id": "bdc-file-job"}}
{"return": {}}
{}
{}
{"execute": "job-dismiss", "arguments": {"id": "bdc-fmt-job"}}
{"return": {}}
{}
{"execute": "blockdev-backup", "arguments": {"device": "drive0", "filter-node-name": "backup-top", "job-id": "ref_backup_0", "sync": "full", "target": "ref_target_0", "x-perf": {"max-workers": 1}}}
{"return": {}}
{"data": {"device": "ref_backup_0", "len": 67108864, "offset": 67108864, "speed": 0, "type": "backup"}, "event": "BLOCK_JOB_COMPLETED", "timestamp": {"microseconds": "USECS", "seconds": "SECS"}}

--- Add Bitmap ---

{"execute": "block-dirty-bitmap-add", "arguments": {"granularity": 65536, "name": "bitmap0", "node": "drive0"}}
{"return": {}}

--- Write #1 ---

write -P0x65 0x0000000 0x10000
{"return": ""}
write -P0x77 0x00f8000 0x10000
{"return": ""}
write -P0x72 0x2008000 0x10000
{"return": ""}
write -P0x69 0x3fe0000 0x10000
{"return": ""}
{
  "bitmaps": {
    "drive0": [
      {
        "busy": false,
        "count": 393216,
        "granularity": 65536,
        "name": "bitmap0",
        "persistent": false,
        "recording": true
      }
    ]
  }
}

= Checking Bitmap bitmap0 =
expecting 6 dirty sectors; have 6. OK!

--- Reference Backup #1 ---

{}
{"execute": "job-dismiss", "arguments": {"id": "bdc-file-job"}}
{"return": {}}
{}
{}
{"execute": "job-dismiss", "arguments": {"id": "bdc-fmt-job"}}
{"return": {}}
{}
{"execute": "blockdev-backup", "arguments": {"device": "drive0", "filter-node-name": "backup-top", "job-id": "ref_backup_1", "sync": "full", "target": "ref_target_1", "x-perf": {"max-workers": 1}}}
{"return": {}}
{"data": {"device": "ref_backup_1", "len": 67108864, "offset": 67108864, "speed": 0, "type": "backup"}, "event": "BLOCK_JOB_COMPLETED", "timestamp": {"microseconds": "USECS", "seconds": "SECS"}}

{"return": ""}

--- Test Backup #1 ---

{}
{"execute": "job-dismiss", "arguments": {"id": "bdc-file-job"}}
{"return": {}}
{}
{}
{"execute": "job-dismiss", "arguments": {"id": "bdc-fmt-job"}}
{"return": {}}
{}
{"execute": "blockdev-backup", "arguments": {"auto-finalize": false, "bitmap": "bitmap0", "bitmap-mode": "on-success", "device": "drive0", "filter-node-name": "backup-top", "job-id": "backup_1", "sync": "top", "target": "backup_target_1", "x-perf": {"max-workers": 1}}}
{"return": {}}
{"data": {"action": "report", "device": "backup_1", "operation": "read"}, "event": "BLOCK_JOB_ERROR", "timestamp": {"microseconds": "USECS", "seconds": "SECS"}}
{"data": {"device": "backup_1", "error": "Input/output error", "len": 458752, "offset": 65536, "speed": 0, "type": "backup"}, "event": "BLOCK_JOB_COMPLETED", "timestamp": {"microseconds": "USECS", "seconds": "SECS"}}
{
  "bitmaps": {
    "drive0": [
      {
        "busy": false,
        "count": 393216,
        "granularity": 65536,
        "name": "bitmap0",
        "persistent": false,
        "recording": true
      }
    ]
  }
}

= Checking Bitmap bitmap0 =
expecting 6 dirty sectors; have 6. OK!

--- Write #3 ---

write -P0xaa 0x0010000 0x30000
{"return": ""}
write -P0xbb 0x00d8000 0x10000
{"return": ""}
write -P0xcc 0x2028000 0x10000
{"return": ""}
write -P0xdd 0x3fc0000 0x10000
{"return": ""}
{
  "bitmaps": {
    "drive0": [
      {
        "busy": false,
        "count": 917504,
        "granularity": 65536,
        "name": "bitmap0",
        "persistent": false,
        "recording": true
      }
    ]
  }
}

= Checking Bitmap bitmap0 =
expecting 14 dirty sectors; have 14. OK!

--- Reference Backup #2 ---

{}
{"execute": "job-dismiss", "arguments": {"id": "bdc-file-job"}}
{"return": {}}
{}
{}
{"execute": "job-dismiss", "arguments": {"id": "bdc-fmt-job"}}
{"return": {}}
{}
{"execute": "blockdev-backup", "arguments": {"device": "drive0", "filter-node-name": "backup-top", "job-id": "ref_backup_2", "sync": "full", "target": "ref_target_2", "x-perf": {"max-workers": 1}}}
{"return": {}}
{"data": {"device": "ref_backup_2", "len": 67108864, "offset": 67108864, "speed": 0, "type": "backup"}, "event": "BLOCK_JOB_COMPLETED", "timestamp": {"microseconds": "USECS", "seconds": "SECS"}}

--- Test Backup #2 ---

{}
{"execute": "job-dismiss", "arguments": {"id": "bdc-file-job"}}
{"return": {}}
{}
{}
{"execute": "job-dismiss", "arguments": {"id": "bdc-fmt-job"}}
{"return": {}}
{}
{"execute": "blockdev-backup", "arguments": {"auto-finalize": false, "bitmap": "bitmap0", "bitmap-mode": "on-success", "device": "drive0", "filter-node-name": "backup-top", "job-id": "backup_2", "sync": "bitmap", "target": "backup_target_2", "x-perf": {"max-workers": 1}}}
{"return": {}}
{"execute": "job-finalize", "arguments": {"id": "backup_2"}}
{"return": {}}
{"data": {"id": "backup_2", "type": "backup"}, "event": "BLOCK_JOB_PENDING", "timestamp": {"microseconds": "USECS", "seconds": "SECS"}}
{"data": {"device": "backup_2", "len": 917504, "offset": 917504, "speed": 0, "type": "backup"}, "event": "BLOCK_JOB_COMPLETED", "timestamp": {"microseconds": "USECS", "seconds": "SECS"}}
{
  "bitmaps": {
    "drive0": [
      {
        "busy": false,
        "count": 0,
        "granularity": 65536,
        "name": "bitmap0",
        "persistent": false,
        "recording": true
      }
    ]
  }
}

= Checking Bitmap bitmap0 =
expecting 0 dirty sectors; have 0. OK!

--- Cleanup ---

{"execute": "block-dirty-bitmap-remove", "arguments": {"name": "bitmap0", "node": "drive0"}}
{"return": {}}
{
  "bitmaps": {}
}

--- Verification ---

qemu_img compare "TEST_DIR/PID-bsync1" "TEST_DIR/PID-fbackup1" ==> Mismatch, OK!
qemu_img compare "TEST_DIR/PID-bsync2" "TEST_DIR/PID-fbackup2" ==> Identical, OK!
qemu_img compare "TEST_DIR/PID-img" "TEST_DIR/PID-fbackup2" ==> Identical, OK!


=== Mode top; Bitmap Sync on-success without failure ===

--- Preparing image & VM ---

{"execute": "blockdev-add", "arguments": {"driver": "qcow2", "file": {"driver": "file", "filename": "TEST_DIR/PID-img"}, "node-name": "drive0"}}
{"return": {}}

--- Write #0 ---

write -P0x49 0x0000000 0x10000
{"return": ""}
write -P0x6c 0x0100000 0x10000
{"return": ""}
write -P0x6f 0x2000000 0x10000
{"return": ""}
write -P0x76 0x3ff0000 0x10000
{"return": ""}
{
  "bitmaps": {}
}

--- Reference Backup #0 ---

{}
{"execute": "job-dismiss", "arguments": {"id": "bdc-file-job"}}
{"return": {}}
{}
{}
{"execute": "job-dismiss", "arguments": {"id": "bdc-fmt-job"}}
{"return": {}}
{}
{"execute": "blockdev-backup", "arguments": {"device": "drive0", "filter-node-name": "backup-top", "job-id": "ref_backup_0", "sync": "full", "target": "ref_target_0", "x-perf": {"max-workers": 1}}}
{"return": {}}
{"data": {"device": "ref_backup_0", "len": 67108864, "offset": 67108864, "speed": 0, "type": "backup"}, "event": "BLOCK_JOB_COMPLETED", "timestamp": {"microseconds": "USECS", "seconds": "SECS"}}

--- Add Bitmap ---

{"execute": "block-dirty-bitmap-add", "arguments": {"granularity": 65536, "name": "bitmap0", "node": "drive0"}}
{"return": {}}

--- Write #1 ---

write -P0x65 0x0000000 0x10000
{"return": ""}
write -P0x77 0x00f8000 0x10000
{"return": ""}
write -P0x72 0x2008000 0x10000
{"return": ""}
write -P0x69 0x3fe0000 0x10000
{"return": ""}
{
  "bitmaps": {
    "drive0": [
      {
        "busy": false,
        "count": 393216,
        "granularity": 65536,
        "name": "bitmap0",
        "persistent": false,
        "recording": true
      }
    ]
  }
}

= Checking Bitmap bitmap0 =
expecting 6 dirty sectors; have 6. OK!

--- Reference Backup #1 ---

{}
{"execute": "job-dismiss", "arguments": {"id": "bdc-file-job"}}
{"return": {}}
{}
{}
{"execute": "job-dismiss", "arguments": {"id": "bdc-fmt-job"}}
{"return": {}}
{}
{"execute": "blockdev-backup", "arguments": {"device": "drive0", "filter-node-name": "backup-top", "job-id": "ref_backup_1", "sync": "full", "target": "ref_target_1", "x-perf": {"max-workers": 1}}}
{"return": {}}
{"data": {"device": "ref_backup_1", "len": 67108864, "offset": 67108864, "speed": 0, "type": "backup"}, "event": "BLOCK_JOB_COMPLETED", "timestamp": {"microseconds": "USECS", "seconds": "SECS"}}

--- Test Backup #1 ---

{}
{"execute": "job-dismiss", "arguments": {"id": "bdc-file-job"}}
{"return": {}}
{}
{}
{"execute": "job-dismiss", "arguments": {"id": "bdc-fmt-job"}}
{"return": {}}
{}
{"execute": "blockdev-backup", "arguments": {"auto-finalize": false, "bitmap": "bitmap0", "bitmap-mode": "on-success", "device": "drive0", "filter-node-name": "backup-top", "job-id": "backup_1", "sync": "top", "target": "backup_target_1", "x-perf": {"max-workers": 1}}}
{"return": {}}

--- Write #2 ---

write -P0x74 0x0010000 0x10000
{"return": ""}
write -P0x69 0x00e8000 0x10000
{"return": ""}
write -P0x6e 0x2018000 0x10000
{"return": ""}
write -P0x67 0x3fe0000 0x20000
{"return": ""}
{
  "bitmaps": {
    "backup-top": [
      {
        "busy": false,
        "count": 67108864,
        "granularity": 65536,
        "persistent": false,
        "recording": false
      },
      {
        "busy": false,
        "count": 458752,
        "granularity": 65536,
        "persistent": false,
        "recording": false
      }
    ],
    "drive0": [
      {
        "busy": false,
        "count": 0,
        "granularity": 65536,
        "persistent": false,
        "recording": false
      },
      {
        "busy": false,
        "count": 458752,
        "granularity": 65536,
        "persistent": false,
        "recording": true
      },
      {
        "busy": true,
        "count": 393216,
        "granularity": 65536,
        "name": "bitmap0",
        "persistent": false,
        "recording": true
      }
    ]
  }
}

= Checking Bitmap bitmap0 =
expecting 6 dirty sectors; have 6. OK!

= Checking Bitmap (anonymous) =
expecting 7 dirty sectors; have 7. OK!

{"execute": "job-finalize", "arguments": {"id": "backup_1"}}
{"return": {}}
{"data": {"id": "backup_1", "type": "backup"}, "event": "BLOCK_JOB_PENDING", "timestamp": {"microseconds": "USECS", "seconds": "SECS"}}
{"data": {"device": "backup_1", "len": 458752, "offset": 458752, "speed": 0, "type": "backup"}, "event": "BLOCK_JOB_COMPLETED", "timestamp": {"microseconds": "USECS", "seconds": "SECS"}}
{
  "bitmaps": {
    "drive0": [
      {
        "busy": false,
        "count": 458752,
        "granularity": 65536,
        "name": "bitmap0",
        "persistent": false,
        "recording": true
      }
    ]
  }
}

= Checking Bitmap bitmap0 =
expecting 7 dirty sectors; have 7. OK!

--- Write #3 ---

write -P0xaa 0x0010000 0x30000
{"return": ""}
write -P0xbb 0x00d8000 0x10000
{"return": ""}
write -P0xcc 0x2028000 0x10000
{"return": ""}
write -P0xdd 0x3fc0000 0x10000
{"return": ""}
{
  "bitmaps": {
    "drive0": [
      {
        "busy": false,
        "count": 786432,
        "granularity": 65536,
        "name": "bitmap0",
        "persistent": false,
        "recording": true
      }
    ]
  }
}

= Checking Bitmap bitmap0 =
expecting 12 dirty sectors; have 12. OK!

--- Reference Backup #2 ---

{}
{"execute": "job-dismiss", "arguments": {"id": "bdc-file-job"}}
{"return": {}}
{}
{}
{"execute": "job-dismiss", "arguments": {"id": "bdc-fmt-job"}}
{"return": {}}
{}
{"execute": "blockdev-backup", "arguments": {"device": "drive0", "filter-node-name": "backup-top", "job-id": "ref_backup_2", "sync": "full", "target": "ref_target_2", "x-perf": {"max-workers": 1}}}
{"return": {}}
{"data": {"device": "ref_backup_2", "len": 67108864, "offset": 67108864, "speed": 0, "type": "backup"}, "event": "BLOCK_JOB_COMPLETED", "timestamp": {"microseconds": "USECS", "seconds": "SECS"}}

--- Test Backup #2 ---

{}
{"execute": "job-dismiss", "arguments": {"id": "bdc-file-job"}}
{"return": {}}
{}
{}
{"execute": "job-dismiss", "arguments": {"id": "bdc-fmt-job"}}
{"return": {}}
{}
{"execute": "blockdev-backup", "arguments": {"auto-finalize": false, "bitmap": "bitmap0", "bitmap-mode": "on-success", "device": "drive0", "filter-node-name": "backup-top", "job-id": "backup_2", "sync": "bitmap", "target": "backup_target_2", "x-perf": {"max-workers": 1}}}
{"return": {}}
{"execute": "job-finalize", "arguments": {"id": "backup_2"}}
{"return": {}}
{"data": {"id": "backup_2", "type": "backup"}, "event": "BLOCK_JOB_PENDING", "timestamp": {"microseconds": "USECS", "seconds": "SECS"}}
{"data": {"device": "backup_2", "len": 786432, "offset": 786432, "speed": 0, "type": "backup"}, "event": "BLOCK_JOB_COMPLETED", "timestamp": {"microseconds": "USECS", "seconds": "SECS"}}
{
  "bitmaps": {
    "drive0": [
      {
        "busy": false,
        "count": 0,
        "granularity": 65536,
        "name": "bitmap0",
        "persistent": false,
        "recording": true
      }
    ]
  }
}

= Checking Bitmap bitmap0 =
expecting 0 dirty sectors; have 0. OK!

--- Cleanup ---

{"execute": "block-dirty-bitmap-remove", "arguments": {"name": "bitmap0", "node": "drive0"}}
{"return": {}}
{
  "bitmaps": {}
}

--- Verification ---

qemu_img compare "TEST_DIR/PID-bsync1" "TEST_DIR/PID-fbackup1" ==> Identical, OK!
qemu_img compare "TEST_DIR/PID-bsync2" "TEST_DIR/PID-fbackup2" ==> Identical, OK!
qemu_img compare "TEST_DIR/PID-img" "TEST_DIR/PID-fbackup2" ==> Identical, OK!


=== Mode top; Bitmap Sync always with simulated failure ===

--- Preparing image & VM ---

{"execute": "blockdev-add", "arguments": {"driver": "qcow2", "file": {"driver": "file", "filename": "TEST_DIR/PID-img"}, "node-name": "drive0"}}
{"return": {}}

--- Write #0 ---

write -P0x49 0x0000000 0x10000
{"return": ""}
write -P0x6c 0x0100000 0x10000
{"return": ""}
write -P0x6f 0x2000000 0x10000
{"return": ""}
write -P0x76 0x3ff0000 0x10000
{"return": ""}
{
  "bitmaps": {}
}

--- Reference Backup #0 ---

{}
{"execute": "job-dismiss", "arguments": {"id": "bdc-file-job"}}
{"return": {}}
{}
{}
{"execute": "job-dismiss", "arguments": {"id": "bdc-fmt-job"}}
{"return": {}}
{}
{"execute": "blockdev-backup", "arguments": {"device": "drive0", "filter-node-name": "backup-top", "job-id": "ref_backup_0", "sync": "full", "target": "ref_target_0", "x-perf": {"max-workers": 1}}}
{"return": {}}
{"data": {"device": "ref_backup_0", "len": 67108864, "offset": 67108864, "speed": 0, "type": "backup"}, "event": "BLOCK_JOB_COMPLETED", "timestamp": {"microseconds": "USECS", "seconds": "SECS"}}

--- Add Bitmap ---

{"execute": "block-dirty-bitmap-add", "arguments": {"granularity": 65536, "name": "bitmap0", "node": "drive0"}}
{"return": {}}

--- Write #1 ---

write -P0x65 0x0000000 0x10000
{"return": ""}
write -P0x77 0x00f8000 0x10000
{"return": ""}
write -P0x72 0x2008000 0x10000
{"return": ""}
write -P0x69 0x3fe0000 0x10000
{"return": ""}
{
  "bitmaps": {
    "drive0": [
      {
        "busy": false,
        "count": 393216,
        "granularity": 65536,
        "name": "bitmap0",
        "persistent": false,
        "recording": true
      }
    ]
  }
}

= Checking Bitmap bitmap0 =
expecting 6 dirty sectors; have 6. OK!

--- Reference Backup #1 ---

{}
{"execute": "job-dismiss", "arguments": {"id": "bdc-file-job"}}
{"return": {}}
{}
{}
{"execute": "job-dismiss", "arguments": {"id": "bdc-fmt-job"}}
{"return": {}}
{}
{"execute": "blockdev-backup", "arguments": {"device": "drive0", "filter-node-name": "backup-top", "job-id": "ref_backup_1", "sync": "full", "target": "ref_target_1", "x-perf": {"max-workers": 1}}}
{"return": {}}
{"data": {"device": "ref_backup_1", "len": 67108864, "offset": 67108864, "speed": 0, "type": "backup"}, "event": "BLOCK_JOB_COMPLETED", "timestamp": {"microseconds": "USECS", "seconds": "SECS"}}

--- Test Backup #1 ---

{}
{"execute": "job-dismiss", "arguments": {"id": "bdc-file-job"}}
{"return": {}}
{}
{}
{"execute": "job-dismiss", "arguments": {"id": "bdc-fmt-job"}}
{"return": {}}
{}
{"execute": "blockdev-backup", "arguments": {"auto-finalize": false, "bitmap": "bitmap0", "bitmap-mode": "always", "device": "drive0", "filter-node-name": "backup-top", "job-id": "backup_1", "sync": "top", "target": "backup_target_1", "x-perf": {"max-workers": 1}}}
{"return": {}}

--- Write #2 ---

write -P0x74 0x0010000 0x10000
{"return": ""}
write -P0x69 0x00e8000 0x10000
{"return": ""}
write -P0x6e 0x2018000 0x10000
{"return": ""}
write -P0x67 0x3fe0000 0x20000
{"return": ""}
{
  "bitmaps": {
    "backup-top": [
      {
        "busy": false,
        "count": 67108864,
        "granularity": 65536,
        "persistent": false,
        "recording": false
      },
      {
        "busy": false,
        "count": 458752,
        "granularity": 65536,
        "persistent": false,
        "recording": false
      }
    ],
    "drive0": [
      {
        "busy": false,
        "count": 0,
        "granularity": 65536,
        "persistent": false,
        "recording": false
      },
      {
        "busy": false,
        "count": 458752,
        "granularity": 65536,
        "persistent": false,
        "recording": true
      },
      {
        "busy": true,
        "count": 393216,
        "granularity": 65536,
        "name": "bitmap0",
        "persistent": false,
        "recording": true
      }
    ]
  }
}

= Checking Bitmap bitmap0 =
expecting 6 dirty sectors; have 6. OK!

= Checking Bitmap (anonymous) =
expecting 7 dirty sectors; have 7. OK!

{"execute": "job-cancel", "arguments": {"id": "backup_1"}}
{"return": {}}
{"data": {"id": "backup_1", "type": "backup"}, "event": "BLOCK_JOB_PENDING", "timestamp": {"microseconds": "USECS", "seconds": "SECS"}}
{"data": {"device": "backup_1", "len": 458752, "offset": 458752, "speed": 0, "type": "backup"}, "event": "BLOCK_JOB_CANCELLED", "timestamp": {"microseconds": "USECS", "seconds": "SECS"}}
{
  "bitmaps": {
    "drive0": [
      {
        "busy": false,
        "count": 458752,
        "granularity": 65536,
        "name": "bitmap0",
        "persistent": false,
        "recording": true
      }
    ]
  }
}

= Checking Bitmap bitmap0 =
expecting 7 dirty sectors; have 7. OK!

--- Write #3 ---

write -P0xaa 0x0010000 0x30000
{"return": ""}
write -P0xbb 0x00d8000 0x10000
{"return": ""}
write -P0xcc 0x2028000 0x10000
{"return": ""}
write -P0xdd 0x3fc0000 0x10000
{"return": ""}
{
  "bitmaps": {
    "drive0": [
      {
        "busy": false,
        "count": 786432,
        "granularity": 65536,
        "name": "bitmap0",
        "persistent": false,
        "recording": true
      }
    ]
  }
}

= Checking Bitmap bitmap0 =
expecting 12 dirty sectors; have 12. OK!

--- Reference Backup #2 ---

{}
{"execute": "job-dismiss", "arguments": {"id": "bdc-file-job"}}
{"return": {}}
{}
{}
{"execute": "job-dismiss", "arguments": {"id": "bdc-fmt-job"}}
{"return": {}}
{}
{"execute": "blockdev-backup", "arguments": {"device": "drive0", "filter-node-name": "backup-top", "job-id": "ref_backup_2", "sync": "full", "target": "ref_target_2", "x-perf": {"max-workers": 1}}}
{"return": {}}
{"data": {"device": "ref_backup_2", "len": 67108864, "offset": 67108864, "speed": 0, "type": "backup"}, "event": "BLOCK_JOB_COMPLETED", "timestamp": {"microseconds": "USECS", "seconds": "SECS"}}

--- Test Backup #2 ---

{}
{"execute": "job-dismiss", "arguments": {"id": "bdc-file-job"}}
{"return": {}}
{}
{}
{"execute": "job-dismiss", "arguments": {"id": "bdc-fmt-job"}}
{"return": {}}
{}
{"execute": "blockdev-backup", "arguments": {"auto-finalize": false, "bitmap": "bitmap0", "bitmap-mode": "always", "device": "drive0", "filter-node-name": "backup-top", "job-id": "backup_2", "sync": "bitmap", "target": "backup_target_2", "x-perf": {"max-workers": 1}}}
{"return": {}}
{"execute": "job-finalize", "arguments": {"id": "backup_2"}}
{"return": {}}
{"data": {"id": "backup_2", "type": "backup"}, "event": "BLOCK_JOB_PENDING", "timestamp": {"microseconds": "USECS", "seconds": "SECS"}}
{"data": {"device": "backup_2", "len": 786432, "offset": 786432, "speed": 0, "type": "backup"}, "event": "BLOCK_JOB_COMPLETED", "timestamp": {"microseconds": "USECS", "seconds": "SECS"}}
{
  "bitmaps": {
    "drive0": [
      {
        "busy": false,
        "count": 0,
        "granularity": 65536,
        "name": "bitmap0",
        "persistent": false,
        "recording": true
      }
    ]
  }
}

= Checking Bitmap bitmap0 =
expecting 0 dirty sectors; have 0. OK!

--- Cleanup ---

{"execute": "block-dirty-bitmap-remove", "arguments": {"name": "bitmap0", "node": "drive0"}}
{"return": {}}
{
  "bitmaps": {}
}

--- Verification ---

qemu_img compare "TEST_DIR/PID-bsync1" "TEST_DIR/PID-fbackup1" ==> Identical, OK!
qemu_img compare "TEST_DIR/PID-bsync2" "TEST_DIR/PID-fbackup2" ==> Identical, OK!
qemu_img compare "TEST_DIR/PID-img" "TEST_DIR/PID-fbackup2" ==> Identical, OK!


=== Mode top; Bitmap Sync always with intermediate failure ===

--- Preparing image & VM ---

{"execute": "blockdev-add", "arguments": {"driver": "qcow2", "file": {"driver": "blkdebug", "image": {"driver": "file", "filename": "TEST_DIR/PID-img"}, "inject-error": [{"errno": 5, "event": "read_aio", "immediately": false, "once": true, "state": 3}], "set-state": [{"event": "flush_to_disk", "new-state": 2, "state": 1}, {"event": "read_aio", "new-state": 3, "state": 2}]}, "node-name": "drive0"}}
{"return": {}}

--- Write #0 ---

write -P0x49 0x0000000 0x10000
{"return": ""}
write -P0x6c 0x0100000 0x10000
{"return": ""}
write -P0x6f 0x2000000 0x10000
{"return": ""}
write -P0x76 0x3ff0000 0x10000
{"return": ""}
{
  "bitmaps": {}
}

--- Reference Backup #0 ---

{}
{"execute": "job-dismiss", "arguments": {"id": "bdc-file-job"}}
{"return": {}}
{}
{}
{"execute": "job-dismiss", "arguments": {"id": "bdc-fmt-job"}}
{"return": {}}
{}
{"execute": "blockdev-backup", "arguments": {"device": "drive0", "filter-node-name": "backup-top", "job-id": "ref_backup_0", "sync": "full", "target": "ref_target_0", "x-perf": {"max-workers": 1}}}
{"return": {}}
{"data": {"device": "ref_backup_0", "len": 67108864, "offset": 67108864, "speed": 0, "type": "backup"}, "event": "BLOCK_JOB_COMPLETED", "timestamp": {"microseconds": "USECS", "seconds": "SECS"}}

--- Add Bitmap ---

{"execute": "block-dirty-bitmap-add", "arguments": {"granularity": 65536, "name": "bitmap0", "node": "drive0"}}
{"return": {}}

--- Write #1 ---

write -P0x65 0x0000000 0x10000
{"return": ""}
write -P0x77 0x00f8000 0x10000
{"return": ""}
write -P0x72 0x2008000 0x10000
{"return": ""}
write -P0x69 0x3fe0000 0x10000
{"return": ""}
{
  "bitmaps": {
    "drive0": [
      {
        "busy": false,
        "count": 393216,
        "granularity": 65536,
        "name": "bitmap0",
        "persistent": false,
        "recording": true
      }
    ]
  }
}

= Checking Bitmap bitmap0 =
expecting 6 dirty sectors; have 6. OK!

--- Reference Backup #1 ---

{}
{"execute": "job-dismiss", "arguments": {"id": "bdc-file-job"}}
{"return": {}}
{}
{}
{"execute": "job-dismiss", "arguments": {"id": "bdc-fmt-job"}}
{"return": {}}
{}
{"execute": "blockdev-backup", "arguments": {"device": "drive0", "filter-node-name": "backup-top", "job-id": "ref_backup_1", "sync": "full", "target": "ref_target_1", "x-perf": {"max-workers": 1}}}
{"return": {}}
{"data": {"device": "ref_backup_1", "len": 67108864, "offset": 67108864, "speed": 0, "type": "backup"}, "event": "BLOCK_JOB_COMPLETED", "timestamp": {"microseconds": "USECS", "seconds": "SECS"}}

{"return": ""}

--- Test Backup #1 ---

{}
{"execute": "job-dismiss", "arguments": {"id": "bdc-file-job"}}
{"return": {}}
{}
{}
{"execute": "job-dismiss", "arguments": {"id": "bdc-fmt-job"}}
{"return": {}}
{}
{"execute": "blockdev-backup", "arguments": {"auto-finalize": false, "bitmap": "bitmap0", "bitmap-mode": "always", "device": "drive0", "filter-node-name": "backup-top", "job-id": "backup_1", "sync": "top", "target": "backup_target_1", "x-perf": {"max-workers": 1}}}
{"return": {}}
{"data": {"action": "report", "device": "backup_1", "operation": "read"}, "event": "BLOCK_JOB_ERROR", "timestamp": {"microseconds": "USECS", "seconds": "SECS"}}
{"data": {"device": "backup_1", "error": "Input/output error", "len": 458752, "offset": 65536, "speed": 0, "type": "backup"}, "event": "BLOCK_JOB_COMPLETED", "timestamp": {"microseconds": "USECS", "seconds": "SECS"}}
{
  "bitmaps": {
    "drive0": [
      {
        "busy": false,
        "count": 393216,
        "granularity": 65536,
        "name": "bitmap0",
        "persistent": false,
        "recording": true
      }
    ]
  }
}

= Checking Bitmap bitmap0 =
expecting 6 dirty sectors; have 6. OK!

--- Write #3 ---

write -P0xaa 0x0010000 0x30000
{"return": ""}
write -P0xbb 0x00d8000 0x10000
{"return": ""}
write -P0xcc 0x2028000 0x10000
{"return": ""}
write -P0xdd 0x3fc0000 0x10000
{"return": ""}
{
  "bitmaps": {
    "drive0": [
      {
        "busy": false,
        "count": 917504,
        "granularity": 65536,
        "name": "bitmap0",
        "persistent": false,
        "recording": true
      }
    ]
  }
}

= Checking Bitmap bitmap0 =
expecting 14 dirty sectors; have 14. OK!

--- Reference Backup #2 ---

{}
{"execute": "job-dismiss", "arguments": {"id": "bdc-file-job"}}
{"return": {}}
{}
{}
{"execute": "job-dismiss", "arguments": {"id": "bdc-fmt-job"}}
{"return": {}}
{}
{"execute": "blockdev-backup", "arguments": {"device": "drive0", "filter-node-name": "backup-top", "job-id": "ref_backup_2", "sync": "full", "target": "ref_target_2", "x-perf": {"max-workers": 1}}}
{"return": {}}
{"data": {"device": "ref_backup_2", "len": 67108864, "offset": 67108864, "speed": 0, "type": "backup"}, "event": "BLOCK_JOB_COMPLETED", "timestamp": {"microseconds": "USECS", "seconds": "SECS"}}

--- Test Backup #2 ---

{}
{"execute": "job-dismiss", "arguments": {"id": "bdc-file-job"}}
{"return": {}}
{}
{}
{"execute": "job-dismiss", "arguments": {"id": "bdc-fmt-job"}}
{"return": {}}
{}
{"execute": "blockdev-backup", "arguments": {"auto-finalize": false, "bitmap": "bitmap0", "bitmap-mode": "always", "device": "drive0", "filter-node-name": "backup-top", "job-id": "backup_2", "sync": "bitmap", "target": "backup_target_2", "x-perf": {"max-workers": 1}}}
{"return": {}}
{"execute": "job-finalize", "arguments": {"id": "backup_2"}}
{"return": {}}
{"data": {"id": "backup_2", "type": "backup"}, "event": "BLOCK_JOB_PENDING", "timestamp": {"microseconds": "USECS", "seconds": "SECS"}}
{"data": {"device": "backup_2", "len": 917504, "offset": 917504, "speed": 0, "type": "backup"}, "event": "BLOCK_JOB_COMPLETED", "timestamp": {"microseconds": "USECS", "seconds": "SECS"}}
{
  "bitmaps": {
    "drive0": [
      {
        "busy": false,
        "count": 0,
        "granularity": 65536,
        "name": "bitmap0",
        "persistent": false,
        "recording": true
      }
    ]
  }
}

= Checking Bitmap bitmap0 =
expecting 0 dirty sectors; have 0. OK!

--- Cleanup ---

{"execute": "block-dirty-bitmap-remove", "arguments": {"name": "bitmap0", "node": "drive0"}}
{"return": {}}
{
  "bitmaps": {}
}

--- Verification ---

qemu_img compare "TEST_DIR/PID-bsync1" "TEST_DIR/PID-fbackup1" ==> Mismatch, OK!
qemu_img compare "TEST_DIR/PID-bsync2" "TEST_DIR/PID-fbackup2" ==> Identical, OK!
qemu_img compare "TEST_DIR/PID-img" "TEST_DIR/PID-fbackup2" ==> Identical, OK!


=== Mode top; Bitmap Sync always without failure ===

--- Preparing image & VM ---

{"execute": "blockdev-add", "arguments": {"driver": "qcow2", "file": {"driver": "file", "filename": "TEST_DIR/PID-img"}, "node-name": "drive0"}}
{"return": {}}

--- Write #0 ---

write -P0x49 0x0000000 0x10000
{"return": ""}
write -P0x6c 0x0100000 0x10000
{"return": ""}
write -P0x6f 0x2000000 0x10000
{"return": ""}
write -P0x76 0x3ff0000 0x10000
{"return": ""}
{
  "bitmaps": {}
}

--- Reference Backup #0 ---

{}
{"execute": "job-dismiss", "arguments": {"id": "bdc-file-job"}}
{"return": {}}
{}
{}
{"execute": "job-dismiss", "arguments": {"id": "bdc-fmt-job"}}
{"return": {}}
{}
{"execute": "blockdev-backup", "arguments": {"device": "drive0", "filter-node-name": "backup-top", "job-id": "ref_backup_0", "sync": "full", "target": "ref_target_0", "x-perf": {"max-workers": 1}}}
{"return": {}}
{"data": {"device": "ref_backup_0", "len": 67108864, "offset": 67108864, "speed": 0, "type": "backup"}, "event": "BLOCK_JOB_COMPLETED", "timestamp": {"microseconds": "USECS", "seconds": "SECS"}}

--- Add Bitmap ---

{"execute": "block-dirty-bitmap-add", "arguments": {"granularity": 65536, "name": "bitmap0", "node": "drive0"}}
{"return": {}}

--- Write #1 ---

write -P0x65 0x0000000 0x10000
{"return": ""}
write -P0x77 0x00f8000 0x10000
{"return": ""}
write -P0x72 0x2008000 0x10000
{"return": ""}
write -P0x69 0x3fe0000 0x10000
{"return": ""}
{
  "bitmaps": {
    "drive0": [
      {
        "busy": false,
        "count": 393216,
        "granularity": 65536,
        "name": "bitmap0",
        "persistent": false,
        "recording": true
      }
    ]
  }
}

= Checking Bitmap bitmap0 =
expecting 6 dirty sectors; have 6. OK!

--- Reference Backup #1 ---

{}
{"execute": "job-dismiss", "arguments": {"id": "bdc-file-job"}}
{"return": {}}
{}
{}
{"execute": "job-dismiss", "arguments": {"id": "bdc-fmt-job"}}
{"return": {}}
{}
{"execute": "blockdev-backup", "arguments": {"device": "drive0", "filter-node-name": "backup-top", "job-id": "ref_backup_1", "sync": "full", "target": "ref_target_1", "x-perf": {"max-workers": 1}}}
{"return": {}}
{"data": {"device": "ref_backup_1", "len": 67108864, "offset": 67108864, "speed": 0, "type": "backup"}, "event": "BLOCK_JOB_COMPLETED", "timestamp": {"microseconds": "USECS", "seconds": "SECS"}}

--- Test Backup #1 ---

{}
{"execute": "job-dismiss", "arguments": {"id": "bdc-file-job"}}
{"return": {}}
{}
{}
{"execute": "job-dismiss", "arguments": {"id": "bdc-fmt-job"}}
{"return": {}}
{}
{"execute": "blockdev-backup", "arguments": {"auto-finalize": false, "bitmap": "bitmap0", "bitmap-mode": "always", "device": "drive0", "filter-node-name": "backup-top", "job-id": "backup_1", "sync": "top", "target": "backup_target_1", "x-perf": {"max-workers": 1}}}
{"return": {}}

--- Write #2 ---

write -P0x74 0x0010000 0x10000
{"return": ""}
write -P0x69 0x00e8000 0x10000
{"return": ""}
write -P0x6e 0x2018000 0x10000
{"return": ""}
write -P0x67 0x3fe0000 0x20000
{"return": ""}
{
  "bitmaps": {
    "backup-top": [
      {
        "busy": false,
        "count": 67108864,
        "granularity": 65536,
        "persistent": false,
        "recording": false
      },
      {
        "busy": false,
        "count": 458752,
        "granularity": 65536,
        "persistent": false,
        "recording": false
      }
    ],
    "drive0": [
      {
        "busy": false,
        "count": 0,
        "granularity": 65536,
        "persistent": false,
        "recording": false
      },
      {
        "busy": false,
        "count": 458752,
        "granularity": 65536,
        "persistent": false,
        "recording": true
      },
      {
        "busy": true,
        "count": 393216,
        "granularity": 65536,
        "name": "bitmap0",
        "persistent": false,
        "recording": true
      }
    ]
  }
}

= Checking Bitmap bitmap0 =
expecting 6 dirty sectors; have 6. OK!

= Checking Bitmap (anonymous) =
expecting 7 dirty sectors; have 7. OK!

{"execute": "job-finalize", "arguments": {"id": "backup_1"}}
{"return": {}}
{"data": {"id": "backup_1", "type": "backup"}, "event": "BLOCK_JOB_PENDING", "timestamp": {"microseconds": "USECS", "seconds": "SECS"}}
{"data": {"device": "backup_1", "len": 458752, "offset": 458752, "speed": 0, "type": "backup"}, "event": "BLOCK_JOB_COMPLETED", "timestamp": {"microseconds": "USECS", "seconds": "SECS"}}
{
  "bitmaps": {
    "drive0": [
      {
        "busy": false,
        "count": 458752,
        "granularity": 65536,
        "name": "bitmap0",
        "persistent": false,
        "recording": true
      }
    ]
  }
}

= Checking Bitmap bitmap0 =
expecting 7 dirty sectors; have 7. OK!

--- Write #3 ---

write -P0xaa 0x0010000 0x30000
{"return": ""}
write -P0xbb 0x00d8000 0x10000
{"return": ""}
write -P0xcc 0x2028000 0x10000
{"return": ""}
write -P0xdd 0x3fc0000 0x10000
{"return": ""}
{
  "bitmaps": {
    "drive0": [
      {
        "busy": false,
        "count": 786432,
        "granularity": 65536,
        "name": "bitmap0",
        "persistent": false,
        "recording": true
      }
    ]
  }
}

= Checking Bitmap bitmap0 =
expecting 12 dirty sectors; have 12. OK!

--- Reference Backup #2 ---

{}
{"execute": "job-dismiss", "arguments": {"id": "bdc-file-job"}}
{"return": {}}
{}
{}
{"execute": "job-dismiss", "arguments": {"id": "bdc-fmt-job"}}
{"return": {}}
{}
{"execute": "blockdev-backup", "arguments": {"device": "drive0", "filter-node-name": "backup-top", "job-id": "ref_backup_2", "sync": "full", "target": "ref_target_2", "x-perf": {"max-workers": 1}}}
{"return": {}}
{"data": {"device": "ref_backup_2", "len": 67108864, "offset": 67108864, "speed": 0, "type": "backup"}, "event": "BLOCK_JOB_COMPLETED", "timestamp": {"microseconds": "USECS", "seconds": "SECS"}}

--- Test Backup #2 ---

{}
{"execute": "job-dismiss", "arguments": {"id": "bdc-file-job"}}
{"return": {}}
{}
{}
{"execute": "job-dismiss", "arguments": {"id": "bdc-fmt-job"}}
{"return": {}}
{}
{"execute": "blockdev-backup", "arguments": {"auto-finalize": false, "bitmap": "bitmap0", "bitmap-mode": "always", "device": "drive0", "filter-node-name": "backup-top", "job-id": "backup_2", "sync": "bitmap", "target": "backup_target_2", "x-perf": {"max-workers": 1}}}
{"return": {}}
{"execute": "job-finalize", "arguments": {"id": "backup_2"}}
{"return": {}}
{"data": {"id": "backup_2", "type": "backup"}, "event": "BLOCK_JOB_PENDING", "timestamp": {"microseconds": "USECS", "seconds": "SECS"}}
{"data": {"device": "backup_2", "len": 786432, "offset": 786432, "speed": 0, "type": "backup"}, "event": "BLOCK_JOB_COMPLETED", "timestamp": {"microseconds": "USECS", "seconds": "SECS"}}
{
  "bitmaps": {
    "drive0": [
      {
        "busy": false,
        "count": 0,
        "granularity": 65536,
        "name": "bitmap0",
        "persistent": false,
        "recording": true
      }
    ]
  }
}

= Checking Bitmap bitmap0 =
expecting 0 dirty sectors; have 0. OK!

--- Cleanup ---

{"execute": "block-dirty-bitmap-remove", "arguments": {"name": "bitmap0", "node": "drive0"}}
{"return": {}}
{
  "bitmaps": {}
}

--- Verification ---

qemu_img compare "TEST_DIR/PID-bsync1" "TEST_DIR/PID-fbackup1" ==> Identical, OK!
qemu_img compare "TEST_DIR/PID-bsync2" "TEST_DIR/PID-fbackup2" ==> Identical, OK!
qemu_img compare "TEST_DIR/PID-img" "TEST_DIR/PID-fbackup2" ==> Identical, OK!


=== API failure tests ===

--- Preparing image & VM ---

{"execute": "blockdev-add", "arguments": {"driver": "qcow2", "file": {"driver": "file", "filename": "TEST_DIR/PID-img"}, "node-name": "drive0"}}
{"return": {}}

{}
{"execute": "job-dismiss", "arguments": {"id": "bdc-file-job"}}
{"return": {}}
{}
{}
{"execute": "job-dismiss", "arguments": {"id": "bdc-fmt-job"}}
{"return": {}}
{}

{"execute": "block-dirty-bitmap-add", "arguments": {"granularity": 65536, "name": "bitmap0", "node": "drive0"}}
{"return": {}}

-- Testing invalid QMP commands --

-- Sync mode incremental tests --

{"execute": "blockdev-backup", "arguments": {"bitmap-mode": "on-success", "device": "drive0", "filter-node-name": "backup-top", "job-id": "api_job", "sync": "incremental", "target": "backup_target", "x-perf": {"max-workers": 1}}}
{"error": {"class": "GenericError", "desc": "must provide a valid bitmap name for 'incremental' sync mode"}}

{"execute": "blockdev-backup", "arguments": {"bitmap-mode": "always", "device": "drive0", "filter-node-name": "backup-top", "job-id": "api_job", "sync": "incremental", "target": "backup_target", "x-perf": {"max-workers": 1}}}
{"error": {"class": "GenericError", "desc": "must provide a valid bitmap name for 'incremental' sync mode"}}

{"execute": "blockdev-backup", "arguments": {"bitmap-mode": "never", "device": "drive0", "filter-node-name": "backup-top", "job-id": "api_job", "sync": "incremental", "target": "backup_target", "x-perf": {"max-workers": 1}}}
{"error": {"class": "GenericError", "desc": "must provide a valid bitmap name for 'incremental' sync mode"}}

{"execute": "blockdev-backup", "arguments": {"device": "drive0", "filter-node-name": "backup-top", "job-id": "api_job", "sync": "incremental", "target": "backup_target", "x-perf": {"max-workers": 1}}}
{"error": {"class": "GenericError", "desc": "must provide a valid bitmap name for 'incremental' sync mode"}}

{"execute": "blockdev-backup", "arguments": {"bitmap": "bitmap404", "bitmap-mode": "on-success", "device": "drive0", "filter-node-name": "backup-top", "job-id": "api_job", "sync": "incremental", "target": "backup_target", "x-perf": {"max-workers": 1}}}
{"error": {"class": "GenericError", "desc": "Bitmap 'bitmap404' could not be found"}}

{"execute": "blockdev-backup", "arguments": {"bitmap": "bitmap404", "bitmap-mode": "always", "device": "drive0", "filter-node-name": "backup-top", "job-id": "api_job", "sync": "incremental", "target": "backup_target", "x-perf": {"max-workers": 1}}}
{"error": {"class": "GenericError", "desc": "Bitmap sync mode must be 'on-success' when using sync mode 'incremental'"}}

{"execute": "blockdev-backup", "arguments": {"bitmap": "bitmap404", "bitmap-mode": "never", "device": "drive0", "filter-node-name": "backup-top", "job-id": "api_job", "sync": "incremental", "target": "backup_target", "x-perf": {"max-workers": 1}}}
{"error": {"class": "GenericError", "desc": "Bitmap sync mode must be 'on-success' when using sync mode 'incremental'"}}

{"execute": "blockdev-backup", "arguments": {"bitmap": "bitmap404", "device": "drive0", "filter-node-name": "backup-top", "job-id": "api_job", "sync": "incremental", "target": "backup_target", "x-perf": {"max-workers": 1}}}
{"error": {"class": "GenericError", "desc": "Bitmap 'bitmap404' could not be found"}}

{"execute": "blockdev-backup", "arguments": {"bitmap": "bitmap0", "bitmap-mode": "always", "device": "drive0", "filter-node-name": "backup-top", "job-id": "api_job", "sync": "incremental", "target": "backup_target", "x-perf": {"max-workers": 1}}}
{"error": {"class": "GenericError", "desc": "Bitmap sync mode must be 'on-success' when using sync mode 'incremental'"}}

{"execute": "blockdev-backup", "arguments": {"bitmap": "bitmap0", "bitmap-mode": "never", "device": "drive0", "filter-node-name": "backup-top", "job-id": "api_job", "sync": "incremental", "target": "backup_target", "x-perf": {"max-workers": 1}}}
{"error": {"class": "GenericError", "desc": "Bitmap sync mode must be 'on-success' when using sync mode 'incremental'"}}

-- Sync mode bitmap tests --

{"execute": "blockdev-backup", "arguments": {"bitmap-mode": "on-success", "device": "drive0", "filter-node-name": "backup-top", "job-id": "api_job", "sync": "bitmap", "target": "backup_target", "x-perf": {"max-workers": 1}}}
{"error": {"class": "GenericError", "desc": "must provide a valid bitmap name for 'bitmap' sync mode"}}

{"execute": "blockdev-backup", "arguments": {"bitmap-mode": "always", "device": "drive0", "filter-node-name": "backup-top", "job-id": "api_job", "sync": "bitmap", "target": "backup_target", "x-perf": {"max-workers": 1}}}
{"error": {"class": "GenericError", "desc": "must provide a valid bitmap name for 'bitmap' sync mode"}}

{"execute": "blockdev-backup", "arguments": {"bitmap-mode": "never", "device": "drive0", "filter-node-name": "backup-top", "job-id": "api_job", "sync": "bitmap", "target": "backup_target", "x-perf": {"max-workers": 1}}}
{"error": {"class": "GenericError", "desc": "must provide a valid bitmap name for 'bitmap' sync mode"}}

{"execute": "blockdev-backup", "arguments": {"device": "drive0", "filter-node-name": "backup-top", "job-id": "api_job", "sync": "bitmap", "target": "backup_target", "x-perf": {"max-workers": 1}}}
{"error": {"class": "GenericError", "desc": "must provide a valid bitmap name for 'bitmap' sync mode"}}

{"execute": "blockdev-backup", "arguments": {"bitmap": "bitmap404", "bitmap-mode": "on-success", "device": "drive0", "filter-node-name": "backup-top", "job-id": "api_job", "sync": "bitmap", "target": "backup_target", "x-perf": {"max-workers": 1}}}
{"error": {"class": "GenericError", "desc": "Bitmap 'bitmap404' could not be found"}}

{"execute": "blockdev-backup", "arguments": {"bitmap": "bitmap404", "bitmap-mode": "always", "device": "drive0", "filter-node-name": "backup-top", "job-id": "api_job", "sync": "bitmap", "target": "backup_target", "x-perf": {"max-workers": 1}}}
{"error": {"class": "GenericError", "desc": "Bitmap 'bitmap404' could not be found"}}

{"execute": "blockdev-backup", "arguments": {"bitmap": "bitmap404", "bitmap-mode": "never", "device": "drive0", "filter-node-name": "backup-top", "job-id": "api_job", "sync": "bitmap", "target": "backup_target", "x-perf": {"max-workers": 1}}}
{"error": {"class": "GenericError", "desc": "Bitmap 'bitmap404' could not be found"}}

{"execute": "blockdev-backup", "arguments": {"bitmap": "bitmap404", "device": "drive0", "filter-node-name": "backup-top", "job-id": "api_job", "sync": "bitmap", "target": "backup_target", "x-perf": {"max-workers": 1}}}
{"error": {"class": "GenericError", "desc": "Bitmap 'bitmap404' could not be found"}}

{"execute": "blockdev-backup", "arguments": {"bitmap": "bitmap0", "device": "drive0", "filter-node-name": "backup-top", "job-id": "api_job", "sync": "bitmap", "target": "backup_target", "x-perf": {"max-workers": 1}}}
{"error": {"class": "GenericError", "desc": "Bitmap sync mode must be given when providing a bitmap"}}

-- Sync mode full tests --

{"execute": "blockdev-backup", "arguments": {"bitmap-mode": "on-success", "device": "drive0", "filter-node-name": "backup-top", "job-id": "api_job", "sync": "full", "target": "backup_target", "x-perf": {"max-workers": 1}}}
{"error": {"class": "GenericError", "desc": "Cannot specify bitmap sync mode without a bitmap"}}

{"execute": "blockdev-backup", "arguments": {"bitmap-mode": "always", "device": "drive0", "filter-node-name": "backup-top", "job-id": "api_job", "sync": "full", "target": "backup_target", "x-perf": {"max-workers": 1}}}
{"error": {"class": "GenericError", "desc": "Cannot specify bitmap sync mode without a bitmap"}}

{"execute": "blockdev-backup", "arguments": {"bitmap-mode": "never", "device": "drive0", "filter-node-name": "backup-top", "job-id": "api_job", "sync": "full", "target": "backup_target", "x-perf": {"max-workers": 1}}}
{"error": {"class": "GenericError", "desc": "Cannot specify bitmap sync mode without a bitmap"}}

{"execute": "blockdev-backup", "arguments": {"bitmap": "bitmap404", "bitmap-mode": "on-success", "device": "drive0", "filter-node-name": "backup-top", "job-id": "api_job", "sync": "full", "target": "backup_target", "x-perf": {"max-workers": 1}}}
{"error": {"class": "GenericError", "desc": "Bitmap 'bitmap404' could not be found"}}

{"execute": "blockdev-backup", "arguments": {"bitmap": "bitmap404", "bitmap-mode": "always", "device": "drive0", "filter-node-name": "backup-top", "job-id": "api_job", "sync": "full", "target": "backup_target", "x-perf": {"max-workers": 1}}}
{"error": {"class": "GenericError", "desc": "Bitmap 'bitmap404' could not be found"}}

{"execute": "blockdev-backup", "arguments": {"bitmap": "bitmap404", "bitmap-mode": "never", "device": "drive0", "filter-node-name": "backup-top", "job-id": "api_job", "sync": "full", "target": "backup_target", "x-perf": {"max-workers": 1}}}
{"error": {"class": "GenericError", "desc": "Bitmap 'bitmap404' could not be found"}}

{"execute": "blockdev-backup", "arguments": {"bitmap": "bitmap404", "device": "drive0", "filter-node-name": "backup-top", "job-id": "api_job", "sync": "full", "target": "backup_target", "x-perf": {"max-workers": 1}}}
{"error": {"class": "GenericError", "desc": "Bitmap 'bitmap404' could not be found"}}

{"execute": "blockdev-backup", "arguments": {"bitmap": "bitmap0", "bitmap-mode": "never", "device": "drive0", "filter-node-name": "backup-top", "job-id": "api_job", "sync": "full", "target": "backup_target", "x-perf": {"max-workers": 1}}}
{"error": {"class": "GenericError", "desc": "Bitmap sync mode 'never' has no meaningful effect when combined with sync mode 'full'"}}

{"execute": "blockdev-backup", "arguments": {"bitmap": "bitmap0", "device": "drive0", "filter-node-name": "backup-top", "job-id": "api_job", "sync": "full", "target": "backup_target", "x-perf": {"max-workers": 1}}}
{"error": {"class": "GenericError", "desc": "Bitmap sync mode must be given when providing a bitmap"}}

-- Sync mode top tests --

{"execute": "blockdev-backup", "arguments": {"bitmap-mode": "on-success", "device": "drive0", "filter-node-name": "backup-top", "job-id": "api_job", "sync": "top", "target": "backup_target", "x-perf": {"max-workers": 1}}}
{"error": {"class": "GenericError", "desc": "Cannot specify bitmap sync mode without a bitmap"}}

{"execute": "blockdev-backup", "arguments": {"bitmap-mode": "always", "device": "drive0", "filter-node-name": "backup-top", "job-id": "api_job", "sync": "top", "target": "backup_target", "x-perf": {"max-workers": 1}}}
{"error": {"class": "GenericError", "desc": "Cannot specify bitmap sync mode without a bitmap"}}

{"execute": "blockdev-backup", "arguments": {"bitmap-mode": "never", "device": "drive0", "filter-node-name": "backup-top", "job-id": "api_job", "sync": "top", "target": "backup_target", "x-perf": {"max-workers": 1}}}
{"error": {"class": "GenericError", "desc": "Cannot specify bitmap sync mode without a bitmap"}}

{"execute": "blockdev-backup", "arguments": {"bitmap": "bitmap404", "bitmap-mode": "on-success", "device": "drive0", "filter-node-name": "backup-top", "job-id": "api_job", "sync": "top", "target": "backup_target", "x-perf": {"max-workers": 1}}}
{"error": {"class": "GenericError", "desc": "Bitmap 'bitmap404' could not be found"}}

{"execute": "blockdev-backup", "arguments": {"bitmap": "bitmap404", "bitmap-mode": "always", "device": "drive0", "filter-node-name": "backup-top", "job-id": "api_job", "sync": "top", "target": "backup_target", "x-perf": {"max-workers": 1}}}
{"error": {"class": "GenericError", "desc": "Bitmap 'bitmap404' could not be found"}}

{"execute": "blockdev-backup", "arguments": {"bitmap": "bitmap404", "bitmap-mode": "never", "device": "drive0", "filter-node-name": "backup-top", "job-id": "api_job", "sync": "top", "target": "backup_target", "x-perf": {"max-workers": 1}}}
{"error": {"class": "GenericError", "desc": "Bitmap 'bitmap404' could not be found"}}

{"execute": "blockdev-backup", "arguments": {"bitmap": "bitmap404", "device": "drive0", "filter-node-name": "backup-top", "job-id": "api_job", "sync": "top", "target": "backup_target", "x-perf": {"max-workers": 1}}}
{"error": {"class": "GenericError", "desc": "Bitmap 'bitmap404' could not be found"}}

{"execute": "blockdev-backup", "arguments": {"bitmap": "bitmap0", "bitmap-mode": "never", "device": "drive0", "filter-node-name": "backup-top", "job-id": "api_job", "sync": "top", "target": "backup_target", "x-perf": {"max-workers": 1}}}
{"error": {"class": "GenericError", "desc": "Bitmap sync mode 'never' has no meaningful effect when combined with sync mode 'top'"}}

{"execute": "blockdev-backup", "arguments": {"bitmap": "bitmap0", "device": "drive0", "filter-node-name": "backup-top", "job-id": "api_job", "sync": "top", "target": "backup_target", "x-perf": {"max-workers": 1}}}
{"error": {"class": "GenericError", "desc": "Bitmap sync mode must be given when providing a bitmap"}}

-- Sync mode none tests --

{"execute": "blockdev-backup", "arguments": {"bitmap-mode": "on-success", "device": "drive0", "filter-node-name": "backup-top", "job-id": "api_job", "sync": "none", "target": "backup_target", "x-perf": {"max-workers": 1}}}
{"error": {"class": "GenericError", "desc": "Cannot specify bitmap sync mode without a bitmap"}}

{"execute": "blockdev-backup", "arguments": {"bitmap-mode": "always", "device": "drive0", "filter-node-name": "backup-top", "job-id": "api_job", "sync": "none", "target": "backup_target", "x-perf": {"max-workers": 1}}}
{"error": {"class": "GenericError", "desc": "Cannot specify bitmap sync mode without a bitmap"}}

{"execute": "blockdev-backup", "arguments": {"bitmap-mode": "never", "device": "drive0", "filter-node-name": "backup-top", "job-id": "api_job", "sync": "none", "target": "backup_target", "x-perf": {"max-workers": 1}}}
{"error": {"class": "GenericError", "desc": "Cannot specify bitmap sync mode without a bitmap"}}

{"execute": "blockdev-backup", "arguments": {"bitmap": "bitmap404", "bitmap-mode": "on-success", "device": "drive0", "filter-node-name": "backup-top", "job-id": "api_job", "sync": "none", "target": "backup_target", "x-perf": {"max-workers": 1}}}
{"error": {"class": "GenericError", "desc": "Bitmap 'bitmap404' could not be found"}}

{"execute": "blockdev-backup", "arguments": {"bitmap": "bitmap404", "bitmap-mode": "always", "device": "drive0", "filter-node-name": "backup-top", "job-id": "api_job", "sync": "none", "target": "backup_target", "x-perf": {"max-workers": 1}}}
{"error": {"class": "GenericError", "desc": "Bitmap 'bitmap404' could not be found"}}

{"execute": "blockdev-backup", "arguments": {"bitmap": "bitmap404", "bitmap-mode": "never", "device": "drive0", "filter-node-name": "backup-top", "job-id": "api_job", "sync": "none", "target": "backup_target", "x-perf": {"max-workers": 1}}}
{"error": {"class": "GenericError", "desc": "Bitmap 'bitmap404' could not be found"}}

{"execute": "blockdev-backup", "arguments": {"bitmap": "bitmap404", "device": "drive0", "filter-node-name": "backup-top", "job-id": "api_job", "sync": "none", "target": "backup_target", "x-perf": {"max-workers": 1}}}
{"error": {"class": "GenericError", "desc": "Bitmap 'bitmap404' could not be found"}}

{"execute": "blockdev-backup", "arguments": {"bitmap": "bitmap0", "bitmap-mode": "on-success", "device": "drive0", "filter-node-name": "backup-top", "job-id": "api_job", "sync": "none", "target": "backup_target", "x-perf": {"max-workers": 1}}}
{"error": {"class": "GenericError", "desc": "sync mode 'none' does not produce meaningful bitmap outputs"}}

{"execute": "blockdev-backup", "arguments": {"bitmap": "bitmap0", "bitmap-mode": "always", "device": "drive0", "filter-node-name": "backup-top", "job-id": "api_job", "sync": "none", "target": "backup_target", "x-perf": {"max-workers": 1}}}
{"error": {"class": "GenericError", "desc": "sync mode 'none' does not produce meaningful bitmap outputs"}}

{"execute": "blockdev-backup", "arguments": {"bitmap": "bitmap0", "bitmap-mode": "never", "device": "drive0", "filter-node-name": "backup-top", "job-id": "api_job", "sync": "none", "target": "backup_target", "x-perf": {"max-workers": 1}}}
{"error": {"class": "GenericError", "desc": "sync mode 'none' does not produce meaningful bitmap outputs"}}

{"execute": "blockdev-backup", "arguments": {"bitmap": "bitmap0", "device": "drive0", "filter-node-name": "backup-top", "job-id": "api_job", "sync": "none", "target": "backup_target", "x-perf": {"max-workers": 1}}}
{"error": {"class": "GenericError", "desc": "Bitmap sync mode must be given when providing a bitmap"}}