0

I have a following queue definition

<queue>
    <name>ranker-queue</name>
    <mode>pull</mode>
</queue>

in a loop of 10 times

    Queue q = QueueFactory.getQueue("ranker-queue");
    TaskOptions taskOptions = TaskOptions.Builder.withMethod(TaskOptions.Method.PULL);
    q.add(taskOptions);

in a loop of 10 times

    Queue q = QueueFactory.getQueue("ranker-queue");
    List<TaskHandle> tasks = q.leaseTasks(3600, TimeUnit.SECONDS, 5);
    //Processing 
    q.deleteTask( tasks );

In both cases after looping few times it gives the following exception

com.google.appengine.api.taskqueue.InvalidQueueModeException: Target queue mode does not support this operation : null
    at com.google.appengine.api.taskqueue.QueueApiHelper.translateError(QueueApiHelper.java:139)
    at com.google.appengine.api.taskqueue.QueueImpl$2.wrap(QueueImpl.java:552)
    at com.google.appengine.api.taskqueue.QueueImpl$2.wrap(QueueImpl.java:521)
    at com.google.appengine.api.utils.FutureWrapper.wrapAndCache(FutureWrapper.java:55)
    at com.google.appengine.api.utils.FutureWrapper.get(FutureWrapper.java:92)
    at com.google.appengine.api.utils.FutureWrapper.get(FutureWrapper.java:88)
    at com.google.appengine.api.taskqueue.QueueApiHelper.getInternal(QueueApiHelper.java:72)
    at com.google.appengine.api.taskqueue.QueueImpl.add(QueueImpl.java:413)

and

Caused by: com.google.appengine.api.taskqueue.InvalidQueueModeException: Target queue mode does not support this operation : 
    at com.google.appengine.api.taskqueue.QueueApiHelper.translateError(QueueApiHelper.java:139)
    at com.google.appengine.api.taskqueue.QueueApiHelper.translateError(QueueApiHelper.java:153)
    at com.google.appengine.api.taskqueue.QueueApiHelper$1.convertException(QueueApiHelper.java:52)
    at com.google.appengine.api.utils.FutureWrapper.get(FutureWrapper.java:96)
    at com.google.appengine.api.utils.FutureWrapper.get(FutureWrapper.java:88)
    at com.google.appengine.api.taskqueue.QueueApiHelper.getInternal(QueueApiHelper.java:72)
    at com.google.appengine.api.taskqueue.QueueImpl.leaseTasks(QueueImpl.java:810)
Neil
  • 5,919
  • 15
  • 58
  • 85

2 Answers2

0

The reason you got this error and it magically disappeared... just before you got this error you must have recently changed "ranker-queue" from a push queue to a pull queue. It seems that App Engine needs time to propagate the change after you've uploaded your new queue.xml. Unfortunately I don't know how long this process takes.

Robert
  • 1,220
  • 16
  • 19
-1

In this code:

Queue q = QueueFactory.getQueue("ranker-queue");
TaskOptions taskOptions = TaskOptions.Builder.withMethod(TaskOptions.Method.PULL);
q.add(taskOptions);

... you are defining the task options, but you are not adding a task payload. Here's an example from the docs:

Queue q = QueueFactory.getQueue("pull-queue");
q.add(TaskOptions.Builder.withMethod(TaskOptions.Method.PULL)
                                 .payload("hello world"));
tx802
  • 3,524
  • 2
  • 17
  • 22
  • Payload is optional. What does it have to to with the error ? – Neil Oct 30 '14 at 13:31
  • Well, the first exception suggests something is `null` when you're trying to add the task so I'm trying to think what that may be. Is it always a particular iteration that fails and is there something different about those particular `TaskOptions`? – tx802 Oct 30 '14 at 16:41