Skip to content
This repository has been archived by the owner on Mar 13, 2022. It is now read-only.

[stream/ws_client] Reading long stdout is truncated at 32768 chars #190

Closed
ddelange opened this issue Apr 1, 2020 · 18 comments
Closed

[stream/ws_client] Reading long stdout is truncated at 32768 chars #190

ddelange opened this issue Apr 1, 2020 · 18 comments
Assignees

Comments

@ddelange
Copy link

ddelange commented Apr 1, 2020

def read_channel(self, channel, timeout=0):

it seems that read_channel does not support data longer than 32768 (2**15) characters.

Below is the traceback for these lines. The line linked sends a command to a sidecar of a pod to get the result.json file that the pod dumps: it basically does kubernetes.stream.stream.write_stdin('cat /file.json') and then a kubernetes.stream.stream.read_stdout() which gives back the json truncated at 32768 characters. Here's the full json manually extracted from the pod: file.json.

Is there a minimal working example/unittest anywhere we can a add long stdout to, so we can rule out our k8s config?

[2020-04-01 10:04:06,224] {pod_launcher.py:129} INFO - Container task-domain-to-description-b45f711b has state running
[2020-04-01 10:04:08,274] {pod_launcher.py:217} INFO - Running command... cat /airflow/xcom/return.json
[2020-04-01 10:04:08,334] {pod_launcher.py:217} INFO - Running command... kill -s SIGINT 1
[2020-04-01 10:04:08,337] {pod_launcher.py:132} INFO - "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
[2020-04-01 10:04:08,346] {taskinstance.py:1128} ERROR - Unterminated string starting at: line 1 column 1 (char 0)
Traceback (most recent call last):
  File "/usr/local/lib/python3.7/site-packages/airflow/models/taskinstance.py", line 966, in _run_raw_task
    result = task_copy.execute(context=context)
  File "/usr/local/lib/python3.7/site-packages/airflow/contrib/operators/kubernetes_pod_operator.py", line 251, in execute
    get_logs=self.get_logs)
  File "/usr/local/lib/python3.7/site-packages/airflow/contrib/kubernetes/pod_launcher.py", line 117, in run_pod
    return self._monitor_pod(pod, get_logs)
  File "/usr/local/lib/python3.7/site-packages/airflow/contrib/kubernetes/pod_launcher.py", line 133, in _monitor_pod
    result = json.loads(result)
  File "/usr/local/lib/python3.7/json/__init__.py", line 348, in loads
    return _default_decoder.decode(s)
  File "/usr/local/lib/python3.7/json/decoder.py", line 337, in decode
    obj, end = self.raw_decode(s, idx=_w(s, 0).end())
  File "/usr/local/lib/python3.7/json/decoder.py", line 353, in raw_decode
    obj, end = self.scan_once(s, idx)
json.decoder.JSONDecodeError: Unterminated string starting at: line 1 column 1 (char 0)
@roycaihw
Copy link
Member

/assign

@fejta-bot
Copy link

Issues go stale after 90d of inactivity.
Mark the issue as fresh with /remove-lifecycle stale.
Stale issues rot after an additional 30d of inactivity and eventually close.

If this issue is safe to close now please do so with /close.

Send feedback to sig-testing, kubernetes/test-infra and/or fejta.
/lifecycle stale

@k8s-ci-robot k8s-ci-robot added the lifecycle/stale Denotes an issue or PR has remained open with no activity and has become stale. label Jul 12, 2020
@ddelange
Copy link
Author

/remove-lifecycle stale

@k8s-ci-robot k8s-ci-robot removed the lifecycle/stale Denotes an issue or PR has remained open with no activity and has become stale. label Jul 12, 2020
@fejta-bot
Copy link

Issues go stale after 90d of inactivity.
Mark the issue as fresh with /remove-lifecycle stale.
Stale issues rot after an additional 30d of inactivity and eventually close.

If this issue is safe to close now please do so with /close.

Send feedback to sig-testing, kubernetes/test-infra and/or fejta.
/lifecycle stale

@k8s-ci-robot k8s-ci-robot added the lifecycle/stale Denotes an issue or PR has remained open with no activity and has become stale. label Oct 10, 2020
@ddelange
Copy link
Author

/remove-lifecycle stale

@k8s-ci-robot k8s-ci-robot removed the lifecycle/stale Denotes an issue or PR has remained open with no activity and has become stale. label Oct 10, 2020
@fejta-bot
Copy link

Issues go stale after 90d of inactivity.
Mark the issue as fresh with /remove-lifecycle stale.
Stale issues rot after an additional 30d of inactivity and eventually close.

If this issue is safe to close now please do so with /close.

Send feedback to sig-testing, kubernetes/test-infra and/or fejta.
/lifecycle stale

@k8s-ci-robot k8s-ci-robot added the lifecycle/stale Denotes an issue or PR has remained open with no activity and has become stale. label Jan 8, 2021
@ddelange
Copy link
Author

ddelange commented Jan 8, 2021

/remove-lifecycle stale

@k8s-ci-robot k8s-ci-robot removed the lifecycle/stale Denotes an issue or PR has remained open with no activity and has become stale. label Jan 8, 2021
@Paul424
Copy link

Paul424 commented Mar 22, 2021

I'm seeing the same issue with kubernetes==11.0.0 not sure if it will fix the issue but i'm overriding the default _extract_xcom and _exec_pod_command to validate the json document returned and retry on error. Also i'm using run_forever with a timeout to have the wsclient concat the responses.

Not sure if it is stable yet however...

@ddelange
Copy link
Author

@Paul424 are there any issues/pulls you can link to?

@Paul424
Copy link

Paul424 commented Mar 23, 2021

I spend today on trying various fixes, ultimately following code seems to work for me (sorry not yet in a PR).

Notice this is Airflow code (KubernetesPodOperator).

Changes i made:

  • the cat/kill are run as command and no longer fed in to stdin
  • using the run_forever/read_all similar to what the wsclient would do in case of _preload_content=true

I wanted to use _preload_content=True for both btw but couldn't since it would json load the content and then serialize it to string format. While i need the raw json string data instead.

Btw root-cause is still unknown to me. And honestly these layers are also too complex for me to follow...

`class PodLauncher_(PodLauncher):
def init(self, *args, **kwargs):
super(PodLauncher_, self).init(*args, **kwargs)

def _extract_xcom(self, pod: V1Pod):
    try:
        self.log.info(f'Running command... cat {PodDefaults.XCOM_MOUNT_PATH}/return.json')

        # Can't use _preload_content=True because that would return str(json.load(response))
        client = kubernetes_stream(
            self._client.connect_get_namespaced_pod_exec,
            pod.metadata.name,
            pod.metadata.namespace,
            container=PodDefaults.SIDECAR_CONTAINER_NAME,
            command=[
                '/bin/sh',
                '-c',
                f'cat {PodDefaults.XCOM_MOUNT_PATH}/return.json',
            ],
            stderr=True,
            stdin=False,
            stdout=True,
            tty=False,
            _preload_content=False,
            _request_timeout=10,
        )
        client.run_forever(timeout=10)
        resp = client.read_all()
        self.log.info("Received {} ({}) ({} ... {}))".format(type(resp), len(resp), resp[:64], resp[-64:]))

        # validate it's valid json
        _ = json.loads(resp)

        # Terminate the sidecar
        _ = kubernetes_stream(
            self._client.connect_get_namespaced_pod_exec,
            pod.metadata.name,
            pod.metadata.namespace,
            container=PodDefaults.SIDECAR_CONTAINER_NAME,
            command=[
                '/bin/sh',
                '-c',
                'kill -s SIGINT 1',
            ],
            stderr=True,
            stdin=False,
            stdout=True,
            tty=False,
            _preload_content=True,
            _request_timeout=10,
        )

        return resp

    except JSONDecodeError:
        message = f'Failed to decode json document from pod: {pod.metadata.name}'
        self.log.exception(message)
        raise AirflowException(message)

    except Exception as e:
        message = f'Failed to extract xcom from pod: {pod.metadata.name}'
        self.log.exception(message)
        raise AirflowException(message)

`

@fejta-bot
Copy link

Issues go stale after 90d of inactivity.
Mark the issue as fresh with /remove-lifecycle stale.
Stale issues rot after an additional 30d of inactivity and eventually close.

If this issue is safe to close now please do so with /close.

Send feedback to sig-contributor-experience at kubernetes/community.
/lifecycle stale

@k8s-ci-robot k8s-ci-robot added the lifecycle/stale Denotes an issue or PR has remained open with no activity and has become stale. label Jun 21, 2021
@ddelange
Copy link
Author

/remove-lifecycle stale

@k8s-ci-robot k8s-ci-robot removed the lifecycle/stale Denotes an issue or PR has remained open with no activity and has become stale. label Jun 24, 2021
@k8s-triage-robot
Copy link

The Kubernetes project currently lacks enough contributors to adequately respond to all issues and PRs.

This bot triages issues and PRs according to the following rules:

  • After 90d of inactivity, lifecycle/stale is applied
  • After 30d of inactivity since lifecycle/stale was applied, lifecycle/rotten is applied
  • After 30d of inactivity since lifecycle/rotten was applied, the issue is closed

You can:

  • Mark this issue or PR as fresh with /remove-lifecycle stale
  • Mark this issue or PR as rotten with /lifecycle rotten
  • Close this issue or PR with /close
  • Offer to help out with Issue Triage

Please send feedback to sig-contributor-experience at kubernetes/community.

/lifecycle stale

@k8s-ci-robot k8s-ci-robot added the lifecycle/stale Denotes an issue or PR has remained open with no activity and has become stale. label Sep 22, 2021
@ddelange
Copy link
Author

/remove-lifecycle stale

@k8s-ci-robot k8s-ci-robot removed the lifecycle/stale Denotes an issue or PR has remained open with no activity and has become stale. label Sep 22, 2021
@k8s-triage-robot
Copy link

The Kubernetes project currently lacks enough contributors to adequately respond to all issues and PRs.

This bot triages issues and PRs according to the following rules:

  • After 90d of inactivity, lifecycle/stale is applied
  • After 30d of inactivity since lifecycle/stale was applied, lifecycle/rotten is applied
  • After 30d of inactivity since lifecycle/rotten was applied, the issue is closed

You can:

  • Mark this issue or PR as fresh with /remove-lifecycle stale
  • Mark this issue or PR as rotten with /lifecycle rotten
  • Close this issue or PR with /close
  • Offer to help out with Issue Triage

Please send feedback to sig-contributor-experience at kubernetes/community.

/lifecycle stale

@k8s-ci-robot k8s-ci-robot added the lifecycle/stale Denotes an issue or PR has remained open with no activity and has become stale. label Dec 21, 2021
@Frankkkkk
Copy link

/remove-lifecycle stale

@k8s-ci-robot k8s-ci-robot removed the lifecycle/stale Denotes an issue or PR has remained open with no activity and has become stale. label Dec 21, 2021
@roycaihw
Copy link
Member

This repo has been merged into the main python repo. We are archiving this repo. Please open a new issue in the main repo. Thanks!

/close

@k8s-ci-robot
Copy link
Contributor

@roycaihw: Closing this issue.

In response to this:

This repo has been merged into the main python repo. We are archiving this repo. Please open a new issue in the main repo. Thanks!

/close

Instructions for interacting with me using PR comments are available here. If you have questions or suggestions related to my behavior, please file an issue against the kubernetes/test-infra repository.

Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Labels
None yet
Projects
None yet
Development

No branches or pull requests

7 participants