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

Add support for redis v5. #895

Merged
merged 2 commits into from
Aug 15, 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
10 changes: 10 additions & 0 deletions newrelic/hooks/datastore_redis.py
Original file line number Diff line number Diff line change
Expand Up @@ -161,6 +161,7 @@
"cluster_reset",
"cluster_save_config",
"cluster_set_config_epoch",
"client_setinfo",
"cluster_setslot",
"cluster_slaves",
"cluster_slots",
Expand Down Expand Up @@ -219,6 +220,7 @@
"function_load",
"function_restore",
"function_stats",
"gears_refresh_cluster",
"geoadd",
"geodist",
"geohash",
Expand Down Expand Up @@ -320,6 +322,8 @@
"pubsub_channels",
"pubsub_numpat",
"pubsub_numsub",
"pubsub_shardchannels",
"pubsub_shardnumsub",
"punsubscribe",
"quantile",
"query",
Expand Down Expand Up @@ -374,6 +378,7 @@
"smismember",
"smove",
"spellcheck",
"spublish",
"srem",
"sscan_iter",
"sscan",
Expand All @@ -393,6 +398,11 @@
"syndump",
"synupdate",
"tagvals",
"tfcall",
"tfcall_async",
"tfunction_delete",
"tfunction_list",
"tfunction_load",
"time",
"toggle",
"touch",
Expand Down
31 changes: 19 additions & 12 deletions tests/datastore_redis/test_asyncio.py
Original file line number Diff line number Diff line change
Expand Up @@ -28,20 +28,27 @@
# Settings

DB_SETTINGS = redis_settings()[0]
REDIS_VERSION = get_package_version_tuple("redis")
REDIS_PY_VERSION = get_package_version_tuple("redis")

# Metrics

_enable_scoped_metrics = [("Datastore/operation/Redis/publish", 3)]
_base_scoped_metrics = [("Datastore/operation/Redis/publish", 3)]

_enable_rollup_metrics = [
("Datastore/all", 3),
("Datastore/allOther", 3),
("Datastore/Redis/all", 3),
("Datastore/Redis/allOther", 3),
if REDIS_PY_VERSION >= (5, 0):
_base_scoped_metrics.append(('Datastore/operation/Redis/client_setinfo', 2),)

datastore_all_metric_count = 5 if REDIS_PY_VERSION >= (5, 0) else 3

_base_rollup_metrics = [
("Datastore/all", datastore_all_metric_count),
("Datastore/allOther", datastore_all_metric_count),
("Datastore/Redis/all", datastore_all_metric_count),
("Datastore/Redis/allOther", datastore_all_metric_count),
("Datastore/operation/Redis/publish", 3),
("Datastore/instance/Redis/%s/%s" % (instance_hostname(DB_SETTINGS["host"]), DB_SETTINGS["port"]), 3),
("Datastore/instance/Redis/%s/%s" % (instance_hostname(DB_SETTINGS["host"]), DB_SETTINGS["port"]), datastore_all_metric_count),
]
if REDIS_PY_VERSION >= (5, 0):
_base_rollup_metrics.append(('Datastore/operation/Redis/client_setinfo', 2),)

# Tests

Expand All @@ -53,7 +60,7 @@ def client(loop): # noqa
return loop.run_until_complete(redis.asyncio.Redis(host=DB_SETTINGS["host"], port=DB_SETTINGS["port"], db=0))


@pytest.mark.skipif(REDIS_VERSION < (4, 2), reason="This functionality exists in Redis 4.2+")
@pytest.mark.skipif(REDIS_PY_VERSION < (4, 2), reason="This functionality exists in Redis 4.2+")
@validate_transaction_metrics("test_asyncio:test_async_pipeline", background_task=True)
@background_task()
def test_async_pipeline(client, loop): # noqa
Expand All @@ -65,11 +72,11 @@ async def _test_pipeline(client):
loop.run_until_complete(_test_pipeline(client))


@pytest.mark.skipif(REDIS_VERSION < (4, 2), reason="This functionality exists in Redis 4.2+")
@pytest.mark.skipif(REDIS_PY_VERSION < (4, 2), reason="This functionality exists in Redis 4.2+")
@validate_transaction_metrics(
"test_asyncio:test_async_pubsub",
scoped_metrics=_enable_scoped_metrics,
rollup_metrics=_enable_rollup_metrics,
scoped_metrics=_base_scoped_metrics,
rollup_metrics=_base_rollup_metrics,
background_task=True,
)
@background_task()
Expand Down
46 changes: 25 additions & 21 deletions tests/datastore_redis/test_custom_conn_pool.py
Original file line number Diff line number Diff line change
Expand Up @@ -21,14 +21,16 @@
import redis

from newrelic.api.background_task import background_task
from newrelic.common.package_version_utils import get_package_version_tuple

from testing_support.fixtures import override_application_settings
from testing_support.validators.validate_transaction_metrics import validate_transaction_metrics
from testing_support.db_settings import redis_settings
from testing_support.util import instance_hostname


DB_SETTINGS = redis_settings()[0]
REDIS_PY_VERSION = redis.VERSION
REDIS_PY_VERSION = get_package_version_tuple("redis")


class FakeConnectionPool(object):
Expand Down Expand Up @@ -56,39 +58,41 @@ def release(self, connection):

# We don't record instance metrics when using redis blaster,
# so we just check for base metrics.
datastore_all_metric_count = 5 if REDIS_PY_VERSION >= (5, 0) else 3

_base_scoped_metrics = (
_base_scoped_metrics = [
('Datastore/operation/Redis/get', 1),
('Datastore/operation/Redis/set', 1),
('Datastore/operation/Redis/client_list', 1),
)

_base_rollup_metrics = (
('Datastore/all', 3),
('Datastore/allOther', 3),
('Datastore/Redis/all', 3),
('Datastore/Redis/allOther', 3),
]
# client_setinfo was introduced in v5.0.0 and assigns info displayed in client_list output
if REDIS_PY_VERSION >= (5, 0):
_base_scoped_metrics.append(('Datastore/operation/Redis/client_setinfo', 2),)

_base_rollup_metrics = [
('Datastore/all', datastore_all_metric_count),
('Datastore/allOther', datastore_all_metric_count),
('Datastore/Redis/all', datastore_all_metric_count),
('Datastore/Redis/allOther', datastore_all_metric_count),
('Datastore/operation/Redis/get', 1),
('Datastore/operation/Redis/set', 1),
('Datastore/operation/Redis/client_list', 1),
)

_disable_scoped_metrics = list(_base_scoped_metrics)
_disable_rollup_metrics = list(_base_rollup_metrics)

_enable_scoped_metrics = list(_base_scoped_metrics)
_enable_rollup_metrics = list(_base_rollup_metrics)
]
if REDIS_PY_VERSION >= (5, 0):
_base_rollup_metrics.append(('Datastore/operation/Redis/client_setinfo', 2),)

_host = instance_hostname(DB_SETTINGS['host'])
_port = DB_SETTINGS['port']

_instance_metric_name = 'Datastore/instance/Redis/%s/%s' % (_host, _port)

_enable_rollup_metrics.append(
(_instance_metric_name, 3)
instance_metric_count = 5 if REDIS_PY_VERSION >= (5, 0) else 3

_enable_rollup_metrics = _base_rollup_metrics.append(
(_instance_metric_name, instance_metric_count)
)

_disable_rollup_metrics.append(
_disable_rollup_metrics = _base_rollup_metrics.append(
(_instance_metric_name, None)
)

Expand All @@ -106,7 +110,7 @@ def exercise_redis(client):
@override_application_settings(_enable_instance_settings)
@validate_transaction_metrics(
'test_custom_conn_pool:test_fake_conn_pool_enable_instance',
scoped_metrics=_enable_scoped_metrics,
scoped_metrics=_base_scoped_metrics,
rollup_metrics=_enable_rollup_metrics,
background_task=True)
@background_task()
Expand All @@ -132,7 +136,7 @@ def test_fake_conn_pool_enable_instance():
@override_application_settings(_disable_instance_settings)
@validate_transaction_metrics(
'test_custom_conn_pool:test_fake_conn_pool_disable_instance',
scoped_metrics=_disable_scoped_metrics,
scoped_metrics=_base_scoped_metrics,
rollup_metrics=_disable_rollup_metrics,
background_task=True)
@background_task()
Expand Down
56 changes: 29 additions & 27 deletions tests/datastore_redis/test_execute_command.py
Original file line number Diff line number Diff line change
Expand Up @@ -16,14 +16,16 @@
import redis

from newrelic.api.background_task import background_task
from newrelic.common.package_version_utils import get_package_version_tuple

from testing_support.fixtures import override_application_settings
from testing_support.validators.validate_transaction_metrics import validate_transaction_metrics
from testing_support.db_settings import redis_settings
from testing_support.util import instance_hostname

DB_SETTINGS = redis_settings()[0]
REDIS_PY_VERSION = redis.VERSION
REDIS_PY_VERSION = get_package_version_tuple("redis")


# Settings

Expand All @@ -36,34 +38,34 @@

# Metrics

_base_scoped_metrics = (
_base_scoped_metrics = [
('Datastore/operation/Redis/client_list', 1),
)

_base_rollup_metrics = (
('Datastore/all', 1),
('Datastore/allOther', 1),
('Datastore/Redis/all', 1),
('Datastore/Redis/allOther', 1),
]
if REDIS_PY_VERSION >= (5, 0):
_base_scoped_metrics.append(('Datastore/operation/Redis/client_setinfo', 2),)

_base_rollup_metrics = [
('Datastore/all', 3),
('Datastore/allOther', 3),
('Datastore/Redis/all', 3),
('Datastore/Redis/allOther', 3),
('Datastore/operation/Redis/client_list', 1),
)

_disable_scoped_metrics = list(_base_scoped_metrics)
_disable_rollup_metrics = list(_base_rollup_metrics)

_enable_scoped_metrics = list(_base_scoped_metrics)
_enable_rollup_metrics = list(_base_rollup_metrics)
]
if REDIS_PY_VERSION >= (5, 0):
_base_rollup_metrics.append(('Datastore/operation/Redis/client_setinfo', 2),)

_host = instance_hostname(DB_SETTINGS['host'])
_port = DB_SETTINGS['port']

_instance_metric_name = 'Datastore/instance/Redis/%s/%s' % (_host, _port)

_enable_rollup_metrics.append(
(_instance_metric_name, 1)
instance_metric_count = 3 if REDIS_PY_VERSION >= (5, 0) else 1

_enable_rollup_metrics = _base_rollup_metrics.append(
(_instance_metric_name, instance_metric_count)
)

_disable_rollup_metrics.append(
_disable_rollup_metrics = _base_rollup_metrics.append(
(_instance_metric_name, None)
)

Expand All @@ -76,7 +78,7 @@ def exercise_redis_single_arg(client):
@override_application_settings(_enable_instance_settings)
@validate_transaction_metrics(
'test_execute_command:test_strict_redis_execute_command_two_args_enable',
scoped_metrics=_enable_scoped_metrics,
scoped_metrics=_base_scoped_metrics,
rollup_metrics=_enable_rollup_metrics,
background_task=True)
@background_task()
Expand All @@ -88,7 +90,7 @@ def test_strict_redis_execute_command_two_args_enable():
@override_application_settings(_disable_instance_settings)
@validate_transaction_metrics(
'test_execute_command:test_strict_redis_execute_command_two_args_disabled',
scoped_metrics=_disable_scoped_metrics,
scoped_metrics=_base_scoped_metrics,
rollup_metrics=_disable_rollup_metrics,
background_task=True)
@background_task()
Expand All @@ -100,7 +102,7 @@ def test_strict_redis_execute_command_two_args_disabled():
@override_application_settings(_enable_instance_settings)
@validate_transaction_metrics(
'test_execute_command:test_redis_execute_command_two_args_enable',
scoped_metrics=_enable_scoped_metrics,
scoped_metrics=_base_scoped_metrics,
rollup_metrics=_enable_rollup_metrics,
background_task=True)
@background_task()
Expand All @@ -112,7 +114,7 @@ def test_redis_execute_command_two_args_enable():
@override_application_settings(_disable_instance_settings)
@validate_transaction_metrics(
'test_execute_command:test_redis_execute_command_two_args_disabled',
scoped_metrics=_disable_scoped_metrics,
scoped_metrics=_base_scoped_metrics,
rollup_metrics=_disable_rollup_metrics,
background_task=True)
@background_task()
Expand All @@ -126,7 +128,7 @@ def test_redis_execute_command_two_args_disabled():
@override_application_settings(_enable_instance_settings)
@validate_transaction_metrics(
'test_execute_command:test_strict_redis_execute_command_as_one_arg_enable',
scoped_metrics=_enable_scoped_metrics,
scoped_metrics=_base_scoped_metrics,
rollup_metrics=_enable_rollup_metrics,
background_task=True)
@background_task()
Expand All @@ -140,7 +142,7 @@ def test_strict_redis_execute_command_as_one_arg_enable():
@override_application_settings(_disable_instance_settings)
@validate_transaction_metrics(
'test_execute_command:test_strict_redis_execute_command_as_one_arg_disabled',
scoped_metrics=_disable_scoped_metrics,
scoped_metrics=_base_scoped_metrics,
rollup_metrics=_disable_rollup_metrics,
background_task=True)
@background_task()
Expand All @@ -154,7 +156,7 @@ def test_strict_redis_execute_command_as_one_arg_disabled():
@override_application_settings(_enable_instance_settings)
@validate_transaction_metrics(
'test_execute_command:test_redis_execute_command_as_one_arg_enable',
scoped_metrics=_enable_scoped_metrics,
scoped_metrics=_base_scoped_metrics,
rollup_metrics=_enable_rollup_metrics,
background_task=True)
@background_task()
Expand All @@ -168,7 +170,7 @@ def test_redis_execute_command_as_one_arg_enable():
@override_application_settings(_disable_instance_settings)
@validate_transaction_metrics(
'test_execute_command:test_redis_execute_command_as_one_arg_disabled',
scoped_metrics=_disable_scoped_metrics,
scoped_metrics=_base_scoped_metrics,
rollup_metrics=_disable_rollup_metrics,
background_task=True)
@background_task()
Expand Down
11 changes: 4 additions & 7 deletions tests/datastore_redis/test_get_and_set.py
Original file line number Diff line number Diff line change
Expand Up @@ -48,10 +48,7 @@
('Datastore/operation/Redis/set', 1),
)

_disable_scoped_metrics = list(_base_scoped_metrics)
_disable_rollup_metrics = list(_base_rollup_metrics)

_enable_scoped_metrics = list(_base_scoped_metrics)
_enable_rollup_metrics = list(_base_rollup_metrics)

_host = instance_hostname(DB_SETTINGS['host'])
Expand All @@ -78,7 +75,7 @@ def exercise_redis(client):
@override_application_settings(_enable_instance_settings)
@validate_transaction_metrics(
'test_get_and_set:test_strict_redis_operation_enable_instance',
scoped_metrics=_enable_scoped_metrics,
scoped_metrics=_base_scoped_metrics,
rollup_metrics=_enable_rollup_metrics,
background_task=True)
@background_task()
Expand All @@ -90,7 +87,7 @@ def test_strict_redis_operation_enable_instance():
@override_application_settings(_disable_instance_settings)
@validate_transaction_metrics(
'test_get_and_set:test_strict_redis_operation_disable_instance',
scoped_metrics=_disable_scoped_metrics,
scoped_metrics=_base_scoped_metrics,
rollup_metrics=_disable_rollup_metrics,
background_task=True)
@background_task()
Expand All @@ -102,7 +99,7 @@ def test_strict_redis_operation_disable_instance():
@override_application_settings(_enable_instance_settings)
@validate_transaction_metrics(
'test_get_and_set:test_redis_operation_enable_instance',
scoped_metrics=_enable_scoped_metrics,
scoped_metrics=_base_scoped_metrics,
rollup_metrics=_enable_rollup_metrics,
background_task=True)
@background_task()
Expand All @@ -114,7 +111,7 @@ def test_redis_operation_enable_instance():
@override_application_settings(_disable_instance_settings)
@validate_transaction_metrics(
'test_get_and_set:test_redis_operation_disable_instance',
scoped_metrics=_disable_scoped_metrics,
scoped_metrics=_base_scoped_metrics,
rollup_metrics=_disable_rollup_metrics,
background_task=True)
@background_task()
Expand Down
Loading