lukecwik commented on a change in pull request #12050:
URL: https://github.com/apache/beam/pull/12050#discussion_r445696251



##########
File path: 
sdks/java/core/src/main/java/org/apache/beam/sdk/io/DefaultFilenamePolicy.java
##########
@@ -182,19 +184,26 @@ public void encode(Params value, OutputStream outStream) 
throws IOException {
       if (value == null) {
         throw new CoderException("cannot encode a null value");
       }
-      stringCoder.encode(value.baseFilename.get().toString(), outStream);
-      stringCoder.encode(value.shardTemplate, outStream);
-      stringCoder.encode(value.suffix, outStream);
+      STRING_CODER.encode(value.baseFilename.get().toString(), outStream);
+      STRING_CODER.encode(value.shardTemplate, outStream);
+      STRING_CODER.encode(value.suffix, outStream);
+      BOOLEAN_CODER.encode(value.baseFilename.get().isDirectory(), outStream);
     }
 
     @Override
     public Params decode(InputStream inStream) throws IOException {
-      ResourceId prefix =
-          
FileBasedSink.convertToFileResourceIfPossible(stringCoder.decode(inStream));
-      String shardTemplate = stringCoder.decode(inStream);
-      String suffix = stringCoder.decode(inStream);
+      String prefix = STRING_CODER.decode(inStream);
+      String shardTemplate = STRING_CODER.decode(inStream);
+      String suffix = STRING_CODER.decode(inStream);
+      ResourceId baseFilename;
+      if (inStream.available() > 0) {
+        baseFilename = FileSystems.matchNewResource(prefix, 
BOOLEAN_CODER.decode(inStream));
+      } else {
+        // fallback for ensure backward compatibility
+        baseFilename = FileBasedSink.convertToFileResourceIfPossible(prefix);

Review comment:
       I think that there are a couple of options here:
   1) Take the breaking change to the coder because it is a fix, make sure it 
is documented in the release notes
   2) Try to fix the underlying filesystem to do a better job of file/dir 
matching
   3) Deprecate this filename policy, create a new one (DefaultFilenamePolicy2) 
and tell people to use it in new code.
   
   I'm for 1 but would ask for consensus on the mailing list.
   
   Also, any `/` hacking will make things worse since different file systems 
use different path separator characters (e.g linux vs windows)




----------------------------------------------------------------
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

For queries about this service, please contact Infrastructure at:
[email protected]


Reply via email to