Chocobozzz / PeerTube

ActivityPub-federated video streaming platform using P2P directly in your web browser
https://joinpeertube.org/
GNU Affero General Public License v3.0
13.02k stars 1.5k forks source link

Instance-follow request from 2.0.0 to older code base always stuck at "Waiting" #2311

Closed karthanistyr closed 4 years ago

karthanistyr commented 4 years ago

What happened? On a fresh 2.0.0 instance, I, as the admin, add several instances using the /admin/follows/following-add panel. Those of these instances running 2.0.0 progress the follow status to "Accepted" whereas those running an older code base (1.4.1 and older) stay stuck at "Waiting" and never progress further.

RE: follow confirmation, this has also been tried with the help of the admin of a v1.4.1 instance guaranteeing that the follow confirmation is disabled.

What do you expect to happen instead? Most instances, including those running an older code base, should progress to "Accepted". There should not be a clear fracture between 2.0.0 and older code bases.

Please note that I am aware of a disclaimer in the 2.0.0 release notes:

IMPORTANT NOTES

  • Removed old JSON LD signature implementation. There will be some federation incompatibilities with forwarded activities sent by PeerTube instances < v2.0.0

However I am not able to tell with confidence if it is related to the present issue.

Steps to reproduce: To my knowledge, the steps could be as simple as:

  1. Set up a 2.0.0 instance
  2. Send instance follow requests to instances running 1.4.1 or older
  3. See status stay stuck at "Waiting"

Additional information

Chocobozzz commented 4 years ago

Did you retry to follow this server? It seems there was some connection issues at this moment (ETIMEDOUT error)

karthanistyr commented 4 years ago

Ok, I just did a follow on the same instance and the unicast job completed. The timeouts are frequent though (on a side note: are they retried automatically?)

ID Type Statut Créé le Traité sur Fini sur
116 activitypub-http-unicast completed Dec 5, 2019, 4:08:25 PM Dec 5, 2019, 4:08:25 PM Dec 5, 2019, 4:08:26 PM
{
  "uri": "https://vault.mle.party/accounts/peertube/inbox",
  "signatureActorId": 1,
  "body": {
    "type": "Follow",
    "id": "https://video.barbed.fr/accounts/peertube/follows/758",
    "actor": "https://video.barbed.fr/accounts/peertube",
    "object": "https://vault.mle.party/accounts/peertube"
  }
}

However the status is still "Waiting" after several minutes. 2019-12-05_16-15-28_capture

karthanistyr commented 4 years ago

I set up a test 1.4.1 instance to gather the other end of logs, and it looks like those gathered on vault.mle.party:

[pt141-1.uplink.fail:443] 2019-12-06 13:57:47.972 info: Fetching remote actor https://video.barbed.fr/accounts/peertube.
[pt141-1.uplink.fail:443] 2019-12-06 13:57:48.036 error: Error in ActivityPub signature checker.Cannot fetch remote actor https://video.barbed.fr/accounts/peertube {
  "stack": "Error: Cannot fetch remote actor https://video.barbed.fr/accounts/peertube\n    at Object.<anonymous> (/app/dist/server/lib/activitypub/actor.js:57:23)\n    at Generator.next (<anonymous>)\n    at fulfilled (/app/dist/server/lib/activitypub/actor.js:4:58)"
}
[pt141-1.uplink.fail:443] 2019-12-06 13:57:48.037 info: 46.105.102.192 - - [06/Dec/2019:13:57:48 +0000] "POST /accounts/peertube/inbox HTTP/1.1" 403 9 "-" "PeerTube/2.0.0 (+https://video.barbed.fr)"

An attempted isntance-follow from video.barbed.fr always results in these lines on the 1.4.1 end. Notice the 403 status code (and also the signature check error).

Are there any settings I could flip to try an toy around this?

Chocobozzz commented 4 years ago

Enable debug logs in 1.4.1 server settings

karthanistyr commented 4 years ago
[pt141-1.uplink.fail:443] 2019-12-06 14:07:20.117 info: Fetching remote actor https://video.barbed.fr/accounts/peertube.
[pt141-1.uplink.fail:443] 2019-12-06 14:07:20.220 debug: Remote actor JSON is not valid. {
  "actorJSON": {
    "type": "Application",
    "id": "https://video.barbed.fr/accounts/peertube",
    "following": "https://video.barbed.fr/accounts/peertube/following",
    "followers": "https://video.barbed.fr/accounts/peertube/followers",
    "playlists": "https://video.barbed.fr/accounts/peertube/playlists",
    "inbox": "https://video.barbed.fr/accounts/peertube/inbox",
    "outbox": "https://video.barbed.fr/accounts/peertube/outbox",
    "preferredUsername": "peertube",
    "url": "https://video.barbed.fr/accounts/peertube",
    "name": "peertube",
    "endpoints": {
      "sharedInbox": "https://video.barbed.fr/inbox"
    },
    "publicKey": {
      "id": "https://video.barbed.fr/accounts/peertube#main-key",
      "owner": "https://video.barbed.fr/accounts/peertube",
      "publicKeyPem": "-----BEGIN PUBLIC KEY-----\nMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAmJ4R0dB5w2X1/ps32npp\nkfT9yGlRoA59OVudcWXVULXGfw+E4+eqSyt0fi8VioWXSc06VabC5umIzKS5upVI\nGO2fSs1hPL2+xwI8fzfqmuRjUAiTwmqELA22IHXBFIuZPr24Qf5TFg+PSw318Yfm\nVrcd6P4vRa5x+D8mo0j6iSaoLgTFTT8QqP8yVA7qS3feIXj7zCtYg9gK0JxsTkmG\nDdjdBfYRhmNKLxqP3SrV4OCvQ1WeriKjCo5XWkWOXPy90gKaDbtkkgtpaVl8CH25\nUBmkTEu+02fD+GZV+v7H3Ru10imhddjP5OHe0SlWqnzSuLiLiTsCf00zIL/jwDF/\nqQIDAQAB\n-----END PUBLIC KEY-----"
    },
    "@context": [
      "https://www.w3.org/ns/activitystreams",
      "https://w3id.org/security/v1",
      {
        "RsaSignature2017": "https://w3id.org/security#RsaSignature2017",
        "pt": "https://joinpeertube.org/ns#",
        "sc": "http://schema.org#",
        "Hashtag": "as:Hashtag",
        "uuid": "sc:identifier",
        "category": "sc:category",
        "licence": "sc:license",
        "subtitleLanguage": "sc:subtitleLanguage",
        "sensitive": "as:sensitive",
        "language": "sc:inLanguage",
        "expires": "sc:expires",
        "CacheFile": "pt:CacheFile",
        "Infohash": "pt:Infohash",
        "originallyPublishedAt": "sc:datePublished",
        "views": {
          "@type": "sc:Number",
          "@id": "pt:views"
        },
        "state": {
          "@type": "sc:Number",
          "@id": "pt:state"
        },
        "size": {
          "@type": "sc:Number",
          "@id": "pt:size"
        },
        "fps": {
          "@type": "sc:Number",
          "@id": "pt:fps"
        },
        "startTimestamp": {
          "@type": "sc:Number",
          "@id": "pt:startTimestamp"
        },
        "stopTimestamp": {
          "@type": "sc:Number",
          "@id": "pt:stopTimestamp"
        },
        "position": {
          "@type": "sc:Number",
          "@id": "pt:position"
        },
        "commentsEnabled": {
          "@type": "sc:Boolean",
          "@id": "pt:commentsEnabled"
        },
        "downloadEnabled": {
          "@type": "sc:Boolean",
          "@id": "pt:downloadEnabled"
        },
        "waitTranscoding": {
          "@type": "sc:Boolean",
          "@id": "pt:waitTranscoding"
        },
        "support": {
          "@type": "sc:Text",
          "@id": "pt:support"
        }
      },
      {
        "likes": {
          "@id": "as:likes",
          "@type": "@id"
        },
        "dislikes": {
          "@id": "as:dislikes",
          "@type": "@id"
        },
        "playlists": {
          "@id": "pt:playlists",
          "@type": "@id"
        },
        "shares": {
          "@id": "as:shares",
          "@type": "@id"
        },
        "comments": {
          "@id": "as:comments",
          "@type": "@id"
        }
      }
    ],
    "summary": null,
    "attributedTo": []
  }
}
[pt141-1.uplink.fail:443] 2019-12-06 14:07:20.221 error: Error in ActivityPub signature checker.Cannot fetch remote actor https://video.barbed.fr/accounts/peertube {
  "stack": "Error: Cannot fetch remote actor https://video.barbed.fr/accounts/peertube\n    at Object.<anonymous> (/app/dist/server/lib/activitypub/actor.js:57:23)\n    at Generator.next (<anonymous>)\n    at fulfilled (/app/dist/server/lib/activitypub/actor.js:4:58)"
}
[pt141-1.uplink.fail:443] 2019-12-06 14:07:20.228 info: 46.105.102.192 - - [06/Dec/2019:14:07:20 +0000] "POST /accounts/peertube/inbox HTTP/1.1" 403 9 "-" "PeerTube/2.0.0 (+https://video.barbed.fr)"
Chocobozzz commented 4 years ago

Thanks I understand now. We fixed a bug in 2.0.0 and it was an unplanned breaking change.

Before this fix, the peertube instance actor said it was a Person, but in fact it is an Application. Another bug was that peertube considered that everything else than a Person was supposed to have an non-empty attributedTo (the correct condition is than only a Group should be attributedTo in PeerTube).

We can't really do anything here, admins will have to update to peertube 2.0.

karthanistyr commented 4 years ago

it was an unplanned breaking change. [...] We can't really do anything here, admins will have to update to peertube 2.0.

Ouch. As it stands right now, admins of 2.0.0 instances may lose the benefit of populating their global feed with all the good content put up by admins of an older generation instance (i.e. no instance-follows). It would only get better over time as admins update their instances, which they may or may not do (as they are running stable versions, or don't have time, etc...), but right now it's very frequent to find a 1.4.1 or older instance.

(It is still possible to follow individual channels as a Person as expected.)

Would it be possible to consider a fix to restore backwards compatibility with instance-follows between instances of different generations? Undo the breaking change and maybe monitor the landscape to reintroduce the breakage in a planned fashion with a notice to admins?

Chocobozzz commented 4 years ago

Would it be possible to consider a fix to restore backwards compatibility with instance-follows between instances of different generations? Undo the breaking change and maybe monitor the landscape to reintroduce the breakage in a planned fashion with a notice to admins?

No sorry. You can update your peertube instance to introduce itself as a Person if your want. As a side note, existing follows should not be affected.

karthanistyr commented 4 years ago

Thanks, I expected as much. I don't think I want to start hacking into my instance as I want to keep future upgrades as smooth as possible.

I do appreciate your help in figuring out this issue and the peertube team's work in general.

If I may share my experience as someone who waited for 2.0.0 to land to start my instance, it's a bit disappointing to figure out that my instance is cut off from a significant part of the peertube network in terms of functionality. I find it a bit of a shame to consciously keep this broken, even if the original breakage was unintentional, as it adversely influences my perception of peertube as stable software. I don't claim my opinion to be a generality of course.

I wish you and the team best of luck and cross my fingers hoping there won't be further breakages ;)