SharePoint / sp-dev-docs

SharePoint & Viva Connections Developer Documentation
https://docs.microsoft.com/en-us/sharepoint/dev/
Creative Commons Attribution 4.0 International
1.26k stars 1.02k forks source link

Values retrieved from SharePoint Online tenant properties (via. REST API) are not consistent #7982

Open devangbhavsar89 opened 2 years ago

devangbhavsar89 commented 2 years ago

Target SharePoint environment

SharePoint Online

What SharePoint development model, framework, SDK or API is this about?

SharePoint REST API

Describe the bug / error

For a given tenant property which has been updated multiple times, whenever we try to retrieve a tenant property using REST API, it returns different output (including previously stored values).

In other words, multiple requests to https://<tenant>.sharepoint.com/sites/<web>/_api/web/GetStorageEntity('key') REST API yields inconsistent results.

Additional Observation

Perhaps could this be an issue with multiple front-end servers processing my request? And the fact that tenant properties are cached on front-end servers for optimization. So whenever it's value is updated, it is not synced instantaneously across available servers and hence the issue.

Steps to reproduce

  1. Connect to your SharePoint Online tenant using PnP PowerShell.
  2. Set tenant property using PnP cmdlet. Set-PnPStorageEntity -Key "Country" -Value "Finland"
  3. Log-in to your tenant in browser and open a new tab and enter the following URL and check the response: https://<tenant>.sharepoint.com/sites/<web>/_api/web/GetStorageEntity('Country')
  4. Then update the tenant property with a different value using PnP cmdlet. Set-PnPStorageEntity -Key "Country" -Value "India"
  5. Refresh the URL (mentioned above in step-4) multiple times and notice the inconsistency in values yielded by the REST API. Sometimes it returns India, other times Finland. And at times even null is returned.

Expected behavior

ghost commented 2 years ago

Thank you for reporting this issue. We will be triaging your incoming issue as soon as possible.

adamd9 commented 2 years ago

Hi, just adding that I'm impacted by this issue too - I was expecting consistent results when using the REST API but I see now that it returns old values as described by @devangbhavsar89

Are there plans to fix this? It would also be good to get some info on how long the issue occurs before the "latest" value is reflected across all servers/nodes or whatever is caching the old values.

SharePickle commented 1 year ago

Bump. This is still an issue. @adamd9 @devangbhavsar89 As a workaround I'm using storageentitiesindex web property. It returns a JSON of all properties set for current web.

Careful with this, because it will only work for current web and will not return all properties if they are set on the different site with site app catalog, you might need to run it against global app catalog.

fetch("<tenant>/sites/<site>/_api/web/AllProperties?$select=storageentitiesindex", {
  "headers": {
    "accept": "application/json",
  },
  "method": "GET",
  "mode": "cors",
  "credentials": "include"
});

https://learn.microsoft.com/en-us/sharepoint/dev/spfx/tenant-properties?tabs=sprest#list-tenant-properties

adamd9 commented 1 year ago

Thanks for the workaround @SharePickle!

SharePickle commented 10 months ago

Any progress on that? Still an issue and the workaround is not the best option.