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

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

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

<?php 
//    CClusterDBNodeCheck::SlaveNodeConnection()
//    /bitrix/modules/cluster/classes/mysql/dbnode_check.php:338

    
function SlaveNodeConnection($db_host$db_name$db_login$db_password$master_host=false$master_port=false$master_id 1)
    {
        global 
$DB;

        
$node_id "v99";
        
CClusterDBNode::GetByID($node_id, array(
            
"ACTIVE" => "Y",
            
"STATUS" => "ONLINE",
            
"DB_HOST" => $db_host,
            
"DB_NAME" => $db_name,
            
"DB_LOGIN" => $db_login,
            
"DB_PASSWORD" => $db_password,
        ));

        
ob_start();
        
$nodeDB CDatabase::GetDBNodeConnection($node_idtrue);
        
$error ob_get_contents();
        
ob_end_clean();

        if(
is_object($nodeDB))
        {
            
//Test if this connection is not the same as master
            
$bSkipSecondTest false;
            
//1. Make sure that no replication is runnung
            
$rs $nodeDB->Query("show slave status");
            if(
$ar $rs->Fetch())
            {
                if(
strlen($ar["Slave_IO_State"]) > 0)
                {
                    if(
$ar["Master_Host"] != $master_host || $ar["Master_Port"] != $master_port)
                        return 
GetMessage("CLU_RUNNING_SLAVE");
                    else
                        
$bSkipSecondTest true//The replication is OK
                
}
            }
            
//2. Check if b_cluster_dbnode exists on node
            
if($nodeDB->TableExists("b_cluster_dbnode") && !$bSkipSecondTest)
            {
                
//2.1 Generate uniq id
                
$uniqid md5(mt_rand());
                
$DB->Query("UPDATE b_cluster_dbnode SET UNIQID='".$uniqid."' WHERE ID=1"false'', array("fixed_connection"=>true));
                
$rs $nodeDB->Query("SELECT UNIQID FROM b_cluster_dbnode WHERE ID=1"true);
                if(
$rs)
                {
                    if(
$ar $rs->Fetch())
                    {
                        if(
$ar["UNIQID"] == $uniqid)
                            return 
GetMessage("CLU_SAME_DATABASE");
                    }
                }
            }
            
//3. Check master connect
            
if($master_host !== false && $master_port !== false)
            {
                
$node_id "v98";
                if(
$master_id == 1)
                {
                    
CClusterDBNode::GetByID($node_id, array(
                        
"ACTIVE" => "Y",
                        
"STATUS" => "ONLINE",
                        
"DB_HOST" => $master_host.":".$master_port,
                        
"DB_NAME" => $DB->DBName,
                        
"DB_LOGIN" => $DB->DBLogin,
                        
"DB_PASSWORD" => $DB->DBPassword,
                    ));
                }
                else
                {
                    
$node_id $master_id;
                }

                
ob_start();
                
$masterDB CDatabase::GetDBNodeConnection($node_idtrue);
                
$error ob_get_contents();
                
ob_end_clean();
                if(
is_object($masterDB))
                {
                    
//3.1 Check if b_cluster_dbnode is the same as on master
                    
if(!$masterDB->TableExists("b_cluster_dbnode"))
                        return 
GetMessage("CLU_NOT_MASTER");

                    
//3.2 Generate uniq id
                    
$uniqid md5(mt_rand());
                    
$DB->Query("UPDATE b_cluster_dbnode SET UNIQID='".$uniqid."' WHERE ID=1"false'', array("fixed_connection"=>true));
                    
$rs $masterDB->Query("SELECT UNIQID FROM b_cluster_dbnode WHERE ID=1"true'', array("fixed_connection"=>true));
                    if(!
$rs)
                        return 
GetMessage("CLU_NOT_MASTER");

                    
$ar $rs->Fetch();
                    if(!
$ar)
                        return 
GetMessage("CLU_NOT_MASTER");

                    if(
$ar["UNIQID"] != $uniqid)
                        return 
GetMessage("CLU_NOT_MASTER");
                }
                else
                {
                    return 
GetMessage("CLU_MASTER_CONNECT_ERROR").$error;
                }
            }

            return 
$nodeDB;
        }
        else
        {
            return 
$error;
        }
    }

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

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

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

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

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

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

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

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