/* * Change the headers with current fragment information: * 1. X-GP-DATA-DIR header is changed to the source name of the current fragment. * We reuse the same http header to send all requests for specific fragments. * The original header's value contains the name of the general path of the query * (can be with wildcard or just a directory name), and this value is changed here * to the specific source name of each fragment name. * 2. X-GP-FRAGMENT-USER-DATA header is changed to the current fragment's user data. * If the fragment doesn't have user data, the header will be removed. */ void set_current_fragment_headers(gphadoop_context* context) { FragmentData* frag_data = (FragmentData*)lfirst(context->current_fragment); elog(DEBUG2, "pxf: set_current_fragment_source_name: source_name %s, index %s, has user data: %s ", frag_data->source_name, frag_data->index, frag_data->user_data ? "TRUE" : "FALSE"); churl_headers_override(context->churl_headers, "X-GP-DATA-DIR", frag_data->source_name); churl_headers_override(context->churl_headers, "X-GP-DATA-FRAGMENT", frag_data->index); churl_headers_override(context->churl_headers, "X-GP-FRAGMENT-METADATA", frag_data->fragment_md); churl_headers_override(context->churl_headers, "X-GP-FRAGMENT-INDEX", frag_data->index); if (frag_data->user_data) { churl_headers_override(context->churl_headers, "X-GP-FRAGMENT-USER-DATA", frag_data->user_data); } else { churl_headers_remove(context->churl_headers, "X-GP-FRAGMENT-USER-DATA", true); } if (frag_data->profile) { /* if current fragment has optimal profile set it*/ churl_headers_override(context->churl_headers, "X-GP-PROFILE", frag_data->profile); elog(DEBUG2, "pxf: set_current_fragment_headers: using profile: %s", frag_data->profile); } else if (context->gphd_uri->profile) { /* if current fragment doesn't have any optimal profile, set to use profile from url */ churl_headers_override(context->churl_headers, "X-GP-PROFILE", context->gphd_uri->profile); elog(DEBUG2, "pxf: set_current_fragment_headers: using profile: %s", context->gphd_uri->profile); } /* if there is no profile passed in url, we expect to have accessor+fragmenter+resolver so no action needed by this point */ }
/* * Change the headers with current fragment information: * 1. X-GP-DATA-DIR header is changed to the source name of the current fragment. * We reuse the same http header to send all requests for specific fragments. * The original header's value contains the name of the general path of the query * (can be with wildcard or just a directory name), and this value is changed here * to the specific source name of each fragment name. * 2. X-GP-FRAGMENT-USER-DATA header is changed to the current fragment's user data. * If the fragment doesn't have user data, the header will be removed. */ void set_current_fragment_headers(gphadoop_context* context) { FragmentData* frag_data = (FragmentData*)lfirst(context->current_fragment); elog(DEBUG2, "pxf: set_current_fragment_source_name: source_name %s, index %s, has user data: %s ", frag_data->source_name, frag_data->index, frag_data->user_data ? "TRUE" : "FALSE"); churl_headers_override(context->churl_headers, "X-GP-DATA-DIR", frag_data->source_name); churl_headers_override(context->churl_headers, "X-GP-DATA-FRAGMENT", frag_data->index); churl_headers_override(context->churl_headers, "X-GP-FRAGMENT-METADATA", frag_data->fragment_md); if (frag_data->user_data) { churl_headers_override(context->churl_headers, "X-GP-FRAGMENT-USER-DATA", frag_data->user_data); } else { churl_headers_remove(context->churl_headers, "X-GP-FRAGMENT-USER-DATA", true); } }