Ejemplo n.º 1
0
  public synchronized void write(final PagedMessage message) throws Exception {
    if (!file.isOpen()) {

      return;
    }

    ByteBuffer buffer = fileFactory.newBuffer(message.getEncodeSize() + Page.SIZE_RECORD);

    HornetQBuffer wrap = HornetQBuffers.wrappedBuffer(buffer);
    wrap.clear();

    wrap.writeByte(Page.START_BYTE);
    wrap.writeInt(0);
    int startIndex = wrap.writerIndex();
    message.encode(wrap);
    int endIndex = wrap.writerIndex();
    wrap.setInt(1, endIndex - startIndex); // The encoded length
    wrap.writeByte(Page.END_BYTE);

    buffer.rewind();

    file.writeDirect(buffer, false);

    if (pageCache != null) {
      pageCache.addLiveMessage(message);
    }

    numberOfMessages.incrementAndGet();
    size.addAndGet(buffer.limit());

    storageManager.pageWrite(message, pageId);
  }
 public static void encode(HornetQBuffer buffer, TransportConfiguration config) {
   BufferHelper.writeAsNullableSimpleString(buffer, config.getName());
   BufferHelper.writeAsSimpleString(buffer, config.getFactoryClassName());
   buffer.writeInt(config.getParams().size());
   for (Entry<String, Object> param : config.getParams().entrySet()) {
     BufferHelper.writeAsSimpleString(buffer, param.getKey());
     BufferHelper.writeAsSimpleString(buffer, param.getValue().toString());
   }
 }
 @Override
 public void encodeRest(final HornetQBuffer buffer) {
   buffer.writeBoolean(synchronizationIsFinished);
   buffer.writeBoolean(allowsAutoFailBack);
   buffer.writeString(nodeID);
   if (synchronizationIsFinished) return;
   buffer.writeByte(dataType.code);
   buffer.writeInt(ids.length);
   for (long id : ids) {
     buffer.writeLong(id);
   }
 }
 public static void encodeConfigs(
     HornetQBuffer buffer, List<Pair<TransportConfiguration, TransportConfiguration>> configs) {
   buffer.writeInt(configs == null ? 0 : configs.size());
   if (configs != null) {
     for (Pair<TransportConfiguration, TransportConfiguration> pair : configs) {
       encode(buffer, pair.getA());
       boolean backup = (pair.getB() != null);
       buffer.writeBoolean(backup);
       if (backup) {
         encode(buffer, pair.getB());
       }
     }
   }
 }
Ejemplo n.º 5
0
  public HornetQBuffer encode(final RemotingConnection connection) {
    HornetQBuffer buffer = connection.createBuffer(PacketImpl.INITIAL_PACKET_SIZE);

    // The standard header fields

    buffer.writeInt(0); // The length gets filled in at the end
    buffer.writeByte(type);
    buffer.writeLong(channelID);

    encodeRest(buffer);

    size = buffer.writerIndex();

    // The length doesn't include the actual length byte
    int len = size - DataConstants.SIZE_INT;

    buffer.setInt(0, len);

    return buffer;
  }
Ejemplo n.º 6
0
  // This must be synchronized as it can be called concurrently id the message is being delivered
  // concurrently to
  // many queues - the first caller in this case will actually encode it
  private synchronized HornetQBuffer encodeToBuffer() {
    if (!bufferValid) {
      if (bufferUsed) {
        // Cannot use same buffer - must copy

        forceCopy();
      }

      int bodySize = getEndOfBodyPosition();

      // Clebert: I've started sending this on encoding due to conversions between protocols
      //          and making sure we are not losing the buffer start position between protocols
      this.endOfBodyPosition = bodySize;

      // write it
      buffer.setInt(BUFFER_HEADER_SPACE, bodySize);

      // Position at end of body and skip past the message end position int.
      // check for enough room in the buffer even though it is dynamic
      if ((bodySize + 4) > buffer.capacity()) {
        buffer.setIndex(0, bodySize);
        buffer.writeInt(0);
      } else {
        buffer.setIndex(0, bodySize + DataConstants.SIZE_INT);
      }

      encodeHeadersAndProperties(buffer);

      // Write end of message position

      endOfMessagePosition = buffer.writerIndex();

      buffer.setInt(bodySize, endOfMessagePosition);

      bufferValid = true;
    }

    return buffer;
  }
Ejemplo n.º 7
0
  public static SequentialFile writeControlFile(
      final SequentialFileFactory fileFactory,
      final List<JournalFile> files,
      final List<JournalFile> newFiles,
      final List<Pair<String, String>> renames)
      throws Exception {

    SequentialFile controlFile =
        fileFactory.createSequentialFile(AbstractJournalUpdateTask.FILE_COMPACT_CONTROL, 1);

    try {
      controlFile.open(1, false);

      JournalImpl.initFileHeader(fileFactory, controlFile, 0, 0);

      HornetQBuffer filesToRename = HornetQBuffers.dynamicBuffer(1);

      // DataFiles first

      if (files == null) {
        filesToRename.writeInt(0);
      } else {
        filesToRename.writeInt(files.size());

        for (JournalFile file : files) {
          filesToRename.writeUTF(file.getFile().getFileName());
        }
      }

      // New Files second

      if (newFiles == null) {
        filesToRename.writeInt(0);
      } else {
        filesToRename.writeInt(newFiles.size());

        for (JournalFile file : newFiles) {
          filesToRename.writeUTF(file.getFile().getFileName());
        }
      }

      // Renames from clean up third
      if (renames == null) {
        filesToRename.writeInt(0);
      } else {
        filesToRename.writeInt(renames.size());
        for (Pair<String, String> rename : renames) {
          filesToRename.writeUTF(rename.getA());
          filesToRename.writeUTF(rename.getB());
        }
      }

      JournalInternalRecord controlRecord =
          new JournalAddRecord(
              true, 1, (byte) 0, new ByteArrayEncoding(filesToRename.toByteBuffer().array()));

      HornetQBuffer renameBuffer = HornetQBuffers.dynamicBuffer(filesToRename.writerIndex());

      controlRecord.setFileID(0);

      controlRecord.encode(renameBuffer);

      ByteBuffer writeBuffer = fileFactory.newBuffer(renameBuffer.writerIndex());

      writeBuffer.put(renameBuffer.toByteBuffer().array(), 0, renameBuffer.writerIndex());

      writeBuffer.rewind();

      controlFile.writeDirect(writeBuffer, true);

      return controlFile;
    } finally {
      controlFile.close();
    }
  }
 @Override
 public void encodeRest(final HornetQBuffer buffer) {
   buffer.writeInt(timeoutSeconds);
 }
 @Override
 public void encodeRest(final HornetQBuffer buffer) {
   buffer.writeInt(credits);
   buffer.writeSimpleString(address);
 }