question

josh avatar image
josh asked

Why am I seeing the error: "Temporary storage issue, please retry request" for a series of API requests?,The API is throwing an error: "Temporary storage issue, please retry request"

I am making a series of sequential requests to SetTitleData using the Node SDK and getting the "Temporary storage issue, please retry request" error at some point in the sequence. It doesn't happen in the same place each time.

I have an array of 18 items, each item averages about 28 KB of data. I wait for each item to finish successfully before starting the next. I have tried adding in a delay of .5 seconds up to 2 seconds between requests and still get the error.

Any help would be greatly appreciated.

A simplified version of the data:
(The largest parts "data" and "screen" have been replaced for brevity.)

[
  {
    "title": "Apocalypse Run: Radioactive",
    "subtitle": "BY 8Dragon8",
    "publishedDate": "07/22/2016 14:22:39",
    "screen": "screen image data here",
    "sharedHistory": "",
    "version": "1",
    "copiedCount": "0",
    "data": "game data here",
    "id": "live_lvl_6f319045-a934-4ec8-9a42-07cc7ea1641a"
  },
  {
    "title": "Tackling The Towers",
    "subtitle": "BY lemmy21koopa30",
    "publishedDate": "07/14/2016 03:14:38",
    "screen": "screen image data here",
    "sharedHistory": "",
    "version": "1",
    "copiedCount": "0",
    "data": "game data here",
    "id": "live_lvl_f8c49373-31d9-4b1b-a817-23e12812c039"
  },
  {
    "title": "Ninja Trials",
    "subtitle": "BY TINYBOP",
    "publishedDate": "07/07/2016 22:15:38",
    "screen": "screen image data here",
    "sharedHistory": "",
    "version": "1",
    "copiedCount": "0",
    "data": "game data here",
    "id": "live_lvl_c426a919-ef77-43fb-b89e-b2d13cee7cd4"
  },
  {
    "title": "Bounce",
    "subtitle": "BY EzCashMatt",
    "publishedDate": "07/07/2016 21:51:46",
    "screen": "screen image data here",
    "sharedHistory": "",
    "version": "1",
    "copiedCount": "0",
    "data": "game data here",
    "id": "live_lvl_1a9a3f4c-2f78-4364-96b3-e9458955d063"
  },
  {
    "title": "Asteroid City",
    "subtitle": "BY TINYBOP",
    "publishedDate": "06/17/2016 01:45:24",
    "screen": "screen image data here",
    "sharedHistory": "",
    "version": "1",
    "copiedCount": "0",
    "data": "game data here",
    "id": "live_lvl_210d4051-769b-4fad-8793-001ecca54d2c"
  },
  {
    "title": "Silly Lil Koine",
    "subtitle": "BY TINYBOP",
    "publishedDate": "06/10/2016 01:45:24",
    "screen": "screen image data here",
    "data": "game data here",
    "id": "live_curated_sillylilkoine",
    "copiedCount": "0",
    "version": "1"
  },
  {
    "title": "Chompers on Ice",
    "subtitle": "BY TINYBOP",
    "publishedDate": "06/17/2016 01:39:24",
    "screen": "screen image data here",
    "sharedHistory": "",
    "version": "1",
    "copiedCount": "0",
    "data": "game data here",
    "id": "live_curated_chompersonice"
  },
  {
    "title": "Coin Operator",
    "subtitle": "BY TINYBOP",
    "publishedDate": "06/17/2016 23:09:48",
    "screen": "screen image data here",
    "sharedHistory": "",
    "version": "1",
    "copiedCount": "0",
    "data": "game data here",
    "id": "live_curated_coinoperator"
  },
  {
    "title": "Tinykoban",
    "subtitle": "BY TINYBOP",
    "publishedDate": "06/16/2016 21:06:06",
    "screen": "screen image data here",
    "sharedHistory": "",
    "version": "1",
    "copiedCount": "0",
    "data": "game data here",
    "id": "live_curated_tinykoban"
  },
  {
    "title": "Word Break",
    "subtitle": "BY TINYBOP",
    "publishedDate": "06/16/2016 01:40:35",
    "screen": "screen image data here",
    "sharedHistory": "",
    "version": "1",
    "copiedCount": "0",
    "data": "game data here",
    "id": "live_curated_wordbreak"
  },
  {
    "title": "Shiver Me Timbers!",
    "subtitle": "BY TINYBOP",
    "publishedDate": "06/16/2016 18:24:12",
    "screen": "screen image data here",
    "sharedHistory": "",
    "version": "1",
    "copiedCount": "0",
    "data": "game data here",
    "id": "live_curated_shivermetimbers"
  },
  {
    "title": "Creeper",
    "subtitle": "BY TINYBOP",
    "publishedDate": "06/14/2016 12:06:07",
    "screen": "screen image data here",
    "sharedHistory": "",
    "data": "game data here",
    "id": "live_curated_creeper",
    "copiedCount": "0",
    "version": "1"
  },
  {
    "title": "Blue Lagoon",
    "subtitle": "BY TINYBOP",
    "publishedDate": "06/17/2016 00:42:51",
    "screen": "screen image data here",
    "sharedHistory": "",
    "version": "1",
    "copiedCount": "0",
    "data": "game data here",
    "id": "live_curated_bluelagoon"
  },
  {
    "title": "Lavaland",
    "subtitle": "BY TINYBOP",
    "publishedDate": "06/28/2016 17:24:41",
    "screen": "screen image data here",
    "sharedHistory": "",
    "version": "1",
    "copiedCount": "0",
    "data": "game data here",
    "id": "live_curated_lavaland1"
  },
  {
    "title": "The Gauntlet",
    "subtitle": "BY TINYBOP",
    "publishedDate": "06/29/2016 21:15:33",
    "screen": "screen image data here",
    "sharedHistory": "",
    "version": "1",
    "copiedCount": "0",
    "data": "game data here",
    "id": "live_curated_thegauntlet"
  },
  {
    "title": "Poppys Platform Planet",
    "subtitle": "BY TINYBOP",
    "publishedDate": "06/28/2016 19:32:27",
    "screen": "screen image data here",
    "sharedHistory": "",
    "version": "1",
    "copiedCount": "0",
    "data": "game data here",
    "id": "live_curated_poppy1"
  },
  {
    "title": "Narrow Escape",
    "subtitle": "BY TINYBOP",
    "publishedDate": "07/01/2016 19:59:11",
    "screen": "screen image data here",
    "sharedHistory": "",
    "version": "1",
    "copiedCount": "0",
    "data": "game data here",
    "id": "live_curated_narrowescape"
  },
  {
    "title": "Cant Ketchup Break",
    "subtitle": "BY TINYBOP",
    "publishedDate": "06/30/2016 15:42:51",
    "screen": "screen image data here",
    "sharedHistory": "",
    "version": "1",
    "copiedCount": "0",
    "data": "game data here",
    "id": "live_curated_ketchup"
  }
] 
 
              
Title Data
10 |1200

Up to 2 attachments (including images) can be used with a maximum of 512.0 KiB each and 1.0 MiB total.

brendan avatar image
brendan answered

This error occurs when there's a sudden increase in writes for a single entity in a short period. Can you send the specifics of your calling pattern and overall game flow to us at devrel@playfab.com? It sounds like you may be calling too often from an individual client for this to be a sustainable model in our basic service. To be clear, our base service - the free and upgrade levels - is designed to support the majority of titles, and can handle millions of players per title, no problem. Titles that have a higher-than-normal rate of requests to the backend data can be supported, but we should have a direct conversation on the specifics, to make sure we can work out a custom agreement that handles the request volume you need.

I do need to highlight one thing, however: It looks like this is an attempt to use Title Data as a user-generated content service. If that's the case, this isn't really going to work. Title Data is by necessity sharded and cached, so that it can serve that data out to all users. It is not designed for frequent updates. We've got a more detailed overview of the data systems in this post, which I would recommend having a look at: https://community.playfab.com/questions/3843/use-shared-group-data-for-a-live-event-system.html.

We will be providing a User Generated Content service in a future update, though. If you'd like to be notified when that's available, please be sure to let us know (we track on how many people have asked for each feature, to help with prioritization).

10 |1200

Up to 2 attachments (including images) can be used with a maximum of 512.0 KiB each and 1.0 MiB total.

josh avatar image
josh answered

Thanks Brenden.

For some context: This is for an iOS game, The Infinite Arcade by Tinybop, where players create levels that they can share with other players. The vast majority of our requests are to a player's game data. If a user shares with us and we like the level, we add it to a curated stream of games that we are highlighting for all users of the app. The curated levels and an index are stored in the TitleData.

The process of pulling the player data out, staging for testing and indexing was time consuming and error prone, so we created a web app using the Node SDK on the backend to manage the data for us. When testing has completed our game admin will migrate the games to be live. This requires saving each of the now 18 games into individual stores in TitleData, then saving the index if successful. This migration process is where the error appears. Pulling the data, migrating the levels and index should only take about 20-22 requests over the course of about 30 seconds (depending on the speed of the response). We will do this around once or twice a week, so not that many calls to set TitleData and all in a single session. Editing and testing could easily generate another 10 requests during one session.

Let me know if you need any additional information.

3 comments
10 |1200

Up to 2 attachments (including images) can be used with a maximum of 512.0 KiB each and 1.0 MiB total.

brendan avatar image brendan commented ·

Using Title Data for this is going to be fairly limiting, particularly if you get a lot of good submissions. Have you considered moving this to the Content service, instead?

0 Likes 0 ·
josh avatar image josh brendan commented ·

Unfortunately we've already built and shipped the feature using TitleData and can't easily refactor. What are the limitations on setting TitleData through the API? I could refactor our admin tool to work within those specs.

0 Likes 0 ·
brendan avatar image brendan josh commented ·

By default, Title Data is limited to 50 Key/Value pairs, with a max of 20,000 bytes in each Value.

0 Likes 0 ·

Write an Answer

Hint: Notify or tag a user in this post by typing @username.

Up to 2 attachments (including images) can be used with a maximum of 512.0 KiB each and 1.0 MiB total.