【问题标题】:Programmatic backup on appengine for JavaAppengine for Java 上的程序化备份
【发布时间】:2013-10-09 03:24:42
【问题描述】:

我想在 GAE for Java 上以编程方式运行备份作业。 所以我尝试将here 描述的代码移植到 Appengine for Java 上工作:

Queue queue = QueueFactory.getDefaultQueue();

String backendAddress = BackendServiceFactory.getBackendService().getBackendAddress("ah-builtin-python-bundle");
    TaskOptions taskOptions = withUrl("/_ah/datastore_admin/backup.create")
            .method(TaskOptions.Method.GET)
            .param("name", "Backup_Task")
            .param("filesystem", "gs")
            .param("gs_bucket_name", "backup_bkt")
            .param("queue", queue.getQueueName())
            .header("Host", backendAddress).
            .param("kind", "customer")
            .param("kind", "address")
 queue.add(taskOptions);

所有这些似乎都是正确的。当我运行上面的代码时,它添加了推送队列的任务调用,但是不会在 ah-builtin-python-bundle 上执行它,而是在我的应用程序的默认版本上执行它,这显然返回 404。请参阅下面的日志:

2013-10-02 15:58:27.315 /_ah/datastore_admin/backup.create?name=Backup_Task&filesystem=gs&gs_bucket_name=backup&queue=next-version&kind=address&kind=customer 404 26ms 0kb AppEngine-Google; (+http://code.google.com/appengine) 0.1.0.2 - - [02/Oct/2013:08:58:27 -0700] “GET /_ah/datastore_admin/backup.create?name=Backup_Task&filesystem=gs&gs_bucket_name=backup&queue=next-version&kind=address&kind=customer HTTP/1.1” 404 294 "http://version.myapp.appspot.com/tasks/backup" "AppEngine-Google; (+http://code.google.com/appengine)" "version.myapp.appspot.com" ms=26 cpu_ms=47 cpm_usd=0.000033 queue_name=下一个版本 task_name=3563633336363 app_engine_release=1.8.5实例=xxxxxxxxxxxxxxx

我也看到了代码here,它在做同样的事情,但我不确定它是否正常工作。

我想知道,我错过了什么?

【问题讨论】:

  • 您好,同样的问题。请问你解决了吗?

标签: java google-app-engine backup google-cloud-storage


【解决方案1】:

我找到的解决方案如下:

Queue queue = QueueFactory.getQueue("backupQueue");
TaskOptions taskOptions = withUrl("/_ah/datastore_admin/backup.create")
            .method(TaskOptions.Method.GET)
            .param("name", 'Backuptask')
            .param("filesystem", "gs")
            .param("gs_bucket_name", BACKUP_BUCKET + '/' + DateTime.now().toString("yyyy/MM/dd/'" + nameSpace + "'-HH-mm"))
            .param("namespace", NamespaceManager.get();)
            .param("queue", queue.getQueueName())
            .param("kind", "customer")
            .param("kind", "address");
queue.add(taskOptions);

诀窍是使用backupQueue 来定位ah-builtin-python-bundle。您可以通过将以下内容添加到queue.xml:`

<queue> <!-- a queue for backups tasks --> <name>backupQueue</name> <rate>1/s</rate> <bucket-size>10</bucket-size> <max-concurrent-requests>3</max-concurrent-requests> <retry-parameters> <!-- only 1 retry attempt --> <task-retry-limit>2</task-retry-limit> </retry-parameters> <target>ah-builtin-python-bundle</target> </queue>

【讨论】:

  • 天哪,这太不可思议了!我们一直在努力解决这个问题,直到偶然发现这颗宝石。您甚至可以检查每个命名空间中的种类并添加它们以进行通用命名空间备份/恢复。
  • 我们正在使用类似的东西,而且效果很好。现在下一个技巧是如何获取待处理/正在运行的备份列表,以免重叠。你明白了吗?
  • 唯一的方法是检查任务队列,它只会告诉你备份是否完成。此方法的主要问题是您无法按命名空间运行托管备份。
  • 我自己使用 API 想出了几乎完全相同的 Java 代码。不同之处在于我使用的是 defaultQueue,最终结果是备份没有发生。我将尝试使用上述不同的队列。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-11-25
  • 1970-01-01
  • 1970-01-01
  • 2023-03-12
  • 1970-01-01
  • 2013-09-20
  • 1970-01-01
相关资源
最近更新 更多