dweiss commented on issue #13820:
URL: https://github.com/apache/lucene/issues/13820#issuecomment-2375077701

   I linked the suggested minimal PR above. I am not convinced the test in 
TestFilterIndexInput.testOverrides is correct. The problem with delegation 
pattern ("FilterXyz" classes) is that all public/API methods should be 
delegated, otherwise there is a risk of using the default, possibly slower 
implementation. java.io.FilterInputStream is an example of when it can go wrong:
   ```
   public int read(byte[] b) throws IOException {
     return read(b, 0, b.length);
   }
   public int read(byte[] b, int off, int len) throws IOException {
     return in.read(b, off, len);
   }
   ```
   This is correct implementation. But when your "in" (delegate) has an 
accelerated implementation of ```read(byte[])``` and, for some obscure reason, 
a slow implementation of ```read(byte[], int, int)```, wrapping it with a 
filter will cause all ```read(byte[])``` to be slow. 
   
   There are many, many examples like this. In DataInput's case, the 
FilterIndexInput should also override all public methods and call the provided 
delegate. An example of when it can go wrong: an IndexInput with a 
super-accelerated ```readGroupVInt(long[] dst, int offset)``` (the protected 
method called by ```readGroupVInts```), wrapped in a FilterIndexInput is no 
longer reaching the accelerated code because any class subclassing 
FilterIndexInput is effectively using the default implementation from 
DataInput...
   
   I think I'll leave correcting this until later - keeping this PR simple. It 
is a real issue and a potential problem though.


-- 
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.

To unsubscribe, e-mail: issues-unsubscr...@lucene.apache.org

For queries about this service, please contact Infrastructure at:
us...@infra.apache.org


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

Reply via email to