Server IP : 103.119.228.120 / Your IP : 3.15.203.246 Web Server : Apache System : Linux v8.techscape8.com 3.10.0-1160.119.1.el7.tuxcare.els2.x86_64 #1 SMP Mon Jul 15 12:09:18 UTC 2024 x86_64 User : nobody ( 99) PHP Version : 5.6.40 Disable Function : shell_exec,symlink,system,exec,proc_get_status,proc_nice,proc_terminate,define_syslog_variables,syslog,openlog,closelog,escapeshellcmd,passthru,ocinum cols,ini_alter,leak,listen,chgrp,apache_note,apache_setenv,debugger_on,debugger_off,ftp_exec,dl,dll,myshellexec,proc_open,socket_bind,proc_close,escapeshellarg,parse_ini_filepopen,fpassthru,exec,passthru,escapeshellarg,escapeshellcmd,proc_close,proc_open,ini_alter,popen,show_source,proc_nice,proc_terminate,proc_get_status,proc_close,pfsockopen,leak,apache_child_terminate,posix_kill,posix_mkfifo,posix_setpgid,posix_setsid,posix_setuid,dl,symlink,shell_exec,system,dl,passthru,escapeshellarg,escapeshellcmd,myshellexec,c99_buff_prepare,c99_sess_put,fpassthru,getdisfunc,fx29exec,fx29exec2,is_windows,disp_freespace,fx29sh_getupdate,fx29_buff_prepare,fx29_sess_put,fx29shexit,fx29fsearch,fx29ftpbrutecheck,fx29sh_tools,fx29sh_about,milw0rm,imagez,sh_name,myshellexec,checkproxyhost,dosyayicek,c99_buff_prepare,c99_sess_put,c99getsource,c99sh_getupdate,c99fsearch,c99shexit,view_perms,posix_getpwuid,posix_getgrgid,posix_kill,parse_perms,parsesort,view_perms_color,set_encoder_input,ls_setcheckboxall,ls_reverse_all,rsg_read,rsg_glob,selfURL,dispsecinfo,unix2DosTime,addFile,system,get_users,view_size,DirFiles,DirFilesWide,DirPrintHTMLHeaders,GetFilesTotal,GetTitles,GetTimeTotal,GetMatchesCount,GetFileMatchesCount,GetResultFiles,fs_copy_dir,fs_copy_obj,fs_move_dir,fs_move_obj,fs_rmdir,SearchText,getmicrotime MySQL : ON | cURL : ON | WGET : ON | Perl : ON | Python : ON | Sudo : ON | Pkexec : ON Directory : /usr/lib/mysqlsh/lib/python3.9/site-packages/oci/circuit_breaker/ |
Upload File : |
# coding: utf-8 # Copyright (c) 2016, 2024, Oracle and/or its affiliates. All rights reserved. # This software is dual-licensed to you under the Universal Permissive License (UPL) 1.0 as shown at https://oss.oracle.com/licenses/upl or Apache License 2.0 as shown at http://www.apache.org/licenses/LICENSE-2.0. You may choose either license. # Contains classes for defining and building circuit breaker strategies. import logging from oci.exceptions import TransientServiceError logger = logging.getLogger(__name__) DEFAULT_CIRCUIT_BREAKER_FAILURE_STATUSES_AND_CODES = { 409: ['IncorrectState'], 429: [], 500: [], 502: [], 503: [], 504: [] } class CircuitBreakerStrategy(object): """ A class which can build a circuit breaker strategy based on provided criteria. This builder is intended as a convenience, but callers are also able to bypass this and construct circuit breaker strategies directly. :param int failure_threshold: (optional) The failure_threshold parameter specifies the number of subsequent failures that causes to circuit breaker to move from CLOSED to OPEN state. This parameter takes an integer value with 10 being the default value. :param int recovery_timeout: (optional) The recovery timeout is the time in seconds that the circuit breaker waits till it moves from an OPEN to HALF-OPEN state. This parameter takes in an integer with 30 seconds being the default value. :param dict failure_statuses_and_codes: (optional) This parameter takes in a dict object of type (int, list(str)) which consist of the status code and the list of error codes the circuit breaker takes in account for failure threshold. If the list of error code is an empty list the circuit breaker would mark all errors as failure which has that specific status code regardless of the error code. defaults to: { 409: ['IncorrectState'], 429: [], 500: [], 502: [], 503: [], 504: [] } :param str name: (optional) The name of Circuit Breaker. Each circuit breaker instance is by internally made unique to a client. This makes sure that a circuit breaker of one client does not interfere with the operations of the other clients, even if they belong to the same service. In a rare case, when it is intended to share the same Circuit Breaker across multiple clients, a CircuitBreakerStrategy object can be made with the name value set as desired and passed to the clients meant to share the circuit breaker. In this scenario failures from any client add to the failure threshold of the circuit breaker shared by all clients. """ def __init__(self, **kwargs): """ Creates a new builder and initializes it based on any provided parameters. """ self.failure_threshold = kwargs.get('failure_threshold', 10) self.recovery_timeout = kwargs.get('recovery_timeout', 30) self.expected_exception = TransientServiceError self.failure_statuses_and_codes = kwargs.get('failure_statuses_and_codes', DEFAULT_CIRCUIT_BREAKER_FAILURE_STATUSES_AND_CODES) self.name = kwargs.get('name', None) def is_transient_error(self, status_code, service_code): logger.debug('Is transient error status code:{} error code:{}'.format(status_code, service_code)) if status_code in self.failure_statuses_and_codes: error_code = self.failure_statuses_and_codes[status_code] if not error_code: return True return service_code in error_code logger.debug( 'status code:{} not in failure_statuses_and_codes:{}'.format(status_code, self.failure_statuses_and_codes)) return False class NoCircuitBreakerStrategy(object): """ A class which represents that no circuit breaker strategy is to be used for the Client. """ def __init__(self): pass