public function setFreeFarmRoleIndex()
{
// We ingore terminated and pending terminating instances to release their indexes.
$used = $this->db()->GetCol("\n SELECT {$this->columnIndex}\n FROM {$this->table()}\n WHERE {$this->columnFarmRoleId} = ? AND {$this->columnStatus} NOT IN (?,?)\n ORDER BY {$this->columnIndex}\n ", [$this->farmRoleId, 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->index = $index;
}