Elasticsearch «snapshot_restore_exception» «причина»: моментальный снимок не существует, когда состояние моментального снимка — УСПЕШНО

Я использую клиент Java/Groovy для ElasticSearch и пытаюсь восстановить моментальный снимок ES во время обновления. Я использую код Groovy, который у меня есть до сих пор, для настройки моих старых и новых клиентов и создания и восстановления моментальных снимков:

          def oldElasticClient = new ElasticClient("old", oldElasticPort)
    oldElasticClient.cleanIndicesAndTemplates()
    def newElasticClient = new ElasticClient("new", newElasticPort)
    newElasticClient.cleanIndicesAndTemplates()
  
    try {
      oldElasticClient.refreshAll()
      oldElasticClient.createSnapshotRepository()
      newElasticClient.createSnapshotRepository()
      oldElasticClient.createSnapshot()
      newElasticClient.restoreSnapshot()
      oldElasticClient.deleteSnapshot()
       ....
    finally {
      oldElasticClient.close()
      newElasticClient.close()
      .... 
}

и это методы, которые выполняют фактическое создание и восстановление моментальных снимков:

      def createSnapshotRepository() {
    log.info("Creating snapshot repository on ${name} Elasticsearch...");
    def settings = Settings.builder()
      .put(FsRepository.LOCATION_SETTING.getKey(), "/var/tmp")
      .put(FsRepository.COMPRESS_SETTING.getKey(), true)
      .build()
    client.snapshot().createRepository(
      new PutRepositoryRequest("myrepository").settings(settings).type(FsRepository.TYPE),
      RequestOptions.DEFAULT
    )
    log.info("Done creating snapshot repository on ${name} Elasticsearch!");
  }

  def createSnapshot(Boolean waitForCompletion = true) {
    log.info("Creating snapshot on ${name} Elasticsearch...");
    CreateSnapshotRequest createSnapshotRequest1 = new CreateSnapshotRequest("myrepository", "mysnapshot_1")
    createSnapshotRequest1.waitForCompletion(true)
    createSnapshotRequest1.includeGlobalState(true)
    CreateSnapshotResponse createSnapshotResponse = client.snapshot().create(createSnapshotRequest1, RequestOptions.DEFAULT)
    log.info("All Snapshots")
    GetSnapshotsRequest getSnapshotsRequest = new GetSnapshotsRequest("myrepository");
    GetSnapshotsResponse getSnapshotsResponse = client.snapshot().get(getSnapshotsRequest, RequestOptions.DEFAULT)
    log.info(getSnapshotsResponse.getProperties().toString())
  }

 def restoreSnapshot() {
    log.info("Restoring snapshot on ${name} Elasticsearch...");
    client.snapshot().restore(
      new RestoreSnapshotRequest("myrepository", "mysnapshot_1")
        .includeGlobalState(true)
        .waitForCompletion(true),
      RequestOptions.DEFAULT
    )
    log.info("Done restoring snapshot on ${name} Elasticsearch!");
  }

После проверки журналов я увидел, что мой снимок был успешно создан следующим образом:

      snapshots:[SnapshotInfo{snapshot=_na_: mysnapshot_1/niEyiuCtRny_fON1aXTMLQ, state=SUCCESS .... ]

Однако мой метод восстановления завершается с сообщением об ошибке, указывающим, что моментальный снимок не существует, что меня действительно сбивает с толку. Это точная ошибка:

      "error":{"root_cause":[{"type":"snapshot_restore_exception","reason":"[myrepository:mysnapshot_1] snapshot does not exist"}],"type":"snapshot_restore_exception","reason":"[myrepository:mysnapshot_1] snapshot does not exist"},"status":500}

Кто-нибудь знает, как я могу отладить это дальше, чтобы увидеть, что может быть не так? Я не знаю, в чем может быть ошибка, поскольку мне все кажется правильным. Любая помощь приветствуется.

0 ответов

Другие вопросы по тегам