Skip to content
Merged
Show file tree
Hide file tree
Changes from 2 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 4 additions & 2 deletions lib/BackgroundJob/CheckMatterbridges.php
Original file line number Diff line number Diff line change
Expand Up @@ -63,9 +63,11 @@ protected function run($argument): void {
if ($this->serverConfig->getAppValue('spreed', 'enable_matterbridge', '0') === '1') {
$this->bridgeManager->checkAllBridges();
$this->bridgeManager->killZombieBridges();
$this->logger->info('Checked if Matterbridge instances are running correctly.');
} else {
$this->bridgeManager->stopAllBridges();
if ($this->bridgeManager->stopAllBridges()) {
$this->logger->info('Stopped all Matterbridge instances as it is disabled');
}
}
$this->logger->info('Checked if Matterbridge instances are running correctly.');
}
}
41 changes: 24 additions & 17 deletions lib/MatterbridgeManager.php
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,7 @@
use OCA\Talk\Exceptions\RoomNotFoundException;
use OCA\Talk\Model\Attendee;
use OCA\Talk\Service\ParticipantService;
use OCP\DB\Exception;
use OCP\IConfig;
use OCP\IDBConnection;
use OCP\DB\QueryBuilder\IQueryBuilder;
Expand Down Expand Up @@ -204,7 +205,7 @@ public function checkAllBridges(): void {
->from('talk_bridges')
->where($query->expr()->eq('enabled', $query->createNamedParameter(1, IQueryBuilder::PARAM_INT)));

$result = $query->execute();
$result = $query->executeQuery();
while ($row = $result->fetch()) {
$bridge = [
'enabled' => (bool) $row['enabled'],
Expand Down Expand Up @@ -761,7 +762,7 @@ public function killZombieBridges(bool $killAll = false): void {
->where($query->expr()->eq('enabled', $query->createNamedParameter(1, IQueryBuilder::PARAM_INT)))
->andWhere($query->expr()->gt('pid', $query->createNamedParameter(0, IQueryBuilder::PARAM_INT)));

$result = $query->execute();
$result = $query->executeQuery();
while ($row = $result->fetch()) {
$expectedPidList[] = (int) $row['pid'];
}
Expand Down Expand Up @@ -843,19 +844,19 @@ private function runCommand(string $cmd): ?array {
/**
* Stop all bridges
*
* @return bool success
* @return bool If bridges where stopped
*/
public function stopAllBridges(): bool {
$query = $this->db->getQueryBuilder();

$query->update('talk_bridges')
->set('enabled', $query->createNamedParameter(0, IQueryBuilder::PARAM_INT))
->set('pid', $query->createNamedParameter(0, IQueryBuilder::PARAM_INT));
$query->execute();
$result = $query->executeStatement();

// finally kill all potential zombie matterbridge processes
$this->killZombieBridges(true);
return true;
return $result !== 0;
}

/**
Expand All @@ -874,7 +875,7 @@ private function getBridgeFromDb(Room $room): array {
$qb->expr()->eq('room_id', $qb->createNamedParameter($roomId, IQueryBuilder::PARAM_INT))
)
->setMaxResults(1);
$result = $qb->execute();
$result = $qb->executeQuery();
$enabled = false;
$pid = 0;
$jsonValues = '[]';
Expand Down Expand Up @@ -911,17 +912,23 @@ private function saveBridgeToDb(int $roomId, array $bridge): void {
'enabled' => $qb->createNamedParameter($intEnabled, IQueryBuilder::PARAM_INT),
'pid' => $qb->createNamedParameter($bridge['pid'], IQueryBuilder::PARAM_INT),
]);
$qb->execute();
} catch (UniqueConstraintViolationException $e) {
$qb = $this->db->getQueryBuilder();
$qb->update('talk_bridges');
$qb->set('json_values', $qb->createNamedParameter($jsonValues, IQueryBuilder::PARAM_STR));
$qb->set('enabled', $qb->createNamedParameter($intEnabled, IQueryBuilder::PARAM_INT));
$qb->set('pid', $qb->createNamedParameter($bridge['pid'], IQueryBuilder::PARAM_INT));
$qb->where(
$qb->expr()->eq('room_id', $qb->createNamedParameter($roomId, IQueryBuilder::PARAM_INT))
);
$qb->execute();
$qb->executeStatement();
} catch (Exception $e) {
if ($e->getReason() === Exception::REASON_UNIQUE_CONSTRAINT_VIOLATION) {
$qb = $this->db->getQueryBuilder();
$qb->update('talk_bridges');
$qb->set('json_values', $qb->createNamedParameter($jsonValues, IQueryBuilder::PARAM_STR));
$qb->set('enabled', $qb->createNamedParameter($intEnabled, IQueryBuilder::PARAM_INT));
$qb->set('pid', $qb->createNamedParameter($bridge['pid'], IQueryBuilder::PARAM_INT));
$qb->where(
$qb->expr()->eq('room_id', $qb->createNamedParameter($roomId, IQueryBuilder::PARAM_INT))
);
$qb->executeStatement();
} else {
$this->logger->error($e->getMessage(), [
'exception' => $e,
]);
}
}
}

Expand Down