Skip to content
GitLab
Menu
Projects
Groups
Snippets
/
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
Menu
Open sidebar
Pleroma
pleroma
Commits
fd07745d
Commit
fd07745d
authored
Apr 02, 2019
by
lain
Browse files
ActivityPub Utils: Greatly speed up the follow / block activity fetching.
parent
749d53e2
Pipeline
#9884
passed with stages
in 7 minutes and 28 seconds
Changes
3
Pipelines
1
Hide whitespace changes
Inline
Side-by-side
lib/pleroma/web/activity_pub/utils.ex
View file @
fd07745d
...
...
@@ -404,13 +404,15 @@ def fetch_latest_follow(%User{ap_id: follower_id}, %User{ap_id: followed_id}) do
activity
.
data
),
where:
activity
.
actor
==
^
follower_id
,
# this is to use the index
where:
fragment
(
"? @> ?"
,
"coalesce((?)->'object'->>'id', (?)->>'object') = ?"
,
activity
.
data
,
activity
.
data
,
^
%{
object:
followed_id
}
^
followed_id
),
order_by:
[
desc:
:
id
],
order_by:
[
fragment
(
"? desc nulls last"
,
activity
.
id
)
],
limit:
1
)
...
...
@@ -567,13 +569,15 @@ def fetch_latest_block(%User{ap_id: blocker_id}, %User{ap_id: blocked_id}) do
activity
.
data
),
where:
activity
.
actor
==
^
blocker_id
,
# this is to use the index
where:
fragment
(
"? @> ?"
,
"coalesce((?)->'object'->>'id', (?)->>'object') = ?"
,
activity
.
data
,
activity
.
data
,
^
%{
object:
blocked_id
}
^
blocked_id
),
order_by:
[
desc:
:
id
],
order_by:
[
fragment
(
"? desc nulls last"
,
activity
.
id
)
],
limit:
1
)
...
...
test/web/activity_pub/activity_pub_test.exs
View file @
fd07745d
...
...
@@ -635,16 +635,6 @@ test "works with base64 encoded images" do
end
end
describe
"fetch the latest Follow"
do
test
"fetches the latest Follow activity"
do
%
Activity
{
data:
%{
"type"
=>
"Follow"
}}
=
activity
=
insert
(
:follow_activity
)
follower
=
Repo
.
get_by
(
User
,
ap_id:
activity
.
data
[
"actor"
])
followed
=
Repo
.
get_by
(
User
,
ap_id:
activity
.
data
[
"object"
])
assert
activity
==
Utils
.
fetch_latest_follow
(
follower
,
followed
)
end
end
describe
"fetching an object"
do
test
"it fetches an object"
do
{
:ok
,
object
}
=
...
...
test/web/activity_pub/utils_test.exs
View file @
fd07745d
defmodule
Pleroma
.
Web
.
ActivityPub
.
UtilsTest
do
use
Pleroma
.
DataCase
alias
Pleroma
.
Activity
alias
Pleroma
.
Repo
alias
Pleroma
.
User
alias
Pleroma
.
Web
.
ActivityPub
.
ActivityPub
alias
Pleroma
.
Web
.
ActivityPub
.
Utils
alias
Pleroma
.
Web
.
CommonAPI
import
Pleroma
.
Factory
describe
"fetch the latest Follow"
do
test
"fetches the latest Follow activity"
do
%
Activity
{
data:
%{
"type"
=>
"Follow"
}}
=
activity
=
insert
(
:follow_activity
)
follower
=
Repo
.
get_by
(
User
,
ap_id:
activity
.
data
[
"actor"
])
followed
=
Repo
.
get_by
(
User
,
ap_id:
activity
.
data
[
"object"
])
assert
activity
==
Utils
.
fetch_latest_follow
(
follower
,
followed
)
end
end
describe
"fetch the latest Block"
do
test
"fetches the latest Block activity"
do
blocker
=
insert
(
:user
)
blocked
=
insert
(
:user
)
{
:ok
,
activity
}
=
ActivityPub
.
block
(
blocker
,
blocked
)
assert
activity
==
Utils
.
fetch_latest_block
(
blocker
,
blocked
)
end
end
describe
"determine_explicit_mentions()"
do
test
"works with an object that has mentions"
do
object
=
%{
...
...
Write
Preview
Supports
Markdown
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment