diff --git a/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/procedure/impl/sync/AuthOperationProcedure.java b/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/procedure/impl/sync/AuthOperationProcedure.java index f8e0c9d22337..3ed85f958198 100644 --- a/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/procedure/impl/sync/AuthOperationProcedure.java +++ b/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/procedure/impl/sync/AuthOperationProcedure.java @@ -24,6 +24,7 @@ import org.apache.iotdb.commons.conf.CommonConfig; import org.apache.iotdb.commons.conf.CommonDescriptor; import org.apache.iotdb.commons.exception.IoTDBException; +import org.apache.iotdb.commons.utils.TestOnly; import org.apache.iotdb.commons.utils.ThriftCommonsSerDeUtils; import org.apache.iotdb.confignode.client.CnToDnRequestType; import org.apache.iotdb.confignode.client.sync.SyncDataNodeClientPool; @@ -69,7 +70,7 @@ public class AuthOperationProcedure extends AbstractNodeProcedure> dataNodesToInvalid = new ArrayList<>(); + private List> dataNodesToInvalid = new ArrayList<>(); private List datanodes; @@ -87,6 +88,11 @@ public AuthOperationProcedure( this.timeoutMS = commonConfig.getDatanodeTokenTimeoutMS(); } + @TestOnly + public void setDataNodeToInvalid(List> nodeList) { + dataNodesToInvalid = nodeList; + } + @Override protected Flow executeFromState(ConfigNodeProcedureEnv env, AuthOperationProcedureState state) { try { @@ -221,19 +227,19 @@ public void deserialize(ByteBuffer byteBuffer) { } this.timeoutMS = ReadWriteIOUtils.readLong(byteBuffer); try { - ReadWriteIOUtils.readInt(byteBuffer); + int cap = ReadWriteIOUtils.readInt(byteBuffer); + int position = byteBuffer.position(); this.plan = (AuthorPlan) ConfigPhysicalPlan.Factory.create(byteBuffer); + byteBuffer.position(cap + position); } catch (IOException e) { LOGGER.error("IO error when deserialize authplan.", e); } - if (byteBuffer.hasRemaining()) { - size = ReadWriteIOUtils.readInt(byteBuffer); - for (int i = 0; i < size; i++) { - TDataNodeConfiguration datanode = - ThriftCommonsSerDeUtils.deserializeTDataNodeConfiguration(byteBuffer); - Long timeStamp = ReadWriteIOUtils.readLong(byteBuffer); - this.dataNodesToInvalid.add(new Pair<>(datanode, timeStamp)); - } + size = ReadWriteIOUtils.readInt(byteBuffer); + for (int i = 0; i < size; i++) { + TDataNodeConfiguration datanode = + ThriftCommonsSerDeUtils.deserializeTDataNodeConfiguration(byteBuffer); + Long timeStamp = ReadWriteIOUtils.readLong(byteBuffer); + this.dataNodesToInvalid.add(new Pair<>(datanode, timeStamp)); } } diff --git a/iotdb-core/confignode/src/test/java/org/apache/iotdb/confignode/procedure/impl/sync/AuthOperationProcedureTest.java b/iotdb-core/confignode/src/test/java/org/apache/iotdb/confignode/procedure/impl/sync/AuthOperationProcedureTest.java index 6a4c818c14a3..5b5563f423b2 100644 --- a/iotdb-core/confignode/src/test/java/org/apache/iotdb/confignode/procedure/impl/sync/AuthOperationProcedureTest.java +++ b/iotdb-core/confignode/src/test/java/org/apache/iotdb/confignode/procedure/impl/sync/AuthOperationProcedureTest.java @@ -28,6 +28,7 @@ import org.apache.iotdb.confignode.consensus.request.write.auth.AuthorPlan; import org.apache.iotdb.confignode.procedure.store.ProcedureFactory; +import org.apache.tsfile.utils.Pair; import org.apache.tsfile.utils.PublicBAOS; import org.junit.Assert; import org.junit.Test; @@ -75,11 +76,14 @@ public void serializeDeserializeTest() throws IOException { "role1", "123456", "123456", - Collections.singleton(1), + Collections.singleton(i), false, Collections.singletonList(new PartialPath("root.t1"))), datanodes, false); + List> dataNodeToInvalid = new ArrayList<>(); + dataNodeToInvalid.add(new Pair<>(dataNodeConfiguration, 1L)); + proc.setDataNodeToInvalid(dataNodeToInvalid); proc.serialize(outputStream); final ByteBuffer buffer = ByteBuffer.wrap(byteArrayOutputStream.getBuf(), 0, byteArrayOutputStream.size());