Merge pull request #7461 from annando/handling-db-error
Moved several database stuff out of the transaction to avoid error 1205
This commit is contained in:
commit
b95d4f41b9
1 changed files with 35 additions and 29 deletions
|
@ -883,6 +883,8 @@ class Item extends BaseObject
|
||||||
// When there is no content for the "old" item table, this will count the fetched items
|
// When there is no content for the "old" item table, this will count the fetched items
|
||||||
$rows = DBA::affectedRows();
|
$rows = DBA::affectedRows();
|
||||||
|
|
||||||
|
$notify_items = [];
|
||||||
|
|
||||||
while ($item = DBA::fetch($items)) {
|
while ($item = DBA::fetch($items)) {
|
||||||
if (!empty($item['iaid']) || (!empty($content_fields['verb']) && (self::activityToIndex($content_fields['verb']) >= 0))) {
|
if (!empty($item['iaid']) || (!empty($content_fields['verb']) && (self::activityToIndex($content_fields['verb']) >= 0))) {
|
||||||
self::updateActivity($content_fields, ['uri-id' => $item['uri-id']]);
|
self::updateActivity($content_fields, ['uri-id' => $item['uri-id']]);
|
||||||
|
@ -954,12 +956,17 @@ class Item extends BaseObject
|
||||||
// We only need to notfiy others when it is an original entry from us.
|
// We only need to notfiy others when it is an original entry from us.
|
||||||
// Only call the notifier when the item has some content relevant change.
|
// Only call the notifier when the item has some content relevant change.
|
||||||
if ($item['origin'] && in_array('edited', array_keys($fields))) {
|
if ($item['origin'] && in_array('edited', array_keys($fields))) {
|
||||||
Worker::add(PRIORITY_HIGH, "Notifier", Delivery::POST, $item['id']);
|
$notify_items[] = $item['id'];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
DBA::close($items);
|
DBA::close($items);
|
||||||
DBA::commit();
|
DBA::commit();
|
||||||
|
|
||||||
|
foreach ($notify_items as $notify_item) {
|
||||||
|
Worker::add(PRIORITY_HIGH, "Notifier", Delivery::POST, $notify_item);
|
||||||
|
}
|
||||||
|
|
||||||
return $rows;
|
return $rows;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1791,6 +1798,8 @@ class Item extends BaseObject
|
||||||
unset($item['owner-name']);
|
unset($item['owner-name']);
|
||||||
unset($item['owner-avatar']);
|
unset($item['owner-avatar']);
|
||||||
|
|
||||||
|
$like_no_comment = Config::get('system', 'like_no_comment');
|
||||||
|
|
||||||
DBA::transaction();
|
DBA::transaction();
|
||||||
$ret = DBA::insert('item', $item);
|
$ret = DBA::insert('item', $item);
|
||||||
|
|
||||||
|
@ -1833,7 +1842,6 @@ class Item extends BaseObject
|
||||||
}
|
}
|
||||||
|
|
||||||
Logger::log('created item '.$current_post);
|
Logger::log('created item '.$current_post);
|
||||||
self::updateContact($item);
|
|
||||||
|
|
||||||
if (!$parent_id || ($item['parent-uri'] === $item['uri'])) {
|
if (!$parent_id || ($item['parent-uri'] === $item['uri'])) {
|
||||||
$parent_id = $current_post;
|
$parent_id = $current_post;
|
||||||
|
@ -1847,7 +1855,7 @@ class Item extends BaseObject
|
||||||
|
|
||||||
// update the commented timestamp on the parent
|
// update the commented timestamp on the parent
|
||||||
// Only update "commented" if it is really a comment
|
// Only update "commented" if it is really a comment
|
||||||
if (($item['gravity'] != GRAVITY_ACTIVITY) || !Config::get("system", "like_no_comment")) {
|
if (($item['gravity'] != GRAVITY_ACTIVITY) || !$like_no_comment) {
|
||||||
DBA::update('item', ['commented' => DateTimeFormat::utcNow(), 'changed' => DateTimeFormat::utcNow()], ['id' => $parent_id]);
|
DBA::update('item', ['commented' => DateTimeFormat::utcNow(), 'changed' => DateTimeFormat::utcNow()], ['id' => $parent_id]);
|
||||||
} else {
|
} else {
|
||||||
DBA::update('item', ['changed' => DateTimeFormat::utcNow()], ['id' => $parent_id]);
|
DBA::update('item', ['changed' => DateTimeFormat::utcNow()], ['id' => $parent_id]);
|
||||||
|
@ -1876,32 +1884,6 @@ class Item extends BaseObject
|
||||||
DBA::insert('diaspora-interaction', ['uri-id' => $item['uri-id'], 'interaction' => $diaspora_signed_text], true);
|
DBA::insert('diaspora-interaction', ['uri-id' => $item['uri-id'], 'interaction' => $diaspora_signed_text], true);
|
||||||
}
|
}
|
||||||
|
|
||||||
// In that function we check if this is a forum post. Additionally we delete the item under certain circumstances
|
|
||||||
if (self::tagDeliver($item['uid'], $current_post)) {
|
|
||||||
// Get the user information for the logging
|
|
||||||
$user = User::getById($uid);
|
|
||||||
|
|
||||||
Logger::notice('Item had been deleted', ['id' => $current_post, 'user' => $uid, 'account-type' => $user['account-type']]);
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
* current post can be deleted if is for a community page and no mention are
|
|
||||||
* in it.
|
|
||||||
*/
|
|
||||||
if (!$dontcache) {
|
|
||||||
$posted_item = self::selectFirst(self::ITEM_FIELDLIST, ['id' => $current_post]);
|
|
||||||
if (DBA::isResult($posted_item)) {
|
|
||||||
if ($notify) {
|
|
||||||
Hook::callAll('post_local_end', $posted_item);
|
|
||||||
} else {
|
|
||||||
Hook::callAll('post_remote_end', $posted_item);
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
Logger::log('new item not found in DB, id ' . $current_post);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if ($item['parent-uri'] === $item['uri']) {
|
if ($item['parent-uri'] === $item['uri']) {
|
||||||
self::addThread($current_post);
|
self::addThread($current_post);
|
||||||
} else {
|
} else {
|
||||||
|
@ -1926,12 +1908,36 @@ class Item extends BaseObject
|
||||||
Term::insertFromFileFieldByItemId($current_post, $files);
|
Term::insertFromFileFieldByItemId($current_post, $files);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// In that function we check if this is a forum post. Additionally we delete the item under certain circumstances
|
||||||
|
if (self::tagDeliver($item['uid'], $current_post)) {
|
||||||
|
// Get the user information for the logging
|
||||||
|
$user = User::getById($uid);
|
||||||
|
|
||||||
|
Logger::notice('Item had been deleted', ['id' => $current_post, 'user' => $uid, 'account-type' => $user['account-type']]);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!$dontcache) {
|
||||||
|
$posted_item = self::selectFirst(self::ITEM_FIELDLIST, ['id' => $current_post]);
|
||||||
|
if (DBA::isResult($posted_item)) {
|
||||||
|
if ($notify) {
|
||||||
|
Hook::callAll('post_local_end', $posted_item);
|
||||||
|
} else {
|
||||||
|
Hook::callAll('post_remote_end', $posted_item);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
Logger::log('new item not found in DB, id ' . $current_post);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if ($item['parent-uri'] === $item['uri']) {
|
if ($item['parent-uri'] === $item['uri']) {
|
||||||
self::addShadow($current_post);
|
self::addShadow($current_post);
|
||||||
} else {
|
} else {
|
||||||
self::addShadowPost($current_post);
|
self::addShadowPost($current_post);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
self::updateContact($item);
|
||||||
|
|
||||||
check_user_notification($current_post);
|
check_user_notification($current_post);
|
||||||
|
|
||||||
if ($notify || ($item['visible'] && ((!empty($parent) && $parent['origin']) || $item['origin']))) {
|
if ($notify || ($item['visible'] && ((!empty($parent) && $parent['origin']) || $item['origin']))) {
|
||||||
|
|
Loading…
Reference in a new issue