From 59f8cb16e59808c32c0f48d7b93e128ef9f6ee17 Mon Sep 17 00:00:00 2001
From: Michael <heluecht@pirati.ca>
Date: Fri, 29 Jun 2018 11:10:36 +0000
Subject: [PATCH] Add item content before the transaction

---
 src/Model/Item.php | 11 +++++++----
 1 file changed, 7 insertions(+), 4 deletions(-)

diff --git a/src/Model/Item.php b/src/Model/Item.php
index 55e824895c..12046d4ffc 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);
 		}
-- 
2.39.5