@Override public void batch_mutate(String kvsMethodName, Map<ByteBuffer, Map<String, List<Mutation>>> mutation_map, ConsistencyLevel consistency_level) throws InvalidRequestException, UnavailableException, TimedOutException, TException { int numberOfRowsMutated = mutation_map.size(); try (CloseableTrace trace = startLocalTrace("client.batch_mutate(number of mutations {}, consistency {})" + " on kvs.{}", numberOfRowsMutated, consistency_level, kvsMethodName)) { client.batch_mutate(kvsMethodName, mutation_map, consistency_level); } }
@Override public void batch_mutate(String kvsMethodName, Map<ByteBuffer, Map<String, List<Mutation>>> mutation_map, ConsistencyLevel consistency_level) throws InvalidRequestException, UnavailableException, TimedOutException, TException { delegate.batch_mutate(kvsMethodName, mutation_map, consistency_level); Map<String, Long> tablesToCells = new HashMap<>(mutation_map.size()); mutation_map.values().forEach(tableToCellsMap -> { tableToCellsMap.forEach((table, cells) -> { Long numberOfCells = tablesToCells.getOrDefault(table, 0L); tablesToCells.put(table, numberOfCells + cells.size()); }); }); tablesToCells.forEach((table, numberOfCells) -> updateCellsWrittenForTable(table, numberOfCells)); }
@Override public void batch_mutate(String kvsMethodName, Map<ByteBuffer, Map<String, List<Mutation>>> mutation_map, ConsistencyLevel consistency_level) throws InvalidRequestException, UnavailableException, TimedOutException, TException { executeWrite( () -> { client.batch_mutate(kvsMethodName, mutation_map, consistency_level); return null; }, ThriftQueryWeighers.batchMutate(mutation_map)); }
@Test public void batchMutateRecordsMetricsOnFailure() throws TException, LimitExceededException { doThrow(new RuntimeException()).when(mockClient).batch_mutate(any(), any(), any()); QueryWeight expectedWeight = ThriftQueryWeighers .batchMutate(BATCH_MUTATE_ARG) .weighSuccess(null, NANOS_DURATION); assertThatThrownBy(() -> client.batch_mutate("put", BATCH_MUTATE_ARG, ConsistencyLevel.ANY)) .isInstanceOf(RuntimeException.class); verify(mockClient, times(1)).batch_mutate("put", BATCH_MUTATE_ARG, ConsistencyLevel.ANY); verifyNoMoreInteractions(mockClient); verify(mockMetrics, times(1)).recordWrite(expectedWeight); verifyNoMoreInteractions(mockMetrics); }
Void batchMutate(String kvsMethodName, CassandraClient client, Set<TableReference> tableRefs, MutationMap map, ConsistencyLevel consistency) throws TException { try { return queryRunner.run(client, tableRefs, () -> { client.batch_mutate(kvsMethodName, map.toMap(), consistency); return null; }); } catch (UnavailableException e) { throw new InsufficientConsistencyException( "This batch mutate operation requires " + consistency + " Cassandra nodes to be up and available.", e); } }
@Test public void batchMutateRecordsMetricsOnSuccess() throws TException, LimitExceededException { QueryWeight expectedWeight = ThriftQueryWeighers .batchMutate(BATCH_MUTATE_ARG) .weighSuccess(null, NANOS_DURATION); client.batch_mutate("put", BATCH_MUTATE_ARG, ConsistencyLevel.ANY); verify(mockClient, times(1)).batch_mutate("put", BATCH_MUTATE_ARG, ConsistencyLevel.ANY); verifyNoMoreInteractions(mockClient); verify(mockMetrics, times(1)).recordWrite(expectedWeight); verifyNoMoreInteractions(mockMetrics); }
@Override public void batch_mutate(String kvsMethodName, Map<ByteBuffer, Map<String, List<Mutation>>> mutation_map, ConsistencyLevel consistency_level) throws InvalidRequestException, UnavailableException, TimedOutException, TException { long startTime = System.currentTimeMillis(); KvsProfilingLogger.maybeLog( (KvsProfilingLogger.CallableCheckedException<Void, TException>) () -> { client.batch_mutate(kvsMethodName, mutation_map, consistency_level); return null; }, (logger, timer) -> { logger.log("CassandraClient.batch_mutate("); ThriftObjectSizeUtils.getSizeOfMutationPerTable(mutation_map).forEach((tableName, size) -> { logger.log("{} -> {}", LoggingArgs.safeInternalTableNameOrPlaceholder(tableName), LoggingArgs.sizeInBytes(size)); }); logger.log(") with consistency {} at time {}, on kvs.{} took {} ms", SafeArg.of("consistency", consistency_level.toString()), LoggingArgs.startTimeMillis(startTime), SafeArg.of("kvsMethodName", kvsMethodName), LoggingArgs.durationMillis(timer)); }); }
@Override public void batch_mutate(String kvsMethodName, Map<ByteBuffer, Map<String, List<Mutation>>> mutation_map, ConsistencyLevel consistency_level) throws InvalidRequestException, UnavailableException, TimedOutException, TException { int numberOfRowsMutated = mutation_map.size(); try (CloseableTrace trace = startLocalTrace("client.batch_mutate(number of mutations {}, consistency {})" + " on kvs.{}", numberOfRowsMutated, consistency_level, kvsMethodName)) { client.batch_mutate(kvsMethodName, mutation_map, consistency_level); } }
@Override public void batch_mutate(String kvsMethodName, Map<ByteBuffer, Map<String, List<Mutation>>> mutation_map, ConsistencyLevel consistency_level) throws InvalidRequestException, UnavailableException, TimedOutException, TException { delegate.batch_mutate(kvsMethodName, mutation_map, consistency_level); Map<String, Long> tablesToCells = new HashMap<>(mutation_map.size()); mutation_map.values().forEach(tableToCellsMap -> { tableToCellsMap.forEach((table, cells) -> { Long numberOfCells = tablesToCells.getOrDefault(table, 0L); tablesToCells.put(table, numberOfCells + cells.size()); }); }); tablesToCells.forEach((table, numberOfCells) -> updateCellsWrittenForTable(table, numberOfCells)); }
@Override public void batch_mutate(String kvsMethodName, Map<ByteBuffer, Map<String, List<Mutation>>> mutation_map, ConsistencyLevel consistency_level) throws InvalidRequestException, UnavailableException, TimedOutException, TException { executeWrite( () -> { client.batch_mutate(kvsMethodName, mutation_map, consistency_level); return null; }, ThriftQueryWeighers.batchMutate(mutation_map)); }
Void batchMutate(String kvsMethodName, CassandraClient client, Set<TableReference> tableRefs, MutationMap map, ConsistencyLevel consistency) throws TException { try { return queryRunner.run(client, tableRefs, () -> { client.batch_mutate(kvsMethodName, map.toMap(), consistency); return null; }); } catch (UnavailableException e) { throw new InsufficientConsistencyException( "This batch mutate operation requires " + consistency + " Cassandra nodes to be up and available.", e); } }
@Override public void batch_mutate(String kvsMethodName, Map<ByteBuffer, Map<String, List<Mutation>>> mutation_map, ConsistencyLevel consistency_level) throws InvalidRequestException, UnavailableException, TimedOutException, TException { long startTime = System.currentTimeMillis(); KvsProfilingLogger.maybeLog( (KvsProfilingLogger.CallableCheckedException<Void, TException>) () -> { client.batch_mutate(kvsMethodName, mutation_map, consistency_level); return null; }, (logger, timer) -> { logger.log("CassandraClient.batch_mutate("); ThriftObjectSizeUtils.getSizeOfMutationPerTable(mutation_map).forEach((tableName, size) -> { logger.log("{} -> {}", LoggingArgs.safeInternalTableNameOrPlaceholder(tableName), LoggingArgs.sizeInBytes(size)); }); logger.log(") with consistency {} at time {}, on kvs.{} took {} ms", SafeArg.of("consistency", consistency_level.toString()), LoggingArgs.startTimeMillis(startTime), SafeArg.of("kvsMethodName", kvsMethodName), LoggingArgs.durationMillis(timer)); }); }