def get_response(req): requested_policy = int( req['headers']['X-Backend-Storage-Policy-Index']) if int(policy) != requested_policy: AssertionError( "Requested polciy doesn't fit the fake response policy") if not node_map: _build_node_map(req, policy) try: node_index = node_map[(req['ip'], req['port'])] except KeyError: raise Exception("Couldn't find node %s:%s in %r" % (req['ip'], req['port'], all_nodes)) try: frags = node_frags[node_index] except IndexError: raise Exception( 'Found node %r:%r at index %s - ' 'but only got %s stub response nodes' % (req['ip'], req['port'], node_index, len(node_frags))) if not frags: return StubResponse(404) # determine response fragment (if any) for this call resp_frag = frags[call_count[node_index]] call_count[node_index] += 1 frag_prefs = req['headers'].get('X-Backend-Fragment-Preferences') if not (frag_prefs or resp_frag.get('durable', True)): return StubResponse(404) # prepare durable timestamp and backend frags header for this node obj_stub = resp_frag['obj'] ts2frags = defaultdict(list) durable_timestamp = None for frag in frags: ts_frag = frag['obj']['timestamp'] if frag.get('durable', True): durable_timestamp = ts_frag.internal ts2frags[ts_frag].append(frag['frag']) try: body = obj_stub['frags'][resp_frag['frag']] except IndexError as err: raise Exception( 'Frag index %s not defined: node index %s, frags %r\n%s' % (resp_frag['frag'], node_index, [f['frag'] for f in frags], err)) headers = { 'X-Object-Sysmeta-Ec-Content-Length': len(obj_stub['body']), 'X-Object-Sysmeta-Ec-Etag': obj_stub['etag'], 'X-Object-Sysmeta-Ec-Frag-Index': policy.get_backend_index(resp_frag['frag']), 'X-Backend-Timestamp': obj_stub['timestamp'].internal, 'X-Timestamp': obj_stub['timestamp'].normal, 'X-Backend-Data-Timestamp': obj_stub['timestamp'].internal, 'X-Backend-Fragments': server._make_backend_fragments_header(ts2frags) } if durable_timestamp: headers['X-Backend-Durable-Timestamp'] = durable_timestamp return StubResponse(200, body, headers)
def get_response(req): requested_policy = int( req['headers']['X-Backend-Storage-Policy-Index']) if int(policy) != requested_policy: AssertionError( "Requested polciy doesn't fit the fake response policy") if not node_map: _build_node_map(req, policy) try: node_index = node_map[(req['ip'], req['port'])] except KeyError: raise Exception("Couldn't find node %s:%s in %r" % ( req['ip'], req['port'], all_nodes)) try: frags = node_frags[node_index] except IndexError: raise Exception('Found node %r:%r at index %s - ' 'but only got %s stub response nodes' % ( req['ip'], req['port'], node_index, len(node_frags))) if not frags: return StubResponse(404) # determine response fragment (if any) for this call resp_frag = frags[call_count[node_index]] call_count[node_index] += 1 frag_prefs = req['headers'].get('X-Backend-Fragment-Preferences') if not (frag_prefs or resp_frag.get('durable', True)): return StubResponse(404) # prepare durable timestamp and backend frags header for this node obj_stub = resp_frag['obj'] ts2frags = defaultdict(list) durable_timestamp = None for frag in frags: ts_frag = frag['obj']['timestamp'] if frag.get('durable', True): durable_timestamp = ts_frag.internal ts2frags[ts_frag].append(frag['frag']) try: body = obj_stub['frags'][resp_frag['frag']] except IndexError as err: raise Exception( 'Frag index %s not defined: node index %s, frags %r\n%s' % (resp_frag['frag'], node_index, [f['frag'] for f in frags], err)) headers = { 'X-Object-Sysmeta-Ec-Content-Length': len(obj_stub['body']), 'X-Object-Sysmeta-Ec-Etag': obj_stub['etag'], 'X-Object-Sysmeta-Ec-Frag-Index': policy.get_backend_index(resp_frag['frag']), 'X-Backend-Timestamp': obj_stub['timestamp'].internal, 'X-Timestamp': obj_stub['timestamp'].normal, 'X-Backend-Data-Timestamp': obj_stub['timestamp'].internal, 'X-Backend-Fragments': server._make_backend_fragments_header(ts2frags) } if durable_timestamp: headers['X-Backend-Durable-Timestamp'] = durable_timestamp return StubResponse(200, body, headers)