merlimat opened a new pull request #7102: URL: https://github.com/apache/pulsar/pull/7102
### Motivation There seems to be a race when mocking the compactor in MockedPulsarServiceBaseTest which yields errors like: ``` Caused by: java.lang.ClassCastException: org.apache.pulsar.compaction.TwoPhaseCompactor$MockitoMock$1141048386 cannot be cast to org.apache.pulsar.broker.service.BrokerService ``` This obviously causes tests to fail in strange and surprising ways. I've not been able to reproduce, but the issue seems to be with how we mock the compactor. We don't want to have to construct the whole compactor as we just want to spy on it, so we get the current compactor, wrap it in spy and tell the PulsarService instance to return it when getCompactor is called. However, we are doing this after we have already called PulsarService#start(). So there are threads already using the mock structures. The mock structures themselves are not thread safe, so modifying them while they are in use, is not a good idea. The fix is to finish mocking before invoking #start(). Do do this, I've broken out the Compactor construction method in PulsarService, so that alone can be mocked to wrap the object in a spy. ---------------------------------------------------------------- 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]
