private static Set<Incongruency> getIncongruencies(CqlResult casResult, Map<String, Pair<byte[], byte[]>> casMap) { Map<String, byte[]> relevantCassandraState = getRelevantCassandraState(casResult, casMap); return casMap.entrySet().stream() .filter(entry -> !Arrays.equals(relevantCassandraState.get(entry.getKey()), entry.getValue().getRhSide())) .map(entry -> createIncongruency(relevantCassandraState, entry.getKey(), entry.getValue().getRhSide())) .collect(Collectors.toSet()); }
public static CqlQuery constructCheckAndSetMultipleQuery(Map<String, Pair<byte[], byte[]>> checkAndSetRequest) { StringBuilder builder = new StringBuilder(); builder.append("BEGIN UNLOGGED BATCH\n"); // Safe, because all updates are on the same partition key // Safe, because ordering does not apply in batches checkAndSetRequest.forEach((columnName, value) -> { byte[] expected = value.getLhSide(); byte[] target = value.getRhSide(); builder.append(constructCheckAndSetQuery(columnName, expected, target)); }); builder.append("APPLY BATCH;"); // This looks awkward. However, we know that all expressions in this String pertain to timestamps and known // table references, hence this is actually safe. Doing this quickly owing to priority. // TODO (jkong): Build up a query by passing around legitimate formats and args. return CqlQuery.builder() .safeQueryFormat(builder.toString()) .build(); }
private void testBigValue(int i) { byte[] bytes = new byte[64 * 1024]; new Random().nextBytes(bytes); String encodeHexString = BaseEncoding.base16().lowerCase().encode(bytes); putDirect("row" + i, "col" + i, encodeHexString, 0); Pair<String, Long> pair = getDirect("row" + i, "col" + i, 1); assertEquals(0L, (long) pair.getRhSide()); assertEquals(encodeHexString, pair.getLhSide()); }
private void verifyLockCorrectness() { for (Pair<InvokeEvent, OkEvent> eventPair : locksAtSomePoint) { InvokeEvent invokeEvent = eventPair.getLhSide(); OkEvent okEvent = eventPair.getRhSide(); if (intervalCovered(invokeEvent, okEvent)) { log.error("Lock {} granted to process {} between {} and {}, but lock was already held by " + "another process.", lockName, invokeEvent.process(), invokeEvent.time(), okEvent.time()); errors.add(invokeEvent); errors.add(okEvent); } } }
@Override public Pair<String, Integer> convertToJson(byte[] value, int offset) { Pair<String, Integer> p = convertToString(value, offset); return Pair.create("\"" + p.getLhSide() + "\"", p.getRhSide()); }
@Override public Pair<String, Integer> convertToJson(byte[] value, int offset) { Pair<String, Integer> p = convertToString(value, offset); return Pair.create("\"" + p.getLhSide() + "\"", p.getRhSide()); }
@Override public Pair<String, Integer> convertToJson(byte[] value, int offset) { Pair<String, Integer> p = convertToString(value, offset); return Pair.create("\"" + p.getLhSide() + "\"", p.getRhSide()); }
@Override public Pair<String, Integer> convertToJson(byte[] value, int offset) { Pair<String, Integer> p = convertToString(value, offset); return Pair.create(JSONValue.toJSONString(p.getLhSide()), p.getRhSide()); }
@Override public Pair<String, Integer> convertToJson(byte[] value, int offset) { Pair<String, Integer> p = convertToString(value, offset); return Pair.create(JSONValue.toJSONString(p.getLhSide()), p.getRhSide()); }
@Test public void testKeyValueRows() { putDirect("row1", "col1", "v1", 0); Pair<String, Long> pair = getDirect("row1", "col1", 1); assertEquals(0L, (long)pair.getRhSide()); assertEquals("v1", pair.getLhSide()); putDirect("row1", "col1", "v2", 2); pair = getDirect("row1", "col1", 2); assertEquals(0L, (long)pair.getRhSide()); assertEquals("v1", pair.getLhSide()); pair = getDirect("row1", "col1", 3); assertEquals(2L, (long)pair.getRhSide()); assertEquals("v2", pair.getLhSide()); }
@Test public void testKeyValueDelete4() { putDirect("row1", "col1", "v0", 0); putDirect("row1", "col1", "v1", 10); Pair<String, Long> pair = getDirect("row1", "col1", 11); assertEquals(10L, (long)pair.getRhSide()); assertEquals("v1", pair.getLhSide()); pair = getDirect("row1", "col1", 2); assertEquals(0L, (long)pair.getRhSide()); assertEquals("v0", pair.getLhSide()); }
@Test public void testEmptyValue() { putDirect("row1", "col1", "v1", 0); Pair<String, Long> pair = getDirect("row1", "col1", 1); assertEquals(0L, (long)pair.getRhSide()); assertEquals("v1", pair.getLhSide()); putDirect("row1", "col1", "", 2); pair = getDirect("row1", "col1", 2); assertEquals(0L, (long)pair.getRhSide()); assertEquals("v1", pair.getLhSide()); pair = getDirect("row1", "col1", 3); assertEquals(2L, (long)pair.getRhSide()); assertEquals("", pair.getLhSide()); }
@Test public void testKeyValueDelete7() { putDirect("row1", "col1", "v2", 2); Pair<String, Long> pair = getDirect("row1", "col1", 3); assertEquals(2L, (long)pair.getRhSide()); assertEquals("v2", pair.getLhSide()); keyValueService.delete(TEST_TABLE, Multimaps.forMap(ImmutableMap.of(createCell("row1", "col1"), 1L))); keyValueService.delete(TEST_TABLE, Multimaps.forMap(ImmutableMap.of(createCell("row1", "col1"), 3L))); pair = getDirect("row1", "col1", 3); assertEquals(2L, (long)pair.getRhSide()); assertEquals("v2", pair.getLhSide()); }
@Test public void testKeyValueDelete3() { putDirect("row1", "col1", "v0", 0); putDirect("row1", "col1", "v1", 1); Pair<String, Long> pair = getDirect("row1", "col1", 2); assertEquals(1L, (long)pair.getRhSide()); assertEquals("v1", pair.getLhSide()); keyValueService.delete(TEST_TABLE, Multimaps.forMap(ImmutableMap.of(createCell("row1", "col1"), 1L))); pair = getDirect("row1", "col1", 2); assertEquals(0L, (long)pair.getRhSide()); assertEquals("v0", pair.getLhSide()); }
@Test public void testKeyValueDelete5() { putDirect("row1", "col1", "v0", 0); putDirect("row1", "col1", "v1", 1); Pair<String, Long> pair = getDirect("row1", "col1", 2); assertEquals(1L, (long)pair.getRhSide()); assertEquals("v1", pair.getLhSide()); keyValueService.delete(TEST_TABLE, Multimaps.forMap(ImmutableMap.of(createCell("row1", "col1"), 0L))); pair = getDirect("row1", "col1", 2); assertEquals(1L, (long)pair.getRhSide()); assertEquals("v1", pair.getLhSide()); }
@Test public void testKeyValueDelete2() { putDirect("row1", "col1", "v1", 1); putDirect("row1", "col1", "v2", 2); Pair<String, Long> pair = getDirect("row1", "col1", 3); assertEquals(2L, (long)pair.getRhSide()); assertEquals("v2", pair.getLhSide()); keyValueService.delete(TEST_TABLE, Multimaps.forMap(ImmutableMap.of(createCell("row1", "col1"), 2L))); pair = getDirect("row1", "col1", 3); assertEquals(1L, (long)pair.getRhSide()); assertEquals("v1", pair.getLhSide()); }
@Test public void testKeyValueDelete6() { putDirect("row1", "col1", "v1", 1); putDirect("row1", "col1", "v2", 2); Pair<String, Long> pair = getDirect("row1", "col1", 3); assertEquals(2L, (long)pair.getRhSide()); assertEquals("v2", pair.getLhSide()); keyValueService.delete(TEST_TABLE, Multimaps.forMap(ImmutableMap.of(createCell("row1", "col1"), 1L))); pair = getDirect("row1", "col1", 3); assertEquals(2L, (long)pair.getRhSide()); assertEquals("v2", pair.getLhSide()); }
@Test public void testStoreCopy() { final byte[] bytes = new byte[2 * StreamTestStreamStore.BLOCK_SIZE_IN_BYTES]; Random rand = new Random(); rand.nextBytes(bytes); long id1 = timestampService.getFreshTimestamp(); long id2 = timestampService.getFreshTimestamp(); ImmutableMap<Long, InputStream> streams = ImmutableMap.of( id1, new ByteArrayInputStream(bytes), id2, new ByteArrayInputStream(bytes)); txManager.runTaskWithRetry(t -> defaultStore.storeStreams(t, streams)); Pair<Long, Sha256Hash> idAndHash1 = defaultStore.storeStream(new ByteArrayInputStream(bytes)); Pair<Long, Sha256Hash> idAndHash2 = defaultStore.storeStream(new ByteArrayInputStream(bytes)); assertThat(idAndHash1.getRhSide(), equalTo(idAndHash2.getRhSide())); //verify hashes are the same assertThat(idAndHash1.getLhSide(), not(equalTo(idAndHash2.getLhSide()))); //verify ids are different }
@Test public void testKeyValueRetainVersions() { putDirect("row1", "col1", "v1", 1); putDirect("row1", "col1", "v2", 2); putDirect("row1", "col1", "v3", 3); putDirect("row1", "col1", "v4", 4); putDirect("row1", "col1", "v5", 5); Pair<String, Long> pair = getDirect("row1", "col1", 6); assertEquals(5L, (long)pair.getRhSide()); assertEquals("v5", pair.getLhSide()); pair = getDirect("row1", "col1", 2); assertEquals(1L, (long)pair.getRhSide()); assertEquals("v1", pair.getLhSide()); }
@Test public void testKeyValueDelete() { putDirect("row1", "col1", "v1", 0); Pair<String, Long> pair = getDirect("row1", "col1", 2); assertEquals(0L, (long)pair.getRhSide()); assertEquals("v1", pair.getLhSide()); keyValueService.delete(TEST_TABLE, Multimaps.forMap(ImmutableMap.of(createCell("row1", "col1"), 0L))); pair = getDirect("row1", "col1", 2); assertNull(pair); }