cptjackwu opened a new issue, #1191:
URL: https://github.com/apache/plc4x/issues/1191

   ### What happened?
   
      private void processWorklog() {
           while (runningRequests.size() < getNumberOfConcurrentRequests() && 
!workLog.isEmpty()) {
               RequestTransaction next = workLog.remove();
               this.runningRequests.add(next);
               Future<?> completionFuture = executor.submit(next.operation);
               next.setCompletionFuture(completionFuture);
           }
       }
   
   
   RequestTransactionManager   workLog.remove()  
   
   When I write a connection to multiple points at the same time, each point is 
written once a second, there is a concurrency problem, this time the content in 
the worklog is empty, and the error is reported when remove
   
   
   ===============================================================
   
    static Map<String, Boolean> map = new HashMap<>();
   
       static ScheduledExecutorService executorService = 
Executors.newScheduledThreadPool(Runtime.getRuntime().availableProcessors() * 
2);
   
       public static void main(String[] args) throws Exception{
   
   
   
               PlcClient plcClient = new S7Client("s7://**.**.*.***");
               plcClient.connect();
   
   
           Map m1 = new HashMap();
           m1.put("stationCode","OP010");
           m1.put("address","%DB1150:0.0:BOOL");
   
   
           Map m2 = new HashMap();
           m2.put("stationCode","OP020");
           m2.put("address","%DB1100:0.0:BOOL");
   
   
           Map m3 = new HashMap();
           m3.put("stationCode","OP030");
           m3.put("address","%DB1200:0.0:BOOL");
   
           List<Map>  mapList = 
Stream.of(m1,m2,m3).collect(Collectors.toList());
   
           mapList.forEach(v->
               executorService.scheduleAtFixedRate(()-> {
                   boolean value = map.get(v.get("stationCode")) == null ? true 
: map.get(v.get("stationCode"));
                   plcClient.writeBOOL(new NodeId((String) v.get("address"), 
value));
                   map.put((String) v.get("stationCode"), !value);
               },0, 1000, TimeUnit.MILLISECONDS)
           );
   
   
   
   
   
   
====================================================================================
   The error content is as follows:
   
   2023-11-03 00:20:25.432  WARN 7 --- [ nioEventLoopGroup-9-1] 
io.netty.channel.DefaultChannelPipeline  : An exceptionCaught() event was 
fired, and it reached at the tail of the pipeline. It usually means the last 
handler in the pipeline did not handle the exception.
   
   io.netty.handler.codec.DecoderException: java.util.NoSuchElementException
        at 
io.netty.handler.codec.MessageToMessageDecoder.channelRead(MessageToMessageDecoder.java:98)
        at 
io.netty.handler.codec.MessageToMessageCodec.channelRead(MessageToMessageCodec.java:111)
        at 
io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:379)
        at 
io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:365)
        at 
io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:357)
        at 
io.netty.handler.codec.ByteToMessageDecoder.fireChannelRead(ByteToMessageDecoder.java:324)
        at 
io.netty.handler.codec.ByteToMessageDecoder.channelRead(ByteToMessageDecoder.java:296)
        at 
io.netty.handler.codec.ByteToMessageCodec.channelRead(ByteToMessageCodec.java:103)
        at 
io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:379)
        at 
io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:365)
        at 
io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:357)
        at 
io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1410)
        at 
io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:379)
        at 
io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:365)
        at 
io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:919)
        at 
io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166)
        at 
io.netty.channel.nio.NioEventLoop.processSelectedKey(NioEventLoop.java:719)
        at 
io.netty.channel.nio.NioEventLoop.processSelectedKeysOptimized(NioEventLoop.java:655)
        at 
io.netty.channel.nio.NioEventLoop.processSelectedKeys(NioEventLoop.java:581)
        at io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:493)
        at 
io.netty.util.concurrent.SingleThreadEventExecutor$4.run(SingleThreadEventExecutor.java:989)
        at 
io.netty.util.internal.ThreadExecutorMap$2.run(ThreadExecutorMap.java:74)
        at 
io.netty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:30)
        at java.lang.Thread.run(Thread.java:748)
   Caused by: java.util.NoSuchElementException: null
        at java.util.AbstractQueue.remove(AbstractQueue.java:117)
        at 
org.apache.plc4x.java.spi.transaction.RequestTransactionManager.processWorklog(RequestTransactionManager.java:104)
        at 
org.apache.plc4x.java.spi.transaction.RequestTransactionManager.endRequest(RequestTransactionManager.java:133)
        at 
org.apache.plc4x.java.spi.transaction.RequestTransactionManager.access$200(RequestTransactionManager.java:46)
        at 
org.apache.plc4x.java.spi.transaction.RequestTransactionManager$RequestTransaction.endRequest(RequestTransactionManager.java:160)
        at 
org.apache.plc4x.java.s7.readwrite.protocol.S7ProtocolLogic.lambda$readInternal$18(S7ProtocolLogic.java:272)
        at 
org.apache.plc4x.java.spi.Plc4xNettyWrapper.decode(Plc4xNettyWrapper.java:187)
        at 
io.netty.handler.codec.MessageToMessageCodec$2.decode(MessageToMessageCodec.java:81)
        at 
io.netty.handler.codec.MessageToMessageDecoder.channelRead(MessageToMessageDecoder.java:88)
        ... 23 common frames omitted
   
   
   
   So, How do I fix that concurrent problem
   
   
   
   ### Version
   
   v0.10.0
   
   ### Programming Languages
   
   - [X] plc4j
   - [ ] plc4go
   - [ ] plc4c
   - [ ] plc4net
   
   ### Protocols
   
   - [ ] AB-Ethernet
   - [ ] ADS /AMS
   - [ ] BACnet/IP
   - [ ] CANopen
   - [ ] DeltaV
   - [ ] DF1
   - [ ] EtherNet/IP
   - [ ] Firmata
   - [ ] KNXnet/IP
   - [ ] Modbus
   - [ ] OPC-UA
   - [X] S7


-- 
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: dev-unsubscr...@plc4x.apache.org.apache.org

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

Reply via email to