Skip to content

[souce-outreach] mid sync Auth failures for syncs taking longer than a couple of hours. Connector is unsable on large streams #70223

@ahmedrad

Description

@ahmedrad

Connector Name

source-outreach

Connector Version

1.1.19

What step the error happened?

During the sync

Relevant information

Very similar to this issue that was happening in the Hubspot Connector

connections sometimes fail mid-sync while syncing large streams (like calls). The simplified error is Failure in source: Unauthorized. Please ensure you are authenticated correctly, but the actual key underlying error is using an expired temporary token.

It seems like there's a race condition where the request is sometimes sent before the Oauth temporary token is renewed and since 403 errors are not retriable the entire sync fails.

Relevant log output

2025-10-31 05:21:51 replication-orchestrator INFO Failures: [ {
  "failureOrigin" : "source",
  "failureType" : "config_error",
  "internalMessage" : "'GET' request to 'https://api.outreach.io/api/v2/mailings?count=false&filter%5BupdatedAt%5D%5Bgte%5D=1990-01-01T00%3A00%3A00.000Z&newFilterSyntax=true&page%5Bafter%5D=eyJjbiI6IkFwaVYyOjpNYWlsaW5nc0NvbnRyb2xsZXIiLCJzcCI6InVwZGF0ZWRBdCIsInN2IjpbIjIwMjQtMDEtMTFUMTI6NDc6MjYuMDAwWiJdLCJpZCI6MTQzMzAzMywidiI6MX0%3D&page%5Bsize%5D=100&sort=updatedAt' failed with status code '401' and error message: 'Please get a new access token and try again.'. Request (body): 'None'. Response (body): '{'id': 'expiredAccessToken', 'title': 'Expired Access Token', 'detail': 'Please get a new access token and try again.'}'. Response (headers): '{'Content-Type': 'application/vnd.api+json', 'Content-Length': '112', 'Connection': 'keep-alive', 'Date': 'Thu, 30 Oct 2025 18:21:25 GMT', 'Cache-Control': 'no-cache', 'Content-Encoding': 'gzip', 'Vary': 'Accept-Encoding, Origin', 'X-Ratelimit-Limit': '10000', 'X-Ratelimit-Remaining': '1129', 'X-Ratelimit-Reset': '1761851678', 'X-Request-Id': 'eb6b6588-ddb5-4b48-b86d-744f79329584', 'X-Runtime': '0.001325', 'X-Cache': 'Error from cloudfront', 'Via': '1.1 d49bde7225e80ca0dc457ff2b8b4343e.cloudfront.net (CloudFront)', 'X-Amz-Cf-Pop': 'SEA900-P9', 'X-Amz-Cf-Id': 'B-nvyRef0-YNPJ3nCW8jo0yXg-CRvH-OnJ1nI9iCD5AhJ2_N9cZ-JA=='}'.",
  "externalMessage" : "HTTP Status Code: 401. Error: Unauthorized. Please ensure you are authenticated correctly.",
  "metadata" : {
    "attemptNumber" : 0,
    "jobId" : 8,
    "from_trace_message" : true,
    "connector_command" : "read"
  },
  "stacktrace" : "Traceback (most recent call last):\n  File \"/usr/local/lib/python3.13/site-packages/airbyte_cdk/sources/streams/concurrent/partition_reader.py\", line 79, in process_partition\n    for record in partition.read():\n                  ~~~~~~~~~~~~~~^^\n  File \"/usr/local/lib/python3.13/site-packages/airbyte_cdk/sources/declarative/stream_slicers/declarative_partition_generator.py\", line 91, in read\n    for stream_data in self._retriever.read_records(\n                       ~~~~~~~~~~~~~~~~~~~~~~~~~~~~^\n        self._schema_loader.get_json_schema(), self._stream_slice\n        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n    ):\n    ^\n  File \"/usr/local/lib/python3.13/site-packages/airbyte_cdk/sources/declarative/retrievers/simple_retriever.py\", line 544, in read_records\n    for stream_data in self._read_pages(record_generator, self.state, _slice):\n                       ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n  File \"/usr/local/lib/python3.13/site-packages/airbyte_cdk/sources/declarative/retrievers/simple_retriever.py\", line 428, in _read_pages\n    response = self._fetch_next_page(stream_state, stream_slice, next_page_token)\n  File \"/usr/local/lib/python3.13/site-packages/airbyte_cdk/sources/declarative/retrievers/simple_retriever.py\", line 338, in _fetch_next_page\n    return self.requester.send_request(\n           ~~~~~~~~~~~~~~~~~~~~~~~~~~~^\n        path=self._paginator_path(\n        ^^^^^^^^^^^^^^^^^^^^^^^^^^\n    ...<27 lines>...\n        log_formatter=self.log_formatter,\n        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n    )\n    ^\n  File \"/usr/local/lib/python3.13/site-packages/airbyte_cdk/sources/declarative/requesters/http_requester.py\", line 458, in send_request\n    request, response = self._http_client.send_request(\n                        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^\n        http_method=self.get_method().value,\n        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n    ...<21 lines>...\n        exit_on_rate_limit=self._exit_on_rate_limit,\n        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n    )\n    ^\n  File \"/usr/local/lib/python3.13/site-packages/airbyte_cdk/sources/streams/http/http_client.py\", line 578, in send_request\n    response: requests.Response = self._send_with_retry(\n                                  ~~~~~~~~~~~~~~~~~~~~~^\n        request=request,\n        ^^^^^^^^^^^^^^^^\n    ...<2 lines>...\n        exit_on_rate_limit=exit_on_rate_limit,\n        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n    )\n    ^\n  File \"/usr/local/lib/python3.13/site-packages/airbyte_cdk/sources/streams/http/http_client.py\", line 300, in _send_with_retry\n    response = backoff_handler(rate_limit_backoff_handler(user_backoff_handler))(\n        request,\n    ...<2 lines>...\n        exit_on_rate_limit=exit_on_rate_limit,\n    )  # type: ignore # mypy can't infer that backoff_handler wraps _send\n  File \"/usr/local/lib/python3.13/site-packages/backoff/_sync.py\", line 105, in retry\n    ret = target(*args, **kwargs)\n  File \"/usr/local/lib/python3.13/site-packages/backoff/_sync.py\", line 105, in retry\n    ret = target(*args, **kwargs)\n  File \"/usr/local/lib/python3.13/site-packages/backoff/_sync.py\", line 105, in retry\n    ret = target(*args, **kwargs)\n  File \"/usr/local/lib/python3.13/site-packages/airbyte_cdk/sources/streams/http/http_client.py\", line 379, in _send\n    self._handle_error_resolution(\n    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^\n        response=response,\n        ^^^^^^^^^^^^^^^^^^\n    ...<3 lines>...\n        exit_on_rate_limit=exit_on_rate_limit,\n        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n    )\n    ^\n  File \"/usr/local/lib/python3.13/site-packages/airbyte_cdk/sources/streams/http/http_client.py\", line 469, in _handle_error_resolution\n    raise MessageRepresentationAirbyteTracedErrors(\n    ...<3 lines>...\n    )\nairbyte_cdk.sources.streams.http.http_client.MessageRepresentationAirbyteTracedErrors: HTTP Status Code: 401. Error: Unauthorized. Please ensure you are authenticated correctly.\n",
  "timestamp" : 1761848485238,
  "streamDescriptor" : {
    "name" : "mailings"
  }

Contribute

  • Yes, I want to contribute

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions