Требуется разработчик! Поддержка серверов

CClusterSlave::GetRandomNode: метод Битрикс

Постоянная ссылка: http://bxapi.ru/src/?id=250979

<?php 
//    CClusterSlave::GetRandomNode()
//    /bitrix/modules/cluster/classes/mysql/slave.php:434

    
public static function GetRandomNode()
    {
        
$arSlaves = static::GetList();
        if(empty(
$arSlaves))
            return 
false;

        
$max_slave_delay COption::GetOptionInt("cluster""max_slave_delay"10);
        if(isset(
$_SESSION["BX_REDIRECT_TIME"]))
        {
            
$redirect_delay time() - $_SESSION["BX_REDIRECT_TIME"] + 1;
            if(
                
$redirect_delay 0
                
&& $redirect_delay $max_slave_delay
            
)
                
$max_slave_delay $redirect_delay;
        }

        
$total_weight 0;
        foreach(
$arSlaves as $i=>$slave)
        {
            
$bOtherGroup defined("BX_CLUSTER_GROUP") && ($slave["GROUP_ID"] != BX_CLUSTER_GROUP);
            if (
                
defined("BX_CLUSTER_SLAVE_USE_ANY_GROUP")
                && 
BX_CLUSTER_SLAVE_USE_ANY_GROUP === true
                
&& $slave["ROLE_ID"] == "SLAVE"
            
)
            {
                
$bOtherGroup false;
            }

            if(
$bOtherGroup)
            {
                unset(
$arSlaves[$i]);
            }
            elseif(
$slave["ROLE_ID"] == "SLAVE")
            {
                
$arSlaveStatus = static::GetStatus($slave["ID"], truefalsefalse);
                if(
                    
$arSlaveStatus['Seconds_Behind_Master'] > $max_slave_delay
                    
|| $arSlaveStatus['Last_SQL_Error'] != ''
                    
|| $arSlaveStatus['Last_IO_Error'] != ''
                    
|| $arSlaveStatus['Slave_SQL_Running'] === 'No'
                
)
                {
                    unset(
$arSlaves[$i]);
                }
                else
                {
                    
$total_weight += $slave["WEIGHT"];
                    
$arSlaves[$i]["PIE_WEIGHT"] = $total_weight;
                }
            }
            else
            {
                
$total_weight += $slave["WEIGHT"];
                
$arSlaves[$i]["PIE_WEIGHT"] = $total_weight;
            }
        }

        
$found false;
        
$rand = ($total_weight 0mt_rand(0$total_weight 1): 0);
        foreach(
$arSlaves as $slave)
        {
            if(
$rand $slave["PIE_WEIGHT"])
            {
                
$found $slave;
                break;
            }
        }

        if(!
$found || $found["ROLE_ID"] != "SLAVE")
        {
            return 
false//use main connection
        
}

        return 
$found;
    }

Блог разработчика

9 Августа 2016 ResizeImageGet и простой водяной знак налету

Сегодня поговорим о том как проще всего воткнуть водяной знак на картинки в Битрикс. Например, на все изображения каталога.

21 Июля 2016 Добавление вкладки в CRM коробки Битрикс24

В этом посте я покажу, как легко и просто добавить вкладку в сущность CRM. И не просто добавить, а вывести там свой контент.

21 Июля 2016 Как просто обращаться из коробки Битрикс24 на сайт на базе Битрикс

К примеру вам хочется внутренним скриптом дернуть с сайта-магазина информацию, которая там, в свою очередь, закрыта некоторыми правами. Например, админскими. Можно конечно мутить свой REST, или иной формат общения, но проще всего воспользоваться штатным инструментом:

Текст сообщения*
Загрузить изображение