class Slot implements Liveness {
/** Sets the slot size. */
static final int SLOT_SIZE=2048;
- /** Sets how many bytes we reserve. */
- static final int RESERVED_SPACE=64;
/** Sets the size for the HMAC. */
static final int HMAC_SIZE=32;
private boolean seqnumlive;
/** Number of bytes of free space. */
private int freespace;
+ /** Reference to Table */
+ private Table table;
- Slot(long _seqnum, long _machineid, byte[] _prevhmac, byte[] _hmac) {
+ Slot(Table _table, long _seqnum, long _machineid, byte[] _prevhmac, byte[] _hmac) {
seqnum=_seqnum;
machineid=_machineid;
prevhmac=_prevhmac;
livecount=1;
seqnumlive=true;
freespace = SLOT_SIZE - getBaseSize();
+ table=_table;
}
- Slot(long _seqnum, long _machineid, byte[] _prevhmac) {
- this(_seqnum, _machineid, _prevhmac, null);
+ Slot(Table _table, long _seqnum, long _machineid, byte[] _prevhmac) {
+ this(_table, _seqnum, _machineid, _prevhmac, null);
}
- Slot(long _seqnum, long _machineid) {
- this(_seqnum, _machineid, new byte[HMAC_SIZE], null);
+ Slot(Table _table, long _seqnum, long _machineid) {
+ this(_table, _seqnum, _machineid, new byte[HMAC_SIZE], null);
}
byte[] getHMAC() {
* using its reserved space. */
boolean hasSpace(Entry e) {
- int newfreespace = freespace - e.getSize();
- return newfreespace > RESERVED_SPACE;
- }
-
- /**
- * Returns true if the slot can fit the entry potentially using the
- * reserved space. */
-
- boolean canFit(Entry e) {
int newfreespace = freespace - e.getSize();
return newfreespace >= 0;
}
return entries;
}
- static Slot decode(byte[] array, Mac mac) {
+ static Slot decode(Table table, byte[] array, Mac mac) {
mac.update(array, HMAC_SIZE, array.length-HMAC_SIZE);
byte[] realmac=mac.doFinal();
long seqnum=bb.getLong();
long machineid=bb.getLong();
int numentries=bb.getInt();
- Slot slot=new Slot(seqnum, machineid, prevhmac, hmac);
+ Slot slot=new Slot(table, seqnum, machineid, prevhmac, hmac);
for(int i=0; i<numentries; i++) {
slot.addShallowEntry(Entry.decode(slot, bb));
void decrementLiveCount() {
livecount--;
- Vector<Entry> e=getLiveEntries();
+ if (livecount==0)
+ table.decrementLiveCount();
}
/**