Page MenuHomePhabricator

MemcachedClient: PHP Warning: Resource ID#784 used as offset, casting to integer (784)
Closed, ResolvedPublic

Description

When running MediaWiki with php 8.0 GA and configured memcached caching, the following warning occur in the logs:

{
    "id": "887b3a53be04c25ed5675dca",
    "type": "ErrorException",
    "file": "/data/mediawiki/main/includes/libs/objectcache/utils/MemcachedClient.php",
    "line": 547,
    "message": "PHP Warning: Resource ID#784 used as offset, casting to integer (784)",
    "code": 0,
    "url": "/w/index.php?title=Spezial:Letzte_%C3%84nderungen&hidebots=1&limit=50&days=7&urlversion=2",
    "caught_by": "mwe_handler",
    "backtrace": [
        {
            "file": "/data/mediawiki/main/includes/libs/objectcache/utils/MemcachedClient.php",
            "line": 547,
            "function": "handleError",
            "class": "MWExceptionHandler",
            "type": "::"
        },
        {
            "file": "/data/mediawiki/main/includes/libs/objectcache/MemcachedPhpBagOStuff.php",
            "line": 123,
            "function": "get_multi",
            "class": "MemcachedClient",
            "type": "->"
        },
        {
            "file": "/data/mediawiki/main/includes/libs/objectcache/MediumSpecificBagOStuff.php",
            "line": 563,
            "function": "doGetMulti",
            "class": "MemcachedPhpBagOStuff",
            "type": "->"
        },
        {
            "file": "/data/mediawiki/main/includes/libs/objectcache/wancache/WANObjectCache.php",
            "line": 502,
            "function": "getMulti",
            "class": "MediumSpecificBagOStuff",
            "type": "->"
        },
        {
            "file": "/data/mediawiki/main/includes/libs/objectcache/wancache/WANObjectCache.php",
            "line": 422,
            "function": "getMulti",
            "class": "WANObjectCache",
            "type": "->"
        },
        {
            "file": "/data/mediawiki/main/includes/libs/objectcache/wancache/WANObjectCache.php",
            "line": 1444,
            "function": "get",
            "class": "WANObjectCache",
            "type": "->"
        },
        {
            "file": "/data/mediawiki/main/includes/libs/objectcache/wancache/WANObjectCache.php",
            "line": 1389,
            "function": "fetchOrRegenerate",
            "class": "WANObjectCache",
            "type": "->"
        },
        {
            "file": "/data/mediawiki/main/includes/user/User.php",
            "line": 515,
            "function": "getWithSetCallback",
            "class": "WANObjectCache",
            "type": "->"
        },
        {
            "file": "/data/mediawiki/main/includes/user/User.php",
            "line": 426,
            "function": "loadFromCache",
            "class": "User",
            "type": "->"
        },
        {
            "file": "/data/mediawiki/main/includes/user/User.php",
            "line": 362,
            "function": "loadFromId",
            "class": "User",
            "type": "->"
        },
        {
            "file": "/data/mediawiki/main/includes/session/UserInfo.php",
            "line": 89,
            "function": "load",
            "class": "User",
            "type": "->"
        },
        {
            "file": "/data/mediawiki/main/includes/session/CookieSessionProvider.php",
            "line": 129,
            "function": "newFromId",
            "class": "MediaWiki\\Session\\UserInfo",
            "type": "::"
        },
        {
            "file": "/data/mediawiki/main/includes/session/SessionManager.php",
            "line": 491,
            "function": "provideSessionInfo",
            "class": "MediaWiki\\Session\\CookieSessionProvider",
            "type": "->"
        },
        {
            "file": "/data/mediawiki/main/includes/session/SessionManager.php",
            "line": 214,
            "function": "getSessionInfoForRequest",
            "class": "MediaWiki\\Session\\SessionManager",
            "type": "->"
        },
        {
            "file": "/data/mediawiki/main/includes/WebRequest.php",
            "line": 826,
            "function": "getSessionForRequest",
            "class": "MediaWiki\\Session\\SessionManager",
            "type": "->"
        },
        {
            "file": "/data/mediawiki/main/includes/session/SessionManager.php",
            "line": 136,
            "function": "getSession",
            "class": "WebRequest",
            "type": "->"
        },
        {
            "file": "/data/mediawiki/main/includes/Setup.php",
            "line": 722,
            "function": "getGlobalSession",
            "class": "MediaWiki\\Session\\SessionManager",
            "type": "::"
        },
        {
            "file": "/data/mediawiki/main/includes/WebStart.php",
            "line": 89,
            "args": [
                "string"
            ],
            "function": "require_once"
        },
        {
            "file": "/data/mediawiki/main/index.php",
            "line": 44,
            "args": [
                "string"
            ],
            "function": "require"
        }
    ]
}

This was previously (php < 8.0.0) a NOTICE only, however, now is a warning according to rfc engine_warnings.

Event Timeline

Change 644668 had a related patch set uploaded (by Reedy; owner: Reedy):
[mediawiki/core@master] MemcachedClient: Cast Resource to integer

https://gerrit.wikimedia.org/r/644668

Reedy added a subscriber: Reedy.

It's curious, the neighbouring usages were already casting with intval...

			if ( !isset( $sock_keys[$sock] ) ) {
				$sock_keys[intval( $sock )] = array();
				$socks[] = $sock;
			}
			$sock_keys[intval( $sock )][] = $key;

Change 644652 had a related patch set uploaded (by Reedy; owner: Reedy):
[mediawiki/core@REL1_35] MemcachedClient: Cast Resource to integer

https://gerrit.wikimedia.org/r/644652

Change 644653 had a related patch set uploaded (by Reedy; owner: Reedy):
[mediawiki/core@REL1_31] MemcachedClient: Cast Resource to integer

https://gerrit.wikimedia.org/r/644653

Hmm, you're right, didn't see that. Thanks for the patch. Not sure, who should merge the Backport to the release branches, though (may I merge them as well?). Therefore keeping the task open for now.

I usually self merge into release branches after the master patch is merged

Change 644652 merged by jenkins-bot:
[mediawiki/core@REL1_35] MemcachedClient: Cast Resource to integer

https://gerrit.wikimedia.org/r/644652

Florian claimed this task.

Ok, thx for the info :)

No one has +2d the master patch though :P

Change 644653 merged by jenkins-bot:
[mediawiki/core@REL1_31] MemcachedClient: Cast Resource to integer

https://gerrit.wikimedia.org/r/644653

Change 644668 merged by jenkins-bot:
[mediawiki/core@master] MemcachedClient: Cast Resource to integer

https://gerrit.wikimedia.org/r/644668

No one has +2d the master patch though :P

For god sake 🙈 Damn it... sorry for that :( I could've sworn I'd seen a +2 CR :/