def transition(self, env): # GET Object body req = Request(copy(env)) req.method = 'GET' resp = req.get_response(self.app) obj_body = resp.body # Glacier로 업로드 tmpfile = self.save_to_tempfile(obj_body) try: glacier = self._init_glacier() archive_id = glacier.upload_archive(tmpfile) glacier_obj = make_glacier_hidden_object_name(self.obj, archive_id) except Exception as e: return Response(status=HTTP_INTERNAL_SERVER_ERROR, body=e.message) finally: self.delete_tempfile(tmpfile) # Object를 0KB로 만들기 req = Request(copy(env)) req.headers[GLACIER_FLAG_META] = True resp = req.get_response(self.app) # Glacier Hidden account에 기록 glacier_account = self.glacier_account_prefix + self.account part, nodes = self.container_ring.get_nodes(glacier_account, self.container) hidden_path = '/%s/%s/%s' % (glacier_account, self.container, glacier_obj) for node in nodes: ip = node['ip'] port = node['port'] dev = node['device'] headers = dict() headers['user-agent'] = 'transition-middleware' headers['X-Timestamp'] = normalize_timestamp(time.time()) headers['referer'] = req.as_referer() headers['x-size'] = '0' headers['x-content-type'] = 'text/plain' headers['x-etag'] = 'd41d8cd98f00b204e9800998ecf8427e' conn = http_connect(ip, port, dev, part, 'PUT', hidden_path, headers) conn.getresponse().read() return Response(status=HTTP_NO_CONTENT)