Kohei Sugihara created HDDS-12123:
-------------------------------------

             Summary: PutObject using the latest awscli later than or equal to 
1.37.0 is fail
                 Key: HDDS-12123
                 URL: https://issues.apache.org/jira/browse/HDDS-12123
             Project: Apache Ozone
          Issue Type: Bug
          Components: s3gateway
    Affects Versions: 1.4.1, 1.4.0
         Environment: * awscli >= 1.37.0 (aws-cli/1.37.3 Python/3.10.12 
Linux/5.15.146.1-microsoft-standard-WSL2 botocore/1.36.3)
 * Ozone 1.4.1 [compatible 
version|https://github.com/pfnet/ozone/commits/pfn-ozone-1.4.990101/] (based on 
ozone-1.4.1 tag + our internal patches)
 * Secure mode is enabled w/ Kerberos
 * w/o Ranger
 * ozone.http.policy = HTTP_AND_HTTPS
            Reporter: Kohei Sugihara


S3G returns internal server errors (500) when we upload some files using awscli 
>= 1.37.0 (not AWS CLI version 2), the latest version of AWS CLI released in 
December 2024.
{code:java}
2025-01-22 14:31:36,809 [qtp1327871893-36] WARN 
org.eclipse.jetty.server.HttpChannel: /ksugihara/bin-1m.dat
javax.servlet.ServletException: javax.servlet.ServletException: 
java.lang.IllegalStateException: Expected: 0 and actual 1048622 write sizes do 
not match
        at 
org.eclipse.jetty.server.handler.HandlerCollection.handle(HandlerCollection.java:162)
        at 
org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:127)
        at org.eclipse.jetty.server.Server.handle(Server.java:516)
        at 
org.eclipse.jetty.server.HttpChannel.lambda$handle$1(HttpChannel.java:487)
        at org.eclipse.jetty.server.HttpChannel.dispatch(HttpChannel.java:732)
        at org.eclipse.jetty.server.HttpChannel.handle(HttpChannel.java:479)
        at 
org.eclipse.jetty.server.HttpConnection.onFillable(HttpConnection.java:277)
        at 
org.eclipse.jetty.io.AbstractConnection$ReadCallback.succeeded(AbstractConnection.java:311)
        at org.eclipse.jetty.io.FillInterest.fillable(FillInterest.java:105)
        at 
org.eclipse.jetty.io.ssl.SslConnection$DecryptedEndPoint.onFillable(SslConnection.java:555)
        at 
org.eclipse.jetty.io.ssl.SslConnection.onFillable(SslConnection.java:410)
        at 
org.eclipse.jetty.io.ssl.SslConnection$2.succeeded(SslConnection.java:164)
        at org.eclipse.jetty.io.FillInterest.fillable(FillInterest.java:105)
        at org.eclipse.jetty.io.ChannelEndPoint$1.run(ChannelEndPoint.java:104)
        at 
org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.runTask(EatWhatYouKill.java:338)
        at 
org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.doProduce(EatWhatYouKill.java:315)
        at 
org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.tryProduce(EatWhatYouKill.java:173)
        at 
org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.produce(EatWhatYouKill.java:137)
        at 
org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:883)
        at 
org.eclipse.jetty.util.thread.QueuedThreadPool$Runner.run(QueuedThreadPool.java:1034)
        at java.base/java.lang.Thread.run(Thread.java:829) {code}
This happened on the S3 endpoint enabled with the secure mode. To explore this 
issue in more detail, we changed the ozone. HTTP.policy to HTTP_AND_HTTPS to 
check both endpoints. Curiously, this error does not occur on the HTTP endpoint 
but only on the HTTPS endpoint (port: 9879) in S3G. OM and SCM did not output 
failure logs in their stdout or audit logs, so I think this issue is closed 
within the S3G component.
{code:java}
% aws --version
aws-cli/1.37.3 Python/3.10.12 Linux/5.15.146.1-microsoft-standard-WSL2 
botocore/1.36.3

% aws s3 --endpoint http://<s3g-endpoint>:9878/ cp ./bin-1m.dat 
s3://ksugihara/bin-1m.dat
upload: ./bin-1m.dat to s3://ksugihara/bin-1m.dat

% aws s3 --endpoint https://<s3g-endpoint>:9879/ cp ./bin-1m.dat 
s3://ksugihara/bin-1m.dat
upload failed: ./bin-1m.dat to s3://ksugihara/bin-1m.dat An error occurred 
(500) when calling the PutObject operation (reached max retries: 4): Internal 
Server Error {code}
Once downgrading the awscli package earlier than 1.37.0, the bug seems not 
occurs.
{code:java}
% pip3 install --upgrade 'awscli<1.37.0'
% aws --version
aws-cli/1.36.40 Python/3.10.12 Linux/5.15.146.1-microsoft-standard-WSL2 
botocore/1.35.99

% aws s3 --endpoint http://<s3g-endpoint>:9878/ cp ./bin-1m.dat 
s3://ksugihara/bin-1m.dat
upload: ./bin-1m.dat to s3://ksugihara/bin-1m.dat

% aws s3 --endpoint https://<s3g-endpoint>:9879/ cp ./bin-1m.dat 
s3://ksugihara/bin-1m.dat
upload: ./bin-1m.dat to s3://ksugihara/bin-1m.dat{code}
Our current workarounds for using S3 endpoint:
 * Use earlier than awscli 1.37.0: pip3 install 'awscli<1.37.0'
 * Use the HTTP endpoint instead of the HTTPS endpoint

I don't make sure this information is relavant to identify the root cause, 
awscli v1.37.x is also failure for file uploading to Apache Ozone 1.4{+}.0{+} 
cluster, but in this case S3G returns a conflict error when file is being 
overwritten. New upload that does not overwrite existing files seems to success.
{code:java}
% aws --version
aws-cli/1.37.3 Python/3.10.12 Linux/5.15.146.1-microsoft-standard-WSL2 
botocore/1.36.3
% aws s3 --endpoint https://<s3g-endpoint>.t.nf10.net/ cp 
s3://ksugihara/bin-1m.dat .
# overwrite upload
% aws s3 --endpoint https://<s3g-endpoint>.t.nf10.net/ cp ./bin-1m.dat 
s3://ksugihara/bin-1m.dat
upload failed: ./bin-1m.dat to s3://ksugihara/bin-1m.dat An error occurred 
(Conflict) when calling the PutObject operation: Cannot overwrite file with 
directory
# new upload
% aws s3 --endpoint https://<s3g-endpoint>:9879/ --profile pfs0 cp ./bin-1m.dat 
s3://ksugihara/bin-1m.dat.1
upload: ./bin-1m.dat to s3://ksugihara/bin-1m.dat.1{code}



--
This message was sent by Atlassian Jira
(v8.20.10#820010)

---------------------------------------------------------------------
To unsubscribe, e-mail: issues-unsubscr...@ozone.apache.org
For additional commands, e-mail: issues-h...@ozone.apache.org

Reply via email to