예제 #1
0
 def test_compress(self):
     def write_test_file( s):
         w = s.get_writer()
         with open(TEST_FILE,'rb') as f:
             while True:
                 read= f.read(10000)
                 if not read:
                     break
                 w.write(read)
         slot.close()
     test_file_size=os.stat(TEST_FILE).st_size
     sr=Storage(self.dir, 2,compression_level= 0)
     rack=sr.get_rack_for('test')
     slot=rack.create_slot()
     write_test_file(slot)
     res= rack.last_slot
     self.assertEqual(test_file_size, res.size_uncompressed)
     self.assertTrue(test_file_size < res.size)
     
     sr=Storage(self.dir, 2,compression_level= 1)
     rack=sr.get_rack_for('test')
     slot=rack.create_slot()
     write_test_file(slot)
     res= rack.last_slot
     self.assertEqual(test_file_size, res.size_uncompressed)
     self.assertTrue(test_file_size > res.size)
     comp_size = res.size
     
     sr=Storage(self.dir, 2,compression_level= 9)
     rack=sr.get_rack_for('test')
     slot=rack.create_slot()
     write_test_file(slot)
     res= rack.last_slot
     self.assertEqual(test_file_size, res.size_uncompressed)
     self.assertTrue(comp_size > res.size)
예제 #2
0
 def test_compress(self):
     test_file_size=os.stat(TEST_FILE).st_size
     sr=Storage(self.dir, 2,compression_level= 0)
     uid=gen_uuid()
     rack=sr.get_rack_for('test',uid )
     slot=rack.create_slot()
     write_sample_file(slot)
     res= rack.last_slot
     self.assertEqual(res._comp_method, 'client')
     self.assertEqual(test_file_size, res.size_uncompressed)
     self.assertTrue(test_file_size < res.size)
     
     sr=Storage(self.dir, 2,compression_level= 1)
     rack=sr.get_rack_for('test', uid)
     slot=rack.create_slot()
     write_sample_file(slot)
     res= rack.last_slot
     self.assertEqual(test_file_size, res.size_uncompressed)
     self.assertTrue(test_file_size > res.size)
     comp_size = res.size
     
     sr=Storage(self.dir, 2,compression_level= 9)
     rack=sr.get_rack_for('test', uid)
     slot=rack.create_slot()
     write_sample_file(slot)
     res= rack.last_slot
     self.assertEqual(test_file_size, res.size_uncompressed)
     self.assertTrue(comp_size > res.size)
예제 #3
0
 def execute_for_one(self, session, host):
     vm_name=self.args.vm
     show_progress=not self.args.no_progress
     restore= self.args.restore
     srid = self.args.sr_id
     
     storage=Storage(self.config['storage_root'], self.config.get('storage_retain', 3))
     rack=storage.get_rack_for(vm_name, exists=True)
     if not rack:
         raise CommandError('No backup to restore for VM %s' % vm_name)
     slot=rack.last_slot
     if not slot:
         raise CommandError('No backup to restore for VM %s' % vm_name)
     
     sid=session._session
     progress=None
     task_id=None
     if show_progress:
                 task_id=session.xenapi.task.create('VM.import', 'Import of %s'%vm_name)
                 log.debug("Starting progress monitor")
                 progress=ProgressMonitor(session, task_id)
                 progress.start()
     with Client(host['url']) as c:
         log.info('Starting import of VM %s'% vm_name)
         params= {'session_id':sid,  'task_id':task_id}
         if srid:
             params['sr_id']=srid
         if restore:
             params['restore']=restore
         resp=c.put('/import', slot.get_reader(), slot.size_uncompressed, params)
    
         
         log.info('Finished import of VM %s'% vm_name)
예제 #4
0
    def execute_for_one(self, session, host):
        vm_name = self.args.vm
        show_progress = not self.args.no_progress
        restore = self.args.restore
        srid = self.args.sr_id

        storage = Storage(self.config['storage_root'],
                          self.config.get('storage_retain', 3))
        rack = storage.get_rack_for(vm_name, exists=True)
        if not rack:
            raise CommandError('No backup to restore for VM %s' % vm_name)
        slot = rack.last_slot
        if not slot:
            raise CommandError('No backup to restore for VM %s' % vm_name)

        sid = session._session
        progress = None
        task_id = None
        if show_progress:
            task_id = session.xenapi.task.create('VM.import',
                                                 'Import of %s' % vm_name)
            log.debug("Starting progress monitor")
            progress = ProgressMonitor(session, task_id)
            progress.start()
        with Client(host['url']) as c:
            log.info('Starting import of VM %s' % vm_name)
            params = {'session_id': sid, 'task_id': task_id}
            if srid:
                params['sr_id'] = srid
            if restore:
                params['restore'] = restore
            resp = c.put('/import', slot.get_reader(), slot.size_uncompressed,
                         params)

            log.info('Finished import of VM %s' % vm_name)
예제 #5
0
 def test_uuid(self):
     sr=Storage(self.dir, 2,compression_level= 0)
     uid=gen_uuid()
     rack=sr.get_rack_for('test',uid )
     slot=rack.create_slot()
     write_sample_file(slot)
     slot.close()
     uid2=gen_uuid()
     rack=sr.get_rack_for('test',uid2 )
     self.assertEqual(rack.last_slot, None)
     self.assertTrue(os.path.exists(rack._path))
     uid3=gen_uuid()
     rack=sr.get_rack_for('test',uid3,exists=True)
     self.assertFalse(rack)
     
     try:
         r=sr.find_rack_for('test')
         self.fail('Should raise exception')
     except Storage.NotFound:
         pass
     
     try:
         r=sr.find_rack_for('test', '123')
         self.fail('Should raise exception')
     except Storage.NotFound:
         pass
     
     r=sr.find_rack_for('test', uid)
     self.assertTrue(r)
     s=r.last_slot
     self.assertTrue(s)
     
     r=sr.find_rack_for('test', uid[:5].upper())
     self.assertTrue(r)
     s=r.last_slot
     self.assertTrue(s)
     
     r=sr.find_rack_for('test', uid2)
     self.assertTrue(r)
     s=r.last_slot
     self.assertFalse(s)
예제 #6
0
def write_file(dir_name,f, compression_level=0, block_size=10000):
    def w(s):
        w = s.get_writer()
        while True:
            read= f.read(block_size)
            if not read:
                break
            w.write(read)
        slot.close()
    sr=Storage(dir_name, 2,compression_level= compression_level)
    rack=sr.get_rack_for(TEST_RACK, '1234')
    slot=rack.create_slot()
    w(slot)
예제 #7
0
 def test_no_compress_server(self):
     test_file_size=os.stat(TEST_FILE).st_size                
     sr=Storage(self.dir, 2,compression_method= 'server')
     uid=gen_uuid()
     rack=sr.get_rack_for('test',uid)
     slot=rack.create_slot()
     write_sample_file(slot)
     res= rack.last_slot
     self.assertEqual(res._comp_method, 'server')
     self.assertEqual(test_file_size, res.size_uncompressed)
     self.assertEqual(test_file_size , res.size)
     
     self.assertTrue(slot._path.endswith('.xva.gz'))
     self.assertTrue(res._path.endswith('.xva.gz'))
예제 #8
0
 def test_basic(self):
     sr=Storage(self.dir, 2)
     uid=gen_uuid()
     rack=sr.get_rack_for('test', uid)
     slot=rack.create_slot()
     msg='Hi There Is Anybody In There'
     slot.get_writer().write(msg)
     time.sleep(0.001)
     slot.close()
     self.assertEqual(1, len(rack.get_all_slots()))
     m=rack.last_slot
     self.assertEqual(len(msg), m.size_uncompressed)
     self.assertTrue(m.duration>0)
     m.close()
     time.sleep(0.01)
     slot=rack.create_slot()
     slot.get_writer().write('Second')
     slot.close()
     self.assertEqual(2, len(rack.get_all_slots()))
     slot=rack.last_slot
     r=slot.get_reader().read()
     slot.close()
     self.assertEqual('Second',r)
     
     slot=rack.create_slot()
     w=slot.get_writer()
     w.write('aaa')
     w.close()
     self.assertEqual(2, len(rack.get_all_slots()))
     
     time.sleep(0.01)
     slot=rack.create_slot()
     slot.get_writer().write('Third')
     slot.close()
     self.assertEqual(3, len(rack.get_all_slots()))
     slot=rack.last_slot
     r=slot.get_reader().read()
     slot.close()
     self.assertEqual('Third',r)
     
     rack.shrink()
     self.assertEqual(2, len(rack.get_all_slots()))
     
     r=slot.get_reader().read()
     slot.close()
     self.assertEqual('Third',r)
예제 #9
0
 def test_no_compress(self):
     test_file_size=os.stat(TEST_FILE).st_size
     sr=Storage(self.dir, 2,compression_method= None)
     uid=gen_uuid()
     rack=sr.get_rack_for('test', uid)
     slot=rack.create_slot()
     write_sample_file(slot)
     res= rack.last_slot
     self.assertEqual(res._comp_method, None)
     self.assertEqual(test_file_size, res.size_uncompressed)
     self.assertEqual(test_file_size , res.size)
     
     self.assertTrue(slot._path.endswith('.xva'))
     self.assertTrue(res._path.endswith('.xva'))
     self.assertTrue(res.duration)
     print 'duration',res.duration
     self.assertTrue(res.created)
     print 'created', res.created
     
     st=sr.get_status()
     self.assertTrue(st[uid])