Drupal version : 10.1.2
DB driver : pgsql
PHP version : 8.1.0
Drush version : 12.1.2.0
search_api version: '8.x-1.29'
drush sapi-i my_collection_name --limit 100
> [error] Drupal\Core\Entity\Query\QueryException: Entity queries must explicitly set whether the query should be access checked or not. See Drupal\Core\Entity\Query\QueryInterface::accessCheck(). in Drupal\Core\Entity\Query\Sql\Query->prepare() (line 162 of /Applications/MAMP/htdocs/core/lib/Drupal/Core/Entity/Query/Sql/Query.php).
> [error] Drupal\Core\Entity\EntityStorageException: Entity queries must explicitly set whether the query should be access checked or not. See Drupal\Core\Entity\Query\QueryInterface::accessCheck(). in Drupal\Core\Entity\Sql\SqlContentEntityStorage->delete() (line 763 of /Applications/MAMP/htdocs/core/lib/Drupal/Core/Entity/Sql/SqlContentEntityStorage.php).
> [notice] An error occurred during indexing on My Collection Name Index: Entity queries must explicitly set whether the query should be access checked or not. See Drupal\Core\Entity\Query\QueryInterface::accessCheck().
> [error] Message: Couldn't index items. Check the logs for details.
core/lib/Drupal/Core/Entity/Query/Sql/Query.php
use Drupal\Core\Logger\RfcLogLevel;
...
\Drupal::logger('custom')->log(RfcLogLevel::DEBUG, $this->sqlQuery->__toString());
// $e = new \Exception;
// \Drupal::logger('custom')->error($e->getTraceAsString());
if (is_null($this->accessCheck)) {
throw new QueryException('Entity queries must explicitly set whether the query should be access checked or not. See Drupal\Core\Entity\Query\QueryInterface::accessCheck().');
}
With this log added I see the following:
[Wed, 08/16/2023 - 09:45 EDT] [Debug] [custom] [client: 127.0.0.1, Anonymous] SELECT \nFROM\n@search_api_task "base_table"
[Wed, 08/16/2023 - 09:45 EDT] [Error] [search_api_task] [client: 127.0.0.1, Anonymous] Drupal\Core\Entity\Query\QueryException: Entity queries must explicitly set whether the query should be access checked or not. See Drupal\Core\Entity\Query\QueryInterface::accessCheck(). in Drupal\Core\Entity\Query\Sql\Query->prepare() (line 162 of /Applications/MAMP/htdocs/core/lib/Drupal/Core/Entity/Query/Sql/Query.php).
[Wed, 08/16/2023 - 09:45 EDT] [Error] [search_api] [client: 127.0.0.1, Anonymous] Drupal\Core\Entity\EntityStorageException: Entity queries must explicitly set whether the query should be access checked or not. See Drupal\Core\Entity\Query\QueryInterface::accessCheck(). in Drupal\Core\Entity\Sql\SqlContentEntityStorage->delete() (line 763 of /Applications/MAMP/htdocs/core/lib/Drupal/Core/Entity/Sql/SqlContentEntityStorage.php).
From what I understand we need to add accessChecks like the following:
diff --git a/modules/contrib/search_api/src/Task/TaskManager.php b/modules/contrib/search_api/src/Task/TaskManager.php
index 1b86a8581..a2d78a18d 100644
--- a/modules/contrib/search_api/src/Task/TaskManager.php
+++ b/modules/contrib/search_api/src/Task/TaskManager.php
@@ -151,7 +151,7 @@ public function addTask($type, ServerInterface $server = NULL, IndexInterface $i
'server_id' => $server_id,
'index_id' => $index_id,
'data' => $data,
- ])->execute();
+ ])->accessCheck(FALSE)->execute();
if ($result) {
return $this->getTaskStorage()->load(reset($result));
}
@@ -170,7 +170,7 @@ public function addTask($type, ServerInterface $server = NULL, IndexInterface $i
* {@inheritdoc}
*/
public function loadTasks(array $conditions = []) {
- $task_ids = $this->getTasksQuery($conditions)->execute();
+ $task_ids = $this->getTasksQuery($conditions)->accessCheck(FALSE)->execute();
if ($task_ids) {
return $this->getTaskStorage()->loadMultiple($task_ids);
}
@@ -195,6 +195,7 @@ public function deleteTasks(array $conditions = []) {
while (TRUE) {
$task_ids = $this->getTasksQuery($conditions)
->range(0, 100)
+ ->accessCheck(FALSE)
->execute();
if (!$task_ids) {
break;
@@ -228,7 +229,7 @@ public function executeSpecificTask(TaskInterface $task) {
* {@inheritdoc}
*/
public function executeSingleTask(array $conditions = []) {
- $task_id = $this->getTasksQuery($conditions)->range(0, 1)->execute();
+ $task_id = $this->getTasksQuery($conditions)->range(0, 1)->accessCheck(FALSE)->execute();
if ($task_id) {
$task_id = reset($task_id);
/** @var \Drupal\search_api\Task\TaskInterface $task */
But so far I have not been able to resolve this.