In Magento 2.1.9 this works for me.
etc/frontend/events.xml
<event name="checkout_onepage_controller_success_action">
<observer instance="Vendor\Module\Observer\Checkout\OnepageControllerSuccessAction" name="vendor_module_observer_checkout_onepagecontrollersuccessaction_checkout_onepage_controller_success_action"/>
</event>
Observer\Checkout\OnepageControllerSuccessAction.php
<?php
namespace Vendor\Module\Observer\Checkout;
class OnepageControllerSuccessAction implements \Magento\Framework\Event\ObserverInterface
{
public function __construct(\Magento\Sales\Model\Order $order)
{
$this->order = $order;
}
/**
* Execute observer
*
* @param \Magento\Framework\Event\Observer $observer
* @return void
*/
public function execute(\Magento\Framework\Event\Observer $observer)
{
$orderids = $observer->getEvent()->getOrderIds();
try {
foreach ($orderids as $orderid) {
$order = $this->order->load($orderid);
$order->hold();
$order->save();
}
} catch (\Magento\Framework\Exception\LocalizedException $e) {
// Error logic
} catch (\Exception $e) {
// Generic error logic
}
}
}
I didn't add the logic why the order is placed on hold, but this will get you close to how to modify each of the current orders and saving them.