sketch of to-device deletion
This commit is contained in:
parent
cf1adc278a
commit
f8c8a54670
|
@ -13,8 +13,9 @@
|
||||||
# limitations under the License.
|
# limitations under the License.
|
||||||
|
|
||||||
import logging
|
import logging
|
||||||
from typing import Collection, Dict, List, Optional, Tuple
|
from typing import Collection, Dict, Iterable, List, Optional, Tuple
|
||||||
|
|
||||||
|
from synapse.appservice import ApplicationService
|
||||||
from synapse.logging import issue9533_logger
|
from synapse.logging import issue9533_logger
|
||||||
from synapse.logging.opentracing import log_kv, set_tag, trace
|
from synapse.logging.opentracing import log_kv, set_tag, trace
|
||||||
from synapse.replication.tcp.streams import ToDeviceStream
|
from synapse.replication.tcp.streams import ToDeviceStream
|
||||||
|
@ -259,6 +260,36 @@ class DeviceInboxWorkerStore(SQLBaseStore):
|
||||||
"get_new_messages_for_device", get_new_messages_for_device_txn
|
"get_new_messages_for_device", get_new_messages_for_device_txn
|
||||||
)
|
)
|
||||||
|
|
||||||
|
# TODO: OpenTracing support
|
||||||
|
async def delete_messages_for_appservice_users(
|
||||||
|
self, service: ApplicationService, users: Iterable[str], up_to_stream_id: int
|
||||||
|
) -> int:
|
||||||
|
"""
|
||||||
|
Delete to-device messages that have been delivered to an application service.
|
||||||
|
|
||||||
|
Only messages
|
||||||
|
that are intended for users that the given application service has registered an exclusive
|
||||||
|
namespace for will be deleted. If a message is intended for a user, but that user is not
|
||||||
|
part of an exclusive namespace registered by the given application service, then that
|
||||||
|
message will remain in-tact.
|
||||||
|
|
||||||
|
Args:
|
||||||
|
service: The application service to inspect user namespaces of.
|
||||||
|
users: The to-device message recipient users to scope to.
|
||||||
|
up_to_stream_id: The maximum message stream token to consider, inclusive.
|
||||||
|
|
||||||
|
Returns:
|
||||||
|
The number of messages deleted.
|
||||||
|
# TODO: Useful now that we skip stream tokens?
|
||||||
|
"""
|
||||||
|
# TODO: Check cache
|
||||||
|
|
||||||
|
# Filter users based on exclusive namespace
|
||||||
|
|
||||||
|
# Only delete messages for those users up to the stream ID
|
||||||
|
|
||||||
|
# So potentially just a delete_messages_for_users method?
|
||||||
|
|
||||||
@trace
|
@trace
|
||||||
async def delete_messages_for_device(
|
async def delete_messages_for_device(
|
||||||
self, user_id: str, device_id: Optional[str], up_to_stream_id: int
|
self, user_id: str, device_id: Optional[str], up_to_stream_id: int
|
||||||
|
@ -267,7 +298,7 @@ class DeviceInboxWorkerStore(SQLBaseStore):
|
||||||
Args:
|
Args:
|
||||||
user_id: The recipient user_id.
|
user_id: The recipient user_id.
|
||||||
device_id: The recipient device_id.
|
device_id: The recipient device_id.
|
||||||
up_to_stream_id: Where to delete messages up to.
|
up_to_stream_id: Where to delete messages up to, inclusive.
|
||||||
|
|
||||||
Returns:
|
Returns:
|
||||||
The number of messages deleted.
|
The number of messages deleted.
|
||||||
|
|
Loading…
Reference in a new issue