diff --git a/src/Model/Item.php b/src/Model/Item.php index 55e824895..12046d4ff 100644 --- a/src/Model/Item.php +++ b/src/Model/Item.php @@ -754,7 +754,7 @@ class Item extends BaseObject // But for the next time we will still have old content in the item table. $item_fields = ['deleted' => true, 'edited' => DateTimeFormat::utcNow(), 'changed' => DateTimeFormat::utcNow(), 'body' => '', 'title' => '', 'content-warning' => '', 'rendered-hash' => '', 'rendered-html' => '', - 'object' => '', 'target' => '']; + 'object' => '', 'target' => '', 'tag' => '', 'postopts' => '', 'attach' => '', 'file' => '']; dba::update('item', $item_fields, ['id' => $item['id']]); Term::insertFromTagFieldByItemId($item['id']); @@ -1337,8 +1337,10 @@ class Item extends BaseObject logger('' . print_r($item,true), LOGGER_DATA); - dba::transaction(); + // We are doing this outside of the transaction to avoid timing problems self::insertContent($item); + + dba::transaction(); $ret = dba::insert('item', $item); // When the item was successfully stored we fetch the ID of the item. @@ -1520,7 +1522,8 @@ class Item extends BaseObject } else { // By setting the ICID value through the worker we should avoid timing problems. // When the locking works, this shouldn't be needed. But better be prepared. - Worker::add(PRIORITY_HIGH, 'SetItemContentID', $uri); + Worker::add(PRIORITY_HIGH, 'SetItemContentID', $item['uri']); + logger('Could not insert content for URI ' . $item['uri'] . ' - trying asynchronously'); } if ($locked) { Lock::remove('item_insert_content'); @@ -1537,7 +1540,7 @@ class Item extends BaseObject $item_content = dba::selectFirst('item-content', ['id'], ['uri' => $uri]); if (DBM::is_result($item_content)) { dba::update('item', ['icid' => $item_content['id']], ['icid' => 0, 'uri' => $uri]); - logger('Asynchronously fetched content id for URI ' . $uri . ' (' . $item_content['id'] . ')'); + logger('Asynchronously set item content id for URI ' . $uri . ' (' . $item_content['id'] . ') - Affected: '. (int)dba::affected_rows()); } else { logger('No item-content found for URI ' . $uri); }