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

CClusterDBNodeCheck::SlaveNodeForMaster: метод Битрикс

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

<?php 
//    CClusterDBNodeCheck::SlaveNodeForMaster()
//    /bitrix/modules/cluster/classes/mysql/dbnode_check.php:616

    
function SlaveNodeForMaster($nodeDB)
    {
        global 
$DB;
        
$result = array();

        
$arMasters = array();

        
$cData = new CClusterDBNode;
        
$rsData $cData->GetList(
            array(
//Order
                
"ID" => "ASC",
            )
            ,array(
//Filter
                
"=ROLE_ID" => array("MAIN""MASTER"),
            )
        );
        while(
$arData $rsData->Fetch())
            
$arMasters[$arData["ID"]] = $arData;

        
$arMasters["v99"] = array();//virtual connection must be alredy setup

        
foreach($arMasters as $node_id => $arNode)
        {
            if(
$node_id == 1)
                
$nodeDB $DB;
            else
                
$nodeDB CDatabase::GetDBNodeConnection($node_idtrue);
            
$arMasters[$node_id]["DB"] = $nodeDB;
        }

        
$auto_increment_increment count($arMasters);
        
$bIncIsOK true;
        foreach(
$arMasters as $node_id => $arNode)
        {
            
$inc $this->GetServerVariable($arNode["DB"], "auto_increment_increment");
            if(
$inc != $auto_increment_increment)
            {
                
$bIncIsOK false;
                if(
$node_id == "v99")
                    
$result[$node_id."_auto_increment_increment"] = array(
                        
"IS_OK" => CClusterDBNodeCheck::ERROR,
                        
"MESSAGE" => GetMessage("CLU_AUTO_INCREMENT_INCREMENT_NODE_ERR_MSG", array("#value#" => $auto_increment_increment"#current#" => $inc)),
                        
"WIZ_REC" => GetMessage("CLU_AUTO_INCREMENT_INCREMENT_WIZREC", array("#value#" => $auto_increment_increment)),
                    );
                else
                    
$result[$node_id."_auto_increment_increment"] = array(
                        
"IS_OK" => CClusterDBNodeCheck::ERROR,
                        
"MESSAGE" => GetMessage("CLU_AUTO_INCREMENT_INCREMENT_ERR_MSG", array("#node_id#" => $node_id"#value#" => $auto_increment_increment"#current#" => $inc)),
                        
"WIZ_REC" => GetMessage("CLU_AUTO_INCREMENT_INCREMENT_WIZREC", array("#value#" => $auto_increment_increment)),
                    );
            }
        }
        if(
$bIncIsOK)
        {
            
$result["_auto_increment_increment"] = array(
                
"IS_OK" => CClusterDBNodeCheck::OK,
                
"MESSAGE" => GetMessage("CLU_AUTO_INCREMENT_INCREMENT_OK_MSG", array("#value#" => $auto_increment_increment)),
                
"WIZ_REC" => "",
            );
        }

        
$auto_increment_offset = array();
        
$bIncIsOK true;
        foreach(
$arMasters as $node_id => $arNode)
        {
            
$offset $this->GetServerVariable($arNode["DB"], "auto_increment_offset");
            
$mod $offset $auto_increment_increment;

            if(
array_key_exists($mod$auto_increment_offset))
            {
                
$bIncIsOK false;
                if(
$node_id == "v99")
                    
$result[$node_id."_auto_increment_offset"] = array(
                        
"IS_OK" => CClusterDBNodeCheck::ERROR,
                        
"MESSAGE" => GetMessage("CLU_AUTO_INCREMENT_OFFSET_NODE_ERR_MSG", array("#current#" => $offset)),
                        
"WIZ_REC" => GetMessage("CLU_AUTO_INCREMENT_OFFSET_WIZREC", array("#current#" => $offset)),
                    );
                else
                    
$result[$node_id."_auto_increment_offset"] = array(
                        
"IS_OK" => CClusterDBNodeCheck::ERROR,
                        
"MESSAGE" => GetMessage("CLU_AUTO_INCREMENT_OFFSET_ERR_MSG", array("#node_id#" => $node_id"#current#" => $offset)),
                        
"WIZ_REC" => GetMessage("CLU_AUTO_INCREMENT_OFFSET_WIZREC", array("#current#" => $offset)),
                    );
            }
            else
            {
                
$auto_increment_offset[$mod] = $node_id;
            }
        }
        if(
$bIncIsOK)
        {
            
$result["_auto_increment_offset"] = array(
                
"IS_OK" => CClusterDBNodeCheck::OK,
                
"MESSAGE" => GetMessage("CLU_AUTO_INCREMENT_OFFSET_OK_MSG", array("#value#" => $auto_increment_increment)),
                
"WIZ_REC" => "",
            );
        }

        
$bRelayIsOK true;
        foreach(
$arMasters as $node_id => $arNode)
        {
            
$relay_log $this->GetServerVariable($arNode["DB"], "relay_log");
            if(
strlen($relay_log) <= 0)
            {
                
$bIncIsOK false;
                
$result[$node_id."_relay_log"] = array(
                    
"IS_OK" => CClusterDBNodeCheck::ERROR,
                    
"MESSAGE" => GetMessage("CLU_RELAY_LOG_ERR_MSG", array("#node_id#" => $node_id"#relay-log#" => $relay_log)),
                    
"WIZ_REC" => GetMessage("CLU_RELAY_LOG_WIZREC"),
                );
            }
        }
        if(
$bRelayIsOK)
        {
            
$result["_relay_log"] = array(
                
"IS_OK" => CClusterDBNodeCheck::OK,
                
"MESSAGE" => GetMessage("CLU_RELAY_LOG_OK_MSG", array("#value#" => $auto_increment_increment)),
                
"WIZ_REC" => "",
            );
        }

        
$log_bin $this->GetServerVariable($nodeDB"log_bin");
        
$is_ok =  $log_bin === "ON";
        
$result["log_bin"] = array(
            
"IS_OK" => $is_okCClusterDBNodeCheck::OKCClusterDBNodeCheck::ERROR,
            
"MESSAGE" => GetMessage("CLU_LOG_BIN_NODE_MSG", array("#log-bin#" => $log_bin)),
            
"WIZ_REC" => GetMessage("CLU_LOG_BIN_WIZREC"),
        );

        
$skip_networking $this->GetServerVariable($nodeDB"skip_networking");
        
$is_ok =  $skip_networking === "OFF";
        
$result["skip_networking"] = array(
            
"IS_OK" => $is_okCClusterDBNodeCheck::OKCClusterDBNodeCheck::ERROR,
            
"MESSAGE" => GetMessage("CLU_SKIP_NETWORKING_NODE_MSG", array("#skip-networking#" => $skip_networking)),
            
"WIZ_REC" => GetMessage("CLU_SKIP_NETWORKING_WIZREC"),
        );

        
$innodb_flush_log_at_trx_commit $this->GetServerVariable($nodeDB"innodb_flush_log_at_trx_commit");
        
//if($innodb_flush_log_at_trx_commit !== '1')
        
{
            
$is_ok $innodb_flush_log_at_trx_commit === '1';
            
$result["innodb_flush_log_at_trx_commit"] = array(
                
"IS_OK" => $is_okCClusterDBNodeCheck::OKCClusterDBNodeCheck::WARNING,
                
"MESSAGE" => GetMessage("CLU_FLUSH_ON_COMMIT_MSG", array("#innodb_flush_log_at_trx_commit#" => $innodb_flush_log_at_trx_commit)),
                
"WIZ_REC" => "",
            );
        }

        
$sync_binlog $this->GetServerVariable($nodeDB"sync_binlog");
        
//if($sync_binlog !== '1')
        
{
            
$is_ok $sync_binlog === '1';
            
$result["sync_binlog"] = array(
                
"IS_OK" => $is_okCClusterDBNodeCheck::OKCClusterDBNodeCheck::WARNING,
                
"MESSAGE" => GetMessage("CLU_SYNC_BINLOG_MSG", array("#sync_binlog#" => $sync_binlog)),
                
"WIZ_REC" => "",
            );
        }

        
$DatabaseName $DB->DBName;
        
$is_ok false;
        
$rsBinLogs $nodeDB->Query("show master status"true'', array("fixed_connection"=>true));
        if(!
$rsBinLogs)
        {
            
$result["master_status"] = array(
                
"IS_OK" => CClusterDBNodeCheck::ERROR,
                
"MESSAGE" => GetMessage("CLU_MASTER_STATUS_MSG"),
                
"WIZ_REC" => GetMessage("CLU_MASTER_STATUS_WIZREC", array("#sql#" => "GRANT REPLICATION CLIENT on *.* to 'user name'@'%';")),
            );
        }
        else
        {
            if(
$ar $rsBinLogs->Fetch())
            {
                if(
$ar["Binlog_Do_DB"] === $DatabaseName)
                    
$is_ok true;
            }
            while(
$ar $rsBinLogs->Fetch())
                    
$is_ok false;

            
$result["binlog_do_db"] = array(
                
"IS_OK" => $is_okCClusterDBNodeCheck::OKCClusterDBNodeCheck::ERROR,
                
"MESSAGE" => GetMessage("CLU_SYNC_BINLOGDODB_MSG"),
                
"WIZ_REC" => GetMessage("CLU_SYNC_BINLOGDODB_WIZREC", array("#database#" => $DatabaseName)),
            );
        }

        return 
$result;
    }

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

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

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

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

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

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

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

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