public function setFreeFarmIndex()
{
// We ingore terminated and pending terminating instances to release their indexes.
$used = $this->db()->GetCol("\n SELECT {$this->columnFarmIndex}\n FROM {$this->table()}\n WHERE {$this->columnFarmId} = ? AND {$this->columnStatus} NOT IN (?, ?)\n ORDER BY {$this->columnFarmIndex}\n ", [$this->farmId, SERVER_STATUS::TERMINATED, SERVER_STATUS::PENDING_TERMINATE]);
if (empty($used)) {
$index = 1;
} else {
$minIndex = min($used);
$maxIndex = max($used);
$freeIndexes = array_diff(range($minIndex, $maxIndex), $used);
if (empty($freeIndexes)) {
$index = $maxIndex + 1;
} else {
$index = min($freeIndexes);
}
}
$this->farmIndex = $index;
}