https://www.tedomum.net/page/cgu return 404
Merci pour le ticket, c'est corrigé ainsi que le lien pour les finances.
Je passe pour suivi.
Au détour d'un redémarrage presque au hasard, finalement le service est opérationnel. Une piste intéressante pour expliquer, jusqu'ici le pool de connexion se limitait à une connexion active, depuis le restart il utilise bien son pool.
Une hypothèse, c'est que pour une raison inconnue, durant son runtime il ait limité son pool à 1 connexion, puis :
En suivant le flow d'exécution lors du freeze :
Le createJob
nous mène sur la piste de l'infra de gestion de job, donc de Redis. Redémarrer ou reset le Redis n'a rien résolu. En outre, la seule piste du Redis n'explique pas pourquoi Peertube est bloqué intégralement pendant le problème.
Pour expliauer le blocage complet de Peertube, je vais chercher soit :
Une seule requête dans le pipe lors de l'upload, possiblement responsable du problème dû à un souci de locks sur la table :
pid | age | usename | query
---------+---------------+----------+--------------------------------------------------------------
1322141 | 00:00:57.3995 | peertube | UPDATE "video" SET "state"=$1,"updatedAt"=$2 WHERE "id" = $3
(1 row)
select count(*) from video;
count
--------
338126
(1 row)
Indexes:
"video_pkey" PRIMARY KEY, btree (id)
Rien d'évident du côté des locks, la table est plutôt faiblarde et bien indexée, je ne pense pas qu'il y ait de souci côté postgres. Je vais creuser le code rapidement, il n'est pas impossible que l'erreur soit remontée dans l'ORM à cause d'une transaction en suspens, mais que le souci soit lié à une exception mal catchée entre l'ouverture de la transaction et le commit.
https://www.tedomum.net/page/cgu return 404
Simplement pour se rassurer, ça ne semble pas être un épuisement de connections postgres disponibles :
postgres=# SELECT count(*) FROM pg_stat_activity;
count
-------
104
(1 row)
postgres=# show max_connections;
max_connections
-----------------
500
(1 row)
Mauvaise nouvelle, c'est un problème très général de notre Peertube, il timeout sur l'accès à Postgres, y compris par exemple sur des vidéos entrantes en fédération :
peertube-1 | [video.tedomum.net:443] 2024-03-19 19:03:31.603 warn: Cannot process activity Create. {
peertube-1 | "err": {
peertube-1 | "stack": "SequelizeConnectionAcquireTimeoutError: Operation timeout\n at ConnectionManager.getConnection (/app/node_modules/sequelize/lib/dialects/abstract/connection-manager.js:206:15)\n at async /app/node_modules/sequelize/lib/sequelize.js:305:26\n at async PostgresQueryInterface.select (/app/node_modules/sequelize/lib/dialects/abstract/query-interface.js:407:12)\n at async LocalVideoViewerModel.findAll (/app/node_modules/sequelize/lib/model.js:1140:21)\n at async LocalVideoViewerModel.findOne (/app/node_modules/sequelize/lib/model.js:1240:12)\n at async createOrUpdateLocalVideoViewer (file:///app/dist/core/lib/activitypub/local-video-viewer.js:5:19)\n at async /app/node_modules/sequelize/lib/sequelize.js:507:18\n at async processCreateWatchAction (file:///app/dist/core/lib/activitypub/process/process-create.js:66:5)",
peertube-1 | "message": "Operation timeout",
peertube-1 | "name": "SequelizeConnectionAcquireTimeoutError",
peertube-1 | "parent": {
peertube-1 | "stack": "Error: Operation timeout\n at Timeout.<anonymous> (/app/node_modules/sequelize-pool/lib/Deferred.js:17:25)\n at listOnTimeout (node:internal/timers:569:17)\n at process.processTimers (node:internal/timers:512:7)",
peertube-1 | "message": "Operation timeout"
peertube-1 | }
peertube-1 | }
Oh. My bad. L'erreur est bien plus explicite que ça : c'est une connexion d'accès bdd qui timeout. Voilà qui est plutôt étrange puisqu'on n'a pas de limite côté Postgres, et qu'il n'est pas spécialement chargé.
En outre, Peertube parvient bien à s'y connecter sans problème, en lecture comme écriture puisque :
Je vais inspecter les logs pour savoir si l'erreur se produit exclusivement sur des déplacements vers le backend S3, ou si c'est plus général.
A priori en Docker exec, le backend est bien disponible depuis le conteneur, le mystère s'épaissit :
# curl https://peertube.objects.tedomum.net
<?xml version="1.0" encoding="UTF-8"?><Error><Code>AccessDenied</Code><Message>Forbidden: Garage does not support anonymous access yet</Message><Resource>/</Resource><Region>garage</Region></Error>
Les logs sont très clairs, il y a un problème d'accès au backend de stockage :
peertube-1 | [video.tedomum.net:443] 2024-03-19 19:22:41.308 error: Cannot add move to object storage job {
peertube-1 | "err": {
peertube-1 | "stack": "SequelizeConnectionAcquireTimeoutError: Operation timeout\n at ConnectionManager.getConnection (/app/node_modules/sequelize/lib/dialects/abstract/connection-manager.js:206:15)\n at async /app/node_modules/s
equelize/lib/sequelize.js:305:26\n at async VideoJobInfoModel.increaseOrCreate (file:///app/dist/core/models/video/video-job-info.js:17:26)\n at async buildMoveJob (file:///app/dist/core/lib/video.js:66:5)\n at async moveToExternal
StorageState (file:///app/dist/core/lib/video-state.js:62:43)\n at async /app/node_modules/sequelize/lib/sequelize.js:507:18",
peertube-1 | "message": "Operation timeout",
peertube-1 | "name": "SequelizeConnectionAcquireTimeoutError",
peertube-1 | "parent": {
peertube-1 | "stack": "Error: Operation timeout\n at Timeout.<anonymous> (/app/node_modules/sequelize-pool/lib/Deferred.js:17:25)\n at listOnTimeout (node:internal/timers:569:17)\n at process.processTimers (node:internal/tim
ers:512:7)",
peertube-1 | "message": "Operation timeout"
peertube-1 | }
peertube-1 | }
peertube-1 | }
Ce problème n'est pas général puisque Mastodon sur le même serveur arrive bien à back sur Garage.
Je passe également l'issue en public pour pouvoir communiquer dessus, puisqu'il est en l'état impossible de publier chez nous, ce que neil a remarqué également.
Depuis récemment le problème semble général, donc indispensable à tacler rapidement. Je travaille dessus.
Une autre vidéo impactée : https://video.tedomum.net/w/dBaPoHBE9RSvLRHHEjkax1
Encore une vidéo : https://video.tedomum.net/w/5oaeUpQcxWPRFK3eTktbo9
Une autre vidéo avec le souci : https://video.tedomum.net/w/7CavPfCtxKk5DdPbZ43ezd
Ceci dit, je n'ai rien trouvé pour celle-ci dans les logs de peertube.
Une autre vidéo impactée: https://video.tedomum.net/w/vd5jMzHDeprWUqpw4aM62h
Comme dit sur Matrix, l'erreur est bien visible dans les logs Peertube:
error[22/02/2024 12:06:00] Client log: Cannot lock screen to landscape.
{
"tags": [
"client"
],
"userAgent": "Mozilla/5.0 (Android 10; Mobile; rv:122.0) Gecko/122.0 Firefox/122.0",
"stackTrace": "Operation is not supported\n3958/handleFullscreenRotation/this.onFullScreenChangeHandler@https://video.tedomum.net/client/fr-FR/988.cbfcea8d67b8f73a.js:1:396720\n33232/Be/s.dispatcher@https://video.tedomum.net/client/fr-FR/988.cbfcea8d67b8f73a.js:1:19426\ninvokeTask@https://video.tedomum.net/client/fr-FR/polyfills.2d40747d03e73646.js:1:36278\nrunTask@https://video.tedomum.net/client/fr-FR/polyfills.2d40747d03e73646.js:1:31575\ninvokeTask@https://video.tedomum.net/client/fr-FR/polyfills.2d40747d03e73646.js:1:37337\nF@https://video.tedomum.net/client/fr-FR/polyfills.2d40747d03e73646.js:1:50102\nN@https://video.tedomum.net/client/fr-FR/polyfills.2d40747d03e73646.js:1:50418\nk@https://video.tedomum.net/client/fr-FR/polyfills.2d40747d03e73646.js:1:50700\n",
"url": "https://video.tedomum.net/w/vd5jMzHDeprWUqpw4aM62h"
Mais juste après, je vois également ça:
error[22/02/2024 12:09:17] Client log: HLS.js error: networkError - fatal: true - manifestLoadError
En soi, il y a pas mal d'erreurs qui remontent car il y en a également une qui est remonté pour le mail lors de la validation d'un compte:
error[22/02/2024 17:47:16] Error in email sender.
{
"err": {
"stack": "Error: Can't send mail - all recipients were rejected: 450 4.2.1 <noreply@tedomum.net>: SASL login name rejected: You are sending too many emails too fast.\n at SMTPConnection._formatError (/app/node_modules/nodemailer/lib/smtp-connection/index.js:790:19)\n at SMTPConnection._actionRCPT (/app/node_modules/nodemailer/lib/smtp-connection/index.js:1654:28)\n at SMTPConnection.<anonymous> (/app/node_modules/nodemailer/lib/smtp-connection/index.js:1607:30)\n at SMTPConnection._processResponse (/app/node_modules/nodemailer/lib/smtp-connection/index.js:969:20)\n at SMTPConnection._onData (/app/node_modules/nodemailer/lib/smtp-connection/index.js:755:14)\n at SMTPConnection._onSocketData (/app/node_modules/nodemailer/lib/smtp-connection/index.js:193:44)\n at TLSSocket.emit (node:events:517:28)\n at addChunk (node:internal/streams/readable:368:12)\n at readableAddChunk (node:internal/streams/readable:341:9)\n at Readable.push (node:internal/streams/readable:278:10)\n at TLSWrap.onStreamRead (node:internal/stream_base_commons:190:23)",
"message": "Can't send mail - all recipients were rejected: 450 4.2.1 <noreply@tedomum.net>: SASL login name rejected: You are sending too many emails too fast.",
"code": "EENVELOPE",
"response": "450 4.2.1 <noreply@tedomum.net>: SASL login name rejected: You are sending too many emails too fast.",
"responseCode": 450,
"command": "RCPT TO",
"rejected": [
"nom@domaine.fr"
],
"rejectedErrors": [
{
"stack": "Error: Recipient command failed: 450 4.2.1 <noreply@tedomum.net>: SASL login name rejected: You are sending too many emails too fast.\n at SMTPConnection._formatError (/app/node_modules/nodemailer/lib/smtp-connection/index.js:790:19)\n at SMTPConnection._actionRCPT (/app/node_modules/nodemailer/lib/smtp-connection/index.js:1640:24)\n at SMTPConnection.<anonymous> (/app/node_modules/nodemailer/lib/smtp-connection/index.js:1607:30)\n at SMTPConnection._processResponse (/app/node_modules/nodemailer/lib/smtp-connection/index.js:969:20)\n at SMTPConnection._onData (/app/node_modules/nodemailer/lib/smtp-connection/index.js:755:14)\n at SMTPConnection._onSocketData (/app/node_modules/nodemailer/lib/smtp-connection/index.js:193:44)\n at TLSSocket.emit (node:events:517:28)\n at addChunk (node:internal/streams/readable:368:12)\n at readableAddChunk (node:internal/streams/readable:341:9)\n at Readable.push (node:internal/streams/readable:278:10)\n at TLSWrap.onStreamRead (node:internal/stream_base_commons:190:23)",
"message": "Recipient command failed: 450 4.2.1 <noreply@tedomum.net>: SASL login name rejected: You are sending too many emails too fast.",
"code": "EENVELOPE",
"response": "450 4.2.1 <noreply@tedomum.net>: SASL login name rejected: You are sending too many emails too fast.",
"responseCode": 450,
"command": "RCPT TO",
"recipient": "nom@domaine.fr"
}
]
}
}
Souci identique sur cette vidéo : https://video.tedomum.net/w/tpYdLYefZ8tjLekLvXTdPz
Est-il possible d'utiliser ta magie pour corriger cela ?
Ca m'a l'air ok, il ne reste que les vidéos live sur le disque