plugin pubsub cache: more resilient node caching:

- cache only latest 20 items when disco infos are hidden and thus we can't discover
  feature/RSM implementation
- better handling of args when calling `storage.getItems`

rel 365
This commit is contained in:
Goffi 2022-05-13 18:43:42 +02:00
commit 4e441258b3

View file

@ -277,6 +277,19 @@ class PubsubCache:
await self.host.checkFeatures( await self.host.checkFeatures(
client, [rsm.NS_RSM, self._p.DISCO_RSM], pubsub_node.service client, [rsm.NS_RSM, self._p.DISCO_RSM], pubsub_node.service
) )
except error.StanzaError as e:
if e.condition == "service-unavailable":
log.warning(
"service is hidding disco infos, we'll only cache latest 20 items"
)
items, __ = await client.pubsub_client.items(
pubsub_node.service, pubsub_node.name, maxItems=20
)
await self.cacheItems(
client, pubsub_node, items
)
else:
raise e
except exceptions.FeatureNotFound: except exceptions.FeatureNotFound:
log.warning( log.warning(
f"service {service} doesn't handle Result Set Management " f"service {service} doesn't handle Result Set Management "
@ -493,12 +506,16 @@ class PubsubCache:
raise NotImplementedError("MAM queries are not supported yet") raise NotImplementedError("MAM queries are not supported yet")
if max_items is None and rsm_request is None: if max_items is None and rsm_request is None:
max_items = 20 max_items = 20
if max_items is not None: pubsub_items, metadata = await self.host.memory.storage.getItems(
node, max_items=max_items, item_ids=item_ids,
order_by=extra.get(C.KEY_ORDER_BY)
)
elif max_items is not None:
if rsm_request is not None: if rsm_request is not None:
raise exceptions.InternalError( raise exceptions.InternalError(
"Pubsub max items and RSM must not be used at the same time" "Pubsub max items and RSM must not be used at the same time"
) )
elif item_ids is None: elif item_ids:
raise exceptions.InternalError( raise exceptions.InternalError(
"Pubsub max items and item IDs must not be used at the same time" "Pubsub max items and item IDs must not be used at the same time"
) )