示例#1
0
	def run(self):
		files = {}
		for d in self.dirs:
			files[d] = list(helper.walk_files(os.path.normpath(d), yield_folders = True))
		if len(files) > 0:
			self.qm.open()
			self.logger.info('Queue path ...') 
			for i in files:
				if len(files[i]) > 0:
					for path in files[i]:
						relpath = os.path.relpath(path, i) # 相对于root的相对路径 
						el = self.bucket + '::' + i+ '::' + relpath + '::C'
						hashcode = helper.calc_el_md5(i, relpath, self.bucket)
						if not self.is_el_queued(hashcode): 
							data={"root": i, "relpath": relpath, "bucket": self.bucket, "action": 'C', "status":  0, "retries" : 0}
							self.qm.save(data)
							'''queue el, el: element of queue , formated as "bucket::root::path"'''
							try:
								self.queue.put(el, block = True, timeout = 1)
								msg = 'queue element:' + el
								#print msg
								self.logger.info(msg)
							except Full as e:
								self.queue.put(None)
								self.logger.error(e.message) 
			self.qm.close()
		self.queue.put(None)
		#self.queue.join()
		return
		
			
					
			
		
示例#2
0
	def save_el(self, root, relpath, bucket, action):
		hashcode = helper.calc_el_md5(root, relpath, bucket)
		self.qm.open()
		if self.is_el_existed(hashcode):
			self.qm.update_action(hashcode, action)
			self.qm.update_status(hashcode, 0)
		else:
			data={"root": root, "relpath": relpath, "bucket": bucket, "action": action, "status":  0, "retries": 0}
			self.qm.save(data)
		self.qm.close()
示例#3
0
 def save_el(self, root, relpath, bucket, action):
     hashcode = helper.calc_el_md5(root, relpath, bucket)
     self.qm.open()
     if self.is_el_existed(hashcode):
         self.qm.update_action(hashcode, action)
         self.qm.update_status(hashcode, 0)
     else:
         data = {
             "root": root,
             "relpath": relpath,
             "bucket": bucket,
             "action": action,
             "status": 0,
             "retries": 0
         }
         self.qm.save(data)
     self.qm.close()
示例#4
0
	def run(self):
		self.logger.info('Now starting sync thread ...')
		self.qm.open()
		while True:
			if self._terminate:
				break
			item = self.queue.get()
			if item is None:
				break 
			(bucket, root, relpath, action) = item.split('::')
			if len(bucket) > 0 and len(root) > 0 and len(relpath) > 0 and len(action) > 0:
				hashcode = helper.calc_el_md5(root, relpath, bucket)
				if not self.is_el_processed(hashcode):
					oss_obj_name = os.path.join(os.path.basename(root), relpath)
					if len(oss_obj_name) > 0:
						if(action == 'M' or action == 'C'): 
							success = self.upload(bucket, oss_obj_name, os.path.join(root, relpath)) 
							msg = 'put object ' + oss_obj_name + ' to bucket ' + bucket
						if(action == 'D'): 
							success = self.delete_oss_objects(bucket, oss_obj_name)
							msg = 'delete object '  + oss_obj_name + ' of bucket ' + bucket
						if success: 
							msg += ' success'
							self.logger.info(msg)
							self.qm.update_status(hashcode, 1)
						else:
							if success == False:
								msg += ' failure'  
								self.logger.error(msg)
								"""requeue losing element"""
								row = self.qm.get(hashcode)
								if row:
									retries = int(row['retries'] )
									if retries < MAX_RETRIES:
										self.queue_el(item)
										self.qm.update_retries(hashcode, retries + 1)
									else:
										self.logger.critical(msg + ' exceed max retries')
							else:
								self.logger.critical(msg + ' failure, resource may not exists.')
								pass
		self.qm.close()
		self.queue.task_done()
		return
		
示例#5
0
	def queue_el(self, bucket, root, path):
		"""根据bucket和root以及路径生成队列元素"""
		relpath = os.path.relpath(path, root) # 相对于root的相对路径  
		filehash = ""
		if os.path.isfile(path):
			filehash = helper.calc_file_md5(path)
		hashcode = helper.calc_el_md5(root, relpath, bucket, filehash)
		el = bucket + '::' + root + '::' + relpath + '::C' + '::' + hashcode
		if not self.is_el_queued(hashcode): 
			data={"root": root, "relpath": relpath, "bucket": bucket, "action": 'C', "status":  0, "hashcode": hashcode, "retries" : 0}

			try:
				self.qm.save(data)
				self.queue.put(el, block = True, timeout = 1)
				msg = 'queue element:' + el
				#print msg
				self.logger.info(msg)
			except Full as e:
				self.logger.error(e.message) 
示例#6
0
 def run(self):
     files = {}
     for d in self.dirs:
         files[d] = list(
             helper.walk_files(os.path.normpath(d), yield_folders=True))
     if len(files) > 0:
         self.qm.open()
         self.logger.info('Queue path ...')
         for i in files:
             if len(files[i]) > 0:
                 for path in files[i]:
                     relpath = os.path.relpath(path, i)  # 相对于root的相对路径
                     el = self.bucket + '::' + i + '::' + relpath + '::C'
                     hashcode = helper.calc_el_md5(i, relpath, self.bucket)
                     if not self.is_el_queued(hashcode):
                         data = {
                             "root": i,
                             "relpath": relpath,
                             "bucket": self.bucket,
                             "action": 'C',
                             "status": 0,
                             "retries": 0
                         }
                         self.qm.save(data)
                         '''queue el, el: element of queue , formated as "bucket::root::path"'''
                         try:
                             self.queue.put(el, block=True, timeout=1)
                             msg = 'queue element:' + el
                             #print msg
                             self.logger.info(msg)
                         except Full as e:
                             self.queue.put(None)
                             self.logger.error(e.message)
         self.qm.close()
     self.queue.put(None)
     #self.queue.join()
     return