Uploaded image for project: 'Apache Cassandra'
  1. Apache Cassandra
  2. CASSANDRA-19446

Test Failure: dtest-offheap.snapshot_test.TestSnapshot.test_basic_snapshot_and_restore

Agile BoardAttach filesAttach ScreenshotBulk Copy AttachmentsBulk Move AttachmentsVotersWatch issueWatchersCreate sub-taskConvert to sub-taskMoveLinkCloneLabelsUpdate Comment AuthorReplace String in CommentUpdate Comment VisibilityDelete Comments
    XMLWordPrintableJSON

Details

    • Bug
    • Status: Resolved
    • Low
    • Resolution: Fixed
    • NA
    • CI
    • None

    Description

      Seen here:
      https://ci-cassandra.apache.org/job/Cassandra-5.0/173/testReport/junit/dtest-offheap.snapshot_test/TestSnapshot/test_basic_snapshot_and_restore/

       

      Error Message
      
      failed on teardown with "TypeError: not all arguments converted during string formatting"
      Stacktrace
      
      request = <SubRequest 'fixture_dtest_setup' for <Function test_basic_snapshot_and_restore>>
      dtest_config = <dtest_config.DTestConfig object at 0x7f27a8053520>
      fixture_dtest_setup_overrides = <dtest_setup_overrides.DTestSetupOverrides object at 0x7f27a43a6550>
      fixture_logging_setup = None, fixture_dtest_cluster_name = 'test'
      fixture_dtest_create_cluster_func = <function DTestSetup.create_ccm_cluster at 0x7f27a81a2790>
      
          @pytest.fixture(scope='function', autouse=False)
          def fixture_dtest_setup(request,
                                  dtest_config,
                                  fixture_dtest_setup_overrides,
                                  fixture_logging_setup,
                                  fixture_dtest_cluster_name,
                                  fixture_dtest_create_cluster_func):
              if running_in_docker():
                  cleanup_docker_environment_before_test_execution()
          
              # do all of our setup operations to get the enviornment ready for the actual test
              # to run (e.g. bring up a cluster with the necessary config, populate variables, etc)
              initial_environment = copy.deepcopy(os.environ)
              dtest_setup = DTestSetup(dtest_config=dtest_config,
                                       setup_overrides=fixture_dtest_setup_overrides,
                                       cluster_name=fixture_dtest_cluster_name)
              dtest_setup.initialize_cluster(fixture_dtest_create_cluster_func)
          
              if not dtest_config.disable_active_log_watching:
                  dtest_setup.begin_active_log_watch()
          
              # at this point we're done with our setup operations in this fixture
              # yield to allow the actual test to run
              yield dtest_setup
          
              # phew! we're back after executing the test, now we need to do
              # all of our teardown and cleanup operations
          
              reset_environment_vars(initial_environment)
              dtest_setup.jvm_args = []
          
              for con in dtest_setup.connections:
                  con.cluster.shutdown()
              dtest_setup.connections = []
          
              failed = False
              try:
                  if not dtest_setup.allow_log_errors:
                      errors = check_logs_for_errors(dtest_setup)
                      if len(errors) > 0:
                          failed = True
                          pytest.fail('Unexpected error found in node logs (see stdout for full details). Errors: [{errors}]'
                                      .format(errors=str.join(", ", errors)), pytrace=False)
              finally:
                  try:
                      # save the logs for inspection
                      if failed or not dtest_config.delete_logs:
      >                   copy_logs(request, dtest_setup.cluster)
      
      conftest.py:371: 
      _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
      conftest.py:291: in copy_logs
          shutil.copyfile(file, os.path.join(logdir, target_name))
      _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
      
      src = '/home/cassandra/cassandra/build/run-python-dtest.PRhg7u/dtest-pqe8_k2h/test/node1/logs/gc.log'
      dst = 'logs/1708958581606_test_basic_snapshot_and_restore/node1_gc.log'
      
          def copyfile(src, dst, *, follow_symlinks=True):
              """Copy data from src to dst in the most efficient way possible.
          
              If follow_symlinks is not set and src is a symbolic link, a new
              symlink will be created instead of copying the file it points to.
          
              """
              sys.audit("shutil.copyfile", src, dst)
          
              if _samefile(src, dst):
                  raise SameFileError("{!r} and {!r} are the same file".format(src, dst))
          
              file_size = 0
              for i, fn in enumerate([src, dst]):
                  try:
                      st = _stat(fn)
                  except OSError:
                      # File most likely does not exist
                      pass
                  else:
                      # XXX What about other special files? (sockets, devices...)
                      if stat.S_ISFIFO(st.st_mode):
                          fn = fn.path if isinstance(fn, os.DirEntry) else fn
                          raise SpecialFileError("`%s` is a named pipe" % fn)
                      if _WINDOWS and i == 0:
                          file_size = st.st_size
          
              if not follow_symlinks and _islink(src):
                  os.symlink(os.readlink(src), dst)
              else:
      >           with open(src, 'rb') as fsrc, open(dst, 'wb') as fdst:
      E           FileNotFoundError: [Errno 2] No such file or directory: '/home/cassandra/cassandra/build/run-python-dtest.PRhg7u/dtest-pqe8_k2h/test/node1/logs/gc.log'
      
      /usr/lib/python3.8/shutil.py:264: FileNotFoundError
      
      During handling of the above exception, another exception occurred:
      
      request = <SubRequest 'fixture_dtest_setup' for <Function test_basic_snapshot_and_restore>>
      dtest_config = <dtest_config.DTestConfig object at 0x7f27a8053520>
      fixture_dtest_setup_overrides = <dtest_setup_overrides.DTestSetupOverrides object at 0x7f27a43a6550>
      fixture_logging_setup = None, fixture_dtest_cluster_name = 'test'
      fixture_dtest_create_cluster_func = <function DTestSetup.create_ccm_cluster at 0x7f27a81a2790>
      
          @pytest.fixture(scope='function', autouse=False)
          def fixture_dtest_setup(request,
                                  dtest_config,
                                  fixture_dtest_setup_overrides,
                                  fixture_logging_setup,
                                  fixture_dtest_cluster_name,
                                  fixture_dtest_create_cluster_func):
              if running_in_docker():
                  cleanup_docker_environment_before_test_execution()
          
              # do all of our setup operations to get the enviornment ready for the actual test
              # to run (e.g. bring up a cluster with the necessary config, populate variables, etc)
              initial_environment = copy.deepcopy(os.environ)
              dtest_setup = DTestSetup(dtest_config=dtest_config,
                                       setup_overrides=fixture_dtest_setup_overrides,
                                       cluster_name=fixture_dtest_cluster_name)
              dtest_setup.initialize_cluster(fixture_dtest_create_cluster_func)
          
              if not dtest_config.disable_active_log_watching:
                  dtest_setup.begin_active_log_watch()
          
              # at this point we're done with our setup operations in this fixture
              # yield to allow the actual test to run
              yield dtest_setup
          
              # phew! we're back after executing the test, now we need to do
              # all of our teardown and cleanup operations
          
              reset_environment_vars(initial_environment)
              dtest_setup.jvm_args = []
          
              for con in dtest_setup.connections:
                  con.cluster.shutdown()
              dtest_setup.connections = []
          
              failed = False
              try:
                  if not dtest_setup.allow_log_errors:
                      errors = check_logs_for_errors(dtest_setup)
                      if len(errors) > 0:
                          failed = True
                          pytest.fail('Unexpected error found in node logs (see stdout for full details). Errors: [{errors}]'
                                      .format(errors=str.join(", ", errors)), pytrace=False)
              finally:
                  try:
                      # save the logs for inspection
                      if failed or not dtest_config.delete_logs:
                          copy_logs(request, dtest_setup.cluster)
                  except Exception as e:
      >               logger.error("Error saving log:", str(e))
      
      conftest.py:373: 
      _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
      /usr/lib/python3.8/logging/__init__.py:1475: in error
          self._log(ERROR, msg, args, **kwargs)
      /usr/lib/python3.8/logging/__init__.py:1589: in _log
          self.handle(record)
      /usr/lib/python3.8/logging/__init__.py:1599: in handle
          self.callHandlers(record)
      /usr/lib/python3.8/logging/__init__.py:1661: in callHandlers
          hdlr.handle(record)
      /usr/lib/python3.8/logging/__init__.py:954: in handle
          self.emit(record)
      /usr/lib/python3.8/logging/__init__.py:1093: in emit
          self.handleError(record)
      /usr/lib/python3.8/logging/__init__.py:1085: in emit
          msg = self.format(record)
      /usr/lib/python3.8/logging/__init__.py:929: in format
          return fmt.format(record)
      /usr/lib/python3.8/logging/__init__.py:668: in format
          record.message = record.getMessage()
      _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
      
      self = <LogRecord: conftest, 40, /home/cassandra/cassandra-dtest/conftest.py, 373, "Error saving log:">
      
          def getMessage(self):
              """
              Return the message for this LogRecord.
          
              Return the message for this LogRecord after merging any user-supplied
              arguments with the message.
              """
              msg = str(self.msg)
              if self.args:
      >           msg = msg % self.args
      E           TypeError: not all arguments converted during string formatting
      
      /usr/lib/python3.8/logging/__init__.py:373: TypeError
      

      Attachments

        Activity

          This comment will be Viewable by All Users Viewable by All Users
          Cancel

          People

            e.dimitrova Ekaterina Dimitrova Assign to me
            e.dimitrova Ekaterina Dimitrova
            Ekaterina Dimitrova
            Brandon Williams
            Votes:
            0 Vote for this issue
            Watchers:
            1 Start watching this issue

            Dates

              Created:
              Updated:
              Resolved:

              Slack

                Issue deployment