Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

loose restrict of greenlet (#3) #326

Merged
merged 1 commit into from
Nov 4, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
235 changes: 127 additions & 108 deletions poetry.lock

Large diffs are not rendered by default.

4 changes: 2 additions & 2 deletions pyproject.toml
Original file line number Diff line number Diff line change
Expand Up @@ -72,7 +72,7 @@ grpcio = '*'
grpcio-tools = '*'
packaging = '*'
wrapt = '*'
psutil = '*'
psutil = '<=5.9.5'
requests = { version = ">=2.26.0", optional = true }
kafka-python = { version = "*", optional = true }
uvloop = { version = "^0.17.0", optional = true }
Expand Down Expand Up @@ -129,7 +129,7 @@ celery = "5.1.2"
django = "3.2.8"
elasticsearch = "7.15.1"
flask = "2.0.2"
gevent = "22.8.0"
gevent = "22.10.2"
hug = "2.6.1"
pika = "1.2.0"
psycopg = {extras = ["binary"], version = "^3.1.7"}
Expand Down
15 changes: 6 additions & 9 deletions skywalking/profile/profile_context.py
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,6 @@
import time
import traceback

from packaging import version
from threading import Thread, Event, current_thread
from typing import Optional

Expand All @@ -43,15 +42,12 @@
from gevent.exceptions import BlockingSwitchOutError

if monkey.is_module_patched('threading'):
if version.parse(greenlet.__version__) <= version.parse('1.1.3.post0'):
# todo: greenlet will raise a segment fault with signal 11 when it upgrade to 2.0.0
# this issue may be caused by gevent's compatibility with greenlet
# we should do some tests when gevent release a new version to verify if this issue would be fixed
THREAD_MODEL = 'greenlet'
else:
logger.warn('greenlet profiler can not work with version >= 2.0.0')
THREAD_MODEL = 'greenlet'
logger.debug('Using greenlet model')
else:
logger.debug('Gevent monkey exists but does not patch threading, using threading model')
except ImportError:
pass
logger.debug("Gevent does\'t exist, using threading model")


class ProfileTaskExecutionContext:
Expand Down Expand Up @@ -326,6 +322,7 @@ def build_snapshot(self) -> Optional[TracingThreadSnapshot]:


def start_profiling(self, context: ProfileTaskExecutionContext):
logger.debug('GreenletProfiler::start_profiling')
self._task_execution_context = context
try:
curr = self._profiling_thread
Expand Down
2 changes: 1 addition & 1 deletion tests/e2e/base/Dockerfile.e2e
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,7 @@ RUN cd /skywalking-python && apt-get update && apt-get install -y make && make i
RUN apt-get update \
&& apt-get install -y --no-install-recommends gcc build-essential\
&& rm -rf /var/lib/apt/lists/* \
&& pip install uwsgi fastapi uvicorn aiohttp flask gunicorn\
&& pip install uwsgi fastapi uvicorn aiohttp flask "Werkzeug<3" gunicorn \
&& apt-get purge -y --auto-remove gcc build-essential

# Entrypoint with agent attached
Expand Down
4 changes: 2 additions & 2 deletions tests/e2e/case/profiling/greenlet/start_gevent.sh
Original file line number Diff line number Diff line change
Expand Up @@ -18,5 +18,5 @@
#

set -ex
pip install gunicorn gevent "greenlet<2.0.0"
gunicorn -k gevent -b :9090 --chdir /services entrypoint:app
pip install gunicorn gevent "greenlet>=3"
gunicorn -k gevent -b :9090 --chdir /services entrypoint:app
4 changes: 2 additions & 2 deletions tests/plugin/web/sw_flask/docker-compose.yml
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,7 @@ services:
- 9091:9091
volumes:
- .:/app
command: ['bash', '-c', 'pip install flask itsdangerous==2.0.1 && pip install -r /app/requirements.txt && sw-python run python3 /app/services/provider.py']
command: ['bash', '-c', 'pip install flask itsdangerous==2.0.1 "Werkzeug<3" && pip install -r /app/requirements.txt && sw-python run python3 /app/services/provider.py']
depends_on:
collector:
condition: service_healthy
Expand All @@ -52,7 +52,7 @@ services:
- 9090:9090
volumes:
- .:/app
command: ['bash', '-c', 'pip install flask itsdangerous==2.0.1 && pip install -r /app/requirements.txt && sw-python run python3 /app/services/consumer.py']
command: ['bash', '-c', 'pip install flask itsdangerous==2.0.1 "Werkzeug<3" && pip install -r /app/requirements.txt && sw-python run python3 /app/services/consumer.py']
depends_on:
collector:
condition: service_healthy
Expand Down