Page MenuHomePhabricator

D16805.id40472.diff
No OneTemporary

D16805.id40472.diff

diff --git a/src/__phutil_library_map__.php b/src/__phutil_library_map__.php
--- a/src/__phutil_library_map__.php
+++ b/src/__phutil_library_map__.php
@@ -2145,6 +2145,7 @@
'PhabricatorCalendarImportOrphanLogType' => 'applications/calendar/importlog/PhabricatorCalendarImportOrphanLogType.php',
'PhabricatorCalendarImportPHIDType' => 'applications/calendar/phid/PhabricatorCalendarImportPHIDType.php',
'PhabricatorCalendarImportQuery' => 'applications/calendar/query/PhabricatorCalendarImportQuery.php',
+ 'PhabricatorCalendarImportQueueLogType' => 'applications/calendar/importlog/PhabricatorCalendarImportQueueLogType.php',
'PhabricatorCalendarImportReloadController' => 'applications/calendar/controller/PhabricatorCalendarImportReloadController.php',
'PhabricatorCalendarImportReloadTransaction' => 'applications/calendar/xaction/PhabricatorCalendarImportReloadTransaction.php',
'PhabricatorCalendarImportReloadWorker' => 'applications/calendar/worker/PhabricatorCalendarImportReloadWorker.php',
@@ -7012,6 +7013,7 @@
'PhabricatorCalendarImportOrphanLogType' => 'PhabricatorCalendarImportLogType',
'PhabricatorCalendarImportPHIDType' => 'PhabricatorPHIDType',
'PhabricatorCalendarImportQuery' => 'PhabricatorCursorPagedPolicyAwareQuery',
+ 'PhabricatorCalendarImportQueueLogType' => 'PhabricatorCalendarImportLogType',
'PhabricatorCalendarImportReloadController' => 'PhabricatorCalendarController',
'PhabricatorCalendarImportReloadTransaction' => 'PhabricatorCalendarImportTransactionType',
'PhabricatorCalendarImportReloadWorker' => 'PhabricatorWorker',
diff --git a/src/applications/calendar/editor/PhabricatorCalendarImportEditor.php b/src/applications/calendar/editor/PhabricatorCalendarImportEditor.php
--- a/src/applications/calendar/editor/PhabricatorCalendarImportEditor.php
+++ b/src/applications/calendar/editor/PhabricatorCalendarImportEditor.php
@@ -54,7 +54,7 @@
if ($should_reload) {
$import_engine = $object->getEngine();
- $import_engine->importEventsFromSource($actor, $object);
+ $import_engine->importEventsFromSource($actor, $object, true);
}
if ($should_trigger) {
@@ -107,6 +107,7 @@
'class' => 'PhabricatorCalendarImportReloadWorker',
'data' => array(
'importPHID' => $object->getPHID(),
+ 'via' => PhabricatorCalendarImportReloadWorker::VIA_TRIGGER,
),
'options' => array(
'objectPHID' => $object->getPHID(),
diff --git a/src/applications/calendar/import/PhabricatorCalendarICSFileImportEngine.php b/src/applications/calendar/import/PhabricatorCalendarICSFileImportEngine.php
--- a/src/applications/calendar/import/PhabricatorCalendarICSFileImportEngine.php
+++ b/src/applications/calendar/import/PhabricatorCalendarICSFileImportEngine.php
@@ -65,7 +65,8 @@
public function importEventsFromSource(
PhabricatorUser $viewer,
- PhabricatorCalendarImport $import) {
+ PhabricatorCalendarImport $import,
+ $should_queue) {
$phid_key = PhabricatorCalendarImportICSFileTransaction::PARAMKEY_FILE;
$file_phid = $import->getParameter($phid_key);
@@ -83,10 +84,13 @@
$data = $file->loadFileData();
+ if ($should_queue && $this->shouldQueueDataImport($data)) {
+ return $this->queueDataImport($import, $data);
+ }
+
return $this->importICSData($viewer, $import, $data);
}
-
public function canDisable(
PhabricatorUser $viewer,
PhabricatorCalendarImport $import) {
diff --git a/src/applications/calendar/import/PhabricatorCalendarICSURIImportEngine.php b/src/applications/calendar/import/PhabricatorCalendarICSURIImportEngine.php
--- a/src/applications/calendar/import/PhabricatorCalendarICSURIImportEngine.php
+++ b/src/applications/calendar/import/PhabricatorCalendarICSURIImportEngine.php
@@ -77,7 +77,8 @@
public function importEventsFromSource(
PhabricatorUser $viewer,
- PhabricatorCalendarImport $import) {
+ PhabricatorCalendarImport $import,
+ $should_queue) {
$uri_key = PhabricatorCalendarImportICSURITransaction::PARAMKEY_URI;
$uri = $import->getParameter($uri_key);
@@ -103,6 +104,10 @@
$data = $file->loadFileData();
+ if ($should_queue && $this->shouldQueueDataImport($data)) {
+ return $this->queueDataImport($import, $data);
+ }
+
return $this->importICSData($viewer, $import, $data);
}
diff --git a/src/applications/calendar/import/PhabricatorCalendarImportEngine.php b/src/applications/calendar/import/PhabricatorCalendarImportEngine.php
--- a/src/applications/calendar/import/PhabricatorCalendarImportEngine.php
+++ b/src/applications/calendar/import/PhabricatorCalendarImportEngine.php
@@ -3,11 +3,12 @@
abstract class PhabricatorCalendarImportEngine
extends Phobject {
+ const QUEUE_BYTE_LIMIT = 524288;
+
final public function getImportEngineType() {
return $this->getPhobjectClassConstant('ENGINETYPE', 64);
}
-
abstract public function getImportEngineName();
abstract public function getImportEngineTypeName();
abstract public function getImportEngineHint();
@@ -27,7 +28,8 @@
abstract public function importEventsFromSource(
PhabricatorUser $viewer,
- PhabricatorCalendarImport $import);
+ PhabricatorCalendarImport $import,
+ $should_queue);
abstract public function canDisable(
PhabricatorUser $viewer,
@@ -568,4 +570,35 @@
return (bool)$any_event;
}
+ final protected function shouldQueueDataImport($data) {
+ return (strlen($data) > self::QUEUE_BYTE_LIMIT);
+ }
+
+ final protected function queueDataImport(
+ PhabricatorCalendarImport $import,
+ $data) {
+
+ $import->newLogMessage(
+ PhabricatorCalendarImportQueueLogType::LOGTYPE,
+ array(
+ 'data.size' => strlen($data),
+ 'data.limit' => self::QUEUE_BYTE_LIMIT,
+ ));
+
+ // When we queue on this pathway, we're queueing in response to an explicit
+ // user action (like uploading a big `.ics` file), so we queue at normal
+ // priority instead of bulk/import priority.
+
+ PhabricatorWorker::scheduleTask(
+ 'PhabricatorCalendarImportReloadWorker',
+ array(
+ 'importPHID' => $import->getPHID(),
+ 'via' => PhabricatorCalendarImportReloadWorker::VIA_BACKGROUND,
+ ),
+ array(
+ 'objectPHID' => $import->getPHID(),
+ ));
+ }
+
+
}
diff --git a/src/applications/calendar/importlog/PhabricatorCalendarImportTriggerLogType.php b/src/applications/calendar/importlog/PhabricatorCalendarImportQueueLogType.php
copy from src/applications/calendar/importlog/PhabricatorCalendarImportTriggerLogType.php
copy to src/applications/calendar/importlog/PhabricatorCalendarImportQueueLogType.php
--- a/src/applications/calendar/importlog/PhabricatorCalendarImportTriggerLogType.php
+++ b/src/applications/calendar/importlog/PhabricatorCalendarImportQueueLogType.php
@@ -1,26 +1,34 @@
<?php
-final class PhabricatorCalendarImportTriggerLogType
+final class PhabricatorCalendarImportQueueLogType
extends PhabricatorCalendarImportLogType {
- const LOGTYPE = 'trigger';
+ const LOGTYPE = 'queue';
public function getDisplayType(
PhabricatorUser $viewer,
PhabricatorCalendarImportLog $log) {
- return pht('Import Triggered');
+ return pht('Queued');
}
public function getDisplayDescription(
PhabricatorUser $viewer,
PhabricatorCalendarImportLog $log) {
- return pht('Triggered a periodic update.');
+
+ $size = $log->getParameter('data.size');
+ $limit = $log->getParameter('data.limit');
+
+ return pht(
+ 'Queued for background import: data size (%s) exceeds limit for '.
+ 'immediate processing (%s).',
+ phutil_format_bytes($size),
+ phutil_format_bytes($limit));
}
public function getDisplayIcon(
PhabricatorUser $viewer,
PhabricatorCalendarImportLog $log) {
- return 'fa-clock-o';
+ return 'fa-sort-amount-desc';
}
public function getDisplayColor(
diff --git a/src/applications/calendar/importlog/PhabricatorCalendarImportTriggerLogType.php b/src/applications/calendar/importlog/PhabricatorCalendarImportTriggerLogType.php
--- a/src/applications/calendar/importlog/PhabricatorCalendarImportTriggerLogType.php
+++ b/src/applications/calendar/importlog/PhabricatorCalendarImportTriggerLogType.php
@@ -14,7 +14,15 @@
public function getDisplayDescription(
PhabricatorUser $viewer,
PhabricatorCalendarImportLog $log) {
- return pht('Triggered a periodic update.');
+
+ $via = $log->getParameter('via');
+ switch ($via) {
+ case PhabricatorCalendarImportReloadWorker::VIA_BACKGROUND:
+ return pht('Started background processing.');
+ case PhabricatorCalendarImportReloadWorker::VIA_TRIGGER:
+ default:
+ return pht('Triggered a periodic update.');
+ }
}
public function getDisplayIcon(
diff --git a/src/applications/calendar/worker/PhabricatorCalendarImportReloadWorker.php b/src/applications/calendar/worker/PhabricatorCalendarImportReloadWorker.php
--- a/src/applications/calendar/worker/PhabricatorCalendarImportReloadWorker.php
+++ b/src/applications/calendar/worker/PhabricatorCalendarImportReloadWorker.php
@@ -2,6 +2,9 @@
final class PhabricatorCalendarImportReloadWorker extends PhabricatorWorker {
+ const VIA_TRIGGER = 'trigger';
+ const VIA_BACKGROUND = 'background';
+
protected function doWork() {
$import = $this->loadImport();
$viewer = PhabricatorUser::getOmnipotentUser();
@@ -18,11 +21,14 @@
$import_engine = $import->getEngine();
+ $data = $this->getTaskData();
$import->newLogMessage(
PhabricatorCalendarImportTriggerLogType::LOGTYPE,
- array());
+ array(
+ 'via' => idx($data, 'via', self::VIA_TRIGGER),
+ ));
- $import_engine->importEventsFromSource($author, $import);
+ $import_engine->importEventsFromSource($author, $import, false);
}
private function loadImport() {

File Metadata

Mime Type
text/plain
Expires
Tue, Mar 25, 8:01 AM (1 w, 1 d ago)
Storage Engine
blob
Storage Format
Encrypted (AES-256-CBC)
Storage Handle
7387642
Default Alt Text
D16805.id40472.diff (9 KB)

Event Timeline