code: def should_retry_on_error(self, error):
          
  
          if self.is_streaming_request:
              # not retry for streaming request
              return False
  
          retry_flag = self.headers.get('re', retry.DEFAULT)
  
          if retry_flag == retry.NEVER:
              return False
  
          if isinstance(error, StreamClosedError):
              return True
  
          if error.code in [ErrorCode.bad_request, ErrorCode.cancelled,
                            ErrorCode.unhealthy]:
              return False
          elif error.code in [ErrorCode.busy, ErrorCode.declined]:
              return True
          elif error.code is ErrorCode.timeout:
              return retry_flag is not retry.CONNECTION_ERROR
          elif error.code in [ErrorCode.network_error,
                              ErrorCode.fatal,
                              ErrorCode.unexpected]:
              return retry_flag is not retry.TIMEOUT
          else:
              return False
docs: rules for retry
  
          :param error:
              ProtocolException that returns from Server