@Override public byte[] encodeValue(Object value) throws IOException { return GenericObjectMapper.write(value); }
/** * Deserializes an Object from a byte array created with * {@link #write(Object)}. * * @param b A byte array * @return An Object * @throws IOException if there is a read error */ public static Object read(byte[] b) throws IOException { return read(b, 0); }
/** * Converts a long to a 8-byte array so that lexicographic ordering of the * produced byte arrays sort the longs in descending order. * * @param l A long * @return A byte array */ public static byte[] writeReverseOrderedLong(long l) { byte[] b = new byte[8]; return writeReverseOrderedLong(l, b, 0); }
@Override public void put(K entityId, V entity) { Long startTime = entity.getStartTime(); if (startTime == null) { startTime = System.currentTimeMillis(); } // Build the key for the entity storage and read it byte[] startTimeBytes = GenericObjectMapper.writeReverseOrderedLong( startTime); try { byte[] valueBytes = GenericObjectMapper.write(entity); entityDb.put(getEntityKey(entityId, startTimeBytes), valueBytes); } catch (IOException e) { LOG.error("GenericObjectMapper cannot write " + entity.getClass().getName() + " into a byte array. Write aborted! "); LOG.error(e.getMessage()); } // Build the key for the start time index entityDb.put(getStartTimeKey(entityId), startTimeBytes); }
starttimedb.put(b, writeReverseOrderedLong(suggestedStartTime)); } else { startAndInsertTime = readReverseOrderedLong(v, 0);
revStartTime = writeReverseOrderedLong(startAndInsertTime .startTime); byte[] markerValue = writeReverseOrderedLong(startAndInsertTime .insertTime); writeBatch.put(markerKey, markerValue); byte[] revts = writeReverseOrderedLong(event.getTimestamp()); byte[] key = createEntityEventKey(entity.getEntityId(), entity.getEntityType(), revStartTime, revts, event.getEventType()); byte[] value = GenericObjectMapper.write(event.getEventInfo()); writeBatch.put(key, value); writePrimaryFilterEntries(writeBatch, primaryFilters, key, value); byte[] key = createOtherInfoKey(entity.getEntityId(), entity.getEntityType(), revStartTime, i.getKey()); byte[] value = GenericObjectMapper.write(i.getValue()); writeBatch.put(key, value); writePrimaryFilterEntries(writeBatch, primaryFilters, key, value); StartAndInsertTime relatedEntityStartAndInsertTime = getAndSetStartTime(relatedEntity.getId(), relatedEntity.getType(), readReverseOrderedLong(revStartTime, 0), null); if (relatedEntityStartAndInsertTime == null) { throw new IOException("Error setting start time for related entity"); byte[] relatedEntityStartTime = writeReverseOrderedLong( relatedEntityStartAndInsertTime.startTime);
/** Read the next 8 bytes in the byte buffer as a long. */ public long getNextLong() throws IOException { if (offset + 8 >= b.length) { throw new IOException("byte array ran out when trying to read long"); } long value = readReverseOrderedLong(b, offset); offset += 8; return value; }
writeReverseOrderedLong(suggestedStartTime, v, 0); writeReverseOrderedLong(startAndInsertTime.insertTime, v, 8); WriteOptions writeOptions = new WriteOptions(); writeOptions.sync(true); } else { startAndInsertTime = new StartAndInsertTime(readReverseOrderedLong(v, 0), readReverseOrderedLong(v, 8));
revStartTime = writeReverseOrderedLong(startAndInsertTime .startTime); byte[] markerValue = writeReverseOrderedLong(startAndInsertTime .insertTime); writeBatch.put(markerKey, markerValue); byte[] revts = writeReverseOrderedLong(event.getTimestamp()); byte[] key = createEntityEventKey(entity.getEntityId(), entity.getEntityType(), revStartTime, revts, event.getEventType()); byte[] value = GenericObjectMapper.write(event.getEventInfo()); writeBatch.put(key, value); writePrimaryFilterEntries(writeBatch, primaryFilters, key, value); byte[] key = createOtherInfoKey(entity.getEntityId(), entity.getEntityType(), revStartTime, i.getKey()); byte[] value = GenericObjectMapper.write(i.getValue()); writeBatch.put(key, value); writePrimaryFilterEntries(writeBatch, primaryFilters, key, value); StartAndInsertTime relatedEntityStartAndInsertTime = getAndSetStartTime(relatedEntity.getId(), relatedEntity.getType(), readReverseOrderedLong(revStartTime, 0), null); if (relatedEntityStartAndInsertTime == null) { throw new IOException("Error setting start time for related entity"); byte[] relatedEntityStartTime = writeReverseOrderedLong( relatedEntityStartAndInsertTime.startTime);
@Test public void testValueTypes() throws IOException { verify(Integer.MAX_VALUE); verify(Integer.MIN_VALUE); assertEquals(Integer.MAX_VALUE, GenericObjectMapper.read( GenericObjectMapper.write((long) Integer.MAX_VALUE))); assertEquals(Integer.MIN_VALUE, GenericObjectMapper.read( GenericObjectMapper.write((long) Integer.MIN_VALUE))); verify((long)Integer.MAX_VALUE + 1l); verify((long)Integer.MIN_VALUE - 1l); verify(Long.MAX_VALUE); verify(Long.MIN_VALUE); assertEquals(42, GenericObjectMapper.read(GenericObjectMapper.write(42l))); verify(42); verify(1.23); verify("abc"); verify(true); List<String> list = new ArrayList<String>(); list.add("123"); list.add("abc"); verify(list); Map<String,String> map = new HashMap<String,String>(); map.put("k1","v1"); map.put("k2","v2"); verify(map); }
public long getNextLong() throws IOException { if (offset + 8 >= b.length) { throw new IOException("byte array ran out when trying to read long"); } long l = readReverseOrderedLong(b, offset); offset += 8; return l; }
writeReverseOrderedLong(suggestedStartTime, v, 0); writeReverseOrderedLong(startAndInsertTime.insertTime, v, 8); WriteOptions writeOptions = new WriteOptions(); writeOptions.sync(true); } else { startAndInsertTime = new StartAndInsertTime(readReverseOrderedLong(v, 0), readReverseOrderedLong(v, 8));
revStartTime = writeReverseOrderedLong(startAndInsertTime .startTime); byte[] markerValue = writeReverseOrderedLong(startAndInsertTime .insertTime); writeBatch.put(markerKey, markerValue); byte[] revts = writeReverseOrderedLong(event.getTimestamp()); byte[] key = createEntityEventKey(entity.getEntityId(), entity.getEntityType(), revStartTime, revts, event.getEventType()); byte[] value = GenericObjectMapper.write(event.getEventInfo()); writeBatch.put(key, value); writePrimaryFilterEntries(writeBatch, primaryFilters, key, value); byte[] key = createOtherInfoKey(entity.getEntityId(), entity.getEntityType(), revStartTime, i.getKey()); byte[] value = GenericObjectMapper.write(i.getValue()); writeBatch.put(key, value); writePrimaryFilterEntries(writeBatch, primaryFilters, key, value); StartAndInsertTime relatedEntityStartAndInsertTime = getAndSetStartTime(relatedEntity.getId(), relatedEntity.getType(), readReverseOrderedLong(revStartTime, 0), null); if (relatedEntityStartAndInsertTime == null) { throw new IOException("Error setting start time for related entity"); byte[] relatedEntityStartTime = writeReverseOrderedLong( relatedEntityStartAndInsertTime.startTime);
/** * Converts a long to a 8-byte array so that lexicographic ordering of the * produced byte arrays sort the longs in descending order. * * @param l A long * @return A byte array */ public static byte[] writeReverseOrderedLong(long l) { byte[] b = new byte[8]; return writeReverseOrderedLong(l, b, 0); }
/** * Deserializes an Object from a byte array created with * {@link #write(Object)}. * * @param b A byte array * @return An Object * @throws IOException if there is a read error */ public static Object read(byte[] b) throws IOException { return read(b, 0); }
/** * Creates an index entry for the given key of the form * INDEXED_ENTRY_PREFIX + primaryfiltername + primaryfiltervalue + key. */ private static byte[] addPrimaryFilterToKey(String primaryFilterName, Object primaryFilterValue, byte[] key) throws IOException { return KeyBuilder.newInstance().add(INDEXED_ENTRY_PREFIX) .add(primaryFilterName) .add(GenericObjectMapper.write(primaryFilterValue), true).add(key) .getBytes(); }
public long getNextLong() throws IOException { if (offset + 8 >= b.length) { throw new IOException("byte array ran out when trying to read long"); } long l = readReverseOrderedLong(b, offset); offset += 8; return l; }
writeReverseOrderedLong(suggestedStartTime, v, 0); writeReverseOrderedLong(startAndInsertTime.insertTime, v, 8); WriteOptions writeOptions = new WriteOptions(); writeOptions.sync(true); } else { startAndInsertTime = new StartAndInsertTime(readReverseOrderedLong(v, 0), readReverseOrderedLong(v, 8));
/** * Converts a long to a 8-byte array so that lexicographic ordering of the * produced byte arrays sort the longs in descending order. * * @param l A long * @return A byte array */ public static byte[] writeReverseOrderedLong(long l) { byte[] b = new byte[8]; return writeReverseOrderedLong(l, b, 0); }