Пример #1
0
 protected void updateRecord(T record, PersistenceWindow window) {
   int id = record.getId();
   Buffer buffer = window.getOffsettedBuffer(id);
   if (record.inUse()) {
     buffer.put(Record.IN_USE.byteValue());
     writeRecord(record, buffer);
   } else {
     buffer.put(Record.NOT_IN_USE.byteValue());
     if (!isInRecoveryMode()) {
       freeId(id);
     }
   }
 }
Пример #2
0
  protected T getRecord(int id, PersistenceWindow window, boolean force) {
    Buffer buffer = window.getOffsettedBuffer(id);
    byte inUseByte = buffer.get();
    boolean inUse = (inUseByte == Record.IN_USE.byteValue());
    if (!inUse && !force) {
      throw new InvalidRecordException("Record[" + id + "] not in use");
    }
    if (inUseByte != Record.IN_USE.byteValue() && inUseByte != Record.NOT_IN_USE.byteValue()) {
      throw new InvalidRecordException("Record[" + id + "] unknown in use flag[" + inUse + "]");
    }

    T record = newRecord(id);
    record.setInUse(inUse);
    readRecord(record, buffer);
    return record;
  }