algoliasearch-client-javascript icon indicating copy to clipboard operation
algoliasearch-client-javascript copied to clipboard

Unable to delete virtual replica

Open lamontadams opened this issue 3 years ago • 4 comments

How does one go about deleting a virtual replica index?

Looking at the published documentation at

  • https://www.algolia.com/doc/api-client/methods/indexing/#creating-indices
  • https://www.algolia.com/doc/api-reference/api-methods/delete-index/
  • https://www.algolia.com/doc/guides/managing-results/refine-results/sorting/how-to/deleting-replicas/#using-the-api

It seems as though this should work, assuming a "main" index named "main" and a virtual replica named "virtual":

const client = algoliaSearch(ID, KEY);
const main = client.initIndex('main');
await main.setSettings({
    replicas: []
  });
const virtualIndex = client.initIndex('virtual');
await virtualIndex.delete();

However, the call to initIndex for 'virtual' yields this error response:

{
  name: 'ApiError',
  message: 'cannot apply a add object request on a replica index',
  status: 403,
}

Is there some way other than initIndex that I'm supposed to be getting a reference to a virtual replica index?

lamontadams avatar Jan 03 '22 22:01 lamontadams

I'm not sure how you could have an "add object" error in code that doesn't mention addObject, but what I assume is happening is that your are waiting for the network requests, but not for the actual operations to be finished. You can opt in to that behaviour by writing await main.setSettings({}).wait() etc.

Haroenv avatar Jan 04 '22 12:01 Haroenv

Yeah, thanks. That's what I'm apparently missing, my code seems to be racing the settings update of the main index.

The fact that this is needed isn't clear at all from any of the documentation I've looked at, and that error message is definitely less than helpful.

lamontadams avatar Jan 04 '22 15:01 lamontadams

You received that error message from the API from the code you sent, without adding any new objects? That definitely seems like an issue I'll forward to the api team then!

Waiting for the tasks is in general not needed very often, but seems like it would be in this specific case where you want to recreate the same index as non-replica, and thus need to wait for the deletion to be done.

Haroenv avatar Jan 04 '22 15:01 Haroenv

Yeah this is an unusual case for sure. I'm working around an issue with the terraform provider I'm using, which causes my script to fail when I apply it against an existing virtual replica index. Deleting existing virtual replicas beforehand is brute force but it does work around the issue...

lamontadams avatar Jan 06 '22 20:01 lamontadams