Hi,

We have some custom ROXY extensions to support cluster management activities 
like replicate databases and remove database replications.
I have these below two methods to support replication removal and this works 
fine when both the clusters are available.

def remove_database_replication(database = @properties["ml.content-db"])
        get_admin_password
        get_dr_admin_password

        begin
                params = {:database_name => database}
                url = 
%Q{http://#{@properties["ml.dr-host"]}:#{@properties["ml.app-port"]}/admin/delete-database-master.xqy}
                url = url_with_parameters(url,params)
                logger.info "Removing replication for #{database} from 
#{@properties["ml.server"]} to #{@properties["ml.dr-host"]} - replica side "
                go 
url,'get',{},nil,nil,false,@properties["ml.dr-admin-user"],@properties["ml.dr-admin-password"]
        rescue => error
                logger.info "#{error.class} and #{error.message}"
                logger.info "An error occurred when trying to remove database 
replication for database #{database} from replica side. Investigate the logs 
and admin screens. You may have to perform this step manually. If you are in a 
DR situation this may relate to host unavailability"
        end

        sleep 30

        begin
                params = {:database_name => database}
                url = 
%Q{http://#{@properties["ml.server"]}:#{@properties["ml.app-port"]}/admin/delete-database-replication.xqy}
                url = url_with_parameters(url,params)
                logger.info "Removing replication for #{database} from 
#{@properties["ml.server"]} to #{@properties["ml.dr-host"]} - master side"
                r = 
go(url,'get',{},nil,nil,false,@properties["ml.user"],@properties["ml.password"])
        rescue RuntimeError
                logger.info "An error occurred when trying to remove database 
replication for database #{database} from master side. Investigate the logs and 
admin screens. You may have to perform this step manually. If you are in a DR 
situation this may relate to host unavailability"
        end
  end


def remove_database_replications
        dbnames = @properties["ml.replicate-dbs"].split(",")
        #Need to replicate the content database
        remove_database_replication  @properties["ml.content-db"]
        #Need to replicate all other databases that are configured in 
properties file
        (dbnames).each do |dbname|
             remove_database_replication dbname
        end
  end


But I when shutdown the primary and try to execute these, I expect that DR side 
invocation will be successful and Primary side call fails as it is not 
reachable. That seems to work fine for 1st database and for the subsequent 
databases, the http call is not at all happening though I see a log message 
before the go method invocation.

Enter password for admin on primaryhostname : (Production)
Enter password for admin on drhostname : (DR)
Removing replication for engineering-lab-content from primaryhostname to 
drhostname - replica side
Request made to  http://drhostname:8041  using user_name admin
Removing replication for engineering-lab-content from primaryhostname to 
drhostname - master side
Request made to  http://primaryhostname:8041  using user_name admin
Roxy::Http : request failure count: 1, exception: #<Errno::ECONNREFUSED: 
Connection refused - connect(2)>
Roxy::Http : request failure count: 2, exception: #<Errno::ECONNREFUSED: 
Connection refused - connect(2)>
Roxy::Http : request failure count: 3, exception: #<Errno::ECONNREFUSED: 
Connection refused - connect(2)>
Roxy::Http : request failure count: 4, exception: #<Errno::ECONNREFUSED: 
Connection refused - connect(2)>
Roxy::Http : re-raising same error: primaryhostname temporarily unavailable: 
(Connection refused - connect(2)) -- error count: 4, error age: 0
An error occurred when trying to remove database replication for database 
engineering-lab-content from master side. Investigate the logs and admin 
screens. You may have to perform this step manually. If you are in a DR 
situation this may relate to host unavailability
Removing replication for Security from primaryhostname to drhostname - replica 
side
Request made to  http://drhostname:8041  using user_name admin
Roxy::Http : re-raising same error: primaryhostname temporarily unavailable: 
(Connection refused - connect(2)) -- error count: 4, error age: 0
RuntimeError and primaryhostname temporarily unavailable: (Connection refused - 
connect(2))
An error occurred when trying to remove database replication for database 
Security from replica side. Investigate the logs and admin screens. You may 
have to perform this step manually. If you are in a DR situation this may 
relate to host unavailability
Removing replication for Security from primaryhostname to drhostname - master 
side
Request made to  http://primaryhostname:8041  using user_name admin
Roxy::Http : request failure count: 5, exception: #<Errno::ECONNREFUSED: 
Connection refused - connect(2)>
Roxy::Http : re-raising same error: primaryhostname temporarily unavailable: 
(Connection refused - connect(2)) -- error count: 5, error age: 0
An error occurred when trying to remove database replication for database 
Security from master side. Investigate the logs and admin screens. You may have 
to perform this step manually. If you are in a DR situation this may relate to 
host unavailability
Removing replication for Triggers from primaryhostname to drhostname - replica 
side
Request made to  http://drhostname:8041  using user_name admin
Roxy::Http : re-raising same error: primaryhostname temporarily unavailable: 
(Connection refused - connect(2)) -- error count: 5, error age: 0
RuntimeError and primaryhostname temporarily unavailable: (Connection refused - 
connect(2))
An error occurred when trying to remove database replication for database 
Triggers from replica side. Investigate the logs and admin screens. You may 
have to perform this step manually. If you are in a DR situation this may 
relate to host unavailability
Removing replication for Triggers from primaryhostname to drhostname - master 
side
Request made to  http://primaryhostname:8041  using user_name admin
Roxy::Http : request failure count: 6, exception: #<Errno::ECONNREFUSED: 
Connection refused - connect(2)>
Roxy::Http : re-raising same error: primaryhostname temporarily unavailable: 
(Connection refused - connect(2)) -- error count: 6, error age: 0
An error occurred when trying to remove database replication for database 
Triggers from master side. Investigate the logs and admin screens. You may have 
to perform this step manually. If you are in a DR situation this may relate to 
host unavailability


Green color highlights first call for content database on the replica side that 
is successful. Yellow color highlights the call that are expected to be 
successful for DR but never seen reaching the DR MarkLogic server side and ROXY 
just spits the old error message of connection error for master host.

I am new to ruby and appreciate your help in solving this. I have looked into 
RoxyHttp.rb file request method a little and It looks like it is coded that 
way. I would like to get around this and treat new requests differently.
Thanks.




Regards,
Sudheer Yalaverthi
NoSQL Engineer



---
This communication may contain confidential and/or privileged information. If 
you are not the intended recipient (or have received this communication in 
error) please notify the sender immediately and destroy this communication. Any 
unauthorized copying, disclosure or distribution of the material in this 
communication is strictly forbidden.

Deutsche Bank does not render legal or tax advice, and the information 
contained in this communication should not be regarded as such.
_______________________________________________
General mailing list
[email protected]
Manage your subscription at: 
http://developer.marklogic.com/mailman/listinfo/general

Reply via email to