@@ -149,7 +149,7 @@ public void handle(final HttpExchange exchange) throws IOException {
149149 exchange .sendResponseHeaders (RestStatus .OK .getStatus (), response .length );
150150 exchange .getResponseBody ().write (response );
151151
152- } else if (Regex . simpleMatch ( "PUT /" + path + "/*?uploadId=*&partNumber=*" , request )) {
152+ } else if (isUploadPartRequest ( request )) {
153153 final Map <String , String > params = new HashMap <>();
154154 RestUtils .decodeQueryString (request , request .indexOf ('?' ) + 1 , params );
155155
@@ -212,7 +212,7 @@ public void handle(final HttpExchange exchange) throws IOException {
212212 exchange .getResponseHeaders ().add ("ETag" , blob .v1 ());
213213 exchange .sendResponseHeaders (RestStatus .OK .getStatus (), -1 );
214214
215- } else if (Regex . simpleMatch ( "GET /" + bucket + "/?prefix=*" , request )) {
215+ } else if (isListObjectsRequest ( request )) {
216216 final Map <String , String > params = new HashMap <>();
217217 RestUtils .decodeQueryString (request , request .indexOf ('?' ) + 1 , params );
218218 if (params .get ("list-type" ) != null ) {
@@ -319,7 +319,7 @@ public void handle(final HttpExchange exchange) throws IOException {
319319 }
320320 exchange .sendResponseHeaders ((deletions > 0 ? RestStatus .OK : RestStatus .NO_CONTENT ).getStatus (), -1 );
321321
322- } else if (Regex . simpleMatch ( "POST /" + bucket + "/?delete" , request )) {
322+ } else if (isMultiObjectDeleteRequest ( request )) {
323323 final String requestBody = Streams .copyToString (new InputStreamReader (exchange .getRequestBody (), UTF_8 ));
324324
325325 final StringBuilder deletes = new StringBuilder ();
@@ -341,16 +341,36 @@ public void handle(final HttpExchange exchange) throws IOException {
341341 exchange .getResponseBody ().write (response );
342342
343343 } else {
344+ logger .error ("unknown request: {}" , request );
344345 exchange .sendResponseHeaders (RestStatus .INTERNAL_SERVER_ERROR .getStatus (), -1 );
345346 }
347+ } catch (Exception e ) {
348+ logger .error ("exception in request " + request , e );
349+ throw e ;
346350 } finally {
347351 exchange .close ();
348352 }
349353 }
350354
355+ private boolean isUploadPartRequest (String request ) {
356+ return Regex .simpleMatch ("PUT /" + path + "/*?uploadId=*&partNumber=*" , request )
357+ || Regex .simpleMatch ("PUT /" + path + "/*?partNumber=*&uploadId=*" , request );
358+ }
359+
351360 private boolean isListMultipartUploadsRequest (String request ) {
352361 return Regex .simpleMatch ("GET /" + bucket + "/?uploads&prefix=*" , request )
353- || Regex .simpleMatch ("GET /" + bucket + "/?uploads&max-uploads=*&prefix=*" , request );
362+ || Regex .simpleMatch ("GET /" + bucket + "/?uploads&max-uploads=*&prefix=*" , request )
363+ || Regex .simpleMatch ("GET /" + bucket + "?uploads&prefix=*" , request )
364+ || Regex .simpleMatch ("GET /" + bucket + "?uploads&max-uploads=*&prefix=*" , request );
365+ }
366+
367+ private boolean isListObjectsRequest (String request ) {
368+ return Regex .simpleMatch ("GET /" + bucket + "/?prefix=*" , request )
369+ || Regex .simpleMatch ("GET /" + bucket + "?list-type=2&*prefix=*" , request );
370+ }
371+
372+ private boolean isMultiObjectDeleteRequest (String request ) {
373+ return request .equals ("POST /" + bucket + "/?delete" ) || request .equals ("POST /" + bucket + "?delete" );
354374 }
355375
356376 public Map <String , BytesReference > blobs () {
0 commit comments