Uploaded image for project: 'Apache Ozone'
  1. Apache Ozone
  2. HDDS-4097 S3/Ozone Filesystem inter-op
  3. HDDS-4209

S3A Filesystem does not work with Ozone S3 in file system compat mode

    XMLWordPrintableJSON

Details

    • Sub-task
    • Status: Resolved
    • Blocker
    • Resolution: Won't Fix
    • None
    • None
    • None

    Description

      When ozone.om.enable.filesystem.paths is enabled

       

      hdfs dfs -mkdir -p s3a://b12345/d11/d12 -> Success

      hdfs dfs -put /tmp/file1 s3a://b12345/d11/d12/file1 -> fails with below error

       

      2020-09-04 03:53:51,377 ERROR org.apache.hadoop.ozone.om.request.key.OMKeyCreateRequest: Key creation failed. Volume:s3v, Bucket:b1234, Keyd11/d12/file1._COPYING_. Exception:{}
      NOT_A_FILE org.apache.hadoop.ozone.om.exceptions.OMException: Can not create file: cp/k1._COPYING_ as there is already file in the given path
       at org.apache.hadoop.ozone.om.request.key.OMKeyCreateRequest.validateAndUpdateCache(OMKeyCreateRequest.java:256)
       at org.apache.hadoop.ozone.protocolPB.OzoneManagerRequestHandler.handleWriteRequest(OzoneManagerRequestHandler.java:227)
       at org.apache.hadoop.ozone.om.ratis.OzoneManagerStateMachine.runCommand(OzoneManagerStateMachine.java:428)
       at org.apache.hadoop.ozone.om.ratis.OzoneManagerStateMachine.lambda$applyTransaction$1(OzoneManagerStateMachine.java:246)
       at java.util.concurrent.CompletableFuture$AsyncSupply.run(CompletableFuture.java:1604)
       at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
       at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
       at java.lang.Thread.run(Thread.java:748)

      Reason for this
      S3A filesystem when create directory creates an empty file

      Now entries in Ozone KeyTable after create directory
      d11/
      d11/d12

      Because of this in OMFileRequest.VerifyInFilesPath fails with FILE_EXISTS_IN_GIVEN_PATH because d11/d12 is considered as file not a directory. (As in ozone currently, directories end with trailing "/")

      So, when d11/d12/file is created, we check parent exists, now d11/d12 is considered as file and fails with NOT_A_FILE

      When disabled it works fine, as when disabled during key create we do not check any filesystem semantics and also does not create intermediate directories.

      [root@bvoz-1 ~]# hdfs dfs -mkdir -p s3a://b12345/d11/d12
      [root@bvoz-1 ~]# hdfs dfs -put /etc/hadoop/conf/ozone-site.xml s3a://b12345/d11/d12/k1
      [root@bvoz-1 ~]# hdfs dfs -ls s3a://b12345/d11/d12
      Found 1 items
      -rw-rw-rw-   1 systest systest       2373 2020-09-04 04:45 s3a://b12345/d11/d12/k1
      

       

      Attachments

        Issue Links

          Activity

            People

              bharat Bharat Viswanadham
              bharat Bharat Viswanadham
              Votes:
              0 Vote for this issue
              Watchers:
              5 Start watching this issue

              Dates

                Created:
                Updated:
                Resolved: