urlyy opened a new issue, #2771:
URL: https://github.com/apache/fory/issues/2771

   ### Search before asking
   
   - [x] I had searched in the [issues](https://github.com/apache/fory/issues) 
and found no similar issues.
   
   
   ### Version
   
   Latest
   
   ### Component(s)
   
   Java
   
   ### Minimal reproduce step
   
   ```java
   @Test
   public void testWriteMetaStringBytes() {
       MetaStringResolver writeResolver = new MetaStringResolver();
       MetaStringResolver readResolver1 = new MetaStringResolver();
       MetaStringResolver readResolver2 = new MetaStringResolver();
       String str = "hello";
       MetaString metaString = new MetaStringEncoder('.', '_').encode(str);
       // first write
       MemoryBuffer buffer = MemoryUtils.buffer(32);
       writeResolver.writeMetaStringBytes(
               buffer, writeResolver.getOrCreateMetaStringBytes(metaString));
       String metaString1 = readResolver1.readMetaString(buffer);
       assertEquals(metaString1.hashCode(), str.hashCode());
       assertEquals(metaString1.getBytes(), str.getBytes());
       // second write to same peer, no error
       MemoryBuffer buffer2 = MemoryUtils.buffer(32);
       writeResolver.writeMetaStringBytes(
               buffer2, writeResolver.getOrCreateMetaStringBytes(metaString));
       String metaString2 = readResolver1.readMetaString(buffer2);
       assertEquals(metaString2.hashCode(), str.hashCode());
       assertEquals(metaString2.getBytes(), str.getBytes());
       // write to another peer
       MemoryBuffer buffer3 = MemoryUtils.buffer(32);
       writeResolver.writeMetaStringBytes(
               buffer3, writeResolver.getOrCreateMetaStringBytes(metaString));
       String metaString3 = readResolver2.readMetaString(buffer3);// !! here 
occurs error
       assertEquals(metaString3.hashCode(), str.hashCode());
       assertEquals(metaString3.getBytes(), str.getBytes());
   }
   ```
   
   ### What did you expect to see?
   
   pass test
   
   ### What did you see instead?
   
   ```
   
   java.lang.NullPointerException
        at 
org.apache.fory.collection.ForyObjectMap.place(ForyObjectMap.java:139)
        at org.apache.fory.collection.ForyObjectMap.get(ForyObjectMap.java:198)
        at 
org.apache.fory.resolver.MetaStringResolver.readMetaString(MetaStringResolver.java:131)
        at 
org.apache.fory.resolver.MetaStringResolverTest.testWriteMetaString2(MetaStringResolverTest.java:78)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at 
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
        at 
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.lang.reflect.Method.invoke(Method.java:498)
        at 
org.testng.internal.invokers.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:136)
        at 
org.testng.internal.invokers.TestInvoker.invokeMethod(TestInvoker.java:658)
        at 
org.testng.internal.invokers.TestInvoker.invokeTestMethod(TestInvoker.java:219)
        at 
org.testng.internal.invokers.MethodRunner.runInSequence(MethodRunner.java:50)
        at 
org.testng.internal.invokers.TestInvoker$MethodInvocationAgent.invoke(TestInvoker.java:923)
        at 
org.testng.internal.invokers.TestInvoker.invokeTestMethods(TestInvoker.java:192)
        at 
org.testng.internal.invokers.TestMethodWorker.invokeTestMethods(TestMethodWorker.java:146)
        at 
org.testng.internal.invokers.TestMethodWorker.run(TestMethodWorker.java:128)
        at java.util.ArrayList.forEach(ArrayList.java:1259)
        at org.testng.TestRunner.privateRun(TestRunner.java:808)
        at org.testng.TestRunner.run(TestRunner.java:603)
        at org.testng.SuiteRunner.runTest(SuiteRunner.java:429)
        at org.testng.SuiteRunner.runSequentially(SuiteRunner.java:423)
        at org.testng.SuiteRunner.privateRun(SuiteRunner.java:383)
        at org.testng.SuiteRunner.run(SuiteRunner.java:326)
        at org.testng.SuiteRunnerWorker.runSuite(SuiteRunnerWorker.java:52)
        at org.testng.SuiteRunnerWorker.run(SuiteRunnerWorker.java:95)
        at org.testng.TestNG.runSuitesSequentially(TestNG.java:1249)
        at org.testng.TestNG.runSuitesLocally(TestNG.java:1169)
        at org.testng.TestNG.runSuites(TestNG.java:1092)
        at org.testng.TestNG.run(TestNG.java:1060)
        at com.intellij.rt.testng.IDEARemoteTestNG.run(IDEARemoteTestNG.java:65)
        at 
com.intellij.rt.testng.RemoteTestNGStarter.main(RemoteTestNGStarter.java:105)
   
   ```
   
   ### Anything Else?
   
   Reason: When writing a same metastring, first write will write its data 
bytes, and cache locally. And receiver will read data bytes and cache it 
locally.  When second write to same receiver, will only write a cache_index. 
The receiver will get the cache locally using the cache_index. But third time 
if write to another receiver , the new receiver will only get a cache_index but 
have no cache locally, and will get NPE.
   
   ### Are you willing to submit a PR?
   
   - [ ] I'm willing to submit a PR!


-- 
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: [email protected]

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


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to